link-grammar/0000755000000000000000000000000012537604222010330 5ustar link-grammar/install-sh0000755000000000000000000003325512537603120012340 0ustar #!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: link-grammar/Makefile.am0000644000000000000000000000145112536650432012370 0ustar SUBDIRS=link-grammar data man link-grammar.xcode msvc6 msvc9 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = link-grammar.pc ACLOCAL_AMFLAGS = -I m4 # Build and install the jar file in $(PREFIX)/share/java ... # XXX FIXME configure should look to see if it can find ant if HAVE_JAVA linkgrammar-@VERSION@.jar: ant javadir=$(datadir)/java java_DATA = linkgrammar-@VERSION@.jar if OS_WIN32 LN_SF = cp else LN_SF = ln -sf endif install-data-hook: ${LN_SF} ${javadir}/${java_DATA} ${DESTDIR}/${javadir}/linkgrammar.jar endif EXTRA_DIST = \ autogen.sh \ link-grammar.pc.in \ link-grammar.spec.in \ link-grammar.spec \ AUTHORS \ ChangeLog \ FindLinkGrammar.cmake\ LICENSE \ MAINTAINERS \ README \ TODO link-grammar/Makefile0000644000000000000000000007435212537603144012005 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # Makefile. Generated from Makefile.in by configure. # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/link-grammar pkgincludedir = $(includedir)/link-grammar pkglibdir = $(libdir)/link-grammar pkglibexecdir = $(libexecdir)/link-grammar 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 = x86_64-unknown-linux-gnu host_triplet = x86_64-unknown-linux-gnu subdir = . DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/build.xml.in $(srcdir)/link-grammar.pc.in \ $(srcdir)/link-grammar.spec.in \ $(top_srcdir)/autopackage/default.apspec.in AUTHORS COPYING \ ChangeLog README TODO compile config.guess config.sub \ install-sh missing ltmain.sh ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = build.xml link-grammar.pc link-grammar.spec \ autopackage/default.apspec CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_$(V)) am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(javadir)" "$(DESTDIR)$(pkgconfigdir)" DATA = $(java_DATA) $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz 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 = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing aclocal-1.14 AMTAR = $${TAR-tar} AM_DEFAULT_VERBOSITY = 1 AR = ar AS = as ASPELL_CFLAGS = ASPELL_LIBS = AUTOCONF = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing autoconf AUTOHEADER = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing autoheader AUTOMAKE = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing automake-1.14 AWK = gawk BINRELOC_CFLAGS = BINRELOC_LIBS = CC = gcc CCDEPMODE = depmode=gcc3 CFLAGS = -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE CPP = gcc -E CPPFLAGS = CXX = g++ CXXCPP = g++ -E CXXDEPMODE = depmode=gcc3 CXXFLAGS = -g -O2 CYGPATH_W = echo DEFS = -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"link-grammar\" -DVERSION=\"4.7.4\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_TOWUPPER=1 -DDEBUG_MEMORY=0 -DHAVE_LOCALE_H=1 -DHAVE_LC_MESSAGES=1 -DHAVE_REGEXEC=1 DEPDIR = .deps DLLTOOL = dlltool DSYMUTIL = DUMPBIN = ECHO_C = ECHO_N = -n ECHO_T = EGREP = /bin/grep -E EXEEXT = FGREP = /bin/grep -F GREP = /bin/grep HUNSPELL_CFLAGS = HUNSPELL_LIBS = INSTALL = /usr/bin/install -c INSTALL_DATA = ${INSTALL} -m 644 INSTALL_PROGRAM = ${INSTALL} INSTALL_SCRIPT = ${INSTALL} INSTALL_STRIP_PROGRAM = $(install_sh) -c -s LD = /usr/bin/ld -m elf_x86_64 LDFLAGS = LIBEDIT_CFLAGS = LIBEDIT_LIBS = LIBOBJS = LIBS = LIBTOOL = $(SHELL) $(top_builddir)/libtool LINK_CFLAGS = -Wall -Wextra -Wsign-compare -Werror-implicit-function-declaration -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wpacked -Wswitch-enum -Wmissing-format-attribute -Wstrict-aliasing=2 -Winit-self -Wunsafe-loop-optimizations -Wdeclaration-after-statement -Wold-style-definition -Wno-missing-field-initializers -Wno-unused-parameter -Wno-attributes -Wno-long-long -Winline -fno-strict-aliasing LINK_MAJOR_VERSION = 4 LINK_MICRO_VERSION = 4 LINK_MINOR_VERSION = 7 LIPO = LN_S = ln -s LTLIBOBJS = MAINT = MAKEINFO = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing makeinfo MANIFEST_TOOL = : MKDIR_P = /bin/mkdir -p NM = /usr/bin/nm -B NMEDIT = OBJDUMP = objdump OBJEXT = o OTOOL = OTOOL64 = PACKAGE = link-grammar PACKAGE_BUGREPORT = PACKAGE_NAME = PACKAGE_STRING = PACKAGE_TARNAME = PACKAGE_URL = PACKAGE_VERSION = PATH_SEPARATOR = : PKG_CONFIG = /usr/bin/pkg-config PKG_CONFIG_LIBDIR = PKG_CONFIG_PATH = RANLIB = ranlib REGEX_LIBS = SED = /bin/sed SET_MAKE = SHELL = /bin/bash SQLITE3_CFLAGS = SQLITE3_LIBS = STRIP = strip VERSION = 4.7.4 VERSION_INFO = 11:4:7 abs_builddir = /home/wookey/debian/NMU/git/link-grammar abs_srcdir = /home/wookey/debian/NMU/git/link-grammar abs_top_builddir = /home/wookey/debian/NMU/git/link-grammar abs_top_srcdir = /home/wookey/debian/NMU/git/link-grammar ac_ct_AR = ar ac_ct_CC = gcc ac_ct_CXX = g++ ac_ct_DUMPBIN = am__include = include am__leading_dot = . am__quote = am__tar = $${TAR-tar} chof - "$$tardir" am__untar = $${TAR-tar} xf - bindir = ${exec_prefix}/bin build = x86_64-unknown-linux-gnu build_alias = build_cpu = x86_64 build_os = linux-gnu build_vendor = unknown builddir = . datadir = ${datarootdir} datarootdir = ${prefix}/share docdir = ${datarootdir}/doc/${PACKAGE} dvidir = ${docdir} exec_prefix = ${prefix} host = x86_64-unknown-linux-gnu host_alias = host_cpu = x86_64 host_os = linux-gnu host_vendor = unknown htmldir = ${docdir} includedir = ${prefix}/include infodir = ${datarootdir}/info install_sh = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/install-sh libdir = ${exec_prefix}/lib libexecdir = ${exec_prefix}/libexec localedir = ${datarootdir}/locale localstatedir = ${prefix}/var mandir = ${datarootdir}/man mkdir_p = $(MKDIR_P) oldincludedir = /usr/include pdfdir = ${docdir} prefix = /usr/local program_transform_name = s,x,x, psdir = ${docdir} sbindir = ${exec_prefix}/sbin sharedstatedir = ${prefix}/com srcdir = . sysconfdir = ${prefix}/etc target_alias = top_build_prefix = top_builddir = . top_srcdir = . SUBDIRS = link-grammar data man link-grammar.xcode msvc6 msvc9 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = link-grammar.pc ACLOCAL_AMFLAGS = -I m4 #javadir = $(datadir)/java #java_DATA = linkgrammar-4.7.4.jar #LN_SF = ln -sf ##LN_SF = cp EXTRA_DIST = \ autogen.sh \ link-grammar.pc.in \ link-grammar.spec.in \ link-grammar.spec \ AUTHORS \ ChangeLog \ FindLinkGrammar.cmake\ LICENSE \ MAINTAINERS \ README \ TODO all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): build.xml: $(top_builddir)/config.status $(srcdir)/build.xml.in cd $(top_builddir) && $(SHELL) ./config.status $@ link-grammar.pc: $(top_builddir)/config.status $(srcdir)/link-grammar.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ link-grammar.spec: $(top_builddir)/config.status $(srcdir)/link-grammar.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ autopackage/default.apspec: $(top_builddir)/config.status $(top_srcdir)/autopackage/default.apspec.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-javaDATA: $(java_DATA) @$(NORMAL_INSTALL) @list='$(java_DATA)'; test -n "$(javadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(javadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(javadir)" || 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)$(javadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(javadir)" || exit $$?; \ done uninstall-javaDATA: @$(NORMAL_UNINSTALL) @list='$(java_DATA)'; test -n "$(javadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(javadir)'; $(am__uninstall_files_from_dir) install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for shar distribution archives 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 distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure \ $(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 $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(javadir)" "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." install-data-hook: clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-javaDATA install-pkgconfigDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-javaDATA uninstall-pkgconfigDATA .MAKE: $(am__recursive_targets) install-am install-data-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ dist-xz dist-zip distcheck distclean distclean-generic \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-hook install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-javaDATA install-man install-pdf \ install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-javaDATA uninstall-pkgconfigDATA # Build and install the jar file in $(PREFIX)/share/java ... # XXX FIXME configure should look to see if it can find ant #linkgrammar-4.7.4.jar: # ant #install-data-hook: # ${LN_SF} ${javadir}/${java_DATA} ${DESTDIR}/${javadir}/linkgrammar.jar # 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: link-grammar/ChangeLog0000644000000000000000000005205412536650432012113 0ustar Version 4.7.4 (13 February 2011) * Dramatic speed improvement for long sentences (hash table fix). * Fix: crash on certain sentences, when fat-link parsing enabled. * Fix: fatal error introduced in last version (combinatorial explosion). * Fix: mem leak introduced in last version (combinatorial explosion). * Assorted fixes to the Boolean SAT solver. Version 4.7.3 (7 February 2011) * Fix: "level" as indefinite noun: "... at knee level". * Enable max disjunct cost as a controllable parser parameter. * Don't just give up on combinatorial explosion, show something! Version 4.7.2 (6 January 2011) * Fix: crash on certain sentences, when fat-link parsing enabled. * Fix: 3 corrupted nouns in words.n.1 * Fix: minimize cpu spin if constituent processing and-list overflows. Version 4.7.1 (11 December 2010): * Fix: dictionary: Add "x" as synonym for "times". * Fix: compilation failure due to lack of termios support on Windows. * Fix: if not set, then force-set locale to UTF-8 in the java library. * Fix: Explicitly include for Windows builds. * Fix: "John imagines himself lost". * Fix: predicative adjectives w/misc verbs: "You are driving me crazy" * Fix: "judge innocent", etc. * Fix: many, many conjoined present tense verbs. * Fix: conjoined verbs with negations. * Fix: "to" as post-nominal modifier: "the inability to laugh" Version 4.7.0 (12 September 2010): * Fix: hunspell configuration on Fedora (bugtracker issue 47) * Fix: 'turn' with adjective: "She turned him green" from wingedtachikoma * Fix: comma-conjoined modifiers: "It tastes bitter, not sweet." * Fix: conjoined question words: "When and where is the party?" * Fix: recognize short, capitalized words (Los, La, etc.). * Treat colon as synonym for is: "The answer: yes." * Fix: begin with prepositions: "It all began in Chicago." * Fix: "What does it come to?" and related. * Fix: null infinitive: "I'd like to, I want to." * Fix: "Because I said so." * Fix: "sure" as preverbal adverb: "It sure is." * Fix: Gerunds with determiners: "a running of the bulls" * SJ link for conjoined nouns/noun phrases. * Sort linkages according to whether fat linkage was used. * Add flag to enable use of fat linkage during parsing. (Fat links now disabled by default). * Add male/female gender tags to misc nouns. * Fix: misc optionally transitive verbs: mix, paint, boot * Fix: word order: "look about fearfully", "look fearfully about", around * Fix: recognize simple fractions * Fix: "is" with uncountable nouns: "there is blood on your hands" * Fix: Roman numeral suffixes e.g. "Henry VIII" * Fix: regression in dates followed by punctuation. "In the 1950s, ..." * Fix: verbs drank, drunk are optionally transitive. * Fix: regression: "all the X", X can be plural or mass. * Fix: verbs paint, color may be ditranstive: "paint the car bright green" Version 4.6.7 (16 April 2010) * Fix: configure handling of --enable-hunspell (bugtracker issue 46) * Fix: conjoined modifier phrases: "the black and white cat sleeps." * Fix: MSWindows+MingGW compilation issue. * Update msvc9 Microsoft Visual C 2008 project, from Boris Iordanov. Version 4.6.6 (19 March 2010) * Minor fixes to handling of units. * Fix: MSWindows+Cygwin/MingGW compilation issues. * Use pkgconfig for editline (from Vincent Untz) * Fix: "I want it back." * Additional titular prefixes, suffixes: Maj. Ph.D. * Add code to detect dictionary version number. * Fix: MS VC missing strdup() function. * Add AutoIt3 bindings from JRowe Version 4.6.5 (3 November 2009) * Fix: Superlatives without preceding determiners ("... likes you best") * Fix: Take more care in distinguishing mass and count nouns. * Fix: Old bug w/relative clauses: Rw+ is optional, not mandatory. * Provide tags identifying relative, superlative adjectives. * Remove BioLG NUMBER-AND-UNIT handling, its been superceeded. * Fix handling of parenthetical phrases/clauses. * Fix: handling of capitalized first words ending in letter "s". * Fix: support "filler-it" SF link for "It was reasoned that..." * Fix: certain WH-word constructions: "I did not know why until recently" * Fix: go: "there goes the greatest guy ever" * Fix: opening coordinating conjunctions: "And you can also ..." * Configurable Hunspell spell-checker dictionary location. * Fix: Misc ordinal usage. * Add support for aspell spell-checker. Version 4.6.4 (11 October 2009) * Restore nouns starting w/letters x-z, elided in version 4.5.9 ff. * Add support for single-word interjections/exclamations! * Fix: sometimes command line client fails to show all valid linkages. * Misc fixes: such_that, upon, acted.v * Fix: impersonal "be" linking to passive participle. * Fix: handling of capitalized first words. * Fix: duplication of certain parses involving transitive verbs. Version 4.6.3 (4 October 2009) * Fix compilation bug on FreeBSD. * Fix: allow MX link to post-nominal ", to be ..., " * Fix: add idiom "time and again" * Fix: another BioLG regression in handling of possessives. * Fix: handling of period at end of number at end of sentence. * Fix: Capitalized words ending in s at start of sentence. * Use corpus-statistics-based ranking by default, if available. * Fix difficulties in build of corpus statistics module. Version 4.6.2 (21 September 2009) * Fix: "come across as authoritative". * Improve Java location guessing in FreeBSD * Fix for assert triggered by long sentences. * Fix: long sequence of periods treated as unknown word. * Add informational print showing dictionary location on startup. * Remove duplicated {@MV+} in tend.v * Automatically resize the display size to fit the current window size. * Fix handling of punctuation at the end of a capitalized word. * Fix misc verbs acting as adjectival modifiers: e.g. "given", "allied" * Fix bug in BioLG code regarding the handling of possessives. * Fix a (rare) crash in sentences with many conjunctions. * Fix a crash involving long sequences of UTF8 punctuation marks. Version 4.6.1 (31 August 2009) * Stop printing annoying warning when !vars are used. * Fix missing dict file units.2 problem * Fix compilation bug on FreeBSD. Version 4.6.0 (29 August 2009) * Avoid used of bzero, add missing include directives (MacOSX problem) * Reclassify a number of "medical" prepositions as adverbs. * Add approx 100 adverbs & 300 adjectives. * Add approx 250 verbs. * Add approx 300 nouns. * Add misc units. * Add misc European connector words/patronymics. * Reclassify 100's of transitive verbs as optionally-transitive. * Add distinct tokenization step ("sentence_split") to public API. This last change forces the minor-version-number bump. Version 4.5.10 (25 August 2009) * Be sure to link with -lm Version 4.5.9 (25 August 2009) * Modify error messages to indicate that they are from link-grammar. * Add missing Java files that were forgotten last time around. * Add greeting to command-line client startup. * Print disjunct cost also, when requesting disjunct printing. * Add missing color names as mass nouns. * Fix: Reclassify musical instruments: "He plays piano" * Add experimental word-clustering system. * Add CMake build file * Fix: "It takes longer than that." * Fix: "He has done very well." * Fix: a dozen optionally transitive verbs (swim, kill, etc.) * Fix: "He's out running." * Fix: "suddenly" is a "manner adverb", not a clausal adverb. * Fix: Use Pg links to gerunds: "He feared hitting the wall." * Fix: assorted numerical-range bugs. * Fix: prep modifiers with distances: "It is a few miles out" * Fix: Spelled-out dates: "It started in nineteen twelve" * Fix: Misc date, time expression parsing e.g "Zero hour is here." * Fix: Misc words, "ordered list", "screened out" * Fix: Post-fixed numbers can act as determiners. * Fix: "We bought the last 50 ft. of cable." * Fix: opening directives to imperatives: "Finally, move it back." * Fix: Improved simple equation parsing support. * Fix: Add misc fixes from BioLG that were previously overlooked. * Fix: "favorite" can take determiner "a" ("a favorite place") * Fix: assorted clausal complements: "The emperor ordered it done." * Fix: ordinals: "First on our list is ..." * Fix: verb modifier "some of the time", "most places" * Fix: Sit, stand take modifiers: "he stood still" Version 4.5.8 (2 July 2009) * Fix: 'than anticipated', 'than was anticipated', etc. * Fix: 'saw the wood' * Fix: sometimes commas are used as if they were semicolons. * Fix: 'We have quite enough work already, thank you!' * Fix: allow 'and' as conjunction in entity names. * Fix: 'I stared him down', 'They shouted him down', 'booed off' * Fix: 'sound him out', 'look him over' * Fix: 'Somewhere in the distance' * Stub out list of names given to both men and women, to avoid duplication. * Fix: 'I think so, too' * Fixes for compilation under Cygwin. * From Boris Iordanov: fixes to JSON java code. * From Boris Iordanov: new java remote client code. * Fix: Biological texts commonly have adj-noun-adj-noun chains Version 4.5.7 (4 June 2009) * Fix 'make install' for windows (abi bug 12049) * Fix multi-threaded bug when TRACK_SPACE_USAGE is defined. * Add './configure --enable-mudflap' just for fun... * Fix: "Walk tall", "Think quick" * Fix: "... part no. 1234-56A" * Fix regression from BioLG merge: "It cost $14 million." * Fix come/came: "The dog came running..." * Fix year abbreviations: "He drove a souped-up '57 Chevy" * Fix sit, stand: "The dog stood still" * Fix act up, act out: "He is acting out." "The motor is acting up." * Fix notoriously, poorly: "The store was poorly stocked". * Fix: "strong" can be adverb * Add support for recognizing basic time zones during parsing. * Fix: verbs acting as adjectival modifiers: "a very politicized deal." * Fix: ".. nearly so well", "...almost so well". * Fix financial ranges: "It will cost $10 million to $20 million to build." * Expand handling of capitalized words that appear in entity names. * Expand the list of characters that are recognized as quotes. * Support usage of yes, no as sentence openers. * Better support for directives, commands. * Fix: "Ash Wednesday", "Fat Tuesday", etc. * Fix: post-verbal adj: "she wiped the table dry" * Fix: wish: "she wished me a happy birthday" Version 4.5.6 (24 May 2009) * Bugfix: fix non-thread-safe usage. * Changes to enable MinGW/Windows to compile. * Update of MSVC6 build files * Fix: pizza, fries, chopsticks. * Export word-sense database to Java apps. * Fix: "Was the man drunk or crazy or both?" Version 4.5.5 (10 May 2009) includes the following changes: * Bugfix: crash for zero-length sentences. Version 4.5.4 (9 May 2009) includes the following changes: * Fix: "sleep in": "A bed is something you sleep in." * Fix: "drinking": "Let's go drinking." * Fix go+bare infinitive: "Let's go shop", "Let's go swim" * Fix: "Let's go for a swim." "Let's go for a smoke". * Fix: "Let's not" "Let's not go" "Let's not cry" * Fix: ... is : "All he ever does is complain." * Fix: "You will die young/happy/unhappy" * Fix: "You should exercise to stay fit." * Fix: "We danced 'til dawn." * Fix: "tell off": "She had told him off." * Bugfix: sometimes spell checker would run even if turned off. Version 4.5.3 (14 April 2009) includes the following changes: * Haste makes waste! Revert a recent 'fix'. Version 4.5.2 (14 April 2009) includes the following changes: * Use re-entrant version of mbtowc in all code. * Fix run-time breakage on Mac OSX and FreeBSD. Version 4.5.1 (13 April 2009) includes the following changes: * Fix Assertion failed: negative constituent length! * Fix build break for Mac OSX. * Force use of UTF-8 locale in the command-line tool. Version 4.5.0 (10 April 2009) includes the following changes: * Hack around missing SQLite3 pkgconfig on MacOS * Fix adverbs: 'The motor ran hot', 'the door swung wide open', etc. * Fix: 'at risk of breakdown', 'under threat of fire' * Add regular-expression-based word guessing, from BioLG project. This provides support for many scientific/biomedical terms. * Add spell-guessing for unknown words. * Fix UTF8 support to be correctly thread-safe. * BioLG: fix post-numbering: 'it started on day one' * BioLG: add number ranges: 'it takes 2 to 3 times the effort' * BioLG: assorted adverb fixes, typical of scientific prose. * BioLG: initiate, attach, localize etc are optionally transitive. * BioLG: allow fork, branch, splice, export, etc to take particles. * BioLG: extended use of Greek letters in biomedical text. * BioLG: support parsing of Roman numerals. * BioLG: support Greek-letter-number combinations. * Fix: 'she was singing', etc. * Enable WordNet word-sense identification based on syntactical usage. Version 4.4.3 (11 March 2009) includes the following changes: * Look at JAVA_HOME to guess location of jni.h * Add dictionary maintenance utility script. * Add prototype German dictionary. * Fix sentences containing measurements, lengths, speeds. etc. * Add 1400 new adjectives, many of scientific origin. * Add 250 international currencies, including special utf8 symbols. * Performance optimization in sentence tokenization. * Add 1100 male, female given names (from Bruce Wilcox). * Cleanup parsing of "in-" date expressions, e.g. "in the 1940's". * Cleanup of assorted compiler warnings. * Fix handling of special utf8 characters in dictionary. * Fix hang when parsing certain utf8 input strings. * Make sure that most strings in the API are declared const char * * Add option to command-line client to print disjunct strings. Version 4.4.2 (15 January 2009) includes the following changes: * Fix: 'The keys are gone', 'It is a gone desire' * Fix: 'He poured me a glass', 'He wired me the money', etc. * Initial rough-in of corpus statistics based parse ranking. * Initial rough-in of corpus-guided word-sense identification. * Fix for googlecode bugs 38, 39 (Java, Ruby failure to load) * Add new API routine to return disjunct string. Version 4.4.1 (15 December 2008) includes the following changes: * Balance the dictionary tree; this speeds word-lookup slightly. * New MSVC6 build files from Evgenii Philippov. * Fix java server classes to pass along the link-grammar version number. Version 4.4.0 (7 December 2008) includes the following changes: * fix: recognize curly-single-quote ’ where straight quote can be used. * recognize and explicitly ignore emoticon types. * Include MSVC6 build files. * Apply patch needed for Ruby bindings. * fix: "Where did they come from?", per Viswanath IIIT * fix: "Where did they go to?" * fix: "It gives me peace of mind." * fix: many, many incorrectly identified mass nouns. * fix: ladle.v "molten hot" "piping hot" * fix: "It's a shame that...", "The crux of the plan is that..." * Performance improvements (about 11%) to prunce.c from Bruce Wilcox * fix: "He eats with me nightly." * Add new public api function: linkgrammar_get_version() * MSVC9 build files from Borislav Iordanov * Java network-efficient client-server classes from Borislav Iordanov Version 4.3.9 (8 October 2008) includes the following changes: * Issue 13: "John is altogether amazingly quick." * Nonstandard spelling "unequivocably" * Dictionary fixes for 'marginally', etc. "That one is marginally better" * Issue 7: Dictionary fixes for 'done': "I am done working" * dictionary entries for walk-up drivethru car-wash * dictionary: "I am through being mad", "It was a through flight", etc. * Issue 11: "You are doing well" * Issue 3: "I asked Jim a question", "I told Jim a story" * Passive subjects with objects: "I was told that crap, too" "...was asked..." * Fixes for Apple Mac OSX (crash on non-executable stack) * Early version of Filip Maric's boolean SAT solver * fix: "He talked quietly of revolt." * fix: "It consists mostly of sand.", "He talks, mostly of revolution." * fix: "He talked mostly to Ann.", "He talks a lot." * fix: than_usual: "He is taking longer than usual." * fix: a batch of new verbs from Roman Khlupin * fix: Fix crash on Apple Macintosh by correctly identifying the platform. * fix: "San Gabriel" "Block Island" "Great Southern Bank" "de la Rente" * fix: "I biked Johnson Creek." Version 4.3.8 (14 August 2008) includes the following changes: * Build fixes for Windows (missing bzero and thread-safe rand) * Fix several mem leaks, one in the Java jni code. * Fix crash of java6 jvm, due to blown stack limits. Version 4.3.7 (8 August 2008) includes the following changes: * Expanded list of given names to include those from 2005 US Census * Export a new java jni function, to get the inflected word. * Add a TO+ connector so that "I tend to agree" parses correctly. * Makefile fixes for Mac OS/X Leopard. Version 4.3.6 (21 July 2008) includes the following changes: * Fixes for Windows MS Visual-C builds. * Fix parsing of "He walked the dog.", "He sailed the boat." * Add support for right-apostrophe (’) which is a non-ASCII UTF8 char. * Add support for other non-ASCII UTF8 punctuation. * Fix crash on printing constituent tree of certain long sentences. * Avoid recursive error reporting for UTF8 dictionary errors. * Clarify error logging and error printing. * Add java getVersion() to return link-grammar version string. * Add more numbers to dict (e.g. twenty-seven, bazillion, half-dozen, etc.) * Foodstuffs: bagels, lox, tacos, guacamole, roe, neufchatel, mayo, etc. * Weights and measures: megabytes, °C, km² etc. * Performance improvements in printing of link-tree. * Convert assert into warning when no canonical linkages can be found. * Convert assert into warning when constituent andlist overflows. * Provide additional checks for constituent overflows. * Convert most error printfs into a formal error reporting system. * Remove all globals, library is now thread-safe. * Fix crash when sentence has square bracket, and doing constituents. Version 4.3.5 (29 April 2008) includes the following changes: * Added ant build file to create the link-grammar jar file. * Fix regression in command-line client of multiple-parse display. * Use MB_LEN_MAX, not MB_CUR_MAX for UTF8 support. * Fix a WIN32 compiler regression (no inline support in Windows). * Fix error in handling of UTF8 dictionaries. * Fix strncat() misuse in error.c * Fix capitalization errors in country names. * Fix parsing of "he angled left, he dodged left, he turned left". * Don't build the JNI library if Java isn't found. Fixes build on Windows. * Fix install bug for NetBSD systems. * Pre-detected entities cannot participate in G links. * There is no UTF8 support in windows, so stub it out. * Fix crash in constituent output, bug #22 in googlecode bugtacker. * Some small steps taken to eventually make library thread-safe. * There are three constituent string styles, enable all three. * Make the command-line flag errors less cyrptic. * Add readline (BSD editline) support. * Rename "grammar-parse" to the more logical "link-parser". * Small man page updates. * Export and cost, link cost via public API. Version 4.3.4 (16 March 2008) includes the following changes: * Fix regression of handling of capitalization at the start of sentences. * Fix dictionary search path so that it respects command-line input. * Fix rare but nasty crash when parsing long sentences in panic mode. * Add a method to set the dictionary path. * Fix all remaining compiler warnings. * Make parser capable of handling UTF8 strings and dictionaries. * Ongoing minor expansion of the Lithuanian (lt) dictionary. Version 4.3.3 (27 February 2008) includes the following changes: * Missing java is a warning, not an error. * man page for grammar-parse. * Removed cruft from the dictionary open routines. * configure tries to guess some non-standard jni.h locations. * Split up java library exports, should help cygwin builds. * Fix java library pre-linking bug. * Minor English dictionary additions. * Prototype Lithuanian (lt) dictionary. Version 4.3.2 (2 February 2008) includes the following changes: * Compile fixes for WIN32 * Dictionary fixes for given names. (Fixes a serious problem with 4.3.1) Version 4.3.1 (31 Jaunary 2008) includes the following changes: * A merger of significant parts of the "medical terms" dictionary from Peter Szolovits. This includes thousands of additional words. Version 4.3.0 (30 January 2008) includes the following changes: * New link types (Ct, Cta, Rn, Rw) for comparatives, so as to link relative clauses: "John is bigger than Dave is", "John wants more cookies than Dave wants". The Rw link is used to link question words to the relative clauses that follow them. * Dictionary Fixes for "Expresso is a coffee drink", "Teach me fetch", "I am pooped" as synonym for "I am tired", "Mother likes her", "Mommy loves me" and related. Also, directives involving "go": "Go play ball", "Go take a walk", "You and Rover go play with the ball." * Dictionary support for external entity markup. This includes the recognizition of personID0..personID60, dateID0..dateID60, organizationID0..organizationID60 and locationID0..locationID60 as appropriate words. * Fixes of numerous compile-time warnings. * Simple Java (JNI) bindings. Version 4.2.5 (11 November 2007) includes the following changes: * Security fix for a buffer overflow. CVE-2007-5395 link-grammar/Makefile.in0000644000000000000000000007305512537603120012403 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/build.xml.in $(srcdir)/link-grammar.pc.in \ $(srcdir)/link-grammar.spec.in \ $(top_srcdir)/autopackage/default.apspec.in AUTHORS COPYING \ ChangeLog README TODO compile config.guess config.sub \ install-sh missing ltmain.sh ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = build.xml link-grammar.pc link-grammar.spec \ autopackage/default.apspec CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(javadir)" "$(DESTDIR)$(pkgconfigdir)" DATA = $(java_DATA) $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz 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@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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 = link-grammar data man link-grammar.xcode msvc6 msvc9 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = link-grammar.pc ACLOCAL_AMFLAGS = -I m4 @HAVE_JAVA_TRUE@javadir = $(datadir)/java @HAVE_JAVA_TRUE@java_DATA = linkgrammar-@VERSION@.jar @HAVE_JAVA_TRUE@@OS_WIN32_FALSE@LN_SF = ln -sf @HAVE_JAVA_TRUE@@OS_WIN32_TRUE@LN_SF = cp EXTRA_DIST = \ autogen.sh \ link-grammar.pc.in \ link-grammar.spec.in \ link-grammar.spec \ AUTHORS \ ChangeLog \ FindLinkGrammar.cmake\ LICENSE \ MAINTAINERS \ README \ TODO all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): build.xml: $(top_builddir)/config.status $(srcdir)/build.xml.in cd $(top_builddir) && $(SHELL) ./config.status $@ link-grammar.pc: $(top_builddir)/config.status $(srcdir)/link-grammar.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ link-grammar.spec: $(top_builddir)/config.status $(srcdir)/link-grammar.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ autopackage/default.apspec: $(top_builddir)/config.status $(top_srcdir)/autopackage/default.apspec.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-javaDATA: $(java_DATA) @$(NORMAL_INSTALL) @list='$(java_DATA)'; test -n "$(javadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(javadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(javadir)" || 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)$(javadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(javadir)" || exit $$?; \ done uninstall-javaDATA: @$(NORMAL_UNINSTALL) @list='$(java_DATA)'; test -n "$(javadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(javadir)'; $(am__uninstall_files_from_dir) install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for shar distribution archives 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 distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure \ $(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 $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(javadir)" "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @HAVE_JAVA_FALSE@install-data-hook: clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-javaDATA install-pkgconfigDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-javaDATA uninstall-pkgconfigDATA .MAKE: $(am__recursive_targets) install-am install-data-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ dist-xz dist-zip distcheck distclean distclean-generic \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-hook install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-javaDATA install-man install-pdf \ install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-javaDATA uninstall-pkgconfigDATA # Build and install the jar file in $(PREFIX)/share/java ... # XXX FIXME configure should look to see if it can find ant @HAVE_JAVA_TRUE@linkgrammar-@VERSION@.jar: @HAVE_JAVA_TRUE@ ant @HAVE_JAVA_TRUE@install-data-hook: @HAVE_JAVA_TRUE@ ${LN_SF} ${javadir}/${java_DATA} ${DESTDIR}/${javadir}/linkgrammar.jar # 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: link-grammar/LICENSE0000644000000000000000000000354512536650432011347 0ustar LICENSE ------- Copyright (c) 2003,2004 Daniel Sleator, David Temperley, and John Lafferty. All rights reserved. Copyright (c) 2007 Mike Ross. Copyright (c) 2008,2009,2010 Linas Vepstas, Borislav Iordanov. Copyright (c) 2011 Linas Vepstas Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The names "Link Grammar" and "Link Parser" must not be used to endorse or promote products derived from this software without prior written permission. To obtain permission, contact sleator@cs.cmu.edu THIS SOFTWARE IS PROVIDED BY DANIEL SLEATOR, DAVID TEMPERLEY, JOHN LAFFERTY AND OTHER CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. link-grammar/AUTHORS0000644000000000000000000000151612536650432011406 0ustar Original Authors: Davy Temperley: http://theory.esm.rochester.edu/temperley/ Daniel Sleator: http://www.cs.cmu.edu/~sleator/ John Lafferty: http://www.cs.cmu.edu/~lafferty/ Much additional work has been done by many different developers. The current lead developer is Linas Vepstas: http://linas.org/ Some of the people who have contributed patches and fixes include: (In alphabetical order) Borislav Iordanov Vikas N Kumar Dom Lachowicz Marc Maurer Evgenii Philippov Sampo Pyysalo Murilo Saraiva de Queiroz Fridrich Strba Simon Stuart Peter Szolovits Vincent Untz Bruce Wilcox link-grammar/data/0000755000000000000000000000000012537603515011245 5ustar link-grammar/data/Makefile.am0000644000000000000000000000014512536650432013300 0ustar SUBDIRS=de en lt # include the script in the tarball, but do not install it. # EXTRA_DIST=insert.pl link-grammar/data/.cvsignore0000644000000000000000000000002512536650432013241 0ustar Makefile.in Makefile link-grammar/data/Makefile.in0000644000000000000000000004502012537603121013304 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = data DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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 = de en lt all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign data/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am # include the script in the tarball, but do not install it. # EXTRA_DIST=insert.pl # 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: link-grammar/data/en/0000755000000000000000000000000012537603515011647 5ustar link-grammar/data/en/Makefile.am0000644000000000000000000000065612536650432013711 0ustar SUBDIRS=words DICTS= \ 4.0.affix \ 4.0.batch \ 4.0.biolg.batch \ 4.0.enwiki.batch \ 4.0.fixes.batch \ 4.0.voa.batch \ 4.0.constituent-knowledge \ 4.0.dict \ 4.0.knowledge \ 4.0.regex \ tiny.dict dictdir=$(pkgdatadir)/en dict_DATA = $(DICTS) EXTRA_DIST = $(DICTS) 4.0.dict.m4 link-grammar/data/en/4.0.enwiki.batch0000644000000000000000000000063412536650432014442 0ustar !verbosity=1 !echo !limit=1000 !batch !short=20 !constituents=1 !spell=0 Hatem Mohamed Mersal (born 20 January 1975) is an Egyptian long jumper. His personal best jump is 8.31 metres, achieved in June 1999 in Oslo. Economists are nearly universal in their belief that the dollar is going to collapse; the only debate centers around when and for how long. The only debate centers around when and for how long. link-grammar/data/en/.cvsignore0000644000000000000000000000004512536650432013645 0ustar Makefile.in Makefile svn-commit.tmp* link-grammar/data/en/Makefile.in0000644000000000000000000005174612537603121013722 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = data/en DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dictdir)" DATA = $(dict_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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 = words DICTS = \ 4.0.affix \ 4.0.batch \ 4.0.biolg.batch \ 4.0.enwiki.batch \ 4.0.fixes.batch \ 4.0.voa.batch \ 4.0.constituent-knowledge \ 4.0.dict \ 4.0.knowledge \ 4.0.regex \ tiny.dict dictdir = $(pkgdatadir)/en dict_DATA = $(DICTS) EXTRA_DIST = $(DICTS) 4.0.dict.m4 all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/en/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign data/en/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dictDATA: $(dict_DATA) @$(NORMAL_INSTALL) @list='$(dict_DATA)'; test -n "$(dictdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dictdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dictdir)" || 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)$(dictdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dictdir)" || exit $$?; \ done uninstall-dictDATA: @$(NORMAL_UNINSTALL) @list='$(dict_DATA)'; test -n "$(dictdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dictdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(dictdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dictDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-dictDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dictDATA 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 uninstall-dictDATA # 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: link-grammar/data/en/4.0.regex0000644000000000000000000002317112536650432013207 0ustar %***************************************************************************% % % % Copyright (C) 2005, 2006 Sampo Pyysalo, Sophie Aubin % % See file "LICENSE" for information about commercial use of this system % % % %***************************************************************************% % This file contains regular expressions that are used to match % tokens not found in the dictionary. Each regex is given a name which % determines the disjuncts assigned when the regex matches; this name % must be defined in the dictionary along with the appropriate disjuncts. % Note that the order of the regular expressions matters: matches will % be attempted in the order in which the regexs appear in this file, % and only the first match will be used. % Numbers. % XXX, we need to add utf8 U+00A0 "no-break space" % % Allows at most two colons in hour-muinute-second HH:MM:SS expressions % Allows at most two digits between colons HMS-TIME: /^[0-9][0-9]?(:[0-9][0-9]?(:[0-9][0-9]?)?)?(AM|PM|am|pm)?$/ % e.g. 1950's leading number can be higher, for science fiction. % Must be four digits, or possible three. Must end in s, 's ’s DECADE-TIME: /^([1-4][0-9][0-9]|[1-9][0-9])0(s|'s|’s)$/ % Day-of-month names; this regex will match before the one below. DAY-ORDINALS: /^(1st|2nd|3rd|[4-9]th|1[0-9]th|2(0th|1st|2nd|3rd|[4-9]th)|30th|31st)$/ % Ordinal numbers; everything except 1st through 13th % is handled by regex. ORDINALS: /^[1-9][0-9]*(0th|1st|2nd|3rd|[4-9]th)$/ % Allows any number of commas or periods % Be careful not match the period at the end of a sentence; % for example: "It happened in 1942." NUMBERS: /^[0-9,.]*[0-9]$/ % This parses signed numbers and ranges, e.g. "-5" and "5-10" and "9+/-6.5" NUMBERS: /^[0-9.,-]*[0-9](\+\/-[0-9.,-]*[0-9])?$/ % Parses simple fractions e.g. "1/60" with no decimal points or anything fancy FRACTION: /^[0-9]+\/[0-9]+$/ % "10(3)" exponent (used in PubMed) NUMBERS: /^[0-9.,-]*[0-9][0-9.,-]*\([0-9:.,-]*[0-9][0-9.,-]*\)$/ % Roman numerals % The first expr has the potential(?) problem that it matches an empty % string. Thus, the next three rules specify that at least one section % is non-empty. ROMAN-NUMERAL-WORDS: /^M*(CM|D?C{0,3}|CD)(XC|L?X{0,3}|XL)(IX|V?I{0,3}|IV)$/ % ROMAN-NUMERAL-WORDS: /^M*(CM|D?C{0,3}|CD){1}(XC|L?X{0,3}|XL)(IX|V?I{0,3}|IV)$/ % ROMAN-NUMERAL-WORDS: /^M*(CM|D?C{0,3}|CD)(XC|L?X{0,3}|XL){1}(IX|V?I{0,3}|IV)$/ % ROMAN-NUMERAL-WORDS: /^M*(CM|D?C{0,3}|CD)(XC|L?X{0,3}|XL)(IX|V?I{0,3}|IV){1}$/ % Strings of initials. e.g "Dr. J.G.D. Smith lives on Main St." INITIALS: /^([A-Z]\.)+$/ % Greek letters with numbers GREEK-LETTER-AND-NUMBER: /^(alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\-?[0-9]+$/ PL-GREEK-LETTER-AND-NUMBER: /^(alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)s\-?[0-9]+$/ % Some "safe" derived units. Simple units are in dictionary. % The idea here is for the regex to match something that is almost % certainly part of a derived unit, and allow the rest to be % anything; this way we can capture difficult derived units such % as "mg/kg/day" and even oddities such as "micrograms/mouse/day" % without listing them explicitly. % TODO: add more. % Some (real) misses from these: % micrograms.kg-1.h-1 microM-1 J/cm2 %/day mN/m cm/yr % m/s days/week ml/s degrees/sec cm/sec cm/s mm/s N/mm (is that a unit?) % cuts/minute clicks/s beats/minute x/week W/kg/W %/patient-year % microIU/ml degrees/s counts/mm2 cells/mm3 tumors/mouse % mm/sec ml/hr mJ/cm(2) m2/g amol/mm2 animals/group % h-1 min-1 day-1 cm-1 mg-1 kg-1 mg.m-2.min-1 ms.cm-1 g-1 % sec-1 ms-1 ml.min.-1kg-1 ml.hr-1 % also, both kilometer and kilometers seem to be absent(!) % remember "mm"! UNITS: /^([npmk]|nano|pico|milli|micro|kilo)?(g|grams?)\// % grams/anything UNITS: /^([fnmp]|femto|nano|micro|pico|mu)?mol(es)?\// % mol/anything UNITS: /^[a-zA-Z\/.]+\/((m|micro)?[lLg]|kg|mol|min|day|h)$/ % common endings % common endings, except in the style "mg.kg-1" instead of "mg/kg". UNITS: /^[a-zA-Z\/.1-]+\.((m|micro)?[lLg]|kg|mol|min|day|h)(-1|\(-1\))$/ % combinations of numbers and units, e.g. "50-kDa", "1-2h" % TODO: Clean up and check that these are up-to-date wrt the % dictionary-recognized units; this is quite a mess currently. % TODO: Extend the "number" part of the regex to allow anything % that the NUMBER regex matches. % One problem here is a failure to split up the expression ... % e.g. "2hr" becomes 2 - ND - hr with the ND link. But 2-hr is treated % as a single word ('I is a 2-hr wait') % NUMBER-AND-UNIT: /^[0-9.,-]+(msec|s|min|hour|h|hr|day|week|wk|month|year|yr|kDa|kilodalton|base|kilobase|base-pair|kD|kd|kDa|bp|nt|kb|mm|mg|cm|nm|g|Hz|ms|kg|ml|mL|km|microm|\%)$/ % Comment out above, it screws up handling of unit suffixes, for % example: "Zangbert stock fell 30% to $2.50 yesterday." % fold-words. Matches NUMBER-fold, where NUMBER can be either numeric % or a spelled-out number, and the hyphen is optional. Note that for % spelled-out numbers, anything is allowed between the "initial" number % and "fold" to catch e.g. "two-to-three fold" ("fourteen" etc. are absent % as the prefix "four" is sufficient to match). FOLD-WORDS: /^[0-9.,:-]*[0-9]([0-9.,:-]|\([0-9.,:-]*[0-9][0-9.,:-]*\)|\+\/-)*-?fold$/ FOLD-WORDS: /^(one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve|thirteen|fifteen|twenty|thirty|fifty|hundred|thousand|million).*fold$/ % Plural proper nouns. % Make sure that apostrophe-s is split out correctly. PL-CAPITALIZED-WORDS: /^[[:upper:]].*[^iuoys'’]s$/ % Other proper nouns. % We demand that these end with an alphanumeric, i.e. explicitly % reject punctuation. We don't want this regex to "swallow" any trailing % commas, colons, or periods/question-marks at the end of sentences. % In addition, this must not swallow words ending in 's 'll etc. % (... any affix, for that matter ...) and so no embedded apostrophe CAPITALIZED-WORDS: /^[[:upper:]][^'’]*[^[:punct:]]$/ % SUFFIX GUESSING % For all suffix-guessing patterns, we insist that the pattern start % with an alphanumeric. This is needed to guarentee that the % prefix-stripping code works correctly, as otherwise, the regex will % gobble the prefix. So for example: "We left (carrying the dog) and % Fred followed." Since "(carrying" is not in the dict, we need to be % sure to not match the leading paren so that it will get tripped. % ING-WORDS: /^\w.+ing$/ % Plurals or verb-s. Make sure that apostrophe-s is split out correctly. % e.g. "The subject's name is John Doe." should be % +--Ds--+---YS--+--Ds-+ % | | | | % the subject.n 's.p name.n S-WORDS: /^\w.+[^iuoys'’]s$/ % Verbs ending -ed. ED-WORDS: /^\w.+ed$/ % Advebs ending -ly. LY-WORDS: /^\w.+ly$/ % Nouns ending in -ism, -asm (chiliasm .. ) Usualy mass nouns % Stubbed out for now; I'm not convinced this improves accuracy. % ISM-WORDS: /^\w.+asm$/ % ISM-WORDS: /^\w.+ism$/ % Corresponding count noun version of above (chiliast...) % AST-WORDS: /^\w.+ast$/ % AST-WORDS: /^\w.+ist$/ % Corresponding adjectival form of above ADJ-WORDS: /^\w.+astic$/ ADJ-WORDS: /^\w.+istic$/ % Nouns ending -ation stubbed out in BioLG, stub out here ... %ATION-WORDS: /^\w.+ation$/ % Extension by LIPN 11/10/2005 % nouns -- typically seen in (bio-)chemistry texts % synthetase, kinase % 5-(hydroxymethyl)-2’-deoxyuridine % hydroxyethyl, hydroxymethyl % septation, reguion % isomaltotetraose, isomaltotriose % glycosylphosphatidylinositol % iodide, oligodeoxynucleotide % chronicity, hypochromicity MC-NOUN-WORDS: /^\w.+ase$/ MC-NOUN-WORDS: /^\w.+ine?$/ MC-NOUN-WORDS: /^\w.+yl$/ MC-NOUN-WORDS: /^\w.+ion$/ MC-NOUN-WORDS: /^\w.+ose$/ MC-NOUN-WORDS: /^\w.+ol$/ MC-NOUN-WORDS: /^\w.+ide$/ MC-NOUN-WORDS: /^\w.+ity$/ % replicon, intron C-NOUN-WORDS: /^\w.+o[rn]$/ % adjectives % exogenous, heterologous % intermolecular, intramolecular % glycolytic, ribonucleic, uronic % ribosomal, ribsosomal % nonpermissive, thermosensitive % inducible, metastable ADJ-WORDS: /^\w.+ous$/ ADJ-WORDS: /^\w.+ar$/ ADJ-WORDS: /^\w.+ic$/ ADJ-WORDS: /^\w.+al$/ ADJ-WORDS: /^\w.+ive$/ ADJ-WORDS: /^\w.+ble$/ % latin (postposed) adjectives % influenzae, tarentolae % pentosaceus, luteus, carnosus LATIN-ADJ-WORDS: /^\w.+ae$/ LATIN-ADJ-WORDS: /^\w.+us$/ % must appear after -ous in this file % latin (postposed) adjectives or latin plural noun % brevis, israelensis % japonicum, tabacum, xylinum LATIN-ADJ-P-NOUN-WORDS: /^\w.+is?$/ LATIN-ADJ-S-NOUN-WORDS: /^\w.+um$/ % Hyphenated words. In the original LG morpho-guessing system that % predated the regex-based system, hyphenated words were detected % before ING-WORDS, S-WORDS etc., causing e.g. "cross-linked" to be % treated as a HYPHENATED-WORD (a generic adjective/noun), and % never a verb. To return to this ordering, move this regex just % after the CAPITALIZED-WORDS regex. HYPHENATED-WORDS: /^[[:alpha:][:digit:],.][[:alpha:][:digit:],.-]*-[[:alpha:][:digit:],.-]*[[:alpha:][:digit:],.]$/ % proteins often end "ase", so we'll assume those things are names. % removed, too many false positives. % NAME: /ase$/ % Sequence of punctuation marks. If some mark appears in the affix table % such as a period, comma, dash or underscore, and there's a sequence of % these, then treat it as a "fill-in-the-blank" placeholder. % This matters only for punc. appearing in the affix table, since the % tokenizer explicitly mangles based on these punctution marks. % % Look for at least four in a row. UNKNOWN-WORD: /^[.,-]{4}[.,-]*$/ link-grammar/data/en/4.0.dict.m40000644000000000000000000074703212536650432013350 0ustar dnl dnl Macro version of the 4.0.dict file. This is file is used to simplify dnl the maintenance of the verb definitions; it defines a handful of dnl macros to deal with the case of conjoined verbs. Pre-process this dnl file with the m4 macro pre-processor to create 4.0.dict dnl That is, at the command line, run: dnl m4 4.0.dict.m4 > 4.0.dict dnl dnl the comment delimiter for link-grammar data files is % changecom(`%') %***************************************************************************% % % % Copyright (C) 1991-1998 Daniel Sleator and Davy Temperley % % Copyright (c) 2003 Peter Szolovits and MIT. % % Copyright (c) 2008, 2009, 2010, 2011 Linas Vepstas % % % % See file "README" for information about commercial use of this system % % % %***************************************************************************% % Dictionary version number is 4.7.4 (formatted as V4v7v4+) : V4v7v4+; % _ORGANIZATION OF THE DICTIONARY_ % % I. NOUNS % II. PRONOUNS % III. DETERMINERS % IV. NUMERICAL EXPRESSIONS % V. VERBS % A. Auxiliaries; B. Common verb types; C. complex intransitive verbs; % D. complex intransitive verbs; E. complex verbs taking [obj] + % [complement]; F. idiomatic verbs % VI. PREPOSITIONS % VII. TIME AND PLACE EXPRESSIONS % VIII. QUESTION-WORDS AND CONJUNCTIONS % IX. ADJECTIVES % X. COMPARATIVES AND SUPERLATIVES % XI. ADVERBS % A. Mainly adjectival; B. Mainly post-verbal; C. Post-verbal/pre-verbal; % D. Post-verbal/pre-verbal/openers; E. Post-verbal/openers; % F. Pre-verbal/openers % XII. MISCELLANEOUS WORDS AND PUNCTUATION % % NEW LINKS INVENTED BY MIKE ROSS % Ct and Cta are used with comparatives so that 'than' links to the relative clause % John is bigger than Dave is. % John wants more cookies than Dave wants. % % Rw is used similarly to Ct, Cta, and Rn to link question words to the relative clauses % that follow them. % For auxillary verbs, replaced "{Q-}" with "(Rw- or Q-}". % For nouns and others, replaced "B*m+" with "(Rw+ & B*m+)" (for any *) % For who,what,which,whom, replaced "B*" with "(R+ & B*+)" (for any *) % % TODO: % To-do: many verb simple past-tense forms include ({@E-} & A+) to % make them adjective-like. Strictly speaking, these should probably % copied into words.adj.1 and treated like common adjectives, right? % % Many nouns in words.n.4 are treated as "mass or count". The side % effect is that mass nouns are inconsistently treated as sometimes % singular, sometimes plural. e.g. words.n.3 gets & % . This is a kind-of ugly tangle, it should really % be sorted out so that links are properly marks as s, p or m. % This is mostly fixed, except that some uses of % remain, below. % Null links. These are used to drop the requirement for certain words % to appear during parsing. Basically, if a parse fails at a given cost, % it is retried at a higher cost (by raising the disjunct_cost). % Currently, two different nulls are defined: a regular null, and a % costly null. The regular null is used to make determiners optional; % this allows for the parsing of newspaper headlines and clipped % technical speech (e.g. medical, engineering, where dterminers are % dropped). The costly-null is used during panic parsing. % Currently, both have the same cost: using the ordinary null allows % too many sentences to be parsed incorrectly. : [[[()]]]; : [[[()]]]; % NOUNS % The marker-entity is used to identify identity names. % The marker-common-entity is used to identify all common nouns % and adjectives that might appear in entity names: % e.g. "Great Southern Federal Bank and Railroad" or "Aluminum Bahrain" : XXXENTITY+; : XXXGIVEN+; % The RJ links connect to "and"; the l,r prevent cross-linking : RJrc- or RJlc+; : {({@COd-} & (C- or )) or ({@CO-} & (Wd- & {CC+})) or [Rn-]}; : {({@COd-} & (C- or )) or ({@CO-} & (Wd- & {CC+}))}; : {({@COd-} & (C- or )) or ({@CO-} & (Wd- or {CC+})) or Re-}; % Post-nominal qualifiers, complete with commas, etc. : ({[B*j+]} & Xd- & (Xc+ or ) & MX-); : ({[Bsj+]} & Xd- & (Xc+ or ) & MX-); : ({[Bpj+]} & Xd- & (Xc+ or ) & MX-); : ({[Buj+]} & Xd- & (Xc+ or ) & MX-); % noun-main-x -- singular or plural or mass. : (S+ & ) or SI- or J- or O- or or ; % noun-main-s -- singular : (Ss+ & ) or SIs- or Js- or Os- or or ; % noun-main-p -- plural : (Sp+ & ) or SIp- or Jp- or Op- or or ; % noun-main-u -- u == uncountable % TODO: alter this to use Su+, SIu- someday. likewise Buj+ % Doing this requires adding Su- links to many entries : (Ss+ & ) or SIs- or Ju- or Ou- or or ; % noun-main-m -- m == mass % TODO: get rid of this someday. % To get rid of this, any noun that uses this needs to be split into % two: the countable form, which will used and the % uncountable form, which will use : (Ss+ & ) or SIs- or Jp- or Os- or or ; : (Ss*b+ & ) or SIs*b- or Js- or Os- or or ; : J- or O- or or ; : Js- or Os- or or ; % Xd- or [[()]] allows parsing of "I have no idea what that is." % without requiring comma after "idea" : Js- or Os- or ({[Bsj+]} & (Xd- or [[()]]) & (Xc+ or ) & MX-) or ; : Jp- or Op- or or ; : Jp- or Os- or or ; % TO+: "The inability to laugh signifies trouble" % @M+: "The disability of John means he is slow" % XXX wait .. TO+ should only be for mass nouns ?? : {@M+} & {TO+} & {R+ & B+ & {[[@M+]]}} & {@MX+}; : {@M+} & {TO+} & {R+ & Bs+ & {[[@M+]]}} & {@MXs+}; : {@M+} & {TO+} & {R+ & Bp+ & {[[@M+]]}} & {@MXp+}; : {@AN-} & {@A- & {[[@AN-]]}}; % conjoined nouns or noun-phrases. % The l and r prevent two nouns from hooking up directly, they % must hook up to a conjunction (and, or) in the middle. % SJl == connect to left % SJr == connect to right % SJ*s == singular % SJ*p == plural % SJ*u == mass % % M+: "gloom of night and heat will not stop me" % The "of night" can connect to the left noun, but rarely to the right noun % because it should then connect to the "and", not the right noun. % but then: "neither heat nor gloom of night shall stop me" % Looks like only a proper semantic decision can determine the correct parse here ... : ({@M+} & SJls+) or ({[@M+]} & SJrs-) or (Dn- & SJn+); : ({@M+} & SJlp+) or ({[@M+]} & SJrp-) or (Dn- & SJn+); : ({@M+} & SJlu+) or ({[@M+]} & SJru-) or (Dn- & SJn+); : ({@M+} & SJl+) or ({[@M+]} & SJr-) or (Dn- & SJn+); : ({@M+} & SJlp+) or ({[@M+]} & SJrp-) or ({@M+} & SJlu+) or ({[@M+]} & SJru-) or (Dn- & SJn+); : {Rw+} & B*m+; : {Rw+} & Bsm+; : {Rw+} & Bpm+; % The use of Coa here needs to be carefully rexamined; it is used much too freely. : {[[Wi-]]} & ((Xc+ & Ic+) or ({Xd-} & (Xc+ or [[()]]) & [[COa+]])); % Just pure singular entities, no mass nouns % The CAPITALIZED-WORDS rule is triggered by regex matching, and % applies to all capitalized words that are not otherwise found in % the dictionary. % ({[[@MX+]]} & AN+) comes from postposed modifiers: % "Codon 311 (Cys --> Ser) polymorphism" % % We do NOT tag these with , a this messes up first-word % processing in tokenize.c. So for example, we do *not* want "There" % in "There they are" tagged as an entity, just because its capitalized. % We really do want to force the lower-case usage, because the lower case % is in the dict, and its the right word to use. (The only entities that % should be tagged as such are those that are in the dicts, in thier % capitalized form, e.g. "Sue.f" female given name as opposed to "sue.v" % verb in the sentence "Sue went to the store.") % % To help discourage capitalized use when the lower-case is in the dict, % we give a slight cost to [ & (JG- or )] to % discourage use as a common noun, so that the lower-case version can % play this role. % % MX+ & : country names: "...went to Paris, France" % CAPITALIZED-WORDS INITIALS NAME : ({NM+} & ({G-} & {[MG+]} & (({DG- or [[GN-]] or [[@A- & @AN-]] or [[{@A-} & {D-}]]} & ([ & (JG- or )] or or YS+)) or ({[[@MX+]]} & AN+) or G+))) or (MXs+ & ( or )) or ; % Capitalized words that seem to be plural (by ending with an s, etc) % -- But not all words that end with an 's' are plural: % e.g. Cornwallis ... and some of these can take a singular determiner: % "a Starbucks" PL-CAPITALIZED-WORDS: ({NM+} & {G-} & {[MG+]} & (({DG- or [[GN-]] or [[{@A-} & ({Dmc-} or {Ds-})]] } & ([ & (JG- or )] or or YS+ or YP+)) or AN+ or G+)) or ; % capitalized words ending in s % -- hmm .. proper names not used anywhere right now, has slot for plural ... !!?? : ({G-} & {[MG+]} & (({DG- or [[GN-]] or [[{@A-} & {D-}]]} & (({@MX+} & (JG- or )) or (YS+ or YP+))) or AN+ or G+)); % "Tom" is a given name, but can also be a proper name, so e.g. % "The late Mr. Tom will be missed." which needs A-, D- links : {G-} & {[MG+]} & (({DG- or [[GN-]] or [[{@A-} & {D-}]]} & (({@MX+} & {NMr+} & (JG- or or )) or YS+ or YP+)) or AN+ or G+); % Whole, entire entities, cannot participate in G links % because the entire entity has already been identified. : ({DG- or [[GN-]] or [[{@A-} & {D-}]]} & (({@MX+} & ) or or YS+)) or AN+; personID0 personID1 personID2 personID3 personID4 personID5 personID6 personID7 personID8 personID9 personID10 personID11 personID12 personID13 personID14 personID15 personID16 personID17 personID18 personID19 personID20 personID21 personID22 personID23 personID24 personID25 personID26 personID27 personID28 personID29 personID30 personID31 personID32 personID33 personID34 personID35 personID36 personID37 personID38 personID39 personID40 personID41 personID42 personID43 personID44 personID45 personID46 personID47 personID48 personID49 personID50 personID51 personID52 personID53 personID54 personID55 personID56 personID57 personID58 personID59 personID60: or ; organizationID0 organizationID1 organizationID2 organizationID3 organizationID4 organizationID5 organizationID6 organizationID7 organizationID8 organizationID9 organizationID10 organizationID11 organizationID12 organizationID13 organizationID14 organizationID15 organizationID16 organizationID17 organizationID18 organizationID19 organizationID20 organizationID21 organizationID22 organizationID23 organizationID24 organizationID25 organizationID26 organizationID27 organizationID28 organizationID29 organizationID30 organizationID31 organizationID32 organizationID33 organizationID34 organizationID35 organizationID36 organizationID37 organizationID38 organizationID39 organizationID40 organizationID41 organizationID42 organizationID43 organizationID44 organizationID45 organizationID46 organizationID47 organizationID48 organizationID49 organizationID50 organizationID51 organizationID52 organizationID53 organizationID54 organizationID55 organizationID56 organizationID57 organizationID58 organizationID59 organizationID60: or ; locationID0 locationID1 locationID2 locationID3 locationID4 locationID5 locationID6 locationID7 locationID8 locationID9 locationID10 locationID11 locationID12 locationID13 locationID14 locationID15 locationID16 locationID17 locationID18 locationID19 locationID20 locationID21 locationID22 locationID23 locationID24 locationID25 locationID26 locationID27 locationID28 locationID29 locationID30 locationID31 locationID32 locationID33 locationID34 locationID35 locationID36 locationID37 locationID38 locationID39 locationID40 locationID41 locationID42 locationID43 locationID44 locationID45 locationID46 locationID47 locationID48 locationID49 locationID50 locationID51 locationID52 locationID53 locationID54 locationID55 locationID56 locationID57 locationID58 locationID59 locationID60: or ; % Words that are also given names % Cannot take A or D links. % Art Bell Bill Bob Buck Bud % % The bisex dict includes names that can be given to both % men and women. /en/words/entities.given-bisex.sing /en/words/entities.given-female.sing /en/words/entities.given-male.sing: or or ; % Special handling for certain given names. These are words that have a % lower-case analog in the dictionary, and are also used in upper-case % form in an "idiomatic name" e.g. Vatican_City. Without the below, % this use of "City" would prevent it from being recognized in other % (non-idiomatic) proper name constructions, e.g. New York City. /en/words/entities.organizations.sing: or ; /en/words/entities.locations.sing: or ; % % entity IDs (mirror Capitalized-words - a mix of plural and singular) : ({DG- or [[GN-]] or [[{@A-} & {D-}]]} & (({@MX+} & ) or or YS+ or YP+)) or AN+; entityID0 entityID1 entityID2 entityID3 entityID4 entityID5 entityID6 entityID7 entityID8 entityID9 entityID10 entityID11 entityID12 entityID13 entityID14 entityID15 entityID16 entityID17 entityID18 entityID19 entityID20 entityID21 entityID22 entityID23 entityID24 entityID25 entityID26 entityID27 entityID28 entityID29 entityID30 entityID31 entityID32 entityID33 entityID34 entityID35 entityID36 entityID37 entityID38 entityID39 entityID40 entityID41 entityID42 entityID43 entityID44 entityID45 entityID46 entityID47 entityID48 entityID49 entityID50 entityID51 entityID52 entityID53 entityID54 entityID55 entityID56 entityID57 entityID58 entityID59 entityID60: or ; % words.n.4: nouns that can be mass or countable % allocation.n allotment.n alloy.n allure.n alteration.n alternation.n % piano.n flute.n belong here, because of "He plays piano" % This class has now been eliminated: nouns are either singular, plural % or mass. If they can be more than one, then they are listed separately % in each class e.g. words.n.1 and/or words.n.2 and/or words.n.3, etc. : & (({NM+} & AN+) or ({NM+} & {D*u-} & & ( or )) or or (YS+ & {D*u-}) or (GN+ & (DD- or [()])) or Us-); GREEK-LETTER-AND-NUMBER pH.i x.n: ; % Same as pattern used in words.n.4 -- mass nouns or countable nouns : ; % Pattern used for words.n.2.s % Similar to , but with different determiners for number % agreement. : [[AN+]] or ( & (({NM+ or Dmc-} & & ( or )) or ({NM+ or Dmc-} & ) or SJrp- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])) or Up-)); genericID0 genericID1 genericID2 genericID3 genericID4 genericID5 genericID6 genericID7 genericID8 genericID9 genericID10 genericID11 genericID12 genericID13 genericID14 genericID15 genericID16 genericID17 genericID18 genericID19 genericID20 genericID21 genericID22 genericID23 genericID24 genericID25 genericID26 genericID27 genericID28 genericID29 genericID30 genericID31 genericID32 genericID33 genericID34 genericID35 genericID36 genericID37 genericID38 genericID39 genericID40 genericID41 genericID42 genericID43 genericID44 genericID45 genericID46 genericID47 genericID48 genericID49 genericID50 genericID51 genericID52 genericID53 genericID54 genericID55 genericID56 genericID57 genericID58 genericID59 genericID60: or or ; %from words.y year numbers : NMd- or ({EN-} & (NIfn+ or NItn-)) or NN+ or AN+ or ((Xd- & TY- & Xc+) or TY-) or ({EN- or NIc-} & (ND+ or OD- or ({{@L+} & DD-} & ([[Dmcn+]] or (( or TA-) & (JT- or IN- or [[]])))))); dateID0 dateID1 dateID2 dateID3 dateID4 dateID5 dateID6 dateID7 dateID8 dateID9 dateID10 dateID11 dateID12 dateID13 dateID14 dateID15 dateID16 dateID17 dateID18 dateID19 dateID20 dateID21 dateID22 dateID23 dateID24 dateID25 dateID26 dateID27 dateID28 dateID29 dateID30 dateID31 dateID32 dateID33 dateID34 dateID35 dateID36 dateID37 dateID38 dateID39 dateID40 dateID41 dateID42 dateID43 dateID44 dateID45 dateID46 dateID47 dateID48 dateID49 dateID50 dateID51 dateID52 dateID53 dateID54 dateID55 dateID56 dateID57 dateID58 dateID59 dateID60: ; % ??? wtf? Is this like "roman numeral" ?? See I.p for "me" % XXX this is wrong or inappropriate .. % I.n: [[{Xi+} & {G-} & G+]]; % Explicitly include the period at the end of the abbreviation. Ms..x Mrs..x Mr..x Messrs..x Rev..x Dr..x Prof..x Atty..x Gov..x Sen..x Rep..x Gen..x Brig..x Col..x Capt..x Lieut..x Lt..x Maj..x Sgt..x Pvt..x Cmdr..x Adm..x Corp..x St..x Mt..x Ft..x Cie..x HMS..x: G+; % Period is missing in the abbreviation! Accept, but with a cost. Ms.x Mrs.x Mr.x Messrs.x Rev.x Sir.x Dr.x Prof.x Atty.x Gov.x Sen.x Rep.x Gen.x Brig.x Col.x Capt.x Lieut.x Lt.x Maj.x Sgt.x Pvt.x Cmdr.x Adm.x Corp.x St.x Mt.x Ft.x Cie.x HMS.x: [[G+]]; St.y St..y Ave.y Ave..y Av.y Av..y Pl.y Pl..y Ct.y Ct..y Dr.y Dr..y Gr.y Gr..y Rd.y Rd..y Blvd.y Blvd..y Pkwy.y Pkwy..y Hwy.y Hwy..y AG.y Assn.y Assn..y Corp.y Corp..y Co.y Co..y Inc.y Inc..y PLC.y Pty.y Pty..y Ltd.y Ltd..y LTD.y Bldg.y Bldg..y and_Co GmBH.y: G- & {Xi+} & {[MG+]} & (({DG- or [[GN-]] or [[{@A-} & {D-}]]} & (({@MX+} & (JG- or )) or or YS+ or YP+)) or AN+ or G+); % e.g. Joe Blow, Esq. or Dr. Smarty Pants, Ph.D. % Gack. See absurdely large collection at: % http://en.wikipedia.org/wiki/List_of_post-nominal_letters Jr.y Jr..y Sr.y Sr..y Esq.y Esq..y AB.y A.B..y AIA.y A.I.A..y BA.y B.A..y BFA.y B.F.A..y BS.y B.S..y BSc.y B.Sc..y CEng.y CEng..y CFA.y CPA.y CPL.y CSV.y DD.y D.D..y DDS.y D.D.S..y DO.y D.O..y D.Phil..y D.P.T..y Eng.D..y JD.y J.D..y KBE.y K.B.E..y LLD.y LL.D..y MA.y M.A..y MBA.y M.B.A..y MD.y M.D.y MFA.y M.F.A..y MS.y M.S..y MSc.y M.Sc..y OFM.y PE.y P.E..y Pharm.D..y PhD.y Ph.D.y Ph.D..y RA.y R.A..y RIBA.y R.I.B.A..y RN.y R.N..y USMC.y USN.y: {Xi+} & {Xd- & {Xc+}} & G- & {[MG+]} & (({DG- or [[GN-]] or [[{@A-} & {D-}]]} & (({@MX+} & (JG- or )) or or YS+ or YP+)) or AN+ or G+); HYPHENATED-WORDS.n: [[({@AN-} & {@A-} & (({NM+ or D-} & (( & ( or )) or )) or U-)) or ((YS+ or YP+) & {@AN-} & {@A-} & {D-})]]; % the generic category for strings containing a hyphen % NOUNS -------------------------------------------------------- % Nouns typically take determiners (a, the). The minor flags are: % D link: determiners: D1234 % position 1 can be s, m for singular, mass % position 2 can be c for count, u for uncountable % position 3 can be k,m,y for comparatives, w for questions. % words.n.1: Common nouns % activist.n actor.n actress.n actuary.n ad.n adage.n adagio.n adapter.n % The naked SJr- allows article to be skipped in conjunction (and,or) % constructions ("the hammer and sickle") : & (AN+ or ((NM+ or ({[NM+]} & (Ds- or ))) & (( & ( or )) or )) or SJrs- or (YS+ & Ds-) or (GN+ & (DD- or [()])) or Us-); /en/words/words.n.1 /en/words/words.n.1.wiki : or ; % Common plural nouns ending in "s" % allocations.n allotments.n allowances.n alloys.n allures.n allusions.n /en/words/words.n.2.s /en/words/words.n.2.s.wiki : or ; /en/words/words.n.2.s.biolg: ; PL-GREEK-LETTER-AND-NUMBER: ; % plural nouns not ending in "s" % aircraft.p bacteria.p bellmen.n buffalo.p businessmen.n chairmen.n /en/words/words.n.2.x /en/words/words.n.2.x.wiki : or ( & ([[AN+]] or ({NM+ or Dmc-} & (( & ( or )) or )) or (YS+ & {Dmc-}) or (GN+ & (DD- or [()])) or Up-)); % XXX should probably eliminate and replace by % but this requires other spread-out changes : or ( & (AN+ or ({NM+ or Dmu-} & (( & ( or )) or )) or (YS+ & {Dmu-}) or (GN+ & (DD- or [()])) or Up-)); % nouns that are mass only % absolutism.n absorption.n abstinence.n abundance.n academia.n /en/words/words.n.3: ; % Want to cost this so that it doesn't interfere with given name "Tom". tom.n-u: []; % Nouns that are also adjectives (e.g. red.n) and so we don't want to % allow these to take AN+ links. We need these as nouns, so as to % parse 'she prefers red'. However, assign a cost, so that 'her shoes % are red' gets red.a perfered over red.n. % [[Ds-]] to allow: "The house was painted a fading yellow" % % Doesn't seem to need a noun-and-x to make this work ... auburn.n black.n blue.n brown.n green.n gray.n pink.n purple.n red.n tawny.n ultramarine.n yellow.n: or ( & ((({Dmu- or [[Ds-]]}) & & ([ or ])) or (YS+ & {Dmu-}) or (GN+ & (DD- or [()])) or Up-)); % US state names and abbreviations % NM N.M. NY N.Y. NC N.C. ND N.D. Ohio Okla. /en/words/entities.us-states.sing: or ({G-} & {DG- or [[GN-]] or [[{@A-} & {D-}]]} & (({MG+} & {@MX+} & (JG- or or )) or G+ or ({[[MG+]]} & (AN+ or YS+ or YP+)))) or (Xc+ & Xd- & G- & AN+); % SINGULAR ENTITIES FOR ENTITY EXTRACTION % This must appear after other categories so it doesnt interfere with those. /en/words/entities.national.sing: or ; % Enable parsing of "Mother likes her" aunt.f auntie.f brother.m dad.m daddy.m father.m grandmother.f granny.f granddad.m grandfather.m grandpa.f grandpop.m mom.f mommy.f mother.f pop.m papa.m poppy.m pops.m sis.f sister.f uncle.m: ; alter_ego au_pair mise_en_scene faux_pas non_sequitur fait_accompli modus_vivendi head_of_state tour_de_force: ( & ((Ds- & & ( or )) or ({Ds-} & ) or Us- or (YS+ & Ds-) or (GN+ & (DD- or [()])))) or AN+; kung_fu joie_de_vivre op_art noblesse_oblige lese_majesty a_must time_of_day time_of_year force_majeure top_dollar year_end skim_milk breach_of_contract sleight_of_hand power_of_attorney word_of_mouth carte_blanche: ( & (({Dmu-} & & ( or )) or ({Dmu-} & ) or Um- or (YS+ & {Dmu-}) or (GN+ & (DD- or [()])))) or AN+; % title nouns (president, chairman) % auditor.t bailiff.t broker.t buyer.t candidate.t captain.t cardinal.t /en/words/words.n.t: & {@M+} & (BIt- or (Xd- & (Xc+ or ) & MX-) or TI-); % Almost identical to below. majority.n minority.n bunch.n batch.n bulk.n handful.n group.n: ( & ((Ds- & & ( or B*x+)) or ({Ds-} & ) or Us- or (YS+ & Ds-) or (GN+ & (DD- or [()])))) or AN+; % Almost identical to above. number.n: ( & ((Ds- & {NM+} & & ( or B*x+)) or ({Ds-} & {NM+} & ) or Us- or (YS+ & Ds-) or (GN+ & (DD- or [()])))) or AN+; % number appreviations: no.x No.x No.x no.x Num.x num.x: (Xi+ or [[()]]) & AN+; kind_of: ({{@AN-} & @A-} & U+ & ((Ds- & & ( or )) or ({Ds-} & ) or Us-)) or EA+ or EE+; type_of sort_of breed_of: {{@AN-} & @A-} & U+ & ((Ds- & & ( or )) or ({Ds-} & ) or Us-); kinds_of types_of sorts_of breeds_of: {{@AN-} & @A-} & U+ & (({Dmc-} & & ( or )) or ({Dmc-} & ) or Up-); percent.u: ( & ((ND- & {DD-} & & ( or B*x+)) or (ND- & {DD-} & ) or U-)) or (ND- & (OD- or AN+ or YS+)); % This set of disjuncts should probably be split up and refined. % "shame.n", "crux.n" are here because they need the Ss*t connector % to pick up "that" in "The crux of it is that we must act first." % However, report.n and sign.n and remark.n, etc. do not seem to % need this connector ... argument.n report.n sign.n impression.n conclusion.n complaint.n allegation.n announcement.n position.n restriction.n notion.n remark.n assertion.n proclamation.n reassurance.n saying.n accusation.n possibility.n idea.n problem.n claim.n result.n statement.n hunch.n assumption.n concept.n hypothesis.n implication.n message.n premonition.n prerequisite.n indication.n truism.n fallacy.n proposition.n prospect.n presupposition.n inkling.n supposition.n finding.n amount.n answer.n crux.n shame.n: ( & ((Ds- & {@M+} & {(TH+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or (Ss*t+ & ) or SIs*t- or )) or ({Ds-} & ) or Us- or (YS+ & Ds-) or (GN+ & (DD- or [()])))) or AN+; proof.n doubt.n suspicion.n hope.n knowledge.n relief.n disclosure.n fear.n acknowledgment.n acknowledgement.n principle.n concern.n philosophy.n risk.n threat.n understanding.n conviction.n theory.n assurance.n speculation.n awareness.n news.n opinion.n belief.n contention.n thought.n myth.n discovery.n rumor.n probability.n fact.n explanation.n feeling.n comment.n expectation.n perception.n sense.n realization.n view.n insistence.n consensus.n notification.n rule.n danger.n warning.n suggestion.n: ( & (({D*u-} & {@M+} & {(TH+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or (Ss*t+ & ) or SIs*t- or )) or ({D*u-} & ) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; evidence.n reasoning.n likelihood: ( & (({Dmu-} & {@M+} & {(TH+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or (Ss*t+ & ) or SIs*t- or )) or ({Dmu-} & ) or Up- or (YS+ & {Dmu-}) or (GN+ & (DD- or [()])))) or AN+; ideas.n opinions.n statements.n beliefs.n facts.n arguments.n principles.n theories.n philosophies.n signs.n impressions.n conclusions.n contentions.n complaints.n proofs.n doubts.n suspicions.n allegations.n reports.n claims.n announcements.n positions.n risks.n hopes.n explanations.n restrictions.n threats.n thoughts.n myths.n feelings.n discoveries.n rumors.n comments.n realizations.n probabilities.n remarks.n notions.n convictions.n hunches.n assumptions.n concepts.n hypotheses.n assertions.n expectations.n implications.n perceptions.n proclamations.n reassurances.n fears.n sayings.n senses.n messages.n disclosures.n accusations.n views.n concerns.n understandings.n acknowledgments.n acknowledgements.n possibilities.n premonitions.n prerequisites.n provisos.n truisms.n fallacies.n assurances.n speculations.n propositions.n prospects.n presuppositions.n inklings.n suppositions.n findings.n amounts.n rules.n dangers.n warnings.n indications.n answers.n suggestions.n: ( & (({Dmc-} & {@M+} & {(TH+ or (R+ & Bp+)) & {[[@M+]]}} & {@MXp+} & ( or (Sp*t+ & ) or SIp*t- or )) or ({Dmc-} & ) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or [[AN+]]; request.n requirement.n condition.n recommendation.n provision.n stipulation.n: ( & (({D*u-} & {@M+} & {(TH+ or TS+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or (Ss*t+ & ) or SIs*t- or )) or ({D*u-} & ) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; requests.n requirements.n conditions.n recommendations.n provisions.n stipulations.n: ( & (({Dmc-} & {@M+} & {(TH+ or TS+ or (R+ & Bp+)) & {[[@M+]]}} & {@MXp+} & ( or (Sp*t+ & ) or SIp*t- or )) or ({Dmc-} & ) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or [[AN+]]; excuse.n decision.n proposal.n attempt.n plan.n plot.n pledge.n urge.n mission.n right.n desire.n mandate.n promise.n option.n campaign.n offer.n vow.n permit.n impetus.n proclivity.n propensity.n move.n vote.n bill.n: ( & ((Ds- & {@M+} & {(TOn+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or )) or ({Ds-} & ) or Us- or (YS+ & Ds-) or (GN+ & (DD- or [()])))) or AN+; failure.n haste.n refusal.n reluctance.n pressure.n willingness.n responsibility.n intent.n temptation.n readiness.n effort.n determination.n capacity.n unwillingness.n need.n will.n eagerness.n opportunity.n commitment.n ambition.n ability.n order.n obligation.n incentive.n: ( & (({D*u-} & {@M+} & {(TOn+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or )) or ({D*u-} & ) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; excuses.n decisions.n proposals.n failures.n efforts.n attempts.n refusals.n pledges.n urges.n missions.n rights.n desires.n needs.n ambitions.n capacities.n mandates.n promises.n abilities.n options.n commitments.n intents.n opportunities.n plans.n plots.n responsibilities.n chances.n campaigns.n offers.n pressures.n obligations orders.n temptations.n vows.n permits.n impetuses.n proclivities.n propensities.n moves.n votes.n bills.n incentives.n: ( & (({Dmc-} & {@M+} & {(TOn+ or (R+ & Bp+)) & {[[@M+]]}} & {@MXp+} & ( or )) or ({Dmc-} & ) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or [[AN+]]; chance.n: ( & (({D*u-} & {@M+} & {(TOn+ or TH+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or )) or ({D*u-} & ) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; question.n issue.n: ( & ((Ds- & {@M+} & {R+ & Bs+ & {[[@M+]]}} & {@MXs+} & ( or (Ss*q+ & ) or SIs*q- or )) or ({Ds-} & ) or Us- or (YS+ & Ds-) or (GN+ & (DD- or [()])))) or AN+; questions.n issues.n: ( & (({Dmc-} & {@M+} & {R+ & Bp+ & {[[@M+]]}} & {@MXp+} & ( or (Sp*q+ & ) or SIp*q- or )) or ({Dmc-} & ) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or AN+; reason.n: ( & (({D*u-} & {@M+} & {TH+ or Ce+ or TOn+ or WY+ or (R+ & Bs+)} & {@MXs+} & ( or (Ss*t+ & ) or SIs*t- or )) or ({D*u-} & ) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; reasons.n: ( & (({Dmc-} & {@M+} & {TH+ or Ce+ or TOn+ or WY+ or (R+ & Bp+)} & {@MXp+} & ( or )) or ({Dmc-} & ) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or [[AN+]]; way.n: ( & ((Ds- & {@M+} & {TOn+ or TH+ or Ce+ or (R+ & Bs+)} & {@MXs+} & (MVa- or or )) or ({Ds-} & ) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; place.n: ( & ((Ds- & {@M+} & {TOn+ or TH+ or Ce+ or (R+ & Bs+)} & {@MXs+} & ([[MVa-]] or or )) or ({Ds-} & ) or or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; time.n: ( & (({D*u-} & {@M+} & {TOn+ or WN+ or TH+ or Ce+ or (R+ & Bs+)} & {@MXs+} & ([[MVa-]] or or )) or ({D*u-} & ) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; ways.n: ( & (({Dmc-} & {@M+} & {TOn+ or TH+ or Ce+ or (R+ & Bp+)} & {@MXp+} & (MVa- or or )) or ({Dmc-} & ) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or [[AN+]]; places.n: ( & (({Dmc-} & {@M+} & {TOn+ or TH+ or Ce+ or (R+ & Bp+)} & {@MXp+} & ([[MVa-]] or or )) or ({Dmc-} & ) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or [[AN+]]; times.n: ( & (({Dmc-} & {@M+} & {TOn+ or WN+ or TH+ or Ce+ or (R+ & Bp+)} & {@MXp+} & ([[MVa-]] or or )) or ({Dmc-} & ) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or [[AN+]]; %PRONOUNS she he: {[[R+ & Bs+]]} & ((Ss+ & ) or SIs- or SJls+ or (Dn- & SJn+)); % The E- is for "It's either us or them" ... not ideal, but OK me him them us: J- or Ox- or ({[[E-]]} & SJl+) or SJr-; myself yourself himself herself itself themselves ourselves yourselves: J- or O- or E+ or MVa-; each_other: J- or O- or YS+; her.d: ({AL-} & {@L+} & (D+ or DD+)) or DP+; her.p: J- or Ox-; its my your their our: ({AL-} & {@L+} & (D+ or DD+)) or DP+; his: DP+ or ({AL-} & {@L+} & (D+ or DD+)) or []; you: J- or Ox- or (Sp+ & ) or SIp- or SJlp+ or (Dn- & SJn+); it: J- or Ox- or ((Ss+ or SFsi+) & ) or SIs- or SFIsi- or OXi- or Vp- or SJls+ or SJrs- or (Dn- & SJn+); % O*c: "we will go faster than they" they: ({[[R+ & Bp+]]} & ((Sp+ & ) or SIp-)) or Ox- or SJlp+ or SJrp- or (Dn- & SJn+); we: (Sp+ & ) or Ox- or SIp- or SJlp+ or SJrp- or (Dn- & SJn+); % XXX why is this marked plural (Sp, SIp) ?? a cheap hack to make I've work? % We use here to prevent lower-case magnling by % the tokenizer. % SJrp-: allows only "...and I", disallows "I and ..." % Ds- & SJl+: "Either I or ..." % Dn- & SJn+: "Neither I not ..." I.p: or ((Sp*i+ or SX+) & ) or SIp*i- or SJr- or (Ds- & SJl+) or (Dn- & SJn+) or SXI-; them_all us_all you_all: Ox- or J-; % it_all gets a cost when used as direct object (Ox) to avoid % inappropriate parse "Please paint it all white" it_all: [[Ox-]] or J-; %we're they're I'm you're: %(({@EBm+} & (((O*t+ or K+ or BI+ or OF+ or Pp+) & {@MV+}) or TO+ or Pa+)) or %({N+} & (Pg+ or Pv+))) & ; ’m 'm: SX- & (({@EBm+} & (((O*t+ or K+ or BI+ or OF+ or Pp+) & {@MV+}) or TO+ or Pa+)) or ({N+} & (Pg+ or Pv+))); ’re 're: Spx- & (({@EBm+} & (((O*t+ or K+ or BI+ or OF+ or Pp+) & {@MV+}) or TO+ or Pa+)) or ({N+} & (Pg+ or Pv+))); %I've they've you've we've: PP+ & ; ’ve 've: Sp- & PP+; %we'd they'd I'd he'd she'd you'd: (PP+ or ({Vw+} & I+)) & ; %I'll he'll she'll we'll they'll you'll it'll: I+ & ; ’d 'd: S- & (PP+ or I+); ’ll 'll: S- & I+; something someone somebody: {EL+} & (({Pa+} & & {@MXs+} & ) or or YS+); nothing no_one nobody: {EN-} & {EL+} & (({Pa+} & & {@MXs+} & ) or or YS+); everything everyone anyone everybody anybody anything: {EN-} & {EL+} & (((({Pa+} & ) or CX+) & {@MXs+} & ) or or YS+); else: EL-; others: {Dmc-} & (( & ) or ); mine.p yours theirs hers ours: or SJl+ or SJr- or (Dn- & SJn+); % DETERMINERS % (L+ & (AJld+ or AJrd-)): "the biggest and the baddest ..." the: ({AL-} & {@L+} & (D+ or DD+)) or DG+ or (TR- & U+) or (L+ & (AJld+ or AJrd-)); those: ({AL-} & (Dmc+ or DD+)) or ( & ( or RJlr+ or RJrr-)) or ; this.p: or ; this.d: ({AL-} & D*u+) or DTn+; these: or or ({AL-} & (Dmc+ or DD+)); both.d: Dmc+ or E+ or ({M+ or (ALx+ & Jp+)} & ) or ; both.a: Paf- or AJra-; % half: prefer NJ+ over noun-main-x, because half is almost surely % modifying something, instead of being a direct object, subject, etc. half: {EN-} & (NJ+ or [(({DD-} & {@Mp+ or (R+ & B+)}) or (AL+ & J+)) & ]); % "How many years" -- prefer TQ+ over Dmc+ many: (H- & ([[Dmc+]] or ND+ or NIn+ or TQ+)) or (AM- & (Dmcy+ or Oy- or Jy-)) or ({EE-} & (ND+ or NIn+)) or ({DD-} & {EAx-} & Dmc+) or ((({EAx-} & {DD-}) or H-) & & ( or )); all.a: ({EN-} & (E+ or Dm+ or NIc+ or ({@M+ or (ALx+ & (Jp+ or Ju+)) or (R+ & B+) or EL+} & ( or (S**t+ & ) or SI**t-)) or )) or DTa+; all_that: EA+ or EE+ or ( & ); all_this: ( & ) or ; all_those all_these: ( & ) or ; one: NA+ or NMw- or NN+ or ({EN-} & NIfn+) or ({NA-} & {EN-} & (({DD-} & Ds+) or ({{@A- & {[[@AN-]]}} & Ds-} & (YS+ or ( & ( or )) or )))) or NIm+ or NSn+ or (NA- & ND+) or DTi+ or (NA- & Xd- & TY- & Xc+); ones: {@A- & {[[@AN-]]}} & {Dmc-} & (YP+ or ( & ) or ); any: ({EN-} & (D+ or DD+ or ( & ) or )) or EC+; % XXX why doesn't this clash with a.eq ?? a an: ({(AA- & HA-) or ALa- or [[Lf+]]} & Ds+) or NN+ or NSa+ or NIm+; such: (ND- & Dmc+) or Dm*k+; such_a such_an: Ds*k+; % "all of the time". These are all temporal modifiers: use MVw ("when") : MVw- & OF+; a_lot: ( & ) or or EC+ or MVa- or ; few: {EA- or EF+ or ({EA-} & DD-)} & (Dmc+ or ( & ) or ); a_couple: ( & ) or ; a_couple_of: NN+ or ND+ or NIn+; a_few: NN+ or ND+ or NIn+ or ({EN-} & (Dmc+ or ND+ or NIn+ or ( & ))); some: D+ or EN+ or MF+ or ( & ) or or ; little.i: ({EE-} & (MVa- or Ca+ or Qe+)) or ({EEx- or H-} & (Dmu+ or ( & ( or )) or )) or (AM- & (Dmuy+ or MVy- or Oy- or Jy-)) or ({Ds-} & ); % "he likes you most" has no determiner, just uses MVa-. most: Dm+ or [EE+] or EA+ or MF+ or ( & ) or or or [{DD-} & MVa- & {Mp+}]; part.i: (OF+ & ) or or ({Ds-} & ); all.e: ; the_most: MVa- or EE+ or Dm+ or ( & ); % "he likes you least of all" has no determiner, just uses MVa-. least.a: EA+; least.e: {DD-} & MVa- & {Mp+}; none: ( & ) or or ; % rest.i: DG ??? huh? what's the example ?? rest.i: (DG- & & ) or (DD- & ); plenty: ({@M+} & ( or )) or or [MVa-]; other: Dmu+ or ({ND-} & {DD-} & Dmc+) or (DD- & (Ds+ or DD+ or or )); one_other every_other: or or Ds+; any_other no_other: or or D+; all_other: Dm+; most_other: Dmc+; quite_a quite_an one_such not_every: Ds+; some_other no_such: D+; every.d: {EN-} & (Ds+ or DTn+ or [[NIc+]]); another: Ds+ or NIc+ or ( & ) or or YS+; one_another: ( & ) or or YS+; each: Ds+ or ( & ) or or DTn+ or E+ or MVa-; no.misc-d: ({EN-} & D+) or EC+; a_little: Dmu+ or ( & ) or or EA+ or EC+ or EE+ or MVa-; a_great_deal: EC+ or MVa- or ( & ) or ; many_more a_few_more a_couple_more plenty_more a_lot_more: Dmcc+ or ( & ) or ; some_more: MVa- or Dm+ or ( & ) or ; one_more: Ds+ or ( & ) or ; not_many: Dmc+ or ( & (Sp+ & )); not_all not_everything: Dm+ or (((ALx+ & Jp+) or ) & (S+ & )); not_one: Ds+ or ( & (Ss+ & )); enough.n: ({OF+} & ) or ; enough.r: EF- or MVa-; enough.a: ({@E-} & Pa- & {Pg+ or Os+ or @MV+}) or ({@E-} & Dm+); enough.ij: Wi- & {Pg+}; not_enough: ({OF+} & ) or or Dm+; % NUMERICAL EXPRESSIONS % Numeric ranges, e.g. "15 to 20". The "to" (or hyphen) acts as a % number in a range, and the requirements should match NUMBER. % The NIf connectors (second subscript position is "n" for number % and "u" for unit) allow "15 to 20", "15 to 20 kDa" and % "15 kDa to 20 kDa", but not "15 kDa to 20". % Allowing EC+ for "two to threefold more abundant". This allows also the % nonsense "two to three more abundant", but this is likely harmless. -.j-ru --.j-ru ---.j-ru or.j-ru to.j-ru ->.j-ru -->.j-ru: (NIfn- & {NIr-} & NItn+ & (NM- or EC+ or (NN+ or [[NF+]] or ({EN- or NIc-} & (ND+ or OD- or ({{@L+} & DD-} & (Dmcn+ or ( & [])))))))) or (NIfu- & {NIr-} & NItu+ & ((( & ( or Bsm+)) or (Us- & {Mp+})) or AN+ or Yd+ or Ya+)) or (NIfp- & {NIr-} & NItp+ & (NM- or AN+ or ({Xc+ & Xd-} & Ma-) or (Wq- & PF+) or MVp- or Pp- or FM- or (Xc+ & Xd- & (MVx- or MX-)))); and.j-ru: (NIfn- & {NIr-} & NItn+ & (NM- or (NN+ or [[NF+]] or ({EN- or NIc-} & (ND+ or OD- or ({{@L+} & DD-} & (Dmcn+ or ( & [])))))))) or (NIfu- & {NIr-} & NItu+ & ((( & ( or Bsm+)) or (Us- & {Mp+})) or AN+ or Yd+ or Ya+)); % and.j-sum is used in numerical sums: "It's a hundred and two in the shade." % It's a hundred 'n two in the shade." and.j-sum 'n.j-sum: NA- & NA+; % For number, cost is added to the roles to prioritize % postmodifier and numeric determiner roles. two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twenty-one twenty-two twenty-three twenty-four twenty-five twenty-six twenty-seven twenty-eight twenty-nine thirty thirty-one thirty-two thirty-three thirty-four thirty-five thirty-six thirty-seven thirty-eight thirty-nine forty forty-one forty-two forty-three forty-four forty-five forty-six forty-seven forty-eight forty-nine fifty fifty-one fifty-two fifty-three fifty-four fifty-five fifty-six fifty-seven fifty-eight fifty-nine sixty sixty-one sixty-two sixty-three sixty-four sixty-five sixty-six sixty-seven sixty-eight sixty-nine seventy seventy-one seventy-two seventy-three seventy-four seventy-five seventy-six seventy-seven seventy-eight seventy-nine eighty eighty-one eighty-two eighty-three eighty-four eighty-five eighty-six eighty-seven eighty-eight eighty-nine ninety ninety-one ninety-two ninety-three ninety-four ninety-five ninety-six ninety-seven ninety-eight ninety-nine oh-one oh-two oh-three oh-four oh-five oh-six oh-seven oh-eight oh-nine o-one o-two o-three o-four o-five o-six o-seven o-eight o-nine zero-one zero-two zero-three zero-four zero-five zero-six zero-seven zero-eight zero-nine several: NA+ or NMw- or ({EN-} & (NIfn+ or NItn-)) or NN+ or NW+ or ({EN- or NIc- or NA-} & (ND+ or NIn+ or ({{@L+} & DD-} & (Dmc+ or ( & []))))) or (NA- & { & }) or (NA- & Xd- & TY- & Xc+); oh.zero: (NA- & NA+); zero.n: (NA- & NA+) or NN+ or Ds+ or ( & ); % the generic "number" category % AN+ is needed for date-ranges % FRACTIONS are simple fractions % Ditto for fractions ... % Not clear why we use Dmcn+ here, instead of allowing nouns to take ND- % as effectively Dmcn and ND are the "same thing" more or less. NUMBERS FRACTION: NMn- or ({EN-} & (NIfn+ or NItn-)) or NN+ or [[NF+]] or [[AN+]] or ({EN- or NIc-} & (ND+ or NIn+ or OD- or ({{@L+} & DD-} & (Dmcn+ or ( & []))))) or EQt+ or EQt-; % HMS-TIME consists of HH:MM:SS(AM|PM) type expressions % and should probably have a narrower set of parse patterns than numbers in % general. e.g. should not have EQ links XXX todo -- fix this. HMS-TIME: NUMBERS & {TZ+}; % Allowing postposed roman numerals only for now. % e.g "Pope Pious XII" ROMAN-NUMERAL-WORDS.rn: NMr-; % nouns that look like roman numerals. Limited requirements to avoid % excessive ambiguity. ROMAN-NUMERAL-WORDS.n: {@MX+} & (); % Allow post-posed letter moifiers: e.g. "Vitamin A" A.id B.id C.id D.id E.id F.id G.id H.id J.id K.id L.id M.id N.id O.id P.id Q.id R.id S.id T.id U.id V.id W.id X.id Y.id Z.id: NMa-; % Avoid having I.id interfere with pronoun I. I.id: [[NMa-]]; % Days of month % Note, however, this over-rides generic numbers in this range % and so is a superset of the generic numbers disjuncts % The following should match NUMBERS with the addition of "or TM-". 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: NUMBERS or TM- or [[G+]]; % Ordinals - day-of-month expressions. % Used only in espressions such as "December 2nd" % Must use regex here as well, to avoid conflict with other regexes first.ti second.ti third.ti fourth.ti fifth.ti sixth.ti seventh.ti eighth.ti ninth.ti tenth.ti eleventh.ti twelfth.ti thirteenth.ti fourteenth.ti fifteenth.ti sixteenth.ti seventeenth.ti eighteenth.ti nineteenth.ti twentieth.ti twenty-first.ti twenty-second.ti twenty-third.ti twenty-fourth.ti twenty-fifth.ti twenty-sixth.ti twenty-seventh.ti twenty-eighth.ti twenty-ninth.ti thirtieth.ti thirty-first.ti DAY-ORDINALS.ti: TM-; % Years w/o apostrophe: e.g. 47 Ford Fairlane or 57 Chevy 01 02 03 040 05 06 07 08 09: or [[G+]]; 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99: NUMBERS or or [[G+]]; % year numbers % 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 /en/words/words.y: or [[G+]]; % Years: e.g. '47 Ford Fairlane or '57 Chevy '00 '01 '02 '03 '04 '05 '06 '07 '08 '09 '10 '11 '12 '13 '14 '15 '16 '17 '18 '19 '20 '21 '22 '23 '24 '25 '26 '27 '28 '29 '30 '31 '32 '33 '34 '35 '36 '37 '38 '39 '40 '41 '42 '43 '44 '45 '46 '47 '48 '49 '50 '51 '52 '53 '54 '55 '56 '57 '58 '59 '60 '61 '62 '63 '64 '65 '66 '67 '68 '69 '70 '71 '72 '73 '74 '75 '76 '77 '78 '79 '80 '81 '82 '83 '84 '85 '86 '87 '88 '89 '90 '91 '92 '93 '94 '95 '96 '97 '98 '99: or [[G+]]; 1: NMn- or ({EN-} & (NIfn+ or NItn-)) or NN+ or [[NF+]] or ({EN- or NIc-} & (ND+ or NIm+ or OD- or ({{@L+} & DD-} & (D**n+ or ( & []))))) or TM- or NSn+ or EQt+ or EQt-; %%%%% or [[G- & (({MXs+} & ) or G+ or AN+ or YS+)]] 0: NMn- or ({EN-} & (NIfn+ or NItn-)) or NN+ or [[NF+]] or ({EN- or NIc-} & (ND+ or NIn+ or OD- or ({{@L+} & DD-} & (Dmcn+ or [[Ds+]] or ( & []))))) or NSn+; %%%%% or [[G- & (({MXs+} & ) or G+ or AN+ or YS+)]] % TODO: no numers or related expressions below this point take the new NM % connector, although e.g. "point 1/2" would appear reasonable. Go through % these and add NM- analogously to other numbers as applicable. % the DECADE-TIME regex matches 1950s 1950's 1950’s etc. DECADE-TIME '20s '30s '40s '50s '60s '70s '80s '90s ‘20s ‘30s ‘40s ‘50s ‘60s ‘70s ‘80s ‘90s: {TA-} & DG- & (IN- or [[]]); twenties thirties, forties fifties sixties seventies eighties nineties hundreds.cnt: {NA-} & {TA-} & DG- & (IN- or [[]]); % teens could be above or teenagers (words.n.2) teens: ({TA-} & DG- & (IN- or )) or ; hundred thousand half-thousand million half-million quarter-million billion half-billion quarter-billion trillion half-trillion quarter-trillion dozen half-dozen bajillion bazillion gadzillion gagillion gajillion gazillion godzillion jillion jizillion kabillion kajillion katrillion killion umptillion zillion: NN- & (NNy+ or NMw- or NA+ or ({EN- or NIc-} & (ND+ or NIn+ or OD- or ({{@L+} & DD-} & (Dmcn+ or ( & )))))); half_a_dozen half_a_million: ({EN- or NIc-} & (ND+ or NIn+ or OD- or ({{@L+} & DD-} & (Dmcn+ or ( & ))))); hundreds.a thousands millions billions trillions dozens bajillions bazillions gadzillions gagillions gajillions gazillions godzillions jillions jizillions kabillions kajillions katrillions killions umptillions zillions: ({DD- or Dmc-} & & ); tens: {DD-} & OF+ & ; dozens_of tens_of hundreds_of thousands_of millions_of billions_of trillions_of bajillions_of bazillions_of gadzillions_of gagillions_of gajillions_of gazillions_of godzillions_of jillions_of jizillions_of kabillions_of kajillions_of katrillions_of killions_of umptillions_of zillions_of: ND+ or NIn+; 1/2 3/4 2/3 1/3 1/4 1/8 3/8 5/8 7/8 ½ ⅓ ⅔ ¼ ¾ ⅛ ⅜ ⅝ ⅞: ({NNx-} & NNy+) or NF+ or NIe+ or ({NNx-} & {EN- or NIc-} & (ND+ or NIn+ or OD- or ({DD-} & ([[Ds+]] or Dmcn+ or ( & ))))); and_a_half: (NW- or NSn-) & (NNy+ or ({EN- or NIc-} & (ND+ or NIn+ or ({DD-} & (Dmcn+ or ( & )))))); quarter.i: NS- & {EN-} & (NF+ or ( & )); thirds.m fourths.m quarters.m fifths.m sixths.m sevenths.m eighths.m ninths.m tenths.m: NW- & {EN-} & (NF+ or ( & )); first.a: L- or Pa- or E+ or MVa- or ({Xc+ & {Xd-}} & CO+) or A+ or [Jp-] or TT+ or ((DD- or [[NSa-]]) & & {TOn+} & ); last.a dead_last: L- or Pa- or MVa- or ({Xc+ & {Xd-}} & CO+) or [Jp-] or DTi+ or TT+ or (DD- & & {TOn+} & ) or A+; second.a: L- or Pa- or MVa- or ({Xc+ & {Xd-}} & CO+) or (DD- & & {TOn+} & ) or NR+ or A+; % This uses the L link for superlatives, but leads to strange parses: % "We celebrated their eleventh anniversary" parses differently % than "tenth anniversary". XXX this should be fixed, I suppose ... % A+: "fifteenth century Italy" % Jp-: "Mike finished in first place, and John in third." third.a fourth.a fifth.a sixth.a seventh.a eighth.a ninth.a tenth.a : L- or Pa- or MVa- or ({Xc+ & {Xd-}} & CO+) or (NS- & {EN-} & NF+) or (((NS- & & {EN-}) or (DD- & & {TOn+})) & ) or NR+ or A+ or Jp-; % NS-: "I gave him a third of the loot." eleventh.a twelfth.a thirteenth.a fourteenth.a fifteenth.a sixteenth.a seventeenth.a eighteenth.a nineteenth.a twentieth.a twenty-first.a twenty-second.a twenty-third.a twenty-fourth.a twenty-fifth.a twenty-sixth.a twenty-seventh.a twenty-eighth.a twenty-ninth.a thirtieth.a thirty-first.a thirty-second.a thirty-third.a thirty-fourth.a thirty-fifth.a thirty-sixth.a thirty-seventh.a thirty-eighth.a thirty-ninth.a fourtieth.a fourty-first.a fourty-second.a fourty-third.a fourty-fourth.a fourty-fifth.a fourty-sixth.a fourty-seventh.a fourty-eighth.a fourty-ninth.a fiftieth.a fifty-first.a fifty-second.a fifty-third.a fifty-fourth.a fifty-fifth.a fifty-sixth.a fifty-seventh.a fifty-eighth.a fifty-ninth.a sixtieth.a sixty-first.a sixty-second.a sixty-third.a sixty-fourth.a sixty-fifth.a sixty-sixth.a sixty-seventh.a sixty-eighth.a sixty-ninth.a seventieth.a seventy-first.a seventy-second.a seventy-third.a seventy-fourth.a seventy-fifth.a seventy-sixth.a seventy-seventh.a seventy-eighth.a seventy-ninth.a eightieth.a eighty-first.a eighty-second.a eighty-third.a eighty-fourth.a eighty-fifth.a eighty-sixth.a eighty-seventh.a eighty-eighth.a eighty-ninth.a ninetieth.a ninety-first.a ninety-second.a ninety-third.a ninety-fourth.a ninety-fifth.a ninety-sixth.a ninety-seventh.a ninety-eighth.a ninety-ninth.a: Pa- or MVa- or ({Xc+ & {Xd-}} & CO+) or (NS- & {EN-} & NF+) or (((NS- & & {EN-}) or (DD- & & {TOn+})) & ) or NR+ or A+ or Jp-; % Miscellaneous ordinal numbers, adjectival usage % prefer G+ over A+ in general, as these are typically parts of names. 1º.a 2º.a 3º.a 4º.a 5º.a 6º.a 7º.a 8º.a 9º.a DAY-ORDINALS.a ORDINALS.a: Pa- or MVa- or ({Xc+ & {Xd-}} & CO+) or (DD- & & {TOn+} & ) or NR+ or G+ or [A+] or AJla+ or ({Ds-} & AJra-) or (Dn- & AJn+); % "Next on our list..." are ordinals. % XXX should be converted to regex... % Note also another list of ordinals below, used for time expressions. first.ord next.ord last.ord second.ord third.ord fourth.ord fifth.ord sixth.ord seventh.ord eighth.ord ninth.ord tenth.ord eleventh.ord twelfth.ord thirteenth.ord fourteenth.ord fifteenth.ord sixteenth.ord seventeenth.ord eighteenth.ord nineteenth.ord twentieth.ord twenty-first.ord twenty-second.ord twenty-third.ord twenty-fourth.ord twenty-fifth.ord twenty-sixth.ord twenty-seventh.ord twenty-eighth.ord twenty-ninth.ord thirtieth.ord thirty-first.ord thirty-second.ord thirty-third.ord thirty-fourth.ord thirty-fifth.ord thirty-sixth.ord thirty-seventh.ord thirty-eighth.ord thirty-ninth.ord fourtieth.ord fourty-first.ord fourty-second.ord fourty-third.ord fourty-fourth.ord fourty-fifth.ord fourty-sixth.ord fourty-seventh.ord fourty-eighth.ord fourty-ninth.ord fiftieth.ord fifty-first.ord fifty-second.ord fifty-third.ord fifty-fourth.ord fifty-fifth.ord fifty-sixth.ord fifty-seventh.ord fifty-eighth.ord fifty-ninth.ord sixtieth.ord sixty-first.ord sixty-second.ord sixty-third.ord sixty-fourth.ord sixty-fifth.ord sixty-sixth.ord sixty-seventh.ord sixty-eighth.ord sixty-ninth.ord seventieth.ord seventy-first.ord seventy-second.ord seventy-third.ord seventy-fourth.ord seventy-fifth.ord seventy-sixth.ord seventy-seventh.ord seventy-eighth.ord seventy-ninth.ord eightieth.ord eighty-first.ord eighty-second.ord eighty-third.ord eighty-fourth.ord eighty-fifth.ord eighty-sixth.ord eighty-seventh.ord eighty-eighth.ord eighty-ninth.ord ninetieth.ord ninety-first.ord ninety-second.ord ninety-third.ord ninety-fourth.ord ninety-fifth.ord ninety-sixth.ord ninety-seventh.ord ninety-eighth.ord ninety-ninth.ord DAY-ORDINALS.ord ORDINALS.ord : (Wd- & {M+} & Ss*o+); % EQUATIONS ETC. % The below is just barely enough to parse just very simple equation % and expressions, nothing complex -- no general math or anything like % that. Relations are treated as "transitive verbs", taking a subject % and requiring an object. % Relations % "verb" use, e.g. "( p < 0.01 )" for "( p is less than 0.01 )" =.v <.v >.v =<.v >=.v ==.v eq.v ne.v lt.v lte.v le.v gt.v gte.v ge.v equiv.v sim.v simeq.v approx.v ~.v: ([S-] or EQ*r-) & ([O+] or EQ*r+) & (Xd- & (Xc+ or ) & (MX- or MVa-)); % Binary operators: % these occur in "simple" expressions *.v "/.v" +.v -.v x.v: ([S-] or EQ-) & ([O+] or EQ+) & (Xd- & (Xc+ or ) & (MX- or MVa-)); % Allows parsing of "dollars per day" or "mL/sec" but is somewhat % inconsistent with the equation persing otherwise described below. % XXX overall, eqn parsing could be strengthened. per "/.per": Us+ & Mp-; % Binary operators, strict: % Here EQt attaches only to terms, which may be numbers or letters. % By contrast, EQrr can only attach to relations (=, < > etc.) +.eq -.eq *.eq "/.eq" x.eqn: (EQt+ & EQt-) & (EQrr- or EQrr+ or AN+); ->.eq -->.eq: (S- & O+) & (AN+ or (Xd- & Xc+ & MX-)); % "adverb" use, e.g. "< 10" for "less than 10" =.e <.e =<.e <=.e >.e >=.e +.e -.e x.e: EN+; % TODO: un-parenthesized cases, e.g. % - preparations of 5 x 10(8) cfu/ml are made % - the strength was in the order of gerE > cotD > yfhP P2 > yfhP P1 % also remember "-->" A.eq B.eq C.eq D.eq E.eq F.eq G.eq H.eq I.eq J.eq K.eq L.eq M.eq N.eq O.eq P.eq Q.eq R.eq S.eq T.eq U.eq V.eq W.eq X.eq Y.eq Z.eq a.eq b.eq c.eq d.eq e.eq f.eq g.eq h.eq i.eq j.eq k.eq l.eq m.eq n.eq o.eq p.eq q.eq r.eq s.eq t.eq u.eq v.eq w.eq x.eq y.eq z.eq: EQt+ or EQt-; fiscal.i: TY+ & ; or_so: ND- & {{@L+} & DD-} & (Dmcn+ or ( & )); %VERBS : Xd- & (Xc+ or ) & (MX*p- or MVg-); : {Xd-} & Xc+ & COp+; % These are the verb-form expressions for ordinary verbs. % % is a marker which should never be used in a link. % It is used to flag past-tense forms in the dictionary. It's only use % is to supply an answer to the "isPastTense" call in the Java API. % which is needed by relex-version 1.2.0 and earlier. Newer versions % use the v-d, w-d, and q-d tags to identify past-tense verbs, and so % the Java API is no longer needed. It should be marked obsolete/deprecated % as soon as possible, and removed by late-2010/early-2011 : XXXPAST+; : {@E-} & ((I- & {@E-} & {Wi-}) or ({CO-} & Wi-)); : ({@E-} & (Sp- or (RS- & Bp-))) or ; : {@E-} & (Sp- or (RS- & Bp-)); : {@E-} & (Ss- or (RS- & Bs-)); : {@E-} & I-; : or ({@E-} & (S- or (RS- & B-) or PP-)); : or ({@E-} & (S- or (RS- & B-))); : {@E-} & PP-; : {@E-} & (Pg- or Mg-); : {@E-} & (Pv- or Mv-) & {@MV+}; : {@E-} & (Pv- or Mv-); : {@E-} & ( or or ({[DP-]} & ((Ss*g+ & ) or SIs*g- or )) or [DP- & J-] or [[Wq- & PF+]]); % ({[[Ds-]]} & OF+) : "a running of the bulls" "a polishing of prose" % AJ: allows use of gerunds as adjectives: "described as smooth and obliging" % : allows use of gerunds as nouns. % VJ*g: ??? this is commented out, where would this occur? : ( & (Dmu- or [[()]]) & (({[[Ds-]]} & OF+) or [[()]]) & (( & {@MXs+} & ((Ss+ & ) or SIs- or Os- or J-)) or AJra- or AJla+ or )) or [[AN+]]; : {@E-} & ( ({[DP-]} & ((Ss*g+ & ) or SIs*g- or )) or Mg- or Pg- or or or [DP- & J-] or [[Wq- & PF+ & {@MV+}]]); : {@E-} & {@MV+} & ( or or [[Wq- & PF+ & {@MV+} & {CC+}]]); % These are the verb-form expressions for special verbs that can take % filler-"it" as a subject. : {@E-} & (Sp- or If- or (RS- & Bp-) or Wi-); : {@E-} & (Ss- or SFsi- or (RS- & Bs-)); : or ({@E-} & (S- or SFsi- or PPf- or (RS- & B-))); : or ({@E-} & (S- or SFsi- or (RS- & B-))); : {@E-} & PPf-; : {@E-} & (Pgf- or Mg-); : {@E-} & (Pvf- or Mv-) & {@MV+}; : {@E-} & (Pvf- or Mv-); % These are the verb-form expressions for special verbs that can take % either filler-"it" or filler-"there" as a subject. : {@E-} & (Sp- or SFp- or If- or (RS- & Bp-) or Wi-); : {@E-} & (Ss- or SFs- or (RS- & Bs-)); : {@E-} & (Ss- or SFs- or SFu- or (RS- & Bs-)); : or ({@E-} & (S- or SF- or (RS- & B-) or PPf-)); : or ({@E-} & (S- or SF- or (RS- & B-))); : {@E-} & PPf-; : {@E-} & (Pgf- or Mg-); : {@E-} & (Pgf- or Mg- or ({[DP-]} & ((Ss*g+ & ) or SIs*g- or )) or or or [DP- & J-] or [[Wq- & PF+ & {@MV+}]]); % conjoined verbs. % VJr == left % VJl == right % VJb == but % VJd == ditransitive % VJn == neither-nor % % VJ*s == singular subject % VJ*p == plural subject % VJ*g == conjoined gerunds "He was running and jumping" % VJ*h == past participle (PP- link) "He had run and jumped" % % The following control whether the conjunction can take an object. % The conjunction should take an object if both verbs are transitive, % e.g. "I saw and greeted Sue", which should parse as % "I (saw and greeted) Sue". % VJ**i == intranstive % VJ**t == transitive % % s == singluar, pl == plural, sp == singular or plural % g == gerund : {@E-} & VJrs-; : {@E-} & VJls+; : {@E-} & VJrp-; : {@E-} & VJlp+; : {@E-} & VJr-; : {@E-} & VJl+; : {@E-} & VJr*i-; : ({@E-} & VJl*i+) or (VJn*i+ & Dn-) or (VJb*i+ & Db-); : {@E-} & VJr*t-; : {@E-} & VJl*t+; : {@E-} & VJrg-; : {@E-} & VJlg+; : {@E-} & VJrh-; : {@E-} & VJlh+; : or or (VJn*t+ & Dn-); % Verb macros making use of above connectors. % plural-infinitive macro; the cost on $1 encourages any MV links to % attach to the "and.j-v" instead of to the individual verb. define(`VERB_PLI',`' (( & ($1)) or ( & ([($1)] or ())) or (($1) & ))) % singular present tense macro; same comments as above... define(`VERB_S_I',`' (( & ($1)) or ( & ([($1)] or ())) or (($1) & ))) % present tense, but allows transitive connectinos to 'and' define(`VERB_S_T',`' (( & ($1)) or ( & (([$1]) or ())) or (($1) & ) or )) % past tense macro, intransitive variation define(`VERB_SPPP_I',`' (( & ($1)) or ( & (([$1]) or ())) or (($1) & ))) % past tense macro, transitive variation define(`VERB_SPPP_T',`' (( & ($1)) or ( & (([$1]) or ())) or (($1) & )) or ) % Same as above, but without the PP link define(`VERB_SP_I',`' (( & ($1)) or ( & (([$1]) or ())) or (($1) & ))) define(`VERB_SP_T',`' (( & ($1)) or ( & (([$1]) or ())) or (($1) & )) or ) % as above but for past participles define(`VERB_PP',`' (( & ($1)) or ( & (([$1]) or ())) or (($1) & ))) % the filler-it variation of the above rules. define(`VERB_S_PLI',`' (( & ($1)) or ( & ([($1)] or ())) or (($1) & )) or ) % XXX TODO need to provide macro-ized versions for , % and the variants as well. % AUXILIARY VERBS %: (((B- or O+ or [[@MV+ & O*n+]] or Vd+ or ({N+} & (CX- or [[()]]))) & {@MV+}) %or ({N+} & I*d+)); %do.v: ({@E-} & (Sp- or SFp- or (RS- & Bp-) or Wi-) & ) %or ((SIp+ or SFIp+) & (({Q-} & I*d+) or CQ-)) or %({@E-} & I- & ((B- or O+ or [[@MV+ & O*n+]] or CX-) & {@MV+})); %does.v: ( & ) or ((SIs+ or SFIs+) & (({Q-} & I*d+) or CQ-)); %did.v: ( & ) or ((SI+ or SFI+) & (({Q-} & I*d+) or CQ-)); %done.v: ( & (B- or O+ or [[@MV+ & O*n+]] or Vd+)) or or ; %doing.v: & (O+ or B- or [[@MV+ & O*n+]] or Vd+) & {@MV+}; %doing.g: ((O+ or B- or [[@MV+ & O*n+]] or Vd+) & {@MV+} & ) or ; % %don't: (({Q-} & (SIp+ or SFIp+) & I*d+) or ({@E-} & (Sp- or SFp- or %(RS- & Bp-) or Wi-))) & (I*d+ or [[()]]); %doesn't: (({Q-} & (SIs+ or SFIs+) & I*d+) or ) & %(I*d+ or [[()]]); %didn't: or ((({Q-} & (SI+ or SFI+)) or ({@E-} & (S- or SF- or %(RS- & B-)))) & (I*d+ or [[()]])); %Mike replaced "{Q-}" with "(Rw- or Q- or [()])" : (((B- or O+ or [[@MV+ & O*n+]] or Vd+ or ({N+} & (CX- or [[()]]))) & {@MV+}) or ({N+} & I*d+)); do.v: ({@E-} & (Sp- or SFp- or (RS- & Bp-) or ({Ic-} & Wi-)) & ) or ((SIp+ or SFIp+) & (((Rw- or ({Ic-} & Q-) or [()]) & I*d+) or CQ-)) or ({@E-} & I- & ((B- or O+ or [[@MV+ & O*n+]] or CX-) & {@MV+})); does.v: ( & ) or ((SIs+ or SFIs+) & (((Rw- or ({Ic-} & Q-) or [()]) & I*d+) or CQ-)); did.v-d: ( & ) or ((SI+ or SFI+) & (((Rw- or ({Ic-} & Q-) or [()]) & I*d+) or CQ-)); % % XXX why not here ? % verb-pv-b: "I want it done." "I want the job done" : B- or O+ or [[@MV+ & O*n+]] or Vd+; done.v: VERB_PP() or or or S-; % adjectival modifier: "I am done working", "I am through being mad" done.a finished.a through.a: ({@E-} & Pa- & {Pg+ or Os+ or @MV+}) or (AJra- & {@MV+}) or ({@MV+} & AJla+); doing.v: & (O+ or B- or [[@MV+ & O*n+]] or Vd+) & {@MV+}; doing.g: ((O+ or B- or [[@MV+ & O*n+]] or Vd+) & {@MV+} & ) or ; better.i fine.i ok.i okay.i OK.i poorly.i well.i: {EE-} & Vd-; don't don’t: (((Rw- or ({Ic-} & Q-) or [()]) & (SIp+ or SFIp+) & I*d+) or ({@E-} & (Sp- or SFp- or (RS- & Bp-) or ({Ic-} & Wi-)))) & (I*d+ or [[()]]); doesn't doesn’t: (((Rw- or ({Ic-} & Q-) or [()]) & (SIs+ or SFIs+) & I*d+) or ) & (I*d+ or [[()]]); didn't.v-d didn’t.v-d: or ((((Rw- or ({Ic-} & Q-) or [()]) & (SI+ or SFI+)) or ({@E-} & (S- or SF- or (RS- & B-)))) & (I*d+ or [[()]])); : ({@MV+} & TO+) or ((B- or O+) & {@MV+} & {[I*j+ or Pv+]}) or (([[@MV+ & O*n+]] or CX- or [[()]]) & {@MV+}) or ({N+} & PP+); have.v: ((SIp+ or SFIp+) & (((Rw- or ({Ic-} & Q-) or [()]) & PP+) or CQ-)) or ( & ); has.v: ((SIs+ or SFIs+) & (((Rw- or ({Ic-} & Q-) or [()]) & PP+) or CQ-)) or ( & ) or ( & ) or ( & ); % XXX probably should be verb-and-sp-i- etc !? had.v-d: ((SI+ or SFI+) & (((Rw- or ({Ic-} & Q-) or [()]) & PP+) or CQ-)) or ( & ) or ( & ) or ( & ) or ( & (TO+ or ((B- or O+) & {@MV+} & {[I*j+ or Pv+]}) or (([[@MV+ & O*n+]] or CX-) & {@MV+}))) or [[(SI*j+ or SFI**j+) & PP+ & ((Xd- & CCq- & Xc+) or CCq- or ({{Xd-} & Xc+} & COp+))]]; having.v: & ; having.g: ( & ) or ; hasn't hasn’t: (((Rw- or ({Ic-} & Q-) or [()]) & (SIs+ or SFIs+)) or ()) & (PP+ or ([[O+]] & {@MV+}) or [[()]]); haven't haven’t: (((Rw- or ({Ic-} & Q-) or [()]) & (SIp+ or SFIp+)) or ({@E-} & (Sp- or SFp- or (RS- & Bp-)))) & (PP+ or ([[O+]] & {@MV+}) or [[()]]); hadn't.v-d hadn’t.v-d: or ((((Rw- or ({Ic-} & Q-) or [()]) & (SI+ or SFI+)) or ({@E-} & (S- or SFs- or SFp- or (RS- & B-)))) & (PP+ or ([[O+]] & {@MV+}) or [[()]])); % Give [K+] a cost so as to prefer Pp+ in general %: % ({@EBm+} & (((O*t+ or [B**t-] or [K+] or BI+ or OF+ or PF- or % (Osi+ & R+ & Bs+) or % (Opi+ & R+ & Bp+) or % [[()]]) & {@MV+}) or % (Pp+ & {THi+ or @MV+}) or % THb+ or % TO+ or % Pa+)) or % ({N+} & (AF- or Pv+ or I*v+)) or % (({N+} or {Pp+}) & Pg*b+); : ({@EBm+} & ((([B**t-] or [K+] or BI+ or OF+ or PF- or (Osi+ & R+ & Bs+) or (Opi+ & R+ & Bp+) or [[()]]) & {@MV+}) or (Pp+ & {THi+ or @MV+}) or THb+ or TO+ or Pa+)) or ({N+} & (AF- or Pv+ or I*v+)) or (({N+} or {Pp+}) & Pg*b+); : {@EBm+} & O*t+ & {@MV+}; : {@EBm+} & (Ost+ or Opt+) & {@MV+}; : {@EBm+} & Out+ & {@MV+}; : or ; : or ; % Colon can be used as a synonym for "is" % "The answer to your question: yes" % "The capital of Germany: Berlin" ":.v": & ; % verb-x-s,u: "there is blood on his hands" % Unfortunately, this allows "There is chasing dogs", which pairs SFu to Op % and has to be removed via post-processing. is.v: ( & ) or ( & ) or ( & ) or (((Rw- or ({Ic-} & Q-) or [()]) & (SIs+ or SFIs+)) & ); 's.v ’s.v: [[( & (({@EBm+} & (((O*t+ or [K+] or BI+ or OF+ or (Osi+ & R+ & Bs+) or (Opi+ & R+ & Bp+)) & {@MV+}) or (Pp+ & {THi+ or @MV+}) or THb+ or TO+ or Pa+)) or ({Pp+} & Pg+) or Pv+ or PP+)) or (SIs+ & PF-)]]; % are.v: % (({@E-} & (Spx- or SFp- or (RS- & Bp-))) or % ((Rw- or ({Ic-} & Q-) or [()]) & (SIpx+ or SFIp+))) & ; % Don't allow are.v with uncountable noun objects. are.v: ({@E-} & (Spx- or SFp- or (RS- & Bp-)) & ) or ((Rw- or ({Ic-} & Q-) or [()]) & (SIpx+ or SFIp+) & ); was.v-d: or ( & ) or ( & ) or ( & ) or ({@E-} & SX- & ) or (((Rw- or ({Ic-} & Q-) or [()]) & (SFIs+ or SIs+ or SXI+)) & ); % XXX probably should be verb-and-sp-i- etc !? were.v-d: or (({@E-} & (Spx- or SFp- or [[Ss-]] or [[SX-]] or (RS- & Bp-))) & ) or ((Rw- or ({Ic-} & Q-) or [()]) & (SIpx+ or SFIp+) & ) or ( & ) or ( & ) or [[(SI*j+ or SFI**j+) & & ((Xd- & CCq- & Xc+) or CCq- or ({{Xd-} & Xc+} & COp+))]]; % XXX the verb-and construction is probably too broad. am.v: ((({@E-} & SX-) or ((Rw- or ({Ic-} & Q-) or [()]) & SXI+)) & ) or ( & ) or ( & ); % S*x- used for passive participles: "this action be taken". be.v: {@E-} & (Ix- or ({Ic-} & Wi-) or [S*x-]) & ; been.v: {@E-} & PPf- & ; being.v: ((({@EBm+} & (((O*t+ or [B**t-] or Pp+ or K+ or OF+ or BI+ or TO+ or THb+) & {@MV+}) or Pa+)) or AF- or Pv+) & ) or ; isn't isn’t: ( or ((Rw- or ({Ic-} & Q-) or [()]) & (SIs+ or SFIs+))) & ; wasn't.v-d wasn’t.v-d: or ((({@E-} & (Ss- or SX- or SFs- or (RS- & Bs-))) or ((Rw- or ({Ic-} & Q-) or [()]) & (SI*+ or SXI+ or SFIs+))) & ); aren't aren’t: (({@E-} & (Spx- or SFp- or (RS- & Bp-))) or ((Rw- or ({Ic-} & Q-) or [()]) & (SIpx+ or SFIp+))) & ; weren't.v-d weren’t.v-d: or ((({@E-} & (Spx- or SFp- or (RS- & Bp-))) or ((Rw- or ({Ic-} & Q-) or [()]) & (SIpx+ or SFIp+))) & ); % XXX probably should be verb-and-sp-i- etc !? will.v can.v may.v must.v could.v might.v shall.v: ((SI+ or SFI+) & (((Rw- or ({Ic-} & Q-) or [()]) & I+) or CQ-)) or ({N+} & {@E-} & (S- or SF- or (RS- & B-)) & (I+ or (CX- & {@MV+}) or [[()]])) or ( & {N+} & {@E-} & I+) or ({N+} & {@E-} & I+ & ); should.v: ((SI+ or SFI+) & (((Rw- or ({Ic-} & Q-) or [()]) & I+) or CQ-)) or ({N+} & {@E-} & (S- or SF- or (RS- & B-)) & (I+ or (CX- & {@MV+}) or [[()]])) or ( & I+) or (I+ & ) or [[(SI*j+ or SFI**j+) & I+ & ((Xd- & CCq- & Xc+) or CCq- or ({{Xd-} & Xc+} & COp+))]]; would.v: ((SI+ or SFI+) & (((Rw- or ({Ic-} & Q-) or [()]) & {Vw+} & I+) or CQ-)) or ({N+} & {@E-} & (S- or SF- or (RS- & B-)) & (({RT+} & I+) or (CX- & {@MV+}) or [[()]])) or ( & I+) or (I+ & ); ought.v: (((Rw- or ({Ic-} & Q-) or [()]) & (SI+ or SFI+)) or ({@E-} & (S- or SF- or (RS- & B-))) or ) & (TO+ or (N+ & I+)); won't can't mustn't couldn't shouldn't cannot needn't won’t can’t mustn’t couldn’t shouldn’t needn’t: ((Rw- or ({Ic-} & Q-) or [()]) & (SI+ or SFI+) & I+) or ({@E-} & (S- or SF- or (RS- & B-)) & (I+ or [[()]])) or ( & {@E-} & I+) or ({@E-} & I+ & ); wouldn't wouldn’t: ((Rw- or ({Ic-} & Q-) or [()]) & (SI+ or SFI+) & {RT+} & I+) or ({@E-} & (S- or SF- or (RS- & B-)) & (({RT+} & I+) or [[()]])) or ( & {@E-} & (({RT+} & I+) or [[()]])) or ({@E-} & (({RT+} & I+) or [[()]]) & ); % =================================================================== % COMMON VERB CATEGORIES (The last number of the file name indicates % the verb form: 1=plural-infinitive, 2=singular, 3=past("ed"), % 4=progressive("-ing"), 5=gerund("-ing".) % abbreviations for ditransitive and optionally ditranstive verbs % ditranstive verbs take a direct and indirect object % e.g. "I gave her a rose" : (O+ & {[[@MV+]]} & O*n+ & {VJd+}); : (O+ & {{[[@MV+]]} & O*n+ & {VJd+}}); : (O+ & {{[[@MV+]]} & [O*n+] & {VJd+}}); % common intransitive verbs : {@MV+}; % XXX Hmmm. There is a fair number of verbs in here that are "weakly" % transitive, i.e. are transitive in various rare usages: % "I ambled the horse", "I hydroplaned the car", etc. Per theory of % functional grammar and related, transitivity should be taken as % variable, so e.g. we could assign a high cost to the transitive use % of some of these verbs ... % % accrue.v ache.v acquiesce.v ad-lib.v adhere.v adjoin.v alight.v /en/words/words.v.1.1: VERB_PLI(); % accounts.v accrues.v aches.v acquiesces.v ad-libs.v adheres.v /en/words/words.v.1.2: VERB_S_I(); % accounted.v accrued.v ached.v acquiesced.v ad-libbed.v adhered.v /en/words/words.v.1.3: VERB_SPPP_I(); fundheld.v-d strove.v-d: VERB_SPPP_I(); % accruing.v aching.v acquiescing.v ad-libbing.v adhering.v adjoining.v /en/words/words.v.1.4: ( & ) or ({@E-} & A+) or ; arisen.v: {@E-} & PP- & {@MV+}; % -------------------------------------------------------------- % intransitive verbs that can take particles like "up" and "out" : {K+} & {@MV+}; % barge.v booze.v bottom.v bow.v branch.v breeze.v brim.v bulge.v cave.v /en/words/words.v.5.1: VERB_PLI(); /en/words/words.v.5.2: VERB_S_I(); /en/words/words.v.5.3: VERB_SPPP_I() or ({@E-} & A+); slunk.v-d: VERB_SPPP_I(); lay.v-d: VERB_SP_I(); lain.v: VERB_PP(); /en/words/words.v.5.4: ( & ) or ({@E-} & A+) or ; % -------------------------------------------------------------- % irregular -- coming is in words.v.5.4 ... : {(K+ & {Pa+}) or [[Pg+]]} & {@MV+}; come.v: VERB_PLI() or VERB_PP() or ({@E-} & Ix- & O*t+); comes.v: VERB_S_I(); came.v-d: VERB_SPPP_I(); % -------------------------------------------------------------- % optionally transitive verbs % abdicate.v abide.v abort.v accelerate.v acclimate.v acclimatize.v : {O+ or B- or [[@MV+ & O*n+]]} & {@MV+}; /en/words/words.v.2.1: VERB_PLI(`'); /en/words/words.v.2.2: VERB_S_T(`'); /en/words/words.v.2.3: VERB_SPPP_T(`') or or ({@E-} & A+) or ; shrank.v-d withdrew.v-d sank.v-d forgave.v-d hove.v-d spoilt.v-d unbent.v-d overfed.v-d: VERB_SPPP_T(`') or ({@E-} & A+); shrunk.v withdrawn.v sunk.v forgiven.v: VERB_PP(`') or or ({@E-} & A+) or ; bid.v-d hurt.v-d thrust.v-d broadcast.v-d outbid.v-d sublet.v-d: VERB_SPPP_T(`') or ( & ) or or ({@E-} & A+) or ; /en/words/words.v.2.4: & ; /en/words/words.v.2.5: ( & ) or ({@E-} & A+) or ; % -------------------------------------------------------------- % vc-judge: a lot like vc-delcare, except optionally transitive. : or ((B- or O+) & ({@MV+} & Pa**j+)); judge.v: VERB_PLI(`'); judges.v: VERB_S_T(`'); judged.v-d: VERB_SPPP_T(`') or ( & {{@MV+} & Pa+}) or ({@E-} & A+) or ; judging.v: & ; judging.g: ( & ) or ({@E-} & A+) or ; % -------------------------------------------------------------- : {K+ or OD+} & {@MV+}; rise.v fall.v:VERB_PLI(); rises.v falls.v: VERB_S_I(); rose.v-d fell.v-d: VERB_SPPP_I(); risen.v: VERB_PP(); fallen.v: VERB_PP() or ({@E-} & A+); rising.v falling.v: ( & ) or ({@E-} & A+) or ; % words.v.6: Optionally transitive verbs that can take particles % like "up" and "out" -- see also words.v.8 % average.v back.v bail.v bang.v beam.v beef.v bellow.v bend.v bind.v % The [[@MV+ & O*n+]] term allows some bad parses, e.g. allows: % "she walked out of the room two minutes" % % Pa**j link: "The thugs beat him senseless" "You are driving me crazy" % XXX However, very few of these verbs actually take the Pa**j link ... % and so should be reclaased. : ((K+ & {[[@MV+]]} & O*n+) or ({O+ or B-} & {K+}) or ((B- or O+) & ({@MV+} & Pa**j+)) or [[@MV+ & O*n+]]) & {@MV+}; /en/words/words.v.6.1: VERB_PLI(); /en/words/words.v.6.2: VERB_S_T(); /en/words/words.v.6.3: VERB_SPPP_T() or ( & {K+} & {@MV+}) or ({@E-} & A+) or ({K+} & ); split.v-d spread.v-d beat.v-d fit.v-d shut.v-d cast.v-d: VERB_SPPP_T() or ( & ) or ( & {K+}) or ({@E-} & A+) or ({K+} & ); ate.v-d bit.v-d blew.v-d broke.v-d drank.v-d drove.v-d flew.v-d froze.v-d hid.v-d ran.v-d rang.v-d rode.v-d sprang.v-d stalked.v-d woke.v-d test-drove.v-d forbore.v-d oversaw.v-d throve.v-d shrove.v-d countersank.v-d outgrew.v-d strode.v-d offsetted.v-d overthrew.v-d partook.v-d begot.v-d overdid.v-d smote.v-d stank.v-d quick-froze.v-d backbit.v-d awoke.v-d redid.v-d chidded.v-d reran.v-d rived.v-d befell.v-d outrode.v-d betrode.v-d outdid.v-d ridded.v-d deep-froze.v-d forbad.v-d deep-freezed.v-d retook.v-d interwove.v-d bespoke.v-d underwent.v-d slew.v-d overdrew.v-d overcame.v-d outwore.v-d foreknew.v-d wove.v-d trod.v-d outwent.v-d: VERB_SPPP_T(); beaten.v bitten.v blown.v broken.v driven.v drunk.v eaten.v flown.v frozen.v hidden.v ridden.v rung.v sprung.v stricken.v swum.v woken.v befallen.v interwoven.v overborne.v outgone.v outgrown.v test-driven.v outdone.v shrunken.v countersunk.v bespoken.v underlain.v partaken.v redone.v overdone.v outridden.v deep-frozen.v bestrid.v undergone.v outbidden.v shorn.v outworn.v bestridden.v stunk.v borne.v slain.v woven.v riven.v backbitten.v overlain.v bestrewn.v forborne.v quick-frozen.v browbeaten.v aquitted.v overseen.v smitten.v overdrawn.v striven.v thriven.v shriven.v backslidden.v retaken.v trodden.v chidden.v begotten.v sown.v sewn.v sawn.v hewn.v cloven.v foreknown.v overthrown.v strewn.v awoken.v bidden.v stridden.v slain_dead: VERB_PP() or ( & {K+}) or ({@E-} & A+) or ({K+} & ); run.v: VERB_PLI() or VERB_PP() or ( & {K+}) or ({@E-} & A+) or ({K+} & ); /en/words/words.v.6.4: ( & ) or or ; /en/words/words.v.6.5: ( & ) or or ({@E-} & A+); frizz.v frizzle.v prink.v slough.v scuff.v tog.v swot.v: VERB_PLI(); % just like & , except that "and" is the one % XXX TODO review this ... and.v-fill: ((VJlg- & VJrg+) & (Pg- or Mg- or ({Xd-} & VJrg-))) & ; % ------------------------------------------------------------ % common transitive verbs % abandon.v abase.v abbreviate.v abduct.v abet.v abhor.v abolish.v : (O+ or B- or [[@MV+ & O*n+]]) & {@MV+}; /en/words/words.v.4.1 : VERB_PLI(); /en/words/words-medical.v.4.1: VERB_PLI(); /en/words/words.v.4.2: VERB_S_T(); /en/words/words-medical.v.4.2: VERB_S_T(); /en/words/words.v.4.3: VERB_SPPP_T() or or (({@E-} or {@EA-} or {@AN-}) & A+) or ; % !?XXX many of the new additions fail some common sentences, such as: % The candle guttered. It plummeted to the bottom. Prices plummeted! /en/words/words-medical.v.4.3: VERB_SPPP_T() or or (({@E-} or {@EA-}) & A+) or ; forsook.v-d overrode.v-d overtook.v-d rewrote.v-d undid.v-d overran.v-d mistook.v-d underwrote.v-d: VERB_SP_T(); hit.v-d misread.v-d shed.v-d rid.v-d overcome.v-d offset.v-d overrun.v-d upset.v-d undercut.v-d: VERB_SPPP_T() or ( & ) or or ({@E-} & A+) or ; forsaken.v overridden.v overtaken.v rewritten.v undone.v beset.v mistaken.v underwritten.v: VERB_PP() or or ({@E-} & A+) or ; /en/words/words.v.4.4 /en/words/words-medical.v.4.4: & ; /en/words/words.v.4.5 /en/words/words-medical.v.4.5: ( & ) or ; % ----------------------------------------------------------------- % words.v.8: Transitive verbs that can take particles like "up" and "out" % auction.v bandy.v bar.v batten.v bite.v block.v blot.v blurt.v % See also words.v.6 for optionally transitive verbs. % XXX TODO: should be reviewed, as some of them are optionally transitive % : ((K+ & {[[@MV+]]} & O*n+) or ((O+ or B-) & {K+}) or [[@MV+ & O*n+]]) & {@MV+}; /en/words/words.v.8.1: VERB_PLI(); /en/words/words.v.8.2: VERB_S_T(); stole.v-d threw.v-d tore.v-d wore.v-d overate.v-d over-ate.v-d forewent.v-d oversewed.v-d forswore.v-d foreswore.v-d forwent.v-d: VERB_SPPP_T(); stolen.v shaken.v thrown.v torn.v worn.v forgone.v curretted.v forsworn.v oversewn.v over-eaten.v foresworn.v overeaten.v: VERB_PP() or ( & {K+} & {@MV+}) or ({@E-} & A+) or ({K+} & ); /en/words/words.v.8.3: VERB_SPPP_T() or ( & {K+} & {@MV+}) or ({@E-} & A+) or ({K+} & ); cut.v: VERB_SPPP_T() or ( & ) or ( & {K+} & {@MV+}) or ({@E-} & A+) or ({K+} & ); /en/words/words.v.8.4: & ; /en/words/words.v.8.5: ( & ) or ; % -------------------------------------------------------------- : (((O+ or B-) & {OD+}) or [[@MV+ & O*n+]]) & {@MV+}; raise.v lower.v up.v: VERB_PLI(); raises.v lowers.v ups.v: VERB_S_T(); raised.v-d lowered.v-d upped.v-d: VERB_SPPP_T() or or ({@E-} & A+) or ; raising.v lowering.v upping.v: & ; raising.g lowering.g upping.g: ( & ) or ; % much like words.v.2.1, except can have "TO" link. % tending.g remains in words.v.2.5 % I tended for years to believe that shepherds tend sheep. : & {TO+}; tend.v: VERB_PLI(); tends.v: VERB_S_T(); tended.v-d: VERB_SPPP_T() or or ({@E-} & A+) or ; tending.v: & ; % INTRANSITIVE COMPLEX VERBS (those that do not take O+) : {@MV+} & {TO+}; consent.v endeavor.v hesitate.v proceed.v aspire.v purport.v: VERB_PLI(); consents.v endeavors.v hesitates.v proceeds.v aspires.v purports.v: VERB_S_I(); consented.v-d endeavored.v-d hesitated.v-d proceeded.v-d aspired.v-d purported.v-d: VERB_SPPP_I(); consenting.v endeavoring.v hesitating.v proceeding.v aspiring.v purporting.v: ( & ) or ; : {@MV+} & TO+; endeavour.v condescend.v deign.v: VERB_PLI(); endeavours.v condescends.v deigns.v: VERB_S_I(); endeavoured.v-d condescended.v-d deigned.v-d: VERB_SPPP_I(); endeavouring.v condescending.v deigning.v: ( & ) or ; : {@MV+} & {TO+ or THi+}; happen.v: VERB_PLI(); happens.v: VERB_S_I(); happened.v-d: VERB_SPPP_I(); happening.v: ( & ) or ; % ditransitve : ({@MV+} & {TH+ or Ce+ or RSe+ or TO+}) or ; wish.v: VERB_PLI(); wished.v-d: VERB_SPPP_I(); wishes.v: VERB_S_I(); wishing.v: ( & ) or ; % The O+ target is to handle "I hope so", but really, we should have % a special-case for this (i.e. a new minor letter). % See also for the same problem. : ({@MV+} & {TH+ or Ce+ or RSe+ or TO+}) or [[O+ & {@MV+}]]; hope.v agree.v pretend.v swear.v pray.v vow.v vote.v: VERB_PLI(); hopes.v agrees.v pretends.v swears.v prays.v vows.v votes.v: VERB_S_I(); pretended.v-d prayed.v-d: VERB_SPPP_I(); % The ( & THi+) allows "it is hoped that ..." to parse. hoped.v-d voted.v-d vowed.v-d: VERB_SPPP_T() or ( & THi+); agreed.v-d: VERB_SPPP_T() or ( & TH+); swore.v-d: VERB_SP_T(); sworn.v: VERB_PP() or ({@E-} & A+); hoping.v agreeing.v pretending.v swearing.v praying.v vowing.v voting.v: ( & ) or ; : {@MV+} & {Pa+ or TOf+ or THi+ or AF- or [[Pv+]]}; appear.v: & ; appears.v: & ; appeared.v-d: & ; appearing.v: ( & ) or ; : {@MV+} & (Pa+ or TOf+ or LI+ or THi+ or AF- or [[Pv+]]); seem.v: & ; seems.v: & ; seemed.v-d: & ; seeming.v: ( & ) or ; : {@MV+} & {TO+ or QI+}; care.v: VERB_PLI(); cares.v: VERB_S_I(); cared.v-d: VERB_SPPP_I(); caring.v: ( & ) or ; : ({@MV+} & (TH+ or RSe+ or Z- or Ce+)); assert.v contend.v remark.v retort.v intimate.v exclaim.v conjecture.v allege.v surmise.v opine.v insinuate.v suppose.v: VERB_PLI(); asserts.v contends.v remarks.v retorts.v intimates.v exclaims.v conjectures.v alleges.v surmises.v opines.v insinuates.v supposes.v: VERB_S_T(); retorted.v intimated.v exclaimed.v conjectured.v surmised.v-d opined.v-d insinuated.v-d: VERB_SPPP_I(); asserted.v-d contended.v-d remarked.v-d: VERB_SPPP_T() or ( & THi+); alleged.v-d: VERB_SPPP_T() or ( & THi+) or ({@E-} & A+); supposed.v-d: VERB_SPPP_T() or ( & {TOf+ or THi+ or Z-}) or ({@E-} & A+); asserting.v contending.v remarking.v retorting.v intimating.v exclaiming.v conjecturing.v alleging.v surmising.v opining.v insinuating.v supposing.v: ( & ) or ; : {@MV+} & {TH+}; theorize.v attest.v fantasize.v muse.v speculate.v concur.v: VERB_PLI(); theorizes.v attests.v fantasizes.v muses.v speculates.v concurs.v: VERB_S_I(); attested.v-d fantasized.v-d mused.v-d speculated.v-d concurred.v-d: VERB_SPPP_I(); theorized.v-d: VERB_SPPP_I() or ( & THi+); theorizing.v attesting.v fantasizing.v musing.v speculating.v concurring.v: ( & ) or ; : ({@MV+} & {TH+ or Ce+}); reply.v whisper.v argue.v sigh.v mutter.v testify.v comment.v respond.v hint.v reason.v brag.v: VERB_PLI(); replies.v whispers.v argues.v sighs.v mutters.v testifies.v comments.v responds.v hints.v reasons.v brags.v: VERB_S_T(); replied.v-d sighed.v-d commented.v-d responded.v-d bragged.v-d: VERB_SPPP_I(); % The ( & THi+) allows "it is reasoned that ..." to parse. argued.v-d hinted.v-d muttered.v-d reasoned.v-d testified.v-d whispered.v-d: VERB_SPPP_T() or ( & THi+); replying.v whispering.v arguing.v sighing.v muttering.v testifying.v commenting.v responding.v hinting.v reasoning.v bragging.v: ( & ) or ; : {@MV+} & {Ce+ or TH+ or RSe+ or (OF+ & {@MV+}) or BW-}; dream.v complain.v: VERB_PLI(); dreams.v complains.v: VERB_S_I(); dreamt.v-d dreamed.v-d complained.v-d: VERB_SPPP_I(); dreaming.g complaining.g: ( & ) or ; dreaming.v complaining.v: & ; % The O+ is to handle "do you think so, too?", however, a special % target for objects like "so" or "it" would be better... % "hope.v" has the same problem. : ({@MV+} & {Ce+ or TH+ or RSe+ or Z- or (OF+ & {@MV+}) or BW-}) or [[O+ & {@MV+}]]; think.v: VERB_PLI(); thinks.v: VERB_S_T(); thought.v-d: VERB_SPPP_T() or ( & {THi+ or Z-}); thinking.g: ( & ) or ; thinking.v: & ; : {@MV+} & {THi+ or QIi+}; matter.v: VERB_S_PLI(); matters.v: & ; mattered.v-d: VERB_SPPP_I(); mattering.v: ( & ) or ; : {@MV+} & {THi+}; suffice.v: VERB_PLI(); suffices.v: VERB_S_I(); sufficed.v-d: VERB_SPPP_I(); sufficing.v: ( & ) or ; : ({@MV+} & {TH+ or Zs- or TS+ or Ce+}) or (SI*j+ & I*j+); insist.v: VERB_PLI(); insists.v: VERB_S_I(); insisted.v-d: VERB_SPPP_I(); insisting.v: ( & ) or ; : {@MV+} & {QI+}; wonder.v inquire.v: VERB_PLI(); wonders.v inquires.v: VERB_S_I(); wondered.v-d inquired.v-d: VERB_SPPP_I(); wondering.v inquiring.v: ( & ) or ; % Imperative go: "go play ball", "go take a walk", "go swimming" % Similar pattern to "please.r" -- "please play ball" etc. % "You and Rover go play with the ball." requires an S- link. % Hmm ... changes to go.v seem to have obsoleted the need for this ... % go.w: {E-} & (Wi- or S-) & I+; : {K+ or [[Pa+]] or [Pg+] or I*g+} & {@MV+}; go.v: VERB_PLI(); % SFs-: "There goes the cutest guy ever!", needs O*t to survive PP. % However, prefer Pg over O*t when possible... goes.v: ( & ( or [[O*t+ & {@MV+}]])) or ( & ) or ( & ); went.v-d: ( & ( or [[O*t+ & {@MV+}]])) or ( & ) or ( & ); % XXX TODO maybe need VJ and-able links for gone, going etc. ??? gone.v: VERB_PP(); % The keys are gone. The popcorn is all gone. gone.a: ({@E-} & Pa-) or (AJra- & {@MV+}) or ({@MV+} & AJla+); going.v: ((TOf+ or ({K+ or [[Pa+]]} & {@MV+})) & ) or ({@E-} & A+) or ; % transitive: "stay the prisoner's execution" : {({@MV+} & (Pa+ or AF-)) or ({K+} & {@MV+}) or (O+ & {@MV+})}; stay.v: VERB_PLI(); stays.v: VERB_S_T(); stayed.v-d: VERB_SPPP_T(); staying.v: ( & ) or ; : {({@MV+} & Pa+) or ({O+ or B-} & {K+} & {@MV+})}; stand.v sit.v: VERB_PLI(); stands.v sits.v: VERB_S_T(); stood.v-d sat.v-d: VERB_SPPP_T(); standing.v sitting.v: & ; standing.g sitting.g: ( & ) or or ({@E-} & A+); : ({@MV+} & {LI+ or Pa+ or AF-}) or {O+ & K+ & {@MV+}}; sound.v: VERB_PLI(); sounds.v: VERB_S_T(); sounded.v-d: VERB_SPPP_T(); sounding.v: ( & ) or ; : {({@MV+} & (LI+ or Pa+)) or ({K+ or AF-} & {@MV+})}; act.v: VERB_PLI(); acts.v: VERB_S_I(); % "be acted upon quikly" acted.v-d: VERB_SPPP_I() or ( & {K+} & {@MV+}); acting.v: ( & ) or ; % O+ & K+: She looked him over. : {({@MV+} & (LI+ or Pa+)) or ({K+ or AF-} & {@MV+}) or ((O+ & K+) & {@MV+})}; look.v: VERB_PLI(); looks.v: VERB_S_T(); looked.v-d: VERB_SPPP_T(); looking.v: ( & ) or ; : {{@MV+ or ({Xc+} & @EB+)} & OF+}; repent.v disapprove.v: VERB_PLI(); repents.v disapproves.v: VERB_S_I(); repented.v-d disapproved.v-d: VERB_SPPP_I(); repenting.v disapproving.v: ( & ) or ; : & ; talk.v: VERB_PLI(); talks.v: VERB_S_T(); talked.v-d: VERB_SPPP_T(); talking.v: ( & & ) or ; : {@MV+ or @EB+} & OF+; consist.v: VERB_PLI(); consists.v: VERB_S_I(); consisted.v-d: VERB_SPPP_I(); consisting.v: ( & ) or ; : {K+ or OF+} & {@MV+}; die.v: VERB_PLI(); dies.v: VERB_S_I(); died.v-d: VERB_SPPP_I(); dying.v: ( & ) or ; : {({[[@MV+]]} & OT+) or BT-} & {@MV+}; last.v wait.v: VERB_PLI(); lasts.v waits.v: VERB_S_I(); lasted.v-d waited.v-d: VERB_SPPP_I(); lasting.v waiting.v: & ; lasting.g waiting.g: ( & ) or ; % TRANSITIVE COMPLEX VERBS (Those that take O+) : or ({@MV+} & TO+); attempt.v undertake.v deserve.v manage.v plot.v prefer.v neglect.v afford.v commit.v profess.v desire.v: VERB_PLI(); attempts.v undertakes.v deserves.v manages.v plots.v prefers.v neglects.v affords.v commits.v professes.v desires.v: VERB_S_T(); attempted.v deserved.v managed.v plotted.v preferred.v neglected.v afforded.v committed.v professed.v-d desired.v-d: VERB_SPPP_T() or or ({@E-} & A+) or ; undertook.v-d: VERB_SP_T(); undertaken.v: VERB_PP() or ; attempting.g undertaking.g deserving.g plotting.g preferring.g neglecting.g affording.g committing.g professing.g desiring.g: ( & ) or ; managing.g: ( & ) or or ({@E-} & A+); attempting.v undertaking.v deserving.v managing.v plotting.v preferring.v neglecting.v affording.v committing.v professing.v desiring.v: & ; % like but with particle : ({@MV+} & TO+) or ((((O+ or B-) & {K+}) or (K+ & {[[@MV+]]} & O*n+) or ([[@MV+ & O*n+]])) & {@MV+}); seek.v: VERB_PLI(); seeks.v: VERB_S_T(); sought.v-d: VERB_SPPP_T() or or ; seeking.g: ( & ) or ; seeking.v: & ; : {} or ({@MV+} & TO+); decline.v fail.v hasten.v volunteer.v aim.v: VERB_PLI(); declines.v fails.v hastens.v volunteers.v aims.v: VERB_S_T(); declined.v-d hastened.v-d volunteered.v-d aimed.v-d: VERB_SPPP_T() or or ; failed.v-d: VERB_SPPP_T() or or ({@E-} & A+); declining.g failing.g hastening.g volunteering.g: ( & ) or or ({@E-} & A+); declining.v failing.v hastening.v volunteering.v aiming.v: & ; % like but with particle : ({@MV+} & TO+) or ({({O+ or B-} & {K+}) or (K+ & {[[@MV+]]} & O*n+) or [[@MV+ & O*n+]]} & {@MV+}); fight.v: VERB_PLI(); fights.v: VERB_S_T(); fought.v-d: VERB_SPPP_T() or ( & {K+} & {@MV+}) or ({K+} & ); fighting.g: ( & ) or ; fighting.v: & ; : or ({@MV+} & (TO+ or TH+ or Zs- or Ce+)); threaten.v mean.v arrange.v pledge.v: VERB_PLI(); threatens.v means.v arranges.v pledges.v: VERB_S_T(); threatened.v-d meant.v-d arranged.v-d pledged.v-d: VERB_SPPP_T() or or ({@E-} & A+) or ; meaning.g arranging.g threatening.g pledging.g: ( & ) or ; meaning.v arranging.v threatening.v pledging.v: & ; : or ({@MV+} & {TO+ or TH+ or Zs- or Ce+}); plan.v confess.v: VERB_PLI(); plans.v confesses.v: VERB_S_T(); planned.v-d confessed.v-d: VERB_SPPP_T() or or ({@E-} & A+) or ; planning.g confessing.g: ( & ) or ; planning.v confessing.v: & ; : or ({@MV+} & {QI+ or TH+ or TO+ or Ce+ or RSe+ or Zs-}); decide.v resolve.v: VERB_PLI(); decides.v resolves.v: VERB_S_T(); decided.v-d resolved.v-d: VERB_SPPP_T() or ( & {THi+}) or ; deciding.v resolving.v: & ; deciding.g resolving.g: ( & ) or ; : {} or ({@MV+} & (QI+ or TH+ or TO+ or Ce+ or RSe+ or Zs- or Pg+)); remember.v forget.v: VERB_PLI(); remembers.v forgets.v: VERB_S_T(); remembered.v-d: VERB_SPPP_T() or or ; forgot.v-d: VERB_SP_T(); forgotten.v: VERB_PP() or or ({@E-} & A+) or ; remembering.g forgetting.g: ( & ) or ; remembering.v forgetting.v: & ; : {} or ({@MV+} & (TH+ or TO+ or Ce+ or RSe+ or Zs- or QI+ or (OF+ & {@MV+}))); learn.v: VERB_PLI(); learns.v: VERB_S_T(); learned.v-d: VERB_SPPP_T() or ( & {THi+}) or ; learning.g: ( & ) or ; learning.v: & ; : or ({@MV+} & (TO+ or TH+ or Ce+ or RSe+ or Z- or Pg+ or TS+ or (SI*j+ & I*j+))); propose.v: VERB_PLI(); proposes.v: VERB_S_T(); proposed.v-d: VERB_SPPP_T() or ( & {THi+ or TSi+ or Z-}) or ({@E-} & A+) or ; proposing.g: ( & ) or ; proposing.v: & ; : or ({@MV+} & ((TO+ or TH+ or Z- or TS+ or ((SI*j+ or SFI**j+) & I*j+)))); demand.v: VERB_PLI(); demands.v: VERB_S_T(); demanded.v-d: VERB_SPPP_T() or or ; demanding.v: & ; demanding.g: ( & ) or ; : {} or ({@MV+} & ((TO+ or TH+ or Z- or TS+ or ((SI*j+ or SFI**j+) & I*j+)))); beg.v plead.v: VERB_PLI(); begs.v pleads.v: VERB_S_T(); begged.v-d pleaded.v-d: VERB_SPPP_T() or or ; begging.v pleading.v: & ; begging.g pleading.g: ( & ) or ; : ; bear.v: ( & ( or ({@MV+} & (Pg+ or TH+ or TO+)))) or ( & ); bears.v: VERB_S_T(); bore.v-d: VERB_SPPP_T(); born.v: VERB_PP() or or ; bearing.g: ( & ) or ; bearing.v: & ; : or ({@MV+} & (TO+ or Pg+)); love.v dislike.v hate.v: VERB_PLI(); loves.v dislikes.v hates.v: VERB_S_T(); loved.v-d disliked.v-d hated.v-d: VERB_SPPP_T() or or ; loving.g disliking.g hating.g: ( & ) or ; loving.v disliking.v hating.v: & ; % "It begins here" : {} or ({@MV+} & ({TO+} or Pg+)); begin.v continue.v cease.v: VERB_PLI(); begins.v continues.v ceases.v: VERB_S_T(); ceased.v-d: VERB_SPPP_T() or or ; continued.v-d: VERB_SPPP_T() or or or ({@E-} & A+); began.v-d: VERB_SP_T(); begun.v: VERB_PP() or or ; beginning.g ceasing.g: ( & ) or ; continuing.g: ( & ) or or ({@E-} & A+); beginning.v continuing.v ceasing.v: & ; % with particle : ((({O+ or B-} & {K+}) or (K+ & {[[@MV+]]} & O*n+) or [[@MV+ & O*n+]]) & {@MV+}) or ({@MV+} & (TO+ or Pg+)); start.v stop.v try.v: VERB_PLI(); starts.v stops.v tries.v: VERB_S_T(); started.v-d stopped.v-d tried.v-d: VERB_SPPP_T() or ( & {K+} & {@MV+}) or ({K+} & ); starting.g stopping.g trying.g: ( & ) or ; starting.v stopping.v trying.v: & ; % The Pg+ doesn't really apply to all of these ... : or ({@MV+} & (TH+ or Zs-)) or ({@MV+} & Pg+); recognize.v dispute.v accept.v calculate.v record.v deduce.v envision.v recount.v signify.v clarify.v disclose.v recollect.v adduce.v posit.v reiterate.v infer.v presuppose.v: VERB_PLI(); recognizes.v disputes.v calculates.v records.v deduces.v accepts.v envisions.v recounts.v signifies.v clarifies.v discloses.v recollects.v adduces.v posits.v reiterates.v infers.v presupposes.v: VERB_S_T(); recognized.v-d disputed.v-d accepted.v-d calculated.v-d recorded.v-d deduced.v-d envisioned.v-d recounted.v-d signified.v-d clarified.v-d disclosed.v-d recollected.v-d adduced.v-d posited.v-d reiterated.v-d inferred.v-d presupposed.v-d: VERB_SPPP_T() or ( & {THi+}) or ({@E-} & A+) or ; recognizing.g disputing.g accepting.g calculating.g deducing.g recording.g envisioning.g recounting.g signifying.g clarifying.g disclosing.g recollecting.g adducing.g positing.g reiterating.g inferring.g presupposing.g: ( & ) or ; recognizing.v disputing.v accepting.v calculating.v deducing.v recording.v envisioning.v recounting.v signifying.v clarifying.v disclosing.v recollecting.v adducing.v positing.v reiterating.v inferring.v presupposing.v: & ; undisputed.v: ( & {THi+}); : {} or ({@MV+} & TH+); repeat.v reflect.v provide.v counter.v signal.v: VERB_PLI(); repeats.v reflects.v provides.v counters.v signals.v: VERB_S_T(); repeated.v-d reflected.v-d countered.v-d signaled.v-d signalled.v-d: VERB_SPPP_T() or or or ({@E-} & A+); provided.v-d: VERB_SPPP_T() or or or ({@E-} & A+) or ((TH+ or Ce+) & (({{Xd-} & Xc+} & CO+) or ({Xd- & Xc+} & MVs-))); repeating.v reflecting.v providing.v countering.v signaling.v signalling.v: & ; repeating.g reflecting.g countering.g signaling.g signalling.g: ( & ) or ; providing.g: ( & ) or or ((TH+ or Ce+) & (({{Xd-} & Xc+} & CO+) or ({Xd- & Xc+} & MVs-))); : or ({@MV+} & (Ce+ or TH+ or RSe+ or Pg+)); sense.v doubt.v reaffirm.v reckon.v regret.v proclaim.v ascertain.v discern.v stipulate.v affirm.v certify.v trust.v postulate.v ensure.v imply.v verify.v boast.v: VERB_PLI(); senses.v reaffirms.v doubts.v reckons.v regrets.v proclaims.v stipulates.v ascertains.v discerns.v affirms.v certifies.v trusts.v postulates.v ensures.v implies.v verifies.v boasts.v: VERB_S_T(); doubted.v-d reaffirmed.v-d sensed.v-d reckoned.v-d regretted.v-d stipulated.v-d proclaimed.v-d ascertained.v-d discerned.v-d affirmed.v-d certified.v-d trusted.v-d postulated.v-d ensured.v-d implied.v-d verified.v-d boasted.v-d: VERB_SPPP_T() or ( & {THi+}) or ({@E-} & A+) or ; reaffirming.g sensing.g doubting.g stipulating.g reckoning.g regretting.g proclaiming.g ascertaining.g discerning.g affirming.g certifying.g trusting.g postulating.g ensuring.g implying.g verifying.g boasting.g: ( & ) or ; sensing.v doubting.v reckoning.v reaffirming.v stipulating.v regretting.v proclaiming.v ascertaining.v discerning.v affirming.v certifying.v trusting.v postulating.v ensuring.v implying.v verifying.v boasting.v: & ; % Pv+ link: "John imagines himself lost in the woods." % Pg+ link: "John imagines himself singing from a mountaintop" % AZ+ link: "John imagined Mary as innocent as a lamb" % similar to vc-see : or ({@MV+} & (Ce+ or TH+ or RSe+ or Z-)) or ((B- or O+) & {@MV+} & {Pg+ or AZ+ or Pv+}) or ({@MV+} & Pg+); imagine.v: VERB_PLI(); imagines.v: VERB_S_T(); imagined.v: VERB_SPPP_T() or ( & {THi+}) or ({@E-} & A+) or ; imagining.g: ( & ) or ; imagining.v: & ; % Pa**j link: The doctor declared him insane. : or ({@MV+} & (Ce+ or TH+ or RSe+ or Pg+ or Z-)) or ((B- or O+) & ({@MV+} & Pa**j+)); declare.v fear.v conclude.v suspect.v concede.v presume.v foresee.v emphasize.v maintain.v acknowledge.v note.v confirm.v stress.v assume.v: VERB_PLI(); declares.v fears.v concludes.v suspects.v concedes.v presumes.v foresees.v emphasizes.v maintains.v acknowledges.v notes.v confirms.v stresses.v assumes.v: VERB_S_T(); declared.v feared.v concluded.v suspected.v conceded.v presumed.v emphasized.v maintained.v acknowledged.v noted.v confirmed.v-d stressed.v-d assumed.v-d: VERB_SPPP_T() or ( & {THi+ or ({@MV+} & Pa+) }) or ({@E-} & A+) or ; foresaw.v-d: VERB_SP_T(); foreseen.v: VERB_PP() or ( & {@MV+ or THi+}) or ({@E-} & A+) or ; declaring.g fearing.g concluding.g suspecting.g conceding.g presuming.g foreseeing.g emphasizing.g maintaining.g acknowledging.g noting.g confirming.g stressing.g assuming.g: ( & ) or ; declaring.v fearing.v concluding.v suspecting.v conceding.v presuming.v foreseeing.v emphasizing.v maintaining.v acknowledging.v noting.v confirming.v stressing.v assuming.v: & ; : {} or ({@MV+} & (Ce+ or TH+ or RSe+)); believe.v answer.v worry.v protest.v: VERB_PLI(); believes.v answers.v worries.v protests.v: VERB_S_T(); believed.v-d answered.v-d worried.v-d protested.v-d: VERB_SPPP_T() or ( & {THi+ or TOf+}) or ; believing.g answering.g worrying.g protesting.g: ( & ) or ; believing.v answering.v worrying.v protesting.v: & ; % with particle : ({@MV+} & (Ce+ or TH+ or RSe+)) or ((({O+ or B-} & {K+}) or (K+ & {[[@MV+]]} & O*n+) or [[@MV+ & O*n+]]) & {@MV+}); rule.v add.v: VERB_PLI(); rules.v adds.v: VERB_S_T(); ruled.v-d added.v-d: VERB_SPPP_T() or ( & {({@MV+} & (THi+ or TOf+)) or ({K+} & {@MV+})}) or ({K+} & ) or ({@E-} & A+); ruling.g adding.g: ( & ) or ; ruling.v adding.v: & ; % with particle : ({@MV+} & (TH+ or Zs- or Ce+)) or ((((O+ or B-) & {K+}) or (K+ & {[[@MV+]]} & O*n+)) & {@MV+}) or ([[@MV+ & O*n+]]); figure.v: VERB_PLI(); figures.v: VERB_S_T(); figured.v-d: VERB_SPPP_T() or ( & {K+} & {@MV+}) or ({K+} & ); figuring.g: ( & ) or ; figuring.v: & ; % (QI+ & {MV+}): "I did not say why until recently" : or ({@MV+} & (Ce+ or TH+ or RSe+ or Zs-)) or ({@MV+} & (QI+ & {MV+})); predict.v realize.v discover.v determine.v announce.v say.v mention.v admit.v recall.v reveal.v state.v observe.v indicate.v analyse.v analyze.v assess.v establish.v evaluate.v examine.v question.v test.v hypothesize.v hypothesise.v document.v envisage.v: VERB_PLI(); predicts.v realizes.v discovers.v determines.v announces.v says.v mentions.v admits.v recalls.v reveals.v states.v observes.v indicates.v analyses.v analyzes.v assesses.v establishes.v evaluates.v examines.v questions.v tests.v hypothesizes.v hypothesises.v envisages.v documents.v: VERB_S_T(); predicted.v realized.v discovered.v determined.v announced.v mentioned.v admitted.v recalled.v revealed.v stated.v observed.v indicated.v analysed.v analyzed.v assessed.v established.v evaluated.v examined.v questioned.v tested.v hypothesized.v-d hypothesised.v-d well-established.v-d documented.v-d envisaged.v-d: VERB_SPPP_T() or ( & {THi+}) or ({@E-} & A+) or ; said.v-d: VERB_SPPP_T() or ({@E-} & (Pvf- or [[Mv-]]) & {@MV+} & {THi+}) or [[{@E-} & A+]] or [[]]; predicting.g realizing.g discovering.g determining.g announcing.g saying.g mentioning.g admitting.g recalling.g revealing.g stating.g observing.g indicating.g analysing.g analyzing.g assessing.g establishing.g evaluating.g examining.g questioning.g testing.g hypothesizing.g hypothesising.g documenting.g envisaging.g: ( & ) or ; predicting.v realizing.v discovering.v determining.v announcing.v saying.v mentioning.v admitting.v recalling.v revealing.v stating.v observing.v indicating.v analysing.v analyzing.v assessing.v establishing.v evaluating.v examining.v questioning.v testing.v hypothesizing.v hypothesising.v documenting.v envisaging.v: & ; : {} or ({@MV+} & (TH+ or QI+ or Ce+ or RSe+ or Zs-)); guess.v estimate.v understand.v notice.v explain.v demonstrate.v: VERB_PLI(); guesses.v estimates.v understands.v notices.v explains.v demonstrates.v: VERB_S_T(); guessed.v-d understood.v-d noticed.v-d explained.v-d demonstrated.v-d: VERB_SPPP_T() or ( & {THi+}) or ; estimated.v-d: VERB_SPPP_T() or ( & {THi+}) or or ({@E-} & A+); guessing.g estimating.g understanding.g noticing.g explaining.g demonstrating.g: ( & ) or ; guessing.v estimating.v understanding.v noticing.v explaining.v demonstrating.v: & ; % (QI+ & {MV+}): "I did not know why until recently" : {} or ({@MV+} & (((OF+ or QI+)& {@MV+}) or Ce+ or TH+ or RSe+ or Zs-)); know.v: VERB_PLI(); knows.v: VERB_S_T(); knew.v-d: VERB_SP_T(); known.v: VERB_PP() or ( & {THi+ or TOf+ or QIi+}) or or ({@E-} & A+); knowing.g: ( & ) or ; knowing.v: & ; : or ({@MV+} & (TH+ or Ce+ or RSe+ or Zs- or TS+ or ((SI*j+ or SFI**j+) & I*j+))); request.v: VERB_PLI(); requests.v: VERB_S_T(); requested.v-d: VERB_SPPP_T() or ( & {THi+ or TSi+}) or ({@E-} & A+) or ; requesting.g: ( & ) or ; requesting.v: & ; : or ({@MV+} & (Pa+ or TH+ or Ce+ or RSe+ or AF- or Vf+ or (LI+ or {@MV+}) or [[Pv+]])); feel.v: VERB_PLI(); feels.v: VERB_S_T(); felt.v-d: VERB_SPPP_T() or ( & {THi+}) or ; feeling.g: ( & ) or ; feeling.v: & ; : {} or ({@MV+} & (QI+ or TH+ or Pg+)); mind.v: VERB_PLI(); minds.v: VERB_S_T(); minded.v-d: VERB_SPPP_T() or or ; minding.g: ( & ) or ; minding.v: & ; : {} or ({@MV+} & QI+); study.v: VERB_PLI(); studies.v: VERB_S_T(); studied.v-d: VERB_SPPP_T() or or ({@E-} & A+) or ; studying.g: ( & ) or ; studying.v: & ; % QI+ link: "I will discuss which vitamins I take" : or ({@MV+} & (Pg+ or QI+)); discuss.v: VERB_PLI(); discusses.v: VERB_S_T(); discussed.v-d: VERB_SPPP_T() or or ({@E-} & A+) or ; discussing.g: ( & ) or ; discussing.v: & ; : or ({@MV+} & Pg+); oppose.v enjoy.v advocate.v contemplate.v entail.v necessitate.v justify.v risk.v avoid.v involve.v favor.v: VERB_PLI(); opposes.v enjoys.v advocates.v contemplates.v entails.v necessitates.v justifies.v risks.v avoids.v involves.v favors.v: VERB_S_T(); opposed.v-d enjoyed.v-d advocated.v-d contemplated.v-d entailed.v-d necessitated.v-d justified.v-d risked.v-d avoided.v-d involved.v-d favored.v-d: VERB_SPPP_T() or or ({@E-} & A+) or ; opposing.g enjoying.g advocating.g contemplating.g entailing.g necessitating.g justifying.g risking.g avoiding.g favoring.g involving.g: ( & ) or ; opposing.v enjoying.v advocating.v contemplating.v entailing.v necessitating.v justifying.v risking.v avoiding.v involving.v favoring.v: & ; : {} or ({@MV+} & Pg+); finish.v practice.v resist.v: VERB_PLI(); finishes.v practices.v resists.v quits.v: VERB_S_T(); % : "I want it finished" finished.v-d practiced.v-d resisted.v-d quitted.v-d: VERB_SPPP_T() or or ({@E-} & A+) or ; quit.v-d: VERB_PLI() or VERB_SPPP_T() or or ({@E-} & A+) or ; finishing.g practicing.g resisting.g quitting.g: ( & ) or ; finishing.v practicing.v resisting.v quitting.v: & ; % Pv-: "I want it over with" over_with: ; % with particle % and also Pa**j for "The witch turned him green" : ((O+ or (K+ & {[[@MV+]]} & O*n+) or ({O+ or B-} & {K+}) or ((O+ or B-) & Pa**j+) or [[@MV+ & O*n+]]) & {@MV+}) or ({@MV+} & (Pa+ or AF-)); turn.v: VERB_PLI(); turns.v: VERB_S_T(); turned.v-d: VERB_SPPP_T() or ( & {K+} & {@MV+}) or ({K+} & ); turning.v: & ; turning.g: ( & ) or ; % plus TI : ((O+ or B- or TI+ or [[@MV+ & (O*n+ or TI+)]] or [[Pv+]]) & {@MV+}) or ({@MV+} & (AF- or Pa+)); become.v: VERB_S_PLI() or ( & ) or ; becomes.v: & ; became.v-d: & ; becoming.g: ( & ) or ; becoming.v: & ; % plus TI : ({@MV+} & (AF- or Pa+)) or ({O+ or B- or TI+ or [[@MV+ & (O*n+ or TI+)]] or [[Pv+]]} & {@MV+}); remain.v: VERB_PLI(); remains.v: VERB_S_T(); remained.v-d: VERB_SPPP_T(); remaining.g: ( & ) or or ({@E-} & A+); remaining.v: & ; % plus particle : ({@MV+} & (AF- or Pa+)) or ((({O+ or B-} & {K+}) or (K+ & {[[@MV+]]} & O*n+) or [[@MV+ & O*n+]]) & {@MV+}); grow.v: VERB_PLI(); grows.v: VERB_S_T(); grew.v-d: VERB_SP_T(); grown.v: VERB_PP() or ( & {K+} & {@MV+}) or ({@E-} & A+) or ({K+} & ); growing.g: ( & ) or ({@E-} & A+) or ; growing.v: & ; % plus OF : {O+ or B- or [[@MV+ & O*n+]] or ({@MV+} & OF+)} & {@MV+}; approve.v: VERB_PLI(); approves.v: VERB_S_T(); approved.v-d: VERB_SPPP_T() or or ({@E-} & A+) or ; approving.g: ( & ) or ; approving.v: & ; % plus OF : (O+ or B- or [[@MV+ & O*n+]] or ({@MV+} & OF+)) & {@MV+}; dispose.v conceive.v: VERB_PLI(); disposes.v conceives.v: VERB_S_T(); disposed.v-d conceived.v-d: VERB_SPPP_T() or or ({@E-} & A+) or ; disposing.g conceiving.g: ( & ) or ; disposing.v conceiving.v: & ; % plus particle : ((K+ & {[[@MV+]]} & O*n+) or ({O+ or B-} & {K+}) or [[@MV+ & O*n+]] or OF+) & {@MV+}; speak.v: VERB_PLI(); speaks.v: VERB_S_T(); spoke.v-d: VERB_SP_T(); spoken.v: VERB_PP() or ( & {K+} & {@MV+}) or ({K+} & ) or ({@E-} & A+); speaking.v: & ; speaking.g: ( & ) or or ({@E-} & A+); : or ({@MV+} & ((LI+ & {@MV+}) or AF- or Pa+ or OF+)); taste.v: VERB_PLI(); tastes.v: VERB_S_T(); tasted.v-d: VERB_SPPP_T() or or ; tasting.g: ( & ) or ; tasting.v: & ; : {} or ({@MV+} & ((LI+ & {@MV+}) or AF- or Pa+ or OF+)); reek.v smell.v: VERB_PLI(); reeks.v smells.v: VERB_S_T(); reeked.v-d smelled.v-d: VERB_SPPP_T() or or ; reeking.g smelling.g: ( & ) or ; reeking.v smelling.v: & ; % plus partcle and Vt : (((K+ & {[[@MV+]]} & O*n+) or ((O+ or B-) & {K+ or Vt+}) or [[@MV+ & O*n+]]) & {@MV+}) or ({O+} & (OT+ or BT-) & {@MV+} & {(TOt+ & B+) or TOi+}) or (OXii+ & Vtg+ & {@MV+} & TH+) or @MV+; take.v: VERB_S_PLI(); takes.v: & ; took.v-d: & ; taken.v: ( & ) or ( & {K+} & {@MV+}) or ({@E-} & A+) or ({K+} & ) or (Pvf- & Vtg+ & THi+); taking.v: & ; taking.g: ( & ) or ; for_granted: Vtg-; % VERBS TAKING [OBJ] + [OTHER COMPLEMENT] % basically, all these are plus mess : ((K+ & {[[@MV+]]} & O*n+) or ((O+ or B-) & (K+ or Pp+ or WR-)) or (Vp+ & (Zs- or MVa+))) & {@MV+}; put.v-d: VERB_SPPP_T() or ( & ) or ( & (K+ or Pp+ or WR-) & {@MV+}) or ((K+ or Pp+) & ); puts.v: VERB_S_T(); putting.v: & ; putting.g: ( & ) or ; % K+ & O*n+: "He costed out the plan" : (( or (K+ & O*n+) or (B- & {O+})) & {@MV+} & {TOi+}) or ([[@MV+ & O*n+]]); cost.v-d: VERB_S_PLI() or ( & ); costed.v-d: VERB_SPPP_T() or ( & (({K+} & {@MV+}) or Pa+ or Pg+)) or ({K+ or Pa+ or Pg+} & ); costs.v: & ; costing.v: & ; costing.g: ( & ) or ; % ditransitive : ( & {@MV+}) or (K+ & {[[@MV+]]} & O*n+) or (B- & O+) or ((O+ or B-) & (({@MV+} & (Pa+ or AF- or Pg+)) or ({K+} & {@MV+}))) or ([[@MV+ & O*n+]]) or ({@MV+} & (TH+ or Ce+ or RSe+)); find.v: VERB_PLI(); finds.v: VERB_S_T(); found.v-d: VERB_SPPP_T() or ( & (({K+ or AF-} & {@MV+}) or Pa+ or Pg+)) or ({K+ or Pa+ or Pg+} & ); finding.v: & ; finding.g: ( & ) or ; % ditranstive : ((O+ or B-) & (({K+} & {@MV+}) or ({@MV+} & (Pa+ or AF- or Pv+)))) or (( or (K+ & {[[@MV+]]} & O*n+) or K+ or (B- & O+) ) & {@MV+}) or ({@MV+} & (Pa+ or AF- or Pv+ or Pp+ or TO+)); get.v: VERB_PLI(); gets.v: VERB_S_T(); got.v-d: VERB_SPPP_T(); gotten.v: VERB_PP() or ( & {K+ or Pp+} & {@MV+}) or ({K+ or Pp+} & ); getting.v: & ; getting.g: ( & ) or ; : ((O+ or B-) & (({K+} & {@MV+}) or ({@MV+} & {Pa+ or AF- or Pv+ or Pg+}))) or ({(K+ & {[[@MV+]]} & O*n+) or ([[@MV+ & O*n+]])} & {@MV+}); leave.v: VERB_PLI(); leaves.v: VERB_S_T(); left.v-d: VERB_SPPP_T() or ( & (({K+ or AF-} & {@MV+}) or Pv+ or Pa+ or Pg+)) or ({K+ or ({@MV+} & (Pv+ or Pa+ or Pg+))} & ); leaving.v: & ; leaving.g: ( & ) or ; : ((O+ or (K+ & {[[@MV+]]} & O*n+) or [[@MV+ & O*n+]] or Vk+) & {@MV+}) or ({O+ or B-} & ((K+ & {@MV+}) or ({@MV+} & (Pa+ or AF- or Pg+ or Pv+)))); keep.v: VERB_PLI(); keeps.v: VERB_S_T(); kept.v-d: VERB_SPPP_T() or ( & (({K+ or AF-} & {@MV+}) or Pa+ or Pg+ or Pv+)) or ({K+ or ({@MV+} & (Pa+ or Pg+ or Pv+))} & ); keeping.v: & ; keeping.g: ( & ) or ; watch.i vigil.i pace.i: Vk-; track.i: Vk- & {OF+}; : ((K+ & {[[@MV+]]} & O*n+) or ({O+ or B-} & {K+ or Vs+}) or [[@MV+ & O*n+]]) & {@MV+}; set.v-d: VERB_SPPP_T() or ( & ) or ( & {K+ or Vs+} & {@MV+}) or ({@E-} & A+) or ({K+ or Vs+} & ); sets.v: VERB_S_T(); setting.v: & ; setting.g: ( & ) or or ({@E-} & A+); free.i straight.i loose.i: Vs- & {MV+}; : ((K+ & {[[@MV+]]} & O*n+) or ({O+ or B-} & {K+ or Vh+}) or [[@MV+ & O*n+]]) & {@MV+}; hold.v: VERB_PLI(); holds.v: VERB_S_T(); held.v-d: VERB_SPPP_T() or ( & {K+ or Vh+} & {@MV+}) or ({@E-} & A+) or ({K+ or Vh+} & ); holding.v: & ; holding.g: ( & ) or ; hostage.i captive.i: Vh- or Vth-; : ({@MV+} & (Ce+ or TH+ or RSe+ or Z- or TO+)) or ((O+ or OX+ or B-) & {@MV+} & {TOo+}) or ([[@MV+ & O*n+]]); expect.v claim.v: VERB_PLI(); expects.v claims.v: VERB_S_T(); expected.v-d claimed.v-d: VERB_SPPP_T() or ( & {TOf+ or THi+ or Z-}) or ({@E-} & A+) or ({@MV+} & {TO+} & ); expecting.g claiming.g: ( & ) or ; expecting.v claiming.v: & ; : ({@MV+} & (TH+ or Z- or TO+)) or ((O+ or OX+ or B-) & {@MV+} & TOo+); intend.v: VERB_PLI(); intends.v: VERB_S_T(); intended.v-d: VERB_SPPP_T() or ( & {TO+ or Z- or @MV+}) or ({@E-} & A+) or ({@MV+} & {TO+} & ); intending.g: ( & ) or ; intending.v: & ; : (N+ & I+) or ({@MV+} & TO+) or ((O+ or B-) & {@MV+} & TOo+); dare.v: VERB_PLI(); dares.v: VERB_S_T(); dared.v-d: VERB_SPPP_T() or ( & TO+) or ({@MV+} & TO+ & ); daring.g: ( & ) or ; daring.v: & ; : ({@MV+} & (TO+ or Pg+)) or ((O+ or B- or OX+) & {@MV+} & {TOo+}) or ([[@MV+ & O*n+]]); like.v: VERB_PLI(); likes.v: VERB_S_T(); liked.v-d: VERB_SPPP_T() or or ; liking.g: ( & ) or ; liking.v: & ; % ditranstive : (( or (B- & {O+})) & {@MV+}) or ({@MV+} & TO+) or ([[@MV+ & O*n+]]); offer.v: VERB_PLI(); offers.v: VERB_S_T(); offered.v-d: VERB_SPPP_T() or ( & {O+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or [[@MV+ & O*n+]]} or ); offering.g: ( & ) or ; offering.v: & ; % ditransitive % unlike vc-offer, "to" is optional. : (( or (B- & {O+})) & {@MV+}) or ({@MV+} & {TO+}) or ([[@MV+ & O*n+]]); refuse.v: VERB_PLI(); refuses.v: VERB_S_T(); refused.v-d: VERB_SPPP_T() or ( & {O+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or [[@MV+ & O*n+]]} & ); refusing.g: ( & ) or ; refusing.v: & ; % Pa**j+: predicative adjective -- "I want it green", "I want it very shiny." : ({@MV+} & TO+) or ((O+ or OX+ or B-) & {@MV+} & {TOo+ or Pv+ or Pa**j+}) or ([[@MV+ & O*n+]]) or [[CX- & {@MV+}]]; want.v need.v: VERB_PLI(); need.i: {@E-} & (S- or (RS- & B-)) & (N+ & I+); wants.v needs.v: VERB_S_T(); wanted.v-d needed.v-d: VERB_SPPP_T() or or ({@E-} & A+) or ; wanting.g needing.g: ( & ) or ; wanting.v needing.v: & ; : ({@MV+} & {TO+}) or ((O+ or B-) & {@MV+} & {TOo+}) or ([[@MV+ & O*n+]]); choose.v: VERB_PLI(); chooses.v: VERB_S_T(); chose.v-d: VERB_SP_T(); chosen.v: VERB_PP() or ( & {TO+}) or ({@E-} & A+) or ({@MV+} & {TO+} & ); choosing.g: ( & ) or ; choosing.v: & ; % is identical to : ({@MV+} & {TO+}) or ((O+ or B-) & {@MV+} & {TOo+}) or ([[@MV+ & O*n+]]); prepare.v press.v: VERB_PLI(); prepares.v presses.v: VERB_S_T(); prepared.v-d pressed.v-d: VERB_SPPP_T() or or ({@E-} & A+) or ; preparing.g pressing.g: ( & ) or ; preparing.v pressing.v: & ; : ((O+ or B-) & {@MV+} & {TOo+}) or ({@MV+} & (TH+ or Ce+ or TS+ or (SI*j+ & I*j+))) or Zs- or ([[@MV+ & O*n+]]); require.v: VERB_PLI(); requires.v: VERB_S_T(); required.v-d: VERB_SPPP_T() or ( & {TO+ or TSi+}) or ({@E-} & A+) or ({@MV+} & {TO+} & ); requiring.g: ( & ) or ; requiring.v: & ; : ({@MV+} & (TH+ or Zs- or TS+ or Ce+)) or ((O+ or B-) & {@MV+} & {TOo+}) or ([[@MV+ & {O*n+}]]); command.v order.v urge.v: VERB_PLI(); commands.v orders.v urges.v: VERB_S_T(); : VERB_SPPP_T() or ( & {TO+ or TH+ or TS+}) or ({@MV+} & {TH+ or TO+ or TS+} & ); commanded.v-d urged.v-d: ; % An "ordered list" ordered.v: or ({@E-} & A+); commanding.g ordering.g urging.g: ( & ) or ; commanding.v ordering.v urging.v: & ; % ditransitive : ({@MV+} & (TH+ or Pg+)) or ((O+ or OX+ or B-) & {@MV+} & {TOo+ or Pa+}) or (((O+ & (B- or ({[[@MV+]]} & O*n+))) or ([[@MV+ & O*n+]])) & {@MV+}); consider.v: VERB_PLI(); considers.v: VERB_S_T(); considered.v-d: VERB_SPPP_T() or ( & (({@MV+} & (TOf+ or Pa+)) or ({O+ or B- or [[@MV+ & O*n+]]} & {@MV+}))) or ((({@MV+} & (TOf+ or Pa+)) or ({O+ or [[@MV+ & O*n+]]})) & ); considering.g: ( & ) or ; considering.v: & ; : ({@MV+} & (TH+ or Ce+)) or ((O+ or OX+ or B-) & {@MV+} & {TOo+}) or ([[@MV+ & O*n+]]); perceive.v: VERB_PLI(); perceives.v: VERB_S_T(); perceived.v-d: VERB_SPPP_T() or ( & {TO+}) or ({@E-} & A+) or ({@MV+} & {TO+} & ); perceiving.g: ( & ) or ; perceiving.v: & ; : ({@MV+} & {TH+ or Z- or Ce+}) or ((O+ or B-) & {@MV+} & {TOo+}) or ([[@MV+ & O*n+]]); report.v: VERB_PLI(); reports.v: VERB_S_T(); reported.v-d: VERB_SPPP_T() or ( & {TOf+ or Z-}) or ({@E-} & A+) or ({@MV+} & {TO+} & ); reporting.g: ( & ) or ; reporting.v: & ; : ((O+ or B-) & {@MV+} & {TH+ or Ce+ or TOo+}) or ({@MV+} & {TH+ or Zs-}) or ([[@MV+ & O*n+]]); caution.v: VERB_PLI(); cautions.v: VERB_S_T(); cautioned.v-d: VERB_SPPP_T() or ( & ((O+ or B-) & {@MV+} & {TH+ or Ce+ or Zs- or TO+})) or ({@MV+} & {TH+ or Ce+ or TO+} & ); cautioning.g: ( & ) or ; cautioning.v: & ; : ((O+ or B-) & {@MV+} & {TH+ or Ce+ or TOo+ or (OF+ & {@MV+})}) or ({@MV+} & {TH+ or Zs- or (OF+ & {@MV+})}) or ([[@MV+ & O*n+]]); warn.v advise.v: VERB_PLI(); warns.v advises.v: VERB_S_T(); warned.v-d advised.v-d: VERB_SPPP_T() or ( & {TH+ or Ce+ or Zs- or TO+ or (OF+ & {@MV+})}) or ({@MV+} & {TH+ or Ce+ or TO+ or OF+} & ); warning.g advising.g: ( & ) or ; warning.v advising.v: & ; : ((B- or O+) & {@MV+} & {I*j+ or Pg+}) or ({@MV+} & {TH+ or Zs- or Ce+ or (OF+ & {@MV+})}) or ([[@MV+ & O*n+]]); hear.v: VERB_PLI(); hears.v: VERB_S_T(); heard.v-d: VERB_SPPP_T() or ( & {Pg+}) or ({@MV+} & {Pg+} & ); hearing.g: ( & ) or ; hearing.v: & ; : ((B- or O+) & {@MV+} & {I*j+ or Pg+ or AZ+ or Pv+}) or ({@MV+} & {TH+ or Zs- or QI+ or Ce+}) or ([[@MV+ & O*n+]]); see.v: VERB_PLI(); sees.v: VERB_S_T(); saw.v-d: VERB_SP_T(); seen.v: VERB_PP() or ( & {Pg+ or AZ+}) or ({@MV+} & {Pg+ or AZ+} & ); seeing.g: ( & ) or ; seeing.v: & ; % ditranstive verbs -- taking direct and indirect objects : ( or (B- & {O+}) or ([[@MV+ & O*n+]])) & {@MV+}; owe.v deliver.v accord.v award.v term.v grant.v begrudge.v assign.v rename.v repay.v dub.v entitle.v fine.v: VERB_PLI(); owes.v delivers.v accords.v awards.v terms.v grants.v begrudges.v assigns.v renames.v repays.v dubs.v entitles.v fines.v: VERB_S_T(); owed.v delivered.v accorded.v awarded.v granted.v-d begrudged.v-d assigned.v-d repaid.v-d fined.v-d: VERB_SPPP_T() or ( & {O+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or [[@MV+ & O*n+]]} & ); owing.v delivering.v according.v awarding.v terming.v granting.v begrudging.v assigning.v renaming.v repaying.v dubbing.v entitling.v fining.v: & ; owing.g delivering.g according.g awarding.g terming.g granting.g begrudging.g assigning.g renaming.g repaying.g dubbing.g entitling.g fining.g: ( & ) or ; % extended linking requirements based on the above termed.v-d dubbed.v-d entitled.v-d renamed.v-d: VERB_SPPP_T() or ( & {O+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or [[@MV+ & O*n+]]} & ) or ({@E-} & A+); % ditransitive % 'Give' requires both direct *and* indirect object: X gave Y a Z. % 'sent', 'poured': optional indirect object. : ((B- & {O+ or K+}) or or (O+ & K+) or (K+ & ({[[@MV+]]} & O*n+)) or ([[@MV+ & O*n+]])) & {@MV+}; give.v send.v buy.v bring.v lend.v issue.v hand.v pour.v telegraph.v wire.v: VERB_PLI(); gives.v sends.v buys.v brings.v lends.v issues.v hands.v pours.v telegraphs.v wires.v: VERB_S_T(); sent.v-d bought.v-d brought.v-d lent.v-d handed.v-d: VERB_SPPP_T() or ( & {O+ or B- or K+ or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or K+ or [[@MV+ & O*n+]]} & ); issued.v-d poured.v-d telegraphed.v-d wired.v-d: VERB_SPPP_T() or ({@E-} & A+) or ( & {O+ or B- or K+ or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or K+ or [[@MV+ & O*n+]]} & ); gave.v-d: VERB_SP_T(); given.v: VERB_PP() or ({@E-} & A+) or ( & {O+ or B- or K+ or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or K+ or [[@MV+ & O*n+]]} & ); giving.g sending.g buying.g bringing.g lending.g issuing.g handing.g pouring.g telegraphing.g wiring.g: ( & ) or ; giving.v sending.v buying.v bringing.v lending.v issuing.v handing.v pouring.v telegraphing.v wiring.v: & ; % ditransitive : {(B- & {O+ or K+}) or or (O+ & K+) or (K+ & {{[[@MV+]]} & O*n+}) or ([[@MV+ & O*n+]])} & {@MV+}; pass.v pay.v sell.v deal.v: VERB_PLI(); passes.v pays.v sells.v deals.v: VERB_S_T(); passed.v-d paid.v-d payed.v-d sold.v-d dealt.v-d: VERB_SPPP_T() or ( & {O+ or B- or K+ or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or K+ or [[@MV+ & O*n+]]} & ); passing.g paying.g selling.g dealing.g: ( & ) or ; passing.v paying.v selling.v dealing.v: & ; % ditransitive : {(B- & {O+ or Pa+ or K+}) or or (O+ & (Pa+ or K+)) or (K+ & {{[[@MV+]]} & O*n+}) or ([[@MV+ & O*n+]])} & {@MV+}; call.v shout.v: VERB_PLI(); calls.v shouts.v: VERB_S_T(); called.v-d shouted.v-d: VERB_SPPP_T() or ( & {O+ or B- or K+ or Pa+ or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or K+ or Pa+ or [[@MV+ & O*n+]]} & ); calling.g shouting.g: ( & ) or ; calling.v shouting.v: & ; % Minimal ditransitive extenstion of words.v.6 % ditransitive: "Please paint it lime green" : or ; color.v colour.v paint.v: VERB_PLI(); colors.v colours.v paints.v: VERB_S_T(); colored.v-d coloured.v-d painted.v-d: VERB_SPPP_T() or ( & {O+ or K+} & {@MV+}) or ({K+} & ) or ({@E-} & A+); coloring.v colouring.v painting.v: ( & ) or or ; coloring.g colouring.g painting.g: ( & ) or ; % ditransitive % Writing -- direct and indirect object are optional: % 'he wrote' 'he wrote a letter' 'he wrote me a letter' 'he wrote me' % 'he wrote me that S' but '*he drew me that S' : ({(B- & {O+ or K+}) or or (O+ & K+) or (K+ & {{[[@MV+]]} & O*n+}) or ([[@MV+ & O*n+]])} & {@MV+}) or ({@MV+} & (TH+ or Ce+)); write.v charge.v draw.v: VERB_PLI(); writes.v reads.v charges.v draws.v: VERB_S_T(); wrote.v-d drew.v-d: VERB_SP_T(); read.v-d: VERB_SPPP_T() or ( & ) or ( & {O+ or B- or K+ or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or K+ or [[@MV+ & O*n+]]} & ); charged.v-d: VERB_SPPP_T() or ( & {O+ or B- or K+ or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or K+ or [[@MV+ & O*n+]]} & ); written.v drawn.v: VERB_PP() or ( & {O+ or B- or K+ or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or K+ or [[@MV+ & O*n+]]} & ) or ({@E-} & A+); writing.g reading.g charging.g drawing.g: ( & ) or ; writing.v reading.v charging.v drawing.v: & ; % ditransitive % Singing: if there's an indirect object, then a direct object is % mandatory: '*she sang me' % but then: 'she sang soprano' : ({(B- & {O+ or K+}) or or (O+ & K+) or (K+ & {{[[@MV+]]} & O*n+}) or ([[@MV+ & O*n+]])} & {@MV+}); sing.v dance.v cry.v: VERB_PLI(); sings.v dances.v cries.v: VERB_S_T(); sang.v-d danced.v-d cried.v-d: VERB_SP_T(); sung.v-d: VERB_SPPP_T(); singing.g dancing.g crying.g: ( & ) or ; singing.v dancing.v crying.v: & ; % : ; % shout.v: VERB_PLI(); % shouts.v: VERB_S_T(); % shouted.v: VERB_SP_T(); % shouting.g: ( & ) or ; % shouting.v: & ; % ditransitive : (( or ([[@MV+]] & O*n+)) & {@MV+}) or ((O+ or B-) & {@MV+} & {B- or TOo+}); allow.v: VERB_PLI(); allows.v: VERB_S_T(); allowed.v-d: VERB_SPPP_T() or ( & (({O+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({@MV+} & TO+))) or ({O+ or [[@MV+ & O*n+]] or ({@MV+} & TO+)} & ); allowing.g: ( & ) or ; allowing.v: & ; % ditransitive : ({O+ or B-} & {@MV+} & {B- or TO+ or Ce+ or TH+ or RSe+ or Zs-}) or (( or ([[@MV+ & O*n+]])) & {@MV+}); promise.v: VERB_PLI(); promises.v: VERB_S_T(); promised.v-d: VERB_SPPP_T() or ( & (({O+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({@MV+} & (TO+ or Ce+ or TH+ or RSe+ or Zs-)))) or ({@E-} & A+) or ({O+ or [[@MV+ & O*n+]] or ({{@MV+} & (TO+ or Ce+ or TH+)})} & ); promising.g: ( & ) or ; promising.v: & ; % ditransitive : ({O+ or B-} & ({@MV+} & (QI+ or Ce+ or TH+ or RSe+ or Zs- or B-))) or (( or (O+ & K+) or (K+ & (B- or ({[[@MV+]]} & O*n+))) or ([[@MV+ & O*n+]]) or [[()]]) & {@MV+}); show.v: VERB_PLI(); shows.v: VERB_S_T(); showed.v-d: VERB_SP_T(); shown.v: VERB_PP() or ( & (({O+ or K+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({@MV+} & (QI+ or Ce+ or TH+ or RSe+ or Zs-)))) or ({O+ or K+ or [[@MV+ & O*n+]] or ({@MV+} & (QI+ or Ce+ or TH+))} & ); showing.g: ( & ) or ; showing.v: & ; % ditransitive : ((O+ or B-) & ({@MV+} & (QI+ or Ce+ or TH+ or RSe+ or Zs- or B- or TOo+))) or ({ or (B- & {[[@MV+]]} & O*n+) or ([[@MV+ & O*n+]])} & {@MV+}); teach.v: VERB_PLI(); teaches.v: VERB_S_T(); taught.v-d: VERB_SPPP_T() or ( & (({O+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({@MV+} & (QI+ or Ce+ or TH+ or RSe+ or Zs- or TO+)))) or ({O+ or [[@MV+ & O*n+]] or ({@MV+} & (QI+ or Ce+ or TH+))} & ); teaching.g: ( & ) or ; teaching.v: & ; : ((O+ or B-) & {@MV+} & TOo+); compel.v: VERB_PLI(); compels.v: VERB_S_T(); compelled.v-d: VERB_SPPP_T() or ( & TO+) or ({@MV+} & TO+ & ); compelling.v: & ; compelling.g: ( & ) or ; : (((O+ or B-) & (({@MV+} & TOo+) or K+ or [()])) or (K+ & O*n+) or ([[{K+} & @MV+ & O*n+]])) & {@MV+}; force.v: VERB_PLI(); forces.v: VERB_S_T(); forced.v-d willed.v-d: VERB_SPPP_T() or ( & ((K+ & {@MV+}) or ({@MV+} & TO+))) or ((K+ or ({@MV+} & TO+)) & ) or ({@E-} & A+); forcing.g: ( & ) or ; forcing.v: & ; % ----------------------------------------- : ((O+ or B-) & {@MV+} & {TOo+}) or ([[@MV+ & O*n+ & {@MV+}]]); design.v permit.v authorize.v use.v cause.v enable.v pressure.v train.v sentence.v prompt.v spur.v disincline.v invite.v reelect.v encourage.v draft.v hire.v entice.v inspire.v aid.v forbid.v employ.v educate.v tempt.v condemn.v commission.v counsel.v induce.v instruct.v license.v incite.v nominate.v destine.v provoke.v challenge.v exhort.v implore.v motivate.v impel.v: VERB_PLI(); designs.v permits.v pressures.v trains.v sentences.v causes.v enables.v authorizes.v uses.v prompts.v spurs.v disinclines.v invites.v reelects.v encourages.v drafts.v hires.v entices.v inspires.v aids.v forbids.v employs.v educates.v tempts.v condemns.v commissions.v counsels.v induces.v instructs.v licenses.v incites.v nominates.v destines.v provokes.v challenges.v exhorts.v implores.v motivates.v impels.v: VERB_S_T(); designed.v-d permitted.v-d pressured.v-d trained.v-d sentenced.v-d caused.v-d enabled.v-d authorized.v-d prompted.v-d spurred.v-d invited.v-d disinclined.v-d reelected.v-d encouraged.v-d drafted.v-d hired.v-d enticed.v-d inspired.v-d aided.v-d employed.v-d educated.v-d tempted.v-d condemned.v-d commissioned.v-d counseled.v-d induced.v-d instructed.v-d licensed.v-d incited.v-d nominated.v-d destined.v-d provoked.v-d challenged.v-d exhorted.v-d implored.v-d motivated.v-d impelled.v-d: VERB_SPPP_T() or ( & {TO+}) or ({@E-} & A+) or ({{@MV+} & TO+} & ); forbade.v-d: VERB_SP_T(); forbidden.v: VERB_PP() or ( & {TO+}) or ({@E-} & A+) or ({{@MV+} & TO+} & ); designing.g permitting.g pressuring.g causing.g enabling.g training.g sentencing.g authorizing.g prompting.g spurring.g inviting.g disinclining.g reelecting.g encouraging.g drafting.g hiring.g enticing.g inspiring.g aiding.g employing.g educating.g tempting.g condemning.g commissioning.g counseling.g inducing.g instructing.g licensing.g inciting.g nominating.g destining.g provoking.g challenging.g exhorting.g imploring.g motivating.g impelling.g: ( & ) or ; designing.v permitting.v pressuring.v causing.v enabling.v training.v sentencing.v authorizing.v using.v prompting.v disinclining.v spurring.v inviting.v reelecting.v encouraging.v drafting.v hiring.v enticing.v inspiring.v aiding.v employing.v educating.v tempting.v condemning.v commissioning.v counseling.v inducing.v instructing.v licensing.v inciting.v nominating.v destining.v provoking.v challenging.v exhorting.v imploring.v motivating.v impelling.v: & ; used.v-d: VERB_SPPP_T() or ( & {TOo+}) or ( & TO+) or ({@MV+} & {TOo+} & ) or ({@E-} & A+); using.g: ( & ( or MVs-)) or ; % -------------------------------------------------- : ((O+ or B-) & (({@MV+} & {TOo+}) or ({[[@MV+]]} & (O*n+ or TI+)))) or ([[@MV+ & O*n+ & {@MV+}]]); elect.v appoint.v: VERB_PLI(); elects.v appoints.v: VERB_S_T(); elected.v-d appointed.v-d: VERB_SPPP_T() or ( & (({B- or (O+ or TI+ or [[@MV+ & (O*n+ or TI+)]])} & {@MV+}) or ({@MV+} & TO+))) or (({O+ or TI+ or [[@MV+ & (O*n+ or TI+)]]} or ({@MV+} & TO+)) & ) or ({@E-} & A+); electing.g appointing.g: ( & ) or ; electing.v appointing.v: & ; % vc-name is a ditransitive extension of vc-trans (with an extra TI+) : ( or (O+ & {[[@MV+]]} & TI+) or (B- & {O+ or TI+}) or ([[@MV+ & O*n+]])) & {@MV+}; name.v designate.v label.v: VERB_PLI(); names.v designates.v labels.v: VERB_S_T(); named.v-d designated.v-d labelled.v-d labeled.v-d: VERB_SPPP_T() or ( & ({B- or (O+ or TI+ or [[@MV+ & (O*n+ or TI+)]])}) & {@MV+}) or ({O+ or TI+ or [[@MV+ & (O*n+ or TI+)]]} & ) or ({@E-} & A+); naming.g designating.g labelling.g labeling.g: ( & ) or ; naming.v designating.v labelling.v labeling.v: & ; % optionally ditransitive, modeled on "name.v" : or ; tag.v: VERB_PLI(); tags.v: VERB_S_T(); tagged.v-d: VERB_SPPP_T() or (( & ({B- or (O+ or TI+ or [[@MV+ & (O*n+ or TI+)]])}) & {@MV+}) or ) or ({O+ or TI+ or [[@MV+ & (O*n+ or TI+)]]} & ) or ({@E-} & A+); tagging.g: ( & ) or ({@E-} & A+) or ; tagging.v: & ; : {((O+ or B-) & {@MV+} & {TOo+}) or @MV+ or ([[@MV+ & O*n+ & {@MV+}]])}; program.v oblige.v: VERB_PLI(); programs.v obliges.v: VERB_S_T(); programed.v-d programmed.v-d obliged.v-d: VERB_SPPP_T() or ( & {TO+}) or ({@E-} & A+) or ({{@MV+} & TO+} & ); programing.g programming.g obliging.g: ( & ) or ; programing.v programming.v obliging.v: & ; : ((O+ or B-) & {@MV+} & {TOo+ or TH+ or Ce+}) or ([[@MV+ & O*n+ & {@MV+}]]); convince.v persuade.v: VERB_PLI(); convinces.v persuades.v: VERB_S_T(); convinced.v-d persuaded.v-d: VERB_SPPP_T() or ( & {TO+ or TH+ or Ce+}) or ({{@MV+} & (TO+ or TH+ or Ce+)} & ); convincing.g persuading.g: ( & ) or ; convincing.v persuading.v: & ; % K+ is for "tell him off" % bare MVp+ for "Today, we will tell about ..." % OF+ for "They have told of the soldiers' fear" % (QI+ & {MV+}): "I did not tell why until recently" : (((O+ & {O*n+ or K+}) or B-) & {@MV+} & {TH+ or Ce+ or RSe+ or Zs- or TOo+ or QI+ or BW-}) or OF+ or (QI+ & {MV+}) or ([[@MV+ & {O*n+} & {@MV+}]]); tell.v: VERB_PLI(); tell.w: {@E-} & I- & {@MV+} & (QI+ or TH+ or Ce+ or RSe+ or Zs-); tells.v: VERB_S_T(); told.v-d: VERB_SPPP_T() or ( & {TH+ or Ce+ or RSe+ or Zs- or TO+ or QI+ or BW-}) or ( & O+ & {@MV+}) or ({{@MV+} & (Ce+ or TO+ or QI+ or TH+)} & ); telling.g: ( & ) or ; telling.v: & ; % (QI+ & {MV+}): "I did not ask why until recently" : ({(O+ & {O*n+}) or B-} & {@MV+} & {TS+ or TOo+ or (QI+ & {MV+}) or BW-}) or ([[@MV+ & O*n+ & {@MV+}]]); ask.v: VERB_PLI(); asks.v: VERB_S_T(); asked.v-d: VERB_SPPP_T() or ( & {TO+ or QI+ or BW- or TH+ or TS+}) or ( & O+ & {@MV+}) or ({{@MV+} & (TO+ or QI+ or TH+ or TS+)} & ); asking.g: ( & ) or ; asking.v: & ; : ({O+ or B-} & {@MV+} & {TO+ or I+}) or ([[@MV+ & O*n+ & {@MV+}]]); help.v: VERB_PLI(); helps.v: VERB_S_T(); helped.v-d: VERB_SPPP_T() or ( & {TO+}) or ({{@MV+} & TO+} & ); helping.g: ( & ) or ; helping.v: & ; : ((O+ or B-) & {@MV+} & (TOo+ or TH+ or Ce+ or (OF+ & {@MV+}))) or ([[@MV+ & O*n+ & {@MV+}]]); remind.v: VERB_PLI(); reminds.v: VERB_S_T(); reminded.v-d: VERB_SPPP_T() or ( & {TO+ or TH+ or Ce+ or (OF+ & {@MV+})}) or ({{@MV+} & (Ce+ or TO+ or TH+ or (OF+ & {@MV+}))} & ); reminding.g: ( & ) or ; reminding.v: & ; : ((O+ or B-) & {@MV+} & {(OF+ & {@MV+}) or TH+ or Zs- or Ce+}) or ([[@MV+ & O*n+ & {@MV+}]]); inform.v reassure.v alert.v guarantee.v notify.v forewarn.v: VERB_PLI(); informs.v reassures.v alerts.v guarantees.v notifies.v forewarns.v: VERB_S_T(); informed.v-d reassured.v-d alerted.v-d guaranteed.v-d notified.v-d forewarned.v-d: VERB_SPPP_T() or ( & {Ce+ or TH+ or Zs- or (OF+ & {@MV+})}) or ({{@MV+} & (Ce+ or TH+ or OF+)} & ) or ({@E-} & A+); informing.g reassuring.g alerting.g guaranteeing.g notifying.g forewarning.g: ( & ) or ; informing.v reassuring.v alerting.v guaranteeing.v notifying.v forewarning.v: & ; : ((O+ or B-) & {@MV+} & {(OF+ & {@MV+}) or TH+ or Zs- or Ce+}) or ([[@MV+ & O*n+ & {@MV+}]]) or ({@MV+} & (TH+ or Ce+)); assure.v: VERB_PLI(); assures.v: VERB_S_T(); assured.v-d: VERB_SPPP_T() or ( & {(OF+ & {@MV+}) or Ce+ or TH+ or Zs-}) or ({{@MV+} & (Ce+ or TH+ or OF+)} & ); assuring.g: ( & ) or ; assuring.v: & ; : ((B- or O+) & {@MV+} & {I+ or ((K+ or Pp+) & {@MV+})}) or ([[@MV+ & O*n+ & {@MV+}]]); let.v-d: VERB_SPPP_T() or ( & ) or ( & ((K+ or Pp+) & {@MV+})) or ((K+ or Pp+) & ); lets.v: VERB_S_T(); letting.g: ( & ) or ; letting.v: & ; let's let’s: ({Ic-} & Wi- & {N+} & I+) or ({Ic-} & Wi- & N+); : ((B- or O+) & {@MV+} & {I*j+ or Pg+}) or ([[@MV+ & O*n+ & {@MV+}]]) or {@MV+}; watch.v: VERB_PLI(); watches.v: VERB_S_T(); watched.v-d: VERB_SPPP_T() or or ; watching.g: ( & ) or ; watching.v: & ; : ((B- or O+) & {@MV+} & {Pg+}) or ([[@MV+ & O*n+ & {@MV+}]]); appreciate.v spend.v: VERB_PLI(); appreciates.v spends.v: VERB_S_T(); appreciated.v-d spent.v-d: VERB_SPPP_T() or ( & {Pg+}) or ({{@MV+} & Pg+} & ); appreciating.g spending.g: ( & ) or ; appreciating.v spending.v: & ; % Pa**j is used for predicative adjectives % ditransitive : ((B- or O+ or OX+) & {({@MV+} & {I*j+ or Pa**j+ or B-}) or ((K+ or AF-) & {@MV+})}) or (( or (K+ & {[[@MV+]]} & O*n+) or K+ or Vm+ or ([[{K+} & @MV+ & O*n+]])) & {@MV+}) or [[()]]; make.v: VERB_PLI(); makes.v: VERB_S_T(); made.v-d: VERB_SPPP_T() or ( & (({@MV+} & Pa+) or ({K+} & {@MV+}))) or ({({@MV+} & Pa+) or K+} & ); built_of built_up_of composed_of constructed_of formed_of made_of made_up_of: ( & (B- or O+) & {@MV+}) or (O+ & ); making.g: ( & ) or ; making.v: & ; : (((B- or O+) & {({@MV+} & Pa+) or AF-}) or ([[@MV+ & O*n+]])) & {@MV+}; render.v deem.v: VERB_PLI(); renders.v deems.v: VERB_S_T(); rendered.v-d deemed.v-d: VERB_SPPP_T() or ( & {Pa+ or AF-}) or ({{@MV+} & Pa+} & ); rendering.g deeming.g: ( & ) or ; rendering.v deeming.v: & ; : (((O+ or B-) & {{@MV+} & OF+}) or ([[@MV+ & O*n+]])) & {@MV+}; deprive.v accuse.v acquit.v purge.v disabuse.v exonerate.v absolve.v rob.v convict.v: VERB_PLI(); deprives.v accuses.v acquits.v purges.v disabuses.v exonerates.v absolves.v robs.v convicts.v: VERB_S_T(); deprived.v accused.v acquitted.v purged.v disabused.v exonerated.v absolved.v robbed.v convicted.v-d: VERB_SPPP_T() or ( & {OF+} & {@MV+}) or ({@E-} & A+) or ({{@MV+} & OF+} & ); depriving.g accusing.g acquitting.g purging.g disabusing.g exonerating.g absolving.g robbing.g convicting.g: ( & ) or ; depriving.v accusing.v acquitting.v purging.v disabusing.v exonerating.v absolving.v robbing.v convicting.v: & ; : (((O+ or B-) & {({@MV+} & OF+) or K+}) or ({K+} & O*n+) or K+ or ([[{K+} & @MV+ & O*n+]])) & {@MV+}; clear.v: VERB_PLI(); clears.v: VERB_S_T(); cleared.v-d: VERB_SPPP_T() or ( & {({@MV+} & OF+) or K+} & {@MV+}) or ({K+ or ({@MV+} & OF+)} & ); clearing.g: ( & ) or ; clearing.v: & ; : ({(O+ & {O*n+}) or (B- & {O+})} & {@MV+} & {TH+ or Ce+ or RSe+}) or ([[@MV+ & O*n+ & {@MV+}]]); bet.v-d: VERB_SPPP_T() or ( & ) or ( & {O+ or B-} & {@MV+} & {TH+ or Ce+ or RSe+ or @MV+}); bets.v: VERB_S_T(); betted.v-d: VERB_SPPP_T() or ( & {O+ or B-} & {@MV+} & {TH+ or Ce+ or RSe+ or @MV+}) or ({O- or [[@MV+ & O*n+]] or TH+ or Ce+} & ); betting.g: ( & ) or ; betting.v: & ; : ({@MV+} & TO+) or ((O+ or B-) & {@MV+} & {THi+}) or ([[@MV+ & O*n+ & {@MV+}]]); bother.v: VERB_S_PLI(); bothers.v: & ; bothered.v-d: ( & ) or or ; bothering.v: & ; bothering.g: ( & ) or ; : ((O+ or B-) & {@MV+} & {THi+}) or ([[@MV+ & O*n+]]); surprise.v alarm.v amaze.v amuse.v astonish.v astound.v excite.v depress.v disgust.v distress.v dismay.v irritate.v embarrass.v annoy.v: VERB_S_PLI(); surprises.v alarms.v amazes.v amuses.v astonishes.v astounds.v excites.v depresses.v disgusts.v distresses.v dismays.v irritates.v embarrasses.v annoys.v: & ; surprised.v alarmed.v amazed.v amused.v astonished.v astounded.v excited.v depressed.v disgusted.v distressed.v dismayed.v irritated.v embarrassed.v annoyed.v-d: ( & ) or or ; surprising.v alarming.v amazing.v amusing.v astonishing.v astounding.v exciting.v depressing.v disgusting.v distressing.v dismaying.v embarrassing.v annoying.v: & ; surprising.g alarming.g amazing.g amusing.g astonishing.g astounding.g exciting.g depressing.g disgusting.g distressing.g dismaying.g embarrassing.g annoying.g: ( & ) or ; : ((O+ or B- or [[@MV+ & O*n+]]) & {@MV+}) or ((O+ or OX+ or B-) & {@MV+} & (TOo+ or [[Pa+]])) or ({@MV+} & (TOf+ or TH+ or Ce+ or RSe+ or Zs- or Pa+)); prove.v: & ; proves.v: & ; proved.v-d: ( & ) or ( & {THi+ or TOf+}) or ({@E-} & A+) or ({{@MV+} & Pa+} & ); proven.v: ( & ) or ( & {THi+ or TOf+ or Pa+}) or ({@E-} & A+) or ({{@MV+} & Pa+} & ); proving.g: ( & ) or ; proving.v: & ; : ((O+ or B- or [[@MV+ & O*n+]]) & {@MV+}) or ({@MV+} & (Pg+ or TH+ or Ce+ or RSe+ or Zs- or TS+ or ((SI*j+ or SFI**j+) & I*j+))); suggest.v anticipate.v recommend.v: VERB_PLI(); suggests.v anticipates.v recommends.v: VERB_S_T(); suggested.v-d anticipated.v-d recommended.v-d: VERB_SPPP_T() or ( & {THi+ or TSi+ or Z-}) or ({@E-} & A+) or ; suggesting.g anticipating.g recommending.g: ( & ) or ; suggesting.v anticipating.v recommending.v: & ; % ditransitive : (( or (B- & {O+}) or [[@MV+ & O*n+]]) & {@MV+}) or ({@MV+} & (Pg+ or TH+ or Ce+ or RSe+)); deny.v: VERB_PLI(); denies.v: VERB_S_T(); denied.v-d: VERB_SPPP_T() or ( & {O+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or ([[@MV+ & O*n+]])} & ); denying.g: ( & ) or ; denying.v: & ; : ((O+ or B-) & {@MV+} & {AZ+}) or ({@MV+} & (QI+ or Z-)) or ([[@MV+ & O*n+ & {@MV+}]]); describe.v: VERB_PLI(); describes.v: VERB_S_T(); described.v-d: VERB_SPPP_T() or ( & {AZ+ or Z-}) or ({@E-} & A+) or ({@MV+} & {AZ+} & ); describing.g: ( & ) or ; describing.v: & ; : ((O+ or B-) & {@MV+} & {AZ+}) or ([[@MV+ & O*n+ & {@MV+}]]); portray.v depict.v regard.v view.v characterize.v: VERB_PLI(); portrays.v depicts.v regards.v views.v characterizes.v: VERB_S_T(); portrayed.v-d depicted.v-d regarded.v-d viewed.v-d characterized.v-d: VERB_SPPP_T() or ( & {AZ+}) or ({@E-} & A+) or ({@MV+} & {AZ+} & ); portraying.g depicting.g regarding.g viewing.g characterizing.g: ( & ) or ; portraying.v depicting.v regarding.v viewing.v characterizing.v: & ; % ------------------------------------------------------------------------------- % IDIOMATIC VERBS do_so take_place show_up take_office do_battle give_way make_way take_part catch_up catch_on file_suit pick_up take_off break_free take_over jump_ship see_fit take_note: VERB_PLI(); does_so takes_place shows_up pleads_guilty pleads_innocent takes_office does_battle gives_way makes_way takes_part catches_up catches_on files_suit picks_up takes_off breaks_free takes_over jumps_ship sees_fit lets_go takes_note comes_true comes_clean comes_of_age: VERB_S_T(); showed_up pleaded_guilty pleaded_innocent made_way caught_up caught_on filed_suit picked_up jumped_ship: VERB_SPPP_I(); plead_guilty plead_innocent: VERB_SPPP_I() or ( & ); let_go: VERB_SPPP_I() or ( & ) or ; did_so took_place took_office did_battle gave_way took_part took_off broke_free took_over saw_fit took_note came_true came_clean came_of_age: VERB_SP_I(); done_so taken_place shown_up taken_office done_battle given_way taken_part taken_off broken_free taken_over seen_fit taken_note: VERB_PP(); come_true come_clean come_of_age: VERB_PLI() or VERB_PP(); doing_so taking_place showing_up pleading_guilty pleading_innocent taking_office doing_battle giving_way making_way taking_part catching_up catching_on filing_suit picking_up taking_off breaking_free taking_over jumping_ship seeing_fit letting_go taking_note coming_true coming_clean coming_of_age: ( & ) or ; : (O+ or B- or [[@MV+ & O*n+]]) & {@MV+}; allow_for bring_about get_rid_of let_go_of take_note_of: VERB_PLI(); puts_up_with allows_for brings_about gets_rid_of lets_go_of takes_note_of: VERB_S_T(); put_up_with let_go_of: VERB_SPPP_T() or ( & ); allowed_for brought_about got_rid_of took_note_of: VERB_SPPP_T(); gotten_rid_of taken_note_of: VERB_PP(); putting_up_with allowing_for bringing_about getting_rid_of letting_go_of taking_note_of: ( & ( or )) or ; : {[@MV+]} & TH+; take_it make_out point_out give_notice serve_notice: VERB_PLI(); takes_it makes_out points_out gives_notice serves_notice: VERB_S_I(); made_out pointed_out served_notice: VERB_SPPP_I() or or ; took_it gave_notice: VERB_SP_I(); taken_it given_notice: VERB_PP(); taking_it making_out pointing_out giving_notice serving_notice: ( & ) or ; : {[@MV+]} & THi+; turn_out: VERB_S_PLI(); turns_out: & ; turned_out: & ; turning_out: & ; % (QI+ & {MV+}): "I did not figure out why until recently" : {[@MV+]} & (TH+ or (QI+ & {MV+}) or Ce+); find_out figure_out: VERB_PLI(); finds_out figures_out: VERB_S_I(); found_out figured_out: VERB_SPPP_I() or or ; finding_out figuring_out: ( & ) or ; : {Pg+ or @MV+}; keep_on give_up go_around: VERB_S_PLI(); keeps_on gives_up goes_around: & ; kept_on: & ; gave_up went_around: & ; given_up gone_around: & ; keeping_on giving_up going_around: ( & ) or ; % XXX TODO need to provide and-able links for these. : Pg+ or Pa+ or ({AF-} & {@MV+}); end_up: VERB_S_PLI(); ends_up: & ; ended_up: & ; ending_up: ( & ) or ; /en/words/words.v.1.p: or ; % two-word passives % done_for accounted_for adhered_to arrived_at barked_at belched_at catered_to : {@MV+} & (((Xd- or Xq-) & (Xc+ or ) & (COq+ or (CP- & {CC+}) or Eq+)) or [(Xc+ or Xe+) & Ce+]); : {@MV+} & (((Xd- or Xq-) & (Xc+ or ) & (COq+ or (CPx- & {CC+}) or Eq+)) or [(Xc+ or Xe+) & Ce+]); : {@MV+} & (Xd- or Xq-) & (Xc+ or ) & (COqi+ or (CPi- & {CC+}) or Eqi+); % paraphrasing verbs like "say", "reply" % acknowledge.q add.q admit.q affirm.q agree.q announce.q argue.q /en/words/words.v.10.1: [[{@E-} & (((Sp- or I-) & ) or (SIpj+ & ))]]; /en/words/words.v.10.2: [[{@E-} & ((Ss- & ) or (SIsj+ & ))]]; /en/words/words.v.10.3: or ({@E-} & (((S- or PP-) & ) or (SI*j+ & ) or [[Pvf- & ]])); read.q-d: or ({@E-} & (((S- or I- or PP-) & ) or (SI*j+ & ))); wrote.q-d: or ({@E-} & ((S- & ) or (SI*j+ & ))); written.q: {@E-} & PP- & ; /en/words/words.v.10.4: [[{@E-} & Pg- & ]]; seem.q appear.q: [[{@E-} & (SFp- or If-) & ]]; seems.q appears.q: [[{@E-} & SFs- & ]]; seemed.q-d appeared.q-d: or ({@E-} & (SF- or PPf-) & ); seeming.q appearing.q: [[{@E-} & Pgf- & ]]; say.q: {@E-} & (((Sp- or I-) & ) or (SIpj+ & )); says.q: {@E-} & ((Ss- & ) or (SIsj+ & )); said.q-d: or ({@E-} & (((S- or PP-) & ) or (SI*j+ & ))); saying.q: {@E-} & Pg- & ; tell.q: [[{@E-} & (Sp- or I- or SIpj+) & O+ & ]]; tells.q: [[{@E-} & (Ss- or SIsj+) & O+ & ]]; told.q-d: or ({@E-} & (((S- or PP- or SI*j+) & O+) or Pv-) & ); telling.q: [[{@E-} & Pg- & O+ & ]]; ask.q: [[{@E-} & (((Sp- or I-) & {O+}) or SIpj+) & ]]; asks.q: [[{@E-} & ((Ss- & {O+}) or SIsj+) & ]]; asked.q-d: or ({@E-} & (((S- or PP-) & {O+}) or Pv- or SI*j+) & ); asking.q: [[{@E-} & Pg- & {O+} & ]]; % idiomatic "voted yes/no" expressions using the V link. : Vv+ & {@MV+}; say.w vote.w: VERB_PLI(); says.w votes.w: VERB_S_I(); said.w-d voted.w-d: VERB_SPPP_I(); saying.w voting.w: ( & ); yes.misc-vote no.misc-vote: Vv-; double.v triple.v quadruple.v quintuple.v: {EN-} & VERB_PLI(); doubles.v triples.v quadruples.v quintuples.v: {EN-} & VERB_S_T(); doubled.v-d tripled.v-d quadrupled.v-d quintupled.v-d: {EN-} & (VERB_SPPP_T() or or ({@E-} & A+) or ); doubling.v tripling.v quadrupling.v quintupling.v: {EN-} & ( & ); doubling.g tripling.g quadrupling.g quintupling.g: {EN-} & (( & ) or ({@E-} & A+) or ); % =================================================================== % PREPOSITIONS % conjoin preps: "prep and prep": "the coverage on TV and on the radio..." : MJrp- or MJlp+; % alter-preps: "it is somewhere in or near the house" % The "or" must take a prep object. % XXX TODO: most preps below need this rule. : MJrj- or MJlj+; : or [Mp-] or Pp- or MVp- or [({Xc+ & {Xd-}} & CO+)] or (Xd- & Xc+ & (MX*x- or MVx-)); : or (Cs+ & (Mj- or (Xd- & Xc+ & MX*j-))) or (Wj- & Qd+) or [Wq- & PF+]; : or [Mpn-] or Pp- or MVpn- or [({Xc+ & {Xd-}} & CO*n+)] or (Xd- & Xc+ & (MX- or MVx-)); : or [Mp-] or Pp- or MVa- or [({Xc+ & {Xd-}} & CO+)] or (Xd- & Xc+ & (MX*x- or MVx-)); under beneath: ({Yd-} & {JQ+} & J+ & ( or FM-)) or (MVp- & B-) or (Yd- & Pp-); below above behind.p: ({Yd-} & {{JQ+} & J+} & ( or FM-)) or (MVp- & B-); within: ({JQ+} & J+ & ) or (MVp- & B-); during: ({JQ+} & J+ & ( or UN-)) or (MVp- & B-); from: ({Yd-} & {JQ+} & (FM+ or J+ or Mgp+) & ) or (MVp- & B-) or MVp- or NIr+; at toward towards without: ({JQ+} & (J+ or Mgp+) & ) or (MVp- & B-); % % XXX fixme: MVp- & J+ is wrong: "*I saw John except Fred" except but.misc-ex: ({JQ+} & (J+ or Mgp+) & ) or (MVp- & B-) or ((MVp+ or TO+) & ); against beyond beside: ({JQ+} & (J+ or Mgp+) & ) or (MVp- & B-); between: ({JQ+} & (J+ or Mgp+) & ) or (MVp- & B-) or NIr+; with: ({JQ+} & (J+ or Mgp+) & ( or RJrv-)) or (Jw+ & (RJrj- or RJlj+)) or (MVp- & B-) or (J+ & {EBm+} & ([P+] or [[O*n+]]) & ([({Xc+ & {Xd-}} & CO+)] or MVp- or (Xd- & Xc+ & (MX*x- or MVx-)))); among: ({JQ+} & (J+ or Mgp+) & ( or FM-)) or (MVp- & B-); for.p: ({JQ+} & (J+ or Mgp+ or TI+) & ) or (J+ & (RJrj- or RJlj+)) or (MVp- & B-) or (MG- & JG+) or (MVp- & FL+); into: ({JQ+} & (J+ or Mgp+ or QI+) & ) or (MVp- & B-); about: ({JQ+} & (J+ or Mgp+ or QI+) & ) or EN+ or EZ+ or (MVp- & B-) or (TOf+ & (Mp- or MVp- or Pp-)) or MVa-; through.r: ({JQ+} & J+ & ( or FM-)) or (MVp- & B-); : ({JQ+} & J+ & ( or FM-)) or K- or (MVp- & B-); across along: ; off: or (MVp+ & {Xc+ & {Xd-}} & COp+); past.p: ({Yd-} & {JQ+} & J+ & ( or FM-)) or K- or (MVp- & B-); around: or ({JQ+} & (J+ or Mgp+) & ( or FM-)) or K- or (MVp- & B-) or [EN+] or MVa-; out up.r down.r: ({Yd-} & {JQ+} & ([J+] or [[MVp+]]) & (({Xd- & Xc+} & MVa-) or FM-)) or K- or ({Yd-} & Pp-) or (MVp- & B-); by: or ({JQ+} & (J+ or Mgp+ or JT+) & ( or FM-)) or K- or (MVp- & B-); in: or ({JQ+} & (J+ or Mgp+ or IN+) & ( or FM-)) or K- or (MVp- & B-) or (MG- & JG+); on upon: or ({JQ+} & (J+ or Mgp+ or ON+ or [QI+]) & ) or K- or (MVp- & B-); over: ({Yd-} & {JQ+} & (J+ or Mgp+ or QI+ or [[MVp+]]) & ( or FM-)) or K- or EN+ or (MVp- & B-) or (Yd- & Pp-); just_over just_under well_over: EN+; % XXX original LG recommends using the LI link, however the % sort of clobbers this. Should this be "fixed"? like.p: ({[EA-]} & (((J+ or Mgp+ or [[Mp+ or MVs+]]) & ) or (Vf- & Mgp+) or (LI- & (J+ or Cs+)))) or (MVp- & B-); unlike: J+ & (MVp- or Pp- or [({Xc+ & {Xd-}} & CO+)] or (Xd- & Xc+ & (E+ or MVx-))); of: ({JQ+} & (J+ or Mgp+ or QI+) & (Mp- or OF- or (Xd- & Xc+ & MX*x-) or (Cs+ & (Mj- or (Xd- & Xc+ & MX*j-))) or [[({Xc+ & {Xd-}} & CO+)]])) or ((OF- or Mp-) & B-) or (MG- & JG+) or (NF- & NJ+) or (Mp- & TI+); of_them: (ND- or MF-) & (J+ or Pa+) & Xd- & (MX*x- or MVx-) & Xc+; % MX-PHRASE: The blah, to be blahed, will be blah. % TO- & Xc+: "I'd like to, I want to." (null infinitive) to.r: ({@E-} & {NT-} & I+ & (TO- or [{Xd- & Xc+} & MVi-] or or [] or [[R-]] or (SFsx+ & ))) or (TO- & Xc+) or I*a+ or ({JQ+} & (J+ or Mgp+) & ) or VJ+ or [MVp- & B-]; so_as_to: I+ & {Xd- & Xc+} & MVi-; besides: {J+ or Mgp+} & ([({Xc+ & {Xd-}} & CO+)] or MVp- or [Wq- & PF+]); throughout: {J+} & ([({Xc+ & {Xd-}} & CO+)] or MVp- or [Wq- & PF+]); inside.r outside.r underneath alongside: {J+} & ( or FM-); amid plus.p minus.p via onto: J+ & ( or [Wq- & PF+]); versus: (J+ & Mp-) or (G- & G+); vs: {Xi+} & G- & G+; worth.p: (Mp- & (J+ or OF+)) or (Paf- & Mgp+) or (Pa- & (J+ or B-)); opposite.p: J+ & ; better_off worse_off: {EC-} & Pa- & {Pg+}; off_of out_of: ({JQ+} & J+ & ) or (MVp- & B-); despite notwithstanding other_than apart_from aside_from: (J+ or Mgp+) & (MVp- or (Xd- & Xc+ & (MVx- or E+)) or [({Xc+ & {Xd-}} & CO+)]); rather_than: (J+ or Mgp+ or Mp+ or I+) & ((Xd- & Xc+ & (E+ or MVx-)) or MVp- or [({Xc+ & {Xd-}} & CO+)]); instead_of because_of prior_to: (J+ or Mgp+) & (MVp- or Pp- or [({Xc+ & {Xd-}} & CO+)] or (Xd- & Xc+ & (E+ or MVx-))); as_well_as: (J+ or Mgp+) & (MG- or Mp- or MVp- or [({Xc+ & {Xd-}} & CO+)] or (Xd- & Xc+ & (MX*x- or MVx-))); according_to as_of in_case_of in_response_to unbeknownst_to thanks_to: J+ & (MVp- or Pp- or [({Xc+ & {Xd-}} & CO+)] or (Xd- & Xc+ & (E+ or MVx-))); due_to along_with en_route_to in_connection_with: J+ & ; regardless_of as_to irrespective_of: (J+ or QI+) & (MVp- or [({Xc+ & {Xd-}} & CO+)] or (Xd- & Xc+ & (E+ or MVx-))); overhead.r midway in_public in_private en_route a_la_mode a_la_carte side_by_side from_coast_to_coast: ; abroad upstairs.r downstairs.r overseas.r next_door: or FM-; elsewhere: or FM- or [[J-]]; ahead at_hand in_store in_reverse in_place in_town under_way in_office out_of_office out_of_reach in_reach within_reach on_guard at_large in_hand on_hand for_free on_file in_line on_line in_loco_parentis on_board en_route in_bed out_of_bed on_strike on_top from_afar at_stake in_question at_issue on_lease on_trial in_league in_cahoots in_front in_back on_break on_camera in_command in_concert by_association in_association on_deck on_disk on_file on_foot on_location on_line online.r: MVp- or Mp- or Pp- or (Xc+ & Xd- & (MX*x- or MVx-)); uptown downtown.r offshore.r underground.r out_of_town: MVp- or Mp- or Pp- or FM- or (Xc+ & Xd- & MVx-); : MVp- or Pp- or (Xc+ & Xd- & MVx-); forward.r backward forwards.r backwards sideways ashore abreast aft half-way two-fold downhill southward underfoot westward eastward northward overnight.r on_hold on_track in_situ in_toto off_balance in_check on_course off_course under_oath at_end by_example on_holiday by_invitation on_patrol on_stage in_step in_tempo on_schedule behind_schedule ahead_of_schedule for_good for_keeps in_phase out_of_step out_of_phase in_tune out_of_tune in_session out_of_session in_phase neck_and_neck under_contract: ; /en/words/words-medical.prep.1: ; % 5' 3' are DNA ends upstream downstream 5' 3': A+ or NIfp+ or NItp- or ({Yd- or EZ- or EE- or EI-} & {MVp+ or OF+} & (({Xc+ & Xd-} & (Ma- or MJra-)) or MJra+ or (Wq- & PF+) or MVp- or Pp- or FM- or (Xc+ & Xd- & (MVx- or MX-)))); %upstream downstream 3' 5': %A+ or %((EZ- or Y-) & (MVp+ or OF+) & (MV- or MV+)) or %(EI- or EZ- or Y- & Ma- & (MVp+ or OF+)) or %(EE- or Y- & (FM- or TO-) & MVp+ or OF+); indoors outdoors underwater.r: MVp- or Pp- or FM- or (Xc+ & Xd- & MVx-); everywhere anywhere: {EL+} & ((Cs+ & (({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & MVs-))) or (MVp- or Pp- or FM- or (Xc+ & Xd- & MVx-))); somewhere someplace: ({EL+} & (MVp- or Pp- or FM- or [({Xc+ & {Xd-}} & CO+)] or (Xc+ & Xd- & MVx-)) & Mp+) or ({EL+} & {Xc+ & {Xd-}} & MVp+ & {Xc+ & {Xd-}} & COp+) or [[{EL+} & {Xc+ & {Xd-}} & CO+]]; nowhere: {EL+} & (MVp- or Pp- or FM- or (Xc+ & Xd- & MVx-)); as_usual to_date on_average in_turn so_far in_particular in_response in_general thus_far in_reply: MVp- or Mp- or ({Xc+ & {Xd-}} & CO+) or (Xc+ & Xd- & (MVx- or MX*x-)); recently: {EE- or EF+} & (({Xd- & Xc+} & MVp-) or Pp- or E+ or ({Xc+ & {Xd-}} & CO+) or EB- or JT- or Ca+ or Qe+ or [[Mp-]]); now.r: ({Xd- & Xc+} & MVp-) or Pp- or E+ or ({Xc+ & {Xd-}} & CO+) or EB- or [[Mp-]]; then.r: ({Xd- & Xc+} & MVp-) or Pp- or E+ or ({Xc+ & {Xd-}} & CO+) or EB- or (S+ & Xd- & Xc+ & MVs-) or [[Mp-]]; later earlier: ({ECa- or Yt-} & (E+ or Mp- or Pp- or MVb- or [({Xc+ & {Xd-}} & CO+)] or (Xd- & Xc+ & (MX*x- or MVx-)) or ({[[@Ec-]]} & {Xc+} & A+) or AJrc- or AJlc+)) or (Yt- & (Ca+ or Qe+)); away: ({Yd-} & (MVp- or Pp- or ({Xc+ & {Xd-}} & CO+))) or K-; aboard: ((MVp- or Mp- or Pp-) & {J+}) or K-; apart: {Yd-} & K-; % wtf ?? what is home.i for ?? home.i: [[K-]]; % Bare-naked MVp-: "I want it back" back.r: ({Yd-} & K-) or (MVp+ & (MVp- or FM-)) or MVp-; forth aside.p: K- or MVa-; % SF*p+: "nearby is another temple" (using p for 'prep') % SFpp+: "nearby are more ruins" nearby: A+ or MVp- or Pp- or FM- or (SF*p+ & ); close_by: (SF*p+ & ); next_to in_back_of in_front_of close_to on_top_of outside_of inside_of atop: or (J+ & ( or FM- or [Wq- & PF+])); ahead_of by_way_of akin_to betwixt vis-a-vis in_lieu_of on_account_of in_place_of in_search_of: or (J+ & ( or [Wq- & PF+])); near.p: {EE- or EF+} & ( or (J+ & ( or FM- or [Wq- & PF+]))); all_over all_around: {J+} & (Pp- or MVp- or [({Xc+ & {Xd-}} & CO+)] or FM- or Mp-); such_as: J+ & (MVa- or Mp- or (Xc+ & Xd- & (MVx- or MX*x-))); % Consider "Here's the ball." We have two choices: SFst+ as a filler-it, % or the more questionable [Wq- & PF+]. Note that (Wd- & PF+) is barred % by the post-processing rules. Maybe PF is reasonable.. but SFst seems % better at the moment. here: J- or or (SFst+ & ); there.r: J- or or ((SFst+ or SFp+ or SFut+) & ) or SFIst- or SFIp- or OXt- or Wi-; % Patronymics and misc french/spanish/german connectives % Many of these are already in the adjectives list à auf aus aux comte comtes dans de de_la del della delle der des du duc la las le.c los nach noch och os ou på por sans te über un une vom von zum zur zu: {G-} & G+; y.and: G- & G+; % TIME AND PLACE EXPRESSIONS this_time this_one_time this_once that_time these_days: or [[E+]]; last_time next_time: or JT- or YS+ or [[]]; day.r week.r month.r year.r weekend.r morning.r afternoon.r evening.r night.r semester.r term.r season.r session.r: ((DTn- or DTi-) & ( or [[E+]])) or (DTi- & (JT- or [[]] or YS+)) or (DTa- & ); the_next the_previous the_following this_past: DTn+; today tonight: or JT- or [[E+]] or YS+ or [[]]; yesterday: {TD+} & ( or JT- or [[E+]] or YS+ or [[]]); tomorrow: {TD+} & ( or JT- or YS+ or [[]]); Monday Tuesday Wednesday Thursday Friday Saturday Sunday.i: ((DTn- or DTie- or [()]) & {G-} & {TD+ or TW+} & (YS+ or or JT- or ON- or [[]])) or [[AN+]]; morning.i afternoon.i night.i evening.i: TD-; January.i February March April.i May.i June.i July August.i September.i October November December: ((DTn- or DTie- or ({TA-} & {TY+})) & (JT- or IN- or [[]] or [] or YS+)) or ((DTn- or DTie-) & ) or (TM+ & {TY+} & ((Xd- & Xc+ & TW-) or ON- or JT- or [[ or MVp- or Mp- or AN+]])) or AN+; AM.ti PM.ti am.ti pm.ti a.m. p.m. o'clock: ND- & {@MX+} & & {TZ+} ; % Time-zone names A.tz ACDT.tz ACST.tz ADT.tz AEDT.tz AEST.tz AKDT.tz AKST.tz AST.tz AWDT.tz AWST.tz B.tz BST.tz C.tz CDT.tz CEDT.tz CEST.tz CET.tz CST.tz CXT.tz D.tz E.tz EDT.tz EEDT.tz EEST.tz EET.tz EST.tz F.tz G.tz GMT.tz H.tz HAA.tz HAC.tz HADT.tz HAE.tz HAP.tz HAR.tz HAST.tz HAT HAY.tz HNA.tz HNC.tz HNE.tz HNP.tz HNR.tz HNT.tz HNY.tz I.tz IST.tz K.tz L.tz M.tz MDT.tz MESZ.tz MEZ.tz MSD MSK.tz MST.tz N.tz NDT.tz NFT.tz NST.tz O.tz P.tz PDT.tz PST.tz Q.tz R.tz S.tz T.tz U.tz UTC.tz V.tz W.tz WDT.tz WEDT WEST.tz WET.tz WST.tz X.tz Y.tz Z.tz: {Xd-} & TZ-; % Abbreviated month names. Jan.x Feb.x Mar.x Apr.x May.x Jun.x Jul.x Aug.x Sep.x Sept.x Oct.x Nov.x Dec.x: {Xi+} & TM+ & {TY+} & ((Xd- & Xc+ & TW-) or ON- or JT- or [[ or MVpn- or Mp- or AN+]]); fall.i spring.i winter.i summer.i: ((DTn- or DTi-) & ) or (DTi- & (JT- or YS+ or [[]])); weeks.i days.i hours.i minutes.i seconds.i months.i years.i decades.i centuries.i semesters.i terms.i nights.i: ((ND- or [[EN-]] or [()]) & (Yt+ or (OT- & {Mp+}))) or (ND- & Ye-) or (TQ- & BT+); week.i day.i hour.i minute.i second.i month.i year.i decade.i century.i semester.i term.i night.u: (NS- & (({NJ-} & {EN-} & (Yt+ or OT-)) or (EN- & J-))) or (NSa- & [[Mp- or Ys-]]) or ({NR- or TT-} & DG- & ((Cs+ & (({Xc+ & {Xd-}} & CO+) or MVp- or (Xd- & Xc+ & MVx-))) or Yt+)); year_and_a_half: NSa- & {EN-} & (Yt+ or OT-); moment.u: (NS- & (({EN-} & (Yt+ or OT-)) or (EN- & J-))) or ({NR- or TT-} & DG- & ((Cs+ & (({Xc+ & {Xd-}} & CO+) or MVp- or (Xd- & Xc+ & MVx-))) or Yt+)); a_while: J- or Yt+ or OT- or MVa-; now.i then.i: JT- or FM-; now_on then_on there_on: FM-; from_now: Yt- & ; a_long_time some_time a_few_moments moments.u: Yt+ or OT-; ago: Yt- & ( or Ca+ or Qe+ or JT-); every.i: {EN-} & Ye+ & ; times.i x.i: (ND- & (({Xc+ & {Xd-}} & CO+) or MVp- or EC+ or EZ+ or Ca+ or Qe+)) or (((({ND-} & DG-) & {Cs+}) or (ND- & Ys+)) & (({Xc+ & {Xd-}} & CO+) or MVp- or (Xd- & Xc+ & MVx-))); time.i: {TT- or NR-} & DG- & {Cs+} & (({Xc+ & {Xd-}} & CO+) or MVp- or (Xd- & Xc+ & MVx-)); the_year: TY+ & ; every_time: {EN-} & (Cs+ & (({Xc+ & {Xd-}} & CO+) or MVp- or (Xd- & Xc+ & MVx-))); week.n moment.n hour.n minute.n year.n instant.n period.n month.n second.n decade.n century.n: {NM+} & (( & ((Ds- & {@M+} & {WN+ or TH+ or [[Ce+]] or (R+ & Bs+)} & {@MXs+} & ( or or )) or Us- or (YS+ & Ds-) or (GN+ & (DD- or [()])))) or AN+); day.n night.n: {NM+} & (( & (({D*u-} & {@M+} & {WN+ or TH+ or [[Ce+]] or (R+ & Bs+)} & {@MXs+} & ( or or )) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+); days.n weeks.n moments.n hours.n minutes.n years.n instants.n periods.n months.n nights.n seconds.n decades.n centuries.n: {NM+} & (( & (({Dmc-} & {@M+} & {WN+ or TH+ or Ce+ or (R+ & Bp+)} & {@MXp+} & ( or or )) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or [[AN+]]); % XXX A major problem here is that the dict entries for miles.n, feet.n % create a mass of parses that are wrong & interfere with the below. : ((ND- or [()] or [[EN-]]) & (Yd+ or Ya+ or EC+ or [[MVp-]] or OD-)) or (ND- & (NIfu+ or NItu- or EQt+ or EQt-)); % AU is abbreviation for "astronomical units" blocks.i feet.i miles.i yards.i inches.i meters.i millimeters.i centimeters.i micrometers.i kilometers.i microns.i Angstroms.i wavelengths.i AU.i au.i astronomical_units light-years.i: ; block.i foot.i mile.i yard.i inch.i meter.i millimeter.i centimeter.i micrometer.i kilometer.i micron.i Angstrom.i wavelength.i astronomical_unit light-year.i: (NS- & {NJ-} & {EN-} & (Yd+ or EC+ or [[MVp-]] or Ya+ or OD-)) or Us-; % make sure that mile.i always has precedence over mile.n % XXX TODO: probably same for the other .i's above... mile.n: or []; a_long_way: Yd+; point.i percentage_point: (NS- or NIe-) & {NJ-} & (Yd+ or OD-); points.u percentage_points: ND- & (Yd+ or MVp-); dollars.i cents.i: NIn- & (EC+ or Yd+ or OD-); 1_dollar one_dollar a_dollar 1_cent one_cent a_cent: {NJ-} & (EC+ or Yd+ or OD-); share.i pound.i ounce.i gallon.i barrel.i head.x: NSa- & Mp-; dollar.i cent.i: ((NIm- or NIn- or NIe-) & AN+) or (NS- & {NJ-} & (EC+ or Yd+ or OD-)); twofold threefold fourfold fivefold sixfold sevenfold eightfold ninefold tenfold a_hundredfold a_thousandfold: {EN-} & (MVp- or Em+ or EC+ or [Pa-] or A+ or (Xd- & (Xc+ or ) & MX-) or NIfn+ or NItn-); % Add cost to Op-, try to use any other linkage before making % a unit be a plain-old object. : ((ND- or NS- or NIe-) & (NIfu+ or NItu-)) or ((ND- or NS- or NIe-) & (AN+ or EQt+ or EQt-)) or ((ND- or NS- or NIe-) & (DD- or EN-) & {Wd-} & ({Mp+} & Sp+ )) or ((ND- or NS- or NIe-) & ([[{DD-} & Op-]] or Jp-) & {Mp+}) or ((ND- or NS- or NIe-) & Xd- & MX- & Xc+) or ((ND- or NS-) & {NJ-} & (EC+ or Y+ or OD- or (Us- & {Mp+}))) or Us-; % Abbreviations of scientific units that follow numbers % km².u mi².u in².u ft².u m².u cm².u /en/words/units.1: ; UNITS: ; % Units abbreviations that can be followed by a period: % ft. tbsp. yds. /en/words/units.1.dot: {Xi+} & ; % Abbreviations that form noun-like things "degrees_Fahrenheit" etc. /en/words/units.3: ND- & ; % Time unit abbreviations: : or ((ND- or NS-) & {NJ-} & OT-); /en/words/units.4: ; /en/words/units.4.dot: {Xi+} & ; % money, similar to units, above. /en/words/currency: ((NIm- or NIn- or NIe-) & AN+) or ((NIm- or NIn- or NIe-) & (Op- or Jp-) & {Mp+}) or ((NIm- or NIn-) & {NJ-} & (EC+ or Yd+ or OD-)) or Us-; /en/words/currency.p: ((NIn- or NIe-) & AN+) or ((NIn- or NIe-) & (Op- or Jp-) & {Mp+}) or ((NIn-) & {NJ-} & (EC+ or Yd+ or OD-)) or Us-; % number-and-unit combinations, such as "50-kDa". The linking requirements % should largely follow those for units except not allowing a numeric % determiner. % TODO: the linking requirements are likely rarely used, and % it might be beneficial to cost them. If this is done, make the same % modification for unit ranges also. % NUMBER-AND-UNIT: % ((({D*u-} or {Dmc-}) & & % ( or Bsm+)) or (({D*u-} or {Dmc-}) & Us- & {Mp+})) or A+; % Above screw up the usual units processing. %QUESTION WORDS & CONJUNCTIONS %who: (R- & (({MVp+ or MVx+} & RS+) or Cr+)) or %({EL+} & (S**w+ or B*w+) & (Ws- or Wq- or QI*d- or BIqd-)) or %({MVp+ or MVx+} & (S**w+ or B*w+) & (Xd- & (Xc+ or ) & MX*r-)); % QI- & (): "I do not know who" who: (R- & (({MVp+ or MVx+} & RS+) or Cr+)) or [QI-] or ({EL+} & (S**w+ or (R+ & B*w+)) & (Ws- or Wq- or QI*d- or BIqd-)) or ({MVp+ or MVx+} & (S**w+ or (R+ & B*w+)) & (Xd- & (Xc+ or ) & MX*r-)); % "what are the answers?" takes Sp+ what: ({EL+} & (D**w+ or Ss*w+ or Sp*w+ or (R+ & (Bsw+ or BW+))) & (Wq- or Ws- or QI*d- or BIqd- or QJ+ or QJ-)) or ((Ss*d+ or (R+ & (Bsd+ or BW+))) & ( or (Ss*t+ & ) or SIs*t-)) or (D+ & JQ-); % QI- & (): "I do not know which" which: ((Jr- or R-) & (({MVp+ or MVx+} & RS+) or Cr+)) or [QI-] or ((D**w+ or ({OF+} & (S**w+ or (R+ & B*w+)))) & (Wq- or Ws- or QI*d- or BIqd-)) or Jw- or (JQ- & D+) or ({MVp+ or MVx+} & (S**w+ or B*w+) & ((Xc+ or ) & Xd- & MX*r-)); whom: (R- & Cr+) or (R+ & B*w+ & (Wq- or QI*d- or BIqd- or ((Xc+ or ) & Xd- & MX*r-))) or (Jr- & (RS+ or Cr+)) or Jw-; whose: (D**w+ & (Mr- or Wq- or Ws- or QI*d- or BIqd- or ((Xc+ or ) & Xd- & MX*d-))) or (JQ- & D+) or (U+ & Jr- & (RS+ or Cr+)); whoever: {EL+} & (((Ss*d+ or Bsd+ or [[CX+]]) & ( or SJr- or (Xc+ & {Xd-} & CO+) or ({Xd- & Xc+} & MVs-))) or [[(O- or J-) & CX+]]); whatever.c: ({EL+} & (((Ss*d+ or Bsd+ or BW+ or D**w+) & ( or (Xc+ & {Xd-} & CO+) or ({Xd- & Xc+} & MVs-))) or [[(O- or J-) & CX+]])) or ((ALx+ & J+) & (({Xd-} & Xc+ & CO+) or ({Xd- & Xc+} & MVs-))); whenever wherever however.c: {EL+} & (Cs+ & (({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & MVs-))); no_matter: QI+ & ((Xc+ & {Xd-} & CO+) or ({Xd- & Xc+} & MVs-)); that.j-c: (Cet+ & ([SFsx+ & ] or TH- or [[MVh-]] or RJ*t+ or RJ*t-)) or (TS- & (SI*j+ or SFI**j+) & I*j+); that.j-d: [{AL-} & D*u+]; that.j-r: (R- & (({MVp+ or MVx+} & RS+) or Cr+)) or EE+ or (EA+ & {HA+}) or DTn+; that.j-p: ({[[M+]]} & ) or ; % (Rnx+ & ): "Because I said so" because: (Cs+ & (({Xc+ & {Xd-}} & CO*s+) or BIh- or ({Xd- & Xc+} & MVs-))) or (OF+ & (({Xc+ & {Xd-}} & CO+) or BIh- or ({Xd- & Xc+} & MVa-))) or (Rnx+ & ); now_that just_as if_only in_case whereby whereupon insofar_as inasmuch_as ere on_the_grounds_that on_grounds_that in_that in_the_event_that in_the_event: Cs+ & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-)); on_condition: (TH+ or TS+) & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-)); unless though.c even_though: (Cs+ or Mgp+ or Mv+) & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-) or (Xd- & Xc+ & E+)); as_if as_though: ((Cs+ or Mgp+ or Mv+ or Mp+) & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-) or (Xd- & Xc+ & E+))) or ((BIh- or LI-) & Cs+); as_soon_as: Cs+ & {Xc+ & {Xd-}} & CO*s+; until 'til ’til ‘til ``til til: ((Mgp+ or J+ or JT+ or UN+) & (({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & MVp-) or [Mp-])) or (Cs+ & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-))); since: ((Mgp+ or J+ or JT+ or UN+) & (({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & MVp-) or [Mp-])) or (Cs+ & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-))) or [[MVa-]] or [[E+]]; ever_since: (J+ or Mgp+ or Cs+) & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-)); after: {EI- or Yt-} & (((Mgp+ or J+ or JT+) & ( or UN- or Ca+ or Qe+)) or (Cs+ & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-)))); before: ({EI- or Yt-} & (({Mgp+ or J+ or JT+} & ( or UN-)) or (Cs+ & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-))))) or (Yt- & (Ca+ or Qe+)); if: (Cs+ & {Xc+ & {Xd-}} & (Wd- & (Qd+ or Ws+ or Wq+))) or ((Cs+ or [Mgp+] or [Mv+]) & (({Xd- & Xc+} & MVs-) or ({Xc+ & {Xd-}} & CO*s+))) or (QI- & Cs+); if_possible if_necessary: MVp- or (Xd- & Xc+ & (MVx- or E+)) or ({Xc+ & {Xd-}} & CO+); if_so: ({Xc+ & {Xd-}} & CO+); if_only: ((MVp+ or MVa+ or MVs+) & ({Xd- & Xc+} & MVp-)) or (Wd+ & Wc-); no_wonder: Wd+ & Wc-; while: ((Cs+ or Mgp+ or Mp+) & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-) or (Xd- & Xc+ & E+))); : RJlv+ or RJrv-; % once as adverb once.e: ({Cs+ or Mp+} & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-) or (Xd- & Xc+ & E+))) or or E+ or EB-; % -------------------------------------------------------------------------- % Conjunctions % Should these be treated as clause-openers (taking CO link)? % e.g. "Also on this list is the Colossus of Rhodes." % Currently, they take Wc- as they are "coordinating conjuctions" % that are tied to previous sentences (i.e. to the left-wall). % Another possibility: (Rnx+ & ) "Because I say so" but.ij and.ij or.ij not.ij also.ij but_not and_not: [[(({Xd-} & CC-) or Wc-) & {Xc+} & (Wdc+ or Qd+ or Ws+ or Wq+)]]; and/or: [(({Xd-} & CC-) or Wc-) & (Wdc+ or Qd+ or Ws+ or Wq+)]; % and used as a conjunction in proper names: % The Great Southern and Western Railroad % Hmm, Maybe should use MG- & JG+ here, to be consistent with "of", "for": % "The Society of Engineers", "The League for Abstinence" and.j-g: [[G- & G+]]; % Conjoined adjectival modifiers. % The black and white cat sleeps % She ran hot and cold. % The EB+ link handles "not", "yet" after the "and" -- "blah and not blah" % See also for similar structures. % The {Xd-} allows "blah blah, and blah" % MVa is given a cost, so that Pa is used, if possible. % (In general, we want to never use MVa if Pa is possible... ) % AJla- & AJr*+ allows "he is clever and funnier than Mike." % % AJ*a: ordinary adjectives % AJ*c: comparative adjectives % AJ*s: superlative adjectives % and.j-a but.j-a yet.j-a: ({Xd-} & AJla- & {EB+} & AJr+) & (A+ or Pa- or [MVa-] or AJra-); or.j-a: ({Xd-} & AJla- & AJra+) & (A+ or Pa- or [MVa-] or AJra-); % The SJn, Dn links are propagated through the linkage, guaranteeing that % "neither" will be used together with "nor". nor.j-a: AJn- & AJ+ & (A+ or Pa- or [MVa-]); % compartives: % he is bigger, and badder, than the pope. % If one comma is there, then the other must be also. and.j-c or.j-c but.j-c yet.j-c: ((AJlc- & AJrc+) or (Xd- & AJlc- & AJrc+ & Xc+)) & (((Pam- or Mam- or AFm+) & {@MV+}) or ({[ECa-]} & MVb-) or Am+); and.j-s: (AJls- & AJrs+ & La-) or (AJld- & AJrd+ & (D+ or DD+)); % conjoined post-nominal modifiers % [Ma-]: it is more grammatically correct to have commas ... but.j-m and.j-m or.j-m: (({Xd-} & MJla- & MJra+) & ([Ma-] or (Xd- & Xc+ & MX*a-))) or (({Xd-} & MJlp- & MJrp+) & (Mp- or MVp- or (Xc+ & CO+))) or (({Xd-} & MJlj- & MJrj+ & {Xc+}) & J+ & ([Mp-] or Pp- or MVp-)); % Conjoined question words. % When and where is the party? % How and why did you do that? and.j-q: (QJ- & QJ+) & ((Wq- & (Q+ or PF+)) or QI-); % conjoined adverbs/prepositional phrases % RJ*v: adverbs % RJ*t: that "He said that ... and that ..." % RJ*c: subordinate clauses: "Although he said ... and he did ..., ..." % RJ*j: prep-object-relative (Mj): "the man for whom and with whom ..." % RJ*r: "those" relative clauses: "...: those who do and those who don''t" and.j-r or.j-r: ((RJlv- & RJrv+) & MVr-) or ((RJlt- & RJrt+) & TH-) or ((RJlc- & RJrc+) & Cs-) or ((RJlj- & RJrj+) & Mj- & Cs+) or (({Xd-} & RJlr- & RJrr+) & J-); % Conjoined nouns/noun phrases. % "The cost and reliability were questioned" (Spx+) % "He wrote for piano and flute." (Ju-) % "Where is the sickle and hammer?" (SIs-) % Op- has a cost, so that "they verbed X and verbed Y" gets the VJ link % at zero cost, and the SJ link at higher cost (since a "verbed Y" can be % understood as a modified noun). Acutally, should probably have some % post-processing rule to disallow this XXX to do fix above. Example of % bad SJ usage: "He bangs drums and played piano" i.e "he bangs a played piano" % % : ({Xd-} & SJl- & SJr+) & etc. % would allow "X , and Y" constructions, but these have tricky rules... % % noun-conj-dep-s & SI-: Are a dog and a cat here? % % XXX There should be a noun-sub-u but this requires a lot of work ... : ({Xd-} & SJls- & SJrs+ & {[[Xc+]]}); : ({Xd-} & SJlp- & SJr+ & {[[Xc+]]}) or ({Xd-} & SJls- & SJrp+ & {[[Xc+]]}); : ({Xd-} & SJlu- & SJr+ & {[[Xc+]]}) or ({Xd-} & SJlp- & SJru+ & {[[Xc+]]}) or ({Xd-} & SJls- & SJru+ & {[[Xc+]]}); % Give AN+ a cost, because in general, we don't want to conjoind nouns, % and then use the resulting phrase to modify another noun ... : Ju- or SJl+ or [[AN+]]; and.j-n but_not: ( & & ( or (Spx+ & ) or SIp- or [Os-] or )) or ( & & ( or (Spx+ & ) or SIp- or [Op-] or )) or ( & & ( or (Sux+ & ) or SIu- or [Ou-] or )); or.j-n: ( & & ( or (S*x+ & ) or SI- or [Os-] or )) or ( & & ( or (Spx+ & ) or SIp- or [Op-] or )); % The SJn, Dn links are propagated through the linkage, guaranteeing that % "neither" will be used together with "nor". nor.j-n: SJn- & SJ+ & ((Wd- & S*x+) or SI- or Os- or SJn+); % The Dn- link is used for both nouns, as above, and on neither..nor for verbs % e.g. "We neither ate nor drank" neither.j: Dn+; % Force use of commas: "Mary, but not Louise, is coming to the party" % Not John, but Mary led the way. but.j-n: ((Xd- & SJl- & EBx+ & SJr+ & Xc+) & (Wd- & Ssx+)) or ((Xd- & SJl- & EBy- & SJr+) & (Wd- & Ssx+)) or ((SJl- & EBy- & SJr+) & Ou-); % -------------------------------------------------------------------------- % Conjoined verbs/verb phrases % "Oscar Peterson played piano and wrote music." % Pass through singular/plural agreement of subject. % The weirdo (B- & {B+}) allows the following to parse: % "This is a problem Moscow created and failed to solve." : (({Xd-} & VJlsi- & VJrsi+) & (({@MV+} & Ss-) or (I- & {@MV+}) or ({Xd-} & VJrsi-))) or (({Xd-} & VJlpi- & VJrpi+) & (({@MV+} & Sp-) or (I- & {@MV+}) or ({Xd-} & VJrpi-))) or (({Xd-} & VJlst- & VJrst+) & ((({@MV+} & Ss-) or (I- & {@MV+})) & (O+ or (B- & {B+})))) or (({Xd-} & VJlpt- & VJrpt+) & ((({@MV+} & Sp-) or (I- & {@MV+})) & (O+ or (B- & {B+})))) or (({Xd-} & VJlh- & VJrh+) & (PP- & {@MV+})) or ((VJlg- & VJrg+) & (J-)); and.j-v or.j-v: ; % ditransitive conjunction: "I gave Bob a doll and Mary a gun" : {Xd-} & VJd- & O+ & O*n+; and.j-o or.j-o: ; % The VJn- gaurentees that nor.j-v is used with neither.j-v nor.j-v: (VJn*i- & VJr*i+ & ({@MV+} & S-)) or (VJn*t- & VJr*t+ & ({@MV+} & S- & O+)); % Similar to and, but allows optional comma before "but" % "blah blah, but blah" but.j-v: ((({Xd-} & VJls-) & VJrs+) & (Ss- or ({Xd-} & VJrs-))) or ((({Xd-} & VJlp-) & VJrp+) & (Sp- or ({Xd-} & VJrp-))) or ((VJl- & VJr+) & (I-)); % The VJb- guarentees that bit.j-b is used with not_only % "We not only X'ed but also Y'ed". % This is the same pattern as the neither..nor... pattern above. but.j-b: (VJb*i- & VJr*i+ & ({@MV+} & S-)); not_only: Db+; % XJ: collocations with holes, i.e. "... blah blah X um um Y" % where "blah blah" is always used with "um um". % XJ*i: with infinitives % ... not only X, but Y % "you should not only ask for your money back, but demand it" not_only: I- & I+ & XJi+; but.j-r: {Xd-} & XJi- & I+; % XXX to-do: should have special linkage for either... or .... % instead of dependeingg on the E+ link. See neither..nor... for examples. either.r: Ds+ or E+ or ({OF+} & ) or ({Xd+ & Xc-} & MVa-); neither.r: Ds+ or E+ or ({OF+} & ); nor.r: ((Xd- & CC-) or Wd-) & Qd+; for.r: [[(({Xd-} & CC-) or Wc-) & (Wd+ or Qd+ or Ws+ or Wq+)]]; yet.r: ((({Xd-} & CC-) or Wc-) & Wd+) or E+ or MVa- or ({Xd-} & Xc+ & CO+); thus therefore: ({Xc+ & {Xd-}} & CO+) or ({Xd-} & CC- & Wd+) or ({Xd- & Xc+} & (E+ or EB-)) or (Xd- & Xc+ & MVa-); % QI- & (): "I do not know when" when: ((WN- or BIh-) & Cs+) or ((PF+ or TOn+ or Cs+) & (BIq- or QI- or (SFsx+ & ))) or [QI-] or QJ- or QJ+ or (Wq- & (Q+ or PF+)) or ((Cs+ or Mp+ or Mgp+ or Mv+) & (({Xd- & Xc+} & MVs-) or ({Xc+ & {Xd-}} & CO*s+) or (Xd- & Xc+ & E+))); % QI- & (): "I do not know why" why: ({EL+} & ((Wq- & Q+) or (QI- & (Cs+ or TOn+ or [()])) or (Cs+ & ((SFsx+ & ) or WY- or BIq- or QJ+ or QJ-)))) or QJ- or QJ+ or [[{@CO-} & Wc- & Wi+]]; why_not: [[{@CO-} & Wc- & Wi+]]; % QI- & (): "I do not know where" % R+ & Bsw+: "Where does it go to?" where: {EL+} & ( (Wq- & ((Rw+ & WR+) or (R+ & Bsw+) or ({Rw+} & PF+) or Q+)) or [QI-] or QJ- or QJ+ or ((WR+ or Cs+ or TOn+ or PF+) & (BIq- or QI- or (SFsx+ & ))) or ((Cs+ or PF+ or WR+) & )); whether: (((QI- or BIq-) & (Cs+ or TOn+)) or (Cs+ & SFsx+ & )) or [[(Cs+ or MV+) & (({Xd- & Xc+} & MVs-) or ({Xc+ & {Xd-}} & CO*s+))]]; whether_or_not: ((QI- or BIq-) & (Cs+ or TOn+)) or (Cs+ & (({Xd- & Xc+} & MVs-) or ({Xc+ & {Xd-}} & CO*s+))); % QI- & (): "I do not know how" how: ((((EAh+ or EEh+) & {HA+}) or H+ or AFh+) & (BIqd- or QI*d- or Wq- or Ws-)) or (Wq- & (Q+ or AF+)) or [QI-] or QJ- or QJ+ or ((Cs+ or TOn+) & (QI- or BIq- or (SFsx+ & ))); % EBy+ link is for "verbed not X but Y" not.e: EB- or ({@E-} & N-) or NT+ or EBy+ or [[((Ma+ or Mg+ or Mv+ or Mp+) & CO+) or (Mg- & Mgn+) or (Mv- & Mvn+) or (Mp- & Mp+) or (Ma- & Ma*n+)]]; % We include this, though it's not one of the strippable strings n't n’t: N- or EB-; %ADJECTIVES % Common disjuncts shared by virtually all adjectives. % Dn- & AJn+: for neither...nor constructions. : [[{@E-} & Wq- & {@MV+} & PF+ & {@MV+} & {CC+}]] or (AJra- & {@MV+}) or ({@MV+} & AJla+) or (Dn- & AJn+) or ({@E-} & {@MV+} & ([[]] or (Xd- & Xc+ & MX*a-))); % Ordinary adjectives % abject.a abnormal.a abominable.a abortive.a abrasive.a abrupt.a % "the rich and powerful": [[{DD-} & ]] : {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+}) or ({@MV+} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ); /en/words/words.adj.1: or ; HYPHENATED-WORDS.a: ({EA- or EF+} & (({[[@Ec-]]} & {Xc+} & Ah+) or (Pa- & {@MV+}))) or [[AN+]]; % "We caught a through flight", "its a done job" - adjective -- !? probably over-broad. : {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((AF+ or Ma- or MJra-) & {@MV+}) or ({@MV+} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]]); done.c gone.c through.c: ; responsible.a accountable.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or Vh- or MJra-) & {@MV+}) or ({@MV+} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ); long.a: or ((Ya- or Yt-) & (Pa- or Ma- or MJra- or MJla+)) or (H- & (BT+ or Yt+)); % Hmm does distant really belong here? % "The river is a mile wide here": Ya- & Pa- & MVp+ wide.a tall.a deep.a distant.a: or (Ya- & (Pa- or Ma- or MJra- or ) & {@MV+}) or (Ya- & {@MV+} & MJla+); old.a: or (Ytm- & (Pa- or Ma- or or MJra- or MJla+)); % ??? adj-op already has MX*a- in it, why do we need a bar MX- here ? aged.i: NM+ & (Pa- or Max- or or (Xd- & MX- & Xc+) or MJra- or MJla+); % The following all have a very regular pattern, with just one variable % part, the TO TH type section. This regularity should be exploted so % simplify the expressions ... easy.a hard.a simple.a difficult.a fun.a expensive.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {((TOt+ & B+) or TOi+) & {LE+}}) or ({@MV+} & {((TOt+ & B+) or TOi+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TOt+ & B+} & )); ready.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {((TOt+ & B+) or TO+) & {LE+}}) or ({@MV+} & {((TOt+ & B+) or TO+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TO+ or (TOt+ & B+)} & )); silly.a nasty.a pleasant.a unpleasant.a dangerous.a cruel.a standard.a safe.a legal.a illegal.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {((TOt+ & B+) or TOi+) & {LE+}}) or ({@MV+} & {((TOt+ & B+) or TOi+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TOt+ & B+} & )); : {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {((TOt+ & B+) or THi+ or TOi+) & {LE+}}) or ({@MV+} & {((TOt+ & B+) or THi+ or TOi+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TOt+ & B+} & )); good.a bad.a unusual.a useful.a a_bitch nice.a strange.a wonderful.a terrible.a possible.a impossible.a annoying.a fair.a unfair.a tough.a: ; great.a: or ; important.a essential.a crucial.a necessary.a imperative.a vital.a: or ({EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & (({@MV+} & {(THi+ or TOi+ or TSi+) & {LE+}}) or (TOt+ & B+))) or ((({@MV+} & {(THi+ or TOi+ or TSi+) & {LE+}}) or (TOt+ & B+)) & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TOt+ & B+} & ))); common.a practical.a original.a normal.a helpful.a striking.a confusing.a frustrating.a disturbing.a logical.a illogical.a elegant.a efficient.a awful.a just.a unjust.a absurd.a natural.a alarming.a acceptable.a unacceptable.a deplorable.a detestable.a scary.a shocking.a poetical.a: or ({EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(THi+ or TOi+) & {LE+}}) or ({@MV+} & {(THi+ or TOi+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or )); surprising.a interesting.a odd.a remarkable.a amazing.a exciting.a depressing.a rare.a embarrassing.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(THi+ or Ci+ or TOi+) & {LE+}}) or ({@MV+} & {(THi+ or Ci+ or TOi+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ); crazy.a sane.a insane.a stupid.a ridiculous.a wrong.a curious.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(TO+ or TOi+ or THi+) & {LE+}}) or ({@MV+} & {(TO+ or TOi+ or THi+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TO+} & )); wise.a unwise.a smart.a intelligent.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(TO+ or TOi+) & {LE+}}) or ({@MV+} & {(TO+ or TOi+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TO+} & )); unlikely.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(TOf+ or THi+ or Ci+) & {LE+}}) or ({@MV+} & {(TOf+ or THi+ or Ci+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TO+} & )); likely.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(TOf+ or THi+ or Ci+) & {LE+}}) or ({@MV+} & {(TOf+ or THi+ or Ci+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TO+} & ) or [E+]); apparent.a false.a official.a strict.a significant.a funny.a notable.a untrue.a tragic.a plain.a urgent.a a_drag a_bummer definite.a evident.a impressive.a incredible.a inevitable.a mysterious.a pathetic.a probable.a admirable.a commendable.a conceivable.a insignificant.a miraculous.a self-evident.a undeniable.a plausible.a understandable.a demonstrable.a hilarious.a improbable.a inexcusable.a outrageous.a paradoxical.a shameful.a inconceivable.a unbelievable.a astonishing.a disgraceful.a debatable.a arguable.a lamentable.a regrettable.a well-known.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(THi+ or Ci+) & {LE+}}) or ({@MV+} & {(THi+ or Ci+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ); clear.a unclear.a relevant.a irrelevant.a obvious.a immaterial.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(THi+ or QIi+) & {LE+}}) or ({@MV+} & {(THi+ or QIi+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ); clear.i: {EA- or EF+} & Vm- & TH+; sure.i certain.i: {EA- or EF+} & Vm- & (TH+ or TO+ or (OF+ & {@MV+})); tactful.a conventional.a advisable.a prudent.a sensible.a tactless.a polite.a impolite.a arrogant.a conceited.a obnoxious.a valuable.a reasonable.a unreasonable.a traditional.a unnecessary.a tempting.a usual.a inadvisable.a lovely.a a_mistake ethical.a unethical.a immoral.a childish.a awkward.a appropriate.a costly.a customary.a desirable.a dumb.a effective.a fashionable.a foolish.a healthy.a hip.a okay.a OK.a ok.a painful.a selfish.a sufficient.a advantageous.a boring.a inappropriate.a insufficient.a irrational.a irresponsible.a mandatory.a meaningless.a preferable.a senseless.a trivial.a wrongheaded.a premature.a risky.a dishonest.a hypocritical.a enjoyable.a idiotic.a inconvenient.a unkind.a pointless.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {TOi+ & {LE+}}) or ({@MV+} & {TOi+ & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ); unknown.a questionable.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {QIi+}) or ({@MV+} & {QIi+} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ); certain.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(Ce+ or TOf+ or TH+ or QI+ or (OF+ & {@MV+})) & {LE+}}) or ({@MV+} & {(Ce+ or TOf+ or TH+ or QI+ or (OF+ & {@MV+})) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({Ce+ or TO+ or TH+ or QI+ or OF+} & )); sure.a unsure.a uncertain.a careful.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {(Ce+ or TO+ or TH+ or QI+ or (OF+ & {@MV+})) & {LE+}}) or ({@MV+} & {(Ce+ or TO+ or TH+ or QI+ or (OF+ & {@MV+})) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({Ce+ or TO+ or TH+ or QI+ or OF+} & )); % common adjectives, taking "to", "that" e.g. "was incorrect that" correct.a incorrect.a right.a excited.a disappointed.a upset.a sorry.a content.a determined.a amused.a amazed.a astonished.a astounded.a pleased.a disgusted.a distressed.a dismayed.a irritated.a embarrassed.a alarmed.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {(TO+ or TH+) & {LE+}}) or ({@MV+} & {(TO+ or TH+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TO+ or TH+} & )); glad.a fortunate.a unfortunate.a lucky.a unlucky.a happy.a sad.a surprised.a delighted.a overjoyed.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {(Ce+ or TO+ or TH+) & {LE+}}) or ({@MV+} & {(Ce+ or TO+ or TH+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({Ce+ or TO+ or TH+} & )); % common adjectives, taking "to", "of", "that" e.g. "proud that" proud.a scared.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {(TO+ or TH+ or (OF+ & {@MV+})) & {LE+}}) or ({@MV+} & {(TO+ or TH+ or (OF+ & {@MV+})) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TO+ or TH+ or OF+} & )); % common adjectives, taking "of" e.g. "tired of", "sick of" etc. tired.a pooped.a full.a sick.a critical.a guilty.a innocent.a typical.a capable.a contemptuous.a incapable.a reminiscent.a scornful.a mindful.a short.a appreciative.a complimentary.a born.a worthy.a free.a terrified.a unworthy.a prognostic.a dead.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {OF+ & {@MV+}}) or ({@MV+} & {OF+ & {@MV+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({OF+ & {@MV+}} & )); fond.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & OF+ & {@MV+}) or (OF+ & {@MV+} & MJla+) or (OF+ & )); afraid.a ashamed.a unafraid.a unashamed.a: {EA- or EF+} & (((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {((OF+ & {@MV+}) or Ce+ or TH+ or TO+) & {LE+}}) or ({@MV+} & {((OF+ & {@MV+}) or Ce+ or TH+ or TO+) & {LE+}} & MJla+) or ({OF+ or Ce+ or TH+ or TO+} & )); apprehensive.a secure.a optimistic.a pessimistic.a annoyed.a confused.a offended.a insulted.a concerned.a depressed.a doubtful.a grateful.a mad.a mistaken.a hopeful.a unhappy.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {TH+ & {LE+}}) or ({@MV+} & {TH+ & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TH+} & )); aware.a unaware.a: {EA- or EF+} & (((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {(TH+ or (OF+ & {@MV+})) & {LE+}}) or ({@MV+} & {(TH+ or (OF+ & {@MV+})) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TH+ or OF+} & )); true.a conscious.a confident.a skeptical.a jealous.a suspicious.a envious.a desirous.a convinced.a unconvinced.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {(TH+ or (OF+ & {@MV+})) & {LE+}}) or ({@MV+} & {(TH+ or (OF+ & {@MV+})) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TH+ or OF+} & )); eager.a reluctant.a able.a unable.a impatient.a eligible.a brave.a anxious.a apt.a desperate keen.a prepared.a willing.a hesitant.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {TO+ & {LE+}}) or ({@MV+} & {TO+ & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TO+} & )); former.a: A+ or G+ or (DG- & ); latter.a: DG- & ; overall.a onetime.a outboard.a pinstripe.a goddam.a de_facto de_jure erstwhile.a foster.a outright.a online.a: A+; pro_forma ad_hoc bona_fide: A+ or Pa-; a_priori a_posteriori: A+ or MVa- or ({Xc+ & {Xd-}} & CO+); asleep.a awake.a alike.a alive.a ablaze.a adrift.a afire.a aflame.a afloat.a afoot.a aghast.a aglow.a agog.a ajar.a amiss.a askew.a astir.a awash.a awry.a de_rigeur rife.a fraught.a lacking.a: ((Ma- or Pa- or MJra-) & {@MV+}) or ({@MV+} & MJla+) or ; alone.a: ((Ma- or Pa- or MJra-) & {@MV+}) or ({@MV+} & MJla+) or or MVp- or E+; outstanding.a available.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Max- or MJra-) & {@MV+}) or ({@MV+} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ); due.i effective.i: (TY+ or JT+) & ; north.a south.a east.a west.a northeast.a northwest.a southeast.a southwest.a: or A+ or ({Yd-} & {OF+} & (Pp- or MVp- or Mp- or (Xc+ & Xd- & (MVx- or MX*x-)))) or [[DD- & ]]; northern.a southern.a eastern.a western.a northeastern.a northwestern.a southeastern.a southwestern.a: or A+ or G+; % ------------------------------------------------------------------------- %COMPARATIVES AND SUPERLATIVES more: ({ECa-} & (EAm+ or EEm+ or [MVm-] or [EB*m-] or Qe+ or Ca+ or AJrc- or AJlc+)) or ({OF+} & (({ECn-} & (Dmum+ or (Ss+ & ) or Bsm+)) or ({ECx- or ND-} & (Dmcm+ or (Sp+ & ) or Bpm+)) or ({ECn- or ECx- or ND-} & (Om- or Jm- or (Xd- & MVt+ & Xc+ & MX*m-))))) or (DG- & (({MVa+} & Cs+) or B+ or Dm*w+ or EA+) & (ER- or (Wd- & Xc+ & ER+))); more_of_a more_of_an: Ds*m+; less: ({ECn-} & (Dmum+ or Om- or Jm- or (Ss+ & ) or Bsm+)) or ({ECa-} & (EAm+ or EEm+ or [MVm-] or [EB*m-] or AJrc- or AJlc+)) or (DG- & (({MVa+} & Cs+) or B+ or Dm*w+ or EA+) & (ER- or (Wd- & Xc+ & ER+))); fewer: ({ECn-} & (Dmcm+ or Om- or Jm- or (Sp+ & ) or AJrc- or AJlc+)) or (DG- & Dm*w+ & (ER- or (Wd- & Xc+ & ER+))); farther: ({ECa-} & {K+} & (MVb- or Qe+ or Ca+ or AJrc- or AJlc+)) or A+; further.r: ({ECa-} & {K+} & (MVb- or Qe+ or Ca+ or AJrc- or AJlc+)) or A+ or E+ or ({Xd-} & Xc+ & CO+); % links to adverbs on left.. % Hmm, probably want to give EAy a cost, to avoid its use in % "William is described as smooth, yet thoughtful" as.e-y: {EZ-} & ((EAy+ & {HA+}) or EEy+ or AM+); % uses comparative links as.e-c: (MVz- & (((O*c+ or S**c+ or ({SFsic+} & Zc+)) & {Mp+}) or Mpc+ or Cc+)) or (MVzo- & Ct+ & Bc+ & {U+}) or (MVzp- & (CX+ or CQ+)) or (MVza- & Cta+ & ((AFd+ & {Pa+}) or PFc+)); % prepositional, mostly as.e: ((J+ or Mp+ or TI+ or ({SFsic+} & Zs+)) & (({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & MVp-))) or (Cs+ & (({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & MVs-))) or ((J+ or Mp+ or BIt+) & ([Mp-] or (Xd- & Xc+ & MX*x-))) or (AZ- & Pa+) or [[(PFc+ or CQ+) & ({Xd- & Xc+} & MVs-)]]; as_possible: MVz-; as_expected as_reported as_imagined as_suspected as_anticipated as_predicted as_realized as_proposed as_intended as_supposed as_hypothesized as_hypothesised as_discussed as_established as_compared as_determined as_measured as_assessed as_demonstrated as_evidenced as_indicated as_revealed as_judged as_detected as_opposed as_observed as_defined as_reflected as_evaluated as_suggested as_monitored as_described as_confirmed as_assayed as_estimated as_analyzed as_identified as_deduced as_documented as_related as_studied as_inferred as_exemplified as_used as_expressed as_visualized as_tested as_manifested as_illustrated as_applied as_mediated as_characterized as_affected as_examined as_ascertained as_quantified as_influenced as_represented as_marked as_induced as_concluded as_calculated as_verified as_required as_recognized as_probed as_presented as_obtained as_needed as_indexed as_derived as_based as_analysed as_supported as_restricted as_recorded as_recommended as_quantitated as_produced as_postulated as_noted as_caused as_summarized as_prepared as_outlined as_occurred as_modified as_localized as_involved as_implied as_gauged as_exhibited as_encountered as_displayed as_contained as_catalyzed as_advocated as_achieved: MVz- or (({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & MVs-)); % MODIFIED 'THAN' so that it links to the clause following it % using 'C' links -- like a relative clause than: (MVt- & (((O*c+ or ({SFsic+} & Zc+) or U*c+) & {Mp+}) or Mpc+ or S**c+ or MVat+ or MVpt+ or Cc+ or Pafc+)) or ((MVta- or LE-) & Cta+ & ((AFd+ & {Pa+}) or PFc+)) or ((MVti- or LEi-) & AFdi+ & {Pa+}) or (((LE- & {AFd+}) or (LEi- & {AFdi+})) & (THc+ or TOic+ or TOfc+ or (TOtc+ & B+))) or (((MVto- & Ct+ & Bc+ & {U+}) or (MVtp- & (CX+ or CQ+))) & {Mp+}); % cost on MVa-: "we will arrive much sooner", want "much" to modify "sooner". much: ({EE-} & ([[MVa-]] or ECa+ or Ca+ or Qe+)) or ({EEx- or H-} & (ECn+ or Dmu+ or ( & ( or Bsm+)))) or (AM- & (Dmuy+ or MVy- or Oy- or Jy- or EB*y-)); slightly somewhat: EC+ or EA+ or MVa- or Em+; far.c infinitely: EC+; significantly substantially: ({EE- or EF+} & (EC+ or E+ or MVa- or ({Xc+ & {Xd-}} & CO+))) or ({EE-} & EB-); % comparative adjectives % angrier.a balder.a balmier.a baser.a bawdier.a bigger.a blacker.a : ({ECa-} & (((Pam- or Mam- or AFm+ or AJrc-) & {@MV+}) or ({[[@Ec-]]} & {Xc+} & Am+) or AJlc+)) or (DG- & (TR+ or AF+) & {@MV+} & (ER- or (Wd- & Xc+ & ER+))); /en/words/words.adj.2: ; easier.a-c: ({ECa-} & (({[[@Ec-]]} & {Xc+} & Am+) or ((Pafm- or AFm+ or Mam- or AJrc-) & {@MV+} & {((TOt+ & B+) or TOi+) & {LE+}}) or AJlc+)) or (DG- & (TR+ or AF+) & {@MV+} & {(TOt+ & B+) or TOi+} & (ER- or (Wd- & Xc+ & ER+))); harder.a-c: ({ECa-} & (({[[@Ec-]]} & {Xc+} & Am+) or ((Pafm- or AFm+ or Mam- or AJrc-) & {@MV+} & {((TOt+ & B+) or TOi+) & {LE+}}) or MVb- or AJlc+)) or (DG- & (TR+ or AF+) & {@MV+} & {(TOt+ & B+) or TOi+} & (ER- or (Wd- & Xc+ & ER+))); higher.a-c deeper.a-c lower.a-c faster.a-c quicker.a-c: ({ECa-} & (((Pam- or AFm+ or Mam- or AJrc-) & {@MV+}) or ({[[@Ec-]]} & {Xc+} & Am+) or MVb- or Qe+ or Ca+ or AJlc+)) or (DG- & (TR+ or AF+ or Cs+) & {@MV+} & (ER- or (Wd- & Xc+ & ER+))); sooner.a-c: ({ECa- or Yt-} & (((Pam- or AFm+ or Mam- or AJrc-) & {@MV+}) or ({[[@Ec-]]} & {Xc+} & Am+) or MVb- or Qe+ or Ca+ or AJlc+)) or (DG- & (TR+ or AF+ or Cs+) & {@MV+} & (ER- or (Wd- & Xc+ & ER+))); longer.a-c: ({ECa- or Yt-} & (((Pam- or AFm+ or Mam- or AJrc-) & {@MV+}) or ({[[@Ec-]]} & {Xc+} & Am+) or MVb- or Qe+ or Ca+ or OT- or FL- or AJlc+)) or (DG- & (TR+ or AF+ or Cs+) & {@MV+} & (ER- or (Wd- & Xc+ & ER+))); smarter.a-c nicer.a-c worse.a-c: ({ECa-} & (({[[@Ec-]]} & {Xc+} & Am+) or ((Pafm- or AFm+ or Mam- or AJrc-) & {@MV+} & {(TOi+ or THi+) & {LE+}}) or AJlc+)) or (DG- & (TR+ or AF+) & {@MV+} & {TOi+ or THi+} & (ER- or (Wd- & Xc+ & ER+))); better.a-c: ({ECa-} & (({[[@Ec-]]} & {Xc+} & Am+) or ((Pafm- or AFm+ or Mam- or AJrc-) & {@MV+} & {(TOi+ or THi+) & {LE+}}) or MVb- or E+ or Qe+ or Ca+ or AJlc+)) or (DG- & (TR+ or AF+) & {@MV+} & {TOi+ or THi+} & (ER- or (Wd- & Xc+ & ER+))); different.a: ({ECa- or EA- or EF+} & (({[[@Ec-]]} & {Xc+} & Am+) or ((Pafm- or AFm+ or Mam- or AJrc-) & {@MV+}) or AA+ or [[DD- & ]] or )); than_expected than_imagined than_proposed than_suspected than_realized than_intended than_supposed than_reported than_ever than_usual than_normal than_suggested than_anticipated than_recommended: MVt-; more_than no_more_than fewer_than less_than as_many_as an_estimated an_additional up_to as_much_as no_fewer_than no_less_than greater_than: EN+; at_least: EN+ or CO+ or [[{Xd- & Xc+} & MVa-]] or EB-; % This is not quite right, since there may be other words in between % "all ... but": "All was lost but for one tree." % "Everything but one tree remained." % nothing_but all_but: EN+ or E+; all_but: EN+ or E+; nothing_but: Vd- & I+; % -------------------------------------------------------------------------- % superlative adjectives % angriest.a baldest.a balmiest.a basest.a bawdiest.a biggest.a : ({Xc+} & {NR-} & {[[@Ec-]]} & La-) or ({NR- or ND-} & DD- & & {TOn+} & ) or AJrs- or AJls+; /en/words/words.adj.3: ; favorite.a favourite.a: or ({Xc+} & {[[@Ec-]]} & [[Lf-]]) or ([[Ds-]] & & {TOn+} & ); sole.a main.a: {Xc+} & {NR-} & {[[@Ec-]]} & L-; same.a own.a: ({Xc+} & {NR-} & {[[@Ec-]]} & La-) or (DD- & & {TOn+} & ); the_same: {EZ-} & (D**y+ or Oy- or Jy- or MVy-); next.a: ({Xc+ & {Xd-}} & CO+) or MVp- or DTi+ or NR+ or ({Xc+} & {[[@Ec-]]} & L-) or (DD- & & {TOn+} & ); past.a previous.a: ({[[@Ec-]]} & {Xc+} & A+) or L- or (Pa- & {@MV+}); following.a remaining.a top.i: L-; hardest.a easiest.a: ({Xc+} & {NR-} & {[[@Ec-]]} & La-) or ({NR- or ND-} & DD- & & {TOt+ & B+} & ) or AJrs- or AJls+; worst.a longest.a fastest.a furthest.a farthest.a: ({Xc+} & {NR-} & {[[@Ec-]]} & La-) or ({NR- or ND-} & DD- & (( & {TOn+} & ) or MVa-)) or AJrs- or AJls+; % "he likes you best of all" has no determiner, just uses MVa-. best.a: ({Xc+} & {NR-} & {[[@Ec-]]} & La-) or ({NR- or ND-} & DD- & (( & {TOn+} & ) or (MVa- & {Mp+}))) or [[E+]] or [MVa- & {Mp+}] or AJrs- or AJls+; % =========================================================================== %ADVERBS %ADVERBS WHOSE MAIN USE IS ADJECTIVAL far_from: {EE-} & EA+; a_bit a_little_bit a_little_while: ({EE-} & EA+) or EC+ or EE+ or ({Xd- & Xc+} & MVa-) or ; % pretty.e extremely very_very very_very_very exceptionally unbelievably incurably extraordinarily jolly.e mighty.e damn.e exceedingly overly downright plumb vitally abundantly chronically frightfully genuinely humanly patently singularly supremely unbearably unmistakably unspeakably awfully decidedly demonstrably fashionably frighteningly horrifyingly indescribably intolerably laughably predominantly unalterably undisputedly unpardonably unreasonably unusually hugely infernally: ({EE-} & EA+) or EE+; notoriously.e: ({EE-} & EA+) or EE+ or Em+; % Adverbs whose main use is adjectival, but can be used with % adverbs such as "faster", "dumber", etc. % "That one is marginally better". (thus EBm+) % "It's an inherently better method" thus E+ link fabulously incomparably inherently marginally moderately relatively ridiculously unacceptably unarguably undeniably unimaginably: ({EE-} & EA+) or EE+ or ({EE-} & EBm-) or E+; wide.e: EE+; very.e way.e: ({EE-} & EA+) or EE+ or [[La-]]; real.e: [[EA+ or EE+]]; quite: ({EE-} & EA+) or EE+ or EZ+ or [[Em+]]; amazingly strangely incredibly: ({EE-} & EA+) or EE+ or ({Xd- & Xc+} & Em+) or ({Xc+ & {Xd-}} & CO+) or EBm- or (Xd- & Xc+ & MVa-); rather: EA+ or EE+ or Vw- or ({Xc+ & {Xd-}} & CO+); particularly: EA+ or EE+ or Em+ or EB- or (MVl- & (MVp+ or MVa+ or MVs+)) or ({Xc+ & {Xd-}} & CO+); notably: EB- or EA+ or EE+ or ({Xc+ & {Xd-}} & CO+); almost nearly: EA+ or EE+ or EN+ or EZ+ or Em+ or EBm-; just_about: Em+ or EN+ or EZ+ or EA+; entirely reasonably highly fairly totally completely terribly: EA+ or EE+ or ({EE- or EF+} & (({Xd- & Xc+} & MVa-) or Em+ or Qe+ or Ca+)); absolutely: EA+ or EE+ or EBm- or ({EE- or EF+} & (({Xd- & Xc+} & MVa-) or Em+ or Qe+ or Ca+)); % allowing as opener also altogether equally: EA+ or EE+ or ({EE- or EF+} & (({Xd- & Xc+} & MVa-) or Em+ or Qe+ or Ca+)) or ({Xc+ & {Xd-}} & CO+); really: EA+ or EE+ or Em+ or EBm-; surprisingly: EA+ or EE+ or ({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & E+) or (Xd- & Xc+ & MVa-); especially: EA+ or EE+ or EB- or Em+ or (MVl- & (MVp+ or MVa+ or MVs+)) or ({Xc+ & {Xd-}} & CO+); virtually: EA+ or EE+ or EN+ or EZ+ or Em+; wholly fully critically greatly grossly duly unduly: EA+ or ({EE- or EF+} & (({Xd- & Xc+} & MVa-) or Em+ or Qe+ or Ca+)); seemingly utterly: EA+ or Em+; barely scarcely hardly merely truly practically: Em+ or EBm- or EA+; partly.e largely.e mostly.e chiefly.e simply.e1 purely.e solely.e: Em+ or EA+ or EB- or (MVl- & (MVp+ or MVa+ or MVs+)); % "It sure is great" sure.ee: Em+; more_and_more less_and_less more_or_less: Em+; % Adverbs like "biochemically". These tend to answer the question "how?" % with a noun-form (as opposed to being verb-derived) A lot of these are % of the "-ically" form /en/words/words.adv.3: EA+ or ({Xd- & Xc+} & (E+ or MVa-)) or EBm- or ({{Xd-} & Xc+} & CO+); in_part: EB- or (MVl- & (MVp+ or MVa+ or MVs+)); % academically administratively aesthetically %ADVERBS WHOSE ONLY (MAIN) USE IS POST_VERBAL barefoot.e willy-nilly quarterly.e madly.e outright.e staccato.e legato.e all_the_way all_the_time anymore.e aloud.e upwards.e downwards.e upward.e downward.e inward.e outward.e inwards.e outwards.e anytime.e live.e wholesale.e anew.e forever.e awhile.e aback.e afoul.e afresh.e aloft.e amok.e amuck.e onstage.e apiece.e askance.e astern.e asunder.e inter_alia mutatis_mutandis par_excellence upside-down.e ab_initio ad_infinitum ad_lib ad_libitum ad_nauseum en_masse aground.e astray.e into_account into_effect to_market to_bid from_scratch to_office for_office for_good at_once to_normal to_bed to_town into_office in_advance to_trial by_lot in_stride by_credit_card by_ear by_foot in_kind en_masse to_mind in_mind in_pencil in_pen to_scale for_trial all_right full_time part_time by_proxy: {Xd- & Xc+} & MVa-; % Adjectives that appear post-verbally e.g. "she wiped the table dry" % "we will arrive exhausted" % comparative link *must* have EE- to "more", "less" % These are more or less adverbs ... dry.e flat.e blind.e tired.e refreshed.e fresh.e exhausted.e rejuvenated.e: ({EE- or EF+ } & (MVa- or AJra- or AJla+)) or (EE- & (AJrc- or AJlc+)); wild.e rampant.e shut.e tight.e open.e loud.e hot.e cold.e free.e: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or Ca+); hard.e wrong.e: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or Qe+ or Ca+); early.e late.e: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or TA+ or Qe+ or Ca+); far.e: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or Ca+ or Qe+ or Yd+); yet.e: ({Xd- & Xc+} & MVa-) or EBm-; %ADVERBS USABLE POST-VERBALLY OR PRE-VERBALLY properly.e: ({Xd- & Xc+} & MVa-) or Em+; finely specially literally heavily alternately severely dearly voluntarily dramatically flatly purposely jointly narrowly universally thickly widely: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or Em+ or Qe+ or Ca+ or [[EA+]]); respectively: ({Xd- & Xc+} & MVa-) or ({Xd- & Xc+} & E+) or ({Xd- & Xc+} & EB-); long.e: E+ or ({EE- or EF+} & (({Xd- & Xc+} & MVa-) or OT- or FL- or Yt+)); daily.e nightly.e weekly.e monthly.e yearly.e hourly.e partially: ({Xd- & Xc+} & MVa-) or E+ or EB-; exactly.e: E+ or ({Xd- & Xc+} & MVa-) or EB- or EN+ or EZ+; well.e: ({EE- or EF+} & (({Xd- & Xc+} & MVa-) or Qe+ or Ca+ or [E+])) or [{EA- or EF+} & (Pa- or AF+)] or Yd+; roughly approximately: EA+ or ({EE- or EF+} & (EN+ or EZ+ or ({Xd- & Xc+} & MVa-) or E+)) or ({Xc+ & {Xd-}} & CO+); together: ({Xd- & Xc+} & MVa-) or E+ or K- or [Mp-] or ({Xc+ & {Xd-}} & CO+); definitely: {EE-} & (E+ or EB- or (Xd- & Xc+ & MVa-)); by_far: EB- or E+ or MVa-; hereby thereby reputedly: E+ or ({Xd- & Xc+} & EB-) or ({Xc+ & {Xd-}} & CO+); %ADVERBS USABLE POST-VERBALLY, PRE-VERBALLY, OR AS OPENERS initially already somehow again once_again nowadays sometimes nevertheless nonetheless at_first at_best at_present of_late indeed: ({Xd- & Xc+} & MVa-) or E+ or ({Xc+ & {Xd-}} & CO+) or EBm-; twice.e: ({Xd- & Xc+} & MVa-) or E+ or ({Xc+ & {Xd-}} & CO+) or EBm- or or ({EN-} & EZ+); hence: (Yt- & ({Xd- & Xc+} & MVa-)) or E+ or ({Xc+ & {Xd-}} & CO+) or EBm-; otherwise formerly lately: ({Xd- & Xc+} & MVa-) or E+ or ({Xc+ & {Xd-}} & CO+) or EB-; also.e: ({Xd- & Xc+} & (E+ or MVa-)) or ({Xc+ & {Xd-}} & CO+) or EB-; gradually.e sadly.e broadly.e clearly.e annually.e characteristically.e comparatively.e confidentially.e currently.e fundamentally.e hypothetically.e ironically.e justifiably.e momentarily.e mercifully.e nominally.e ominously.e periodically.e precisely.e realistically.e simultaneously.e subsequently.e superficially.e thankfully.e unofficially.e effectively.e traditionally.e briefly.e eventually.e ultimately.e mysteriously.e naturally.e oddly.e plainly.e truthfully.e appropriately.e simply.e2: {EE- or EF+} & (({Xd- & Xc+} & (MVa- or E+)) or ({Xc+ & {Xd-}} & CO+) or EB- or Qe+ or Ca+ or [[EA+]]); occasionally.e often.e specifically.e generally.e originally.e: {EE- or EF+} & (({Xd- & Xc+} & (MVa- or E+)) or ({Xc+ & {Xd-}} & CO+) or EB- or Qe+ or Ca+); % ordinary manner adverbs % abjectly ably abnormally abortively abruptly absent-mindedly absently : {EE- or EF+} & (({Xd- & Xc+} & MVa-) or Em+ or ({Xc+ & {Xd-}} & CO+) or Qe+ or Ca+ or or [[EA+]]); /en/words/words.adv.1: ; /en/words/words-medical.adv.1: ; % words.adv.4 contains "prepositional" adverbs, e.g. lingually % meidally subdermally ... Right now we treat these as ordinary % adverbs, and add the Pp- link .. but is this link actually used % anywhere? /en/words/words.adv.4: or Pp-; differently: {EE- or EF+} & (({MVp+} & {Xd- & Xc+} & MVa-) or Em+ or ({MVp+} & {Xc+ & {Xd-}} & CO+) or Qe+ or Ca+ or [[EA+]]); independently: {EE- or EF+} & (({(MVp+ or OF+)} & {Xd- & Xc+} & MVa-) or Em+ or ({(MVp+ or OF+)} & {Xc+ & {Xd-}} & CO+) or Qe+ or Ca+ or [[EA+]]); shortly: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or E+ or EI+ or ({Xc+ & {Xd-}} & CO+) or Qe+ or Ca+); immediately stat.e: ({Xd- & Xc+} & MVa-) or E+ or EI+ or ({Xc+ & {Xd-}} & CO+) or EB-; soon: ({EE- or EF+} & (({Xd- & Xc+} & MVa-) or E+ or EI+ or ({Xc+ & {Xd-}} & CO+) or EB- or Qe+ or Ca+)) or ({EA- or EF+} & (Pa- or AF+)); certainly possibly probably importantly remarkably interestingly: {EE-} & (E+ or (Xd- & Xc+ & (E+ or MVa-)) or ({Xc+ & {Xd-}} & CO+) or ({Xc+ & {Xd-}} & EB-)); /en/words/words.adv.2: % ordinary clausal adverbs E+ or (Xd- & Xc+ & (E+ or MVa-)) or ({Xc+ & {Xd-}} & CO+) or EBm-; % absurdly actually additionally admittedly allegedly alternatively % These are taken from words.adv.2 and allowed EB- when separated by % commas. however.e consequently.e moreover.e potentially.e conversely.e finally.e actually.e thusly.e: E+ or (Xd- & Xc+ & (E+ or MVa-)) or ({Xc+ & {Xd-}} & CO+) or ({Xc+ & {Xd-}} & EBm-); % TODO: "similarly" and "differently" get very different linking requirements. % see if these should be made the same. similarly.e: ({MVp+} & {Xd- & Xc+} & (E+ or MVa-)) or ({MVp+} & {Xc+ & {Xd-}} & CO+) or ({Xc+ & {Xd-}} & EBm-); not_suprisingly if_nothing_else: E+ or (Xd- & Xc+ & (E+ or MVa-)) or ({Xc+ & {Xd-}} & CO+) or EBm-; though.e: (Xd- & Xc+ & (E+ or MVa-)) or ({Xc+ & {Xd-}} & CO+); still.e presumably undoubtedly evidently apparently usually typically perhaps: E+ or (Xd- & Xc+ & (E+ or MVa-)) or ({Xc+ & {Xd-}} & CO+) or EB-; in_fact of_course in_effect for_example for_instance e.g. i.e. : E+ or (Xd- & Xc+ & (E+ or MVa-)) or ({Xc+ & {Xd-}} & CO+) or (EB- & {Xc+}) or (Xd- & EB- & Xc+) or ({Xd-} & CC- & Wd+); % ADVERBS USABLE POST_VERBALLY OR AS OPENERS % Note that similar interjective openers will be given COp+ links % by the UNKNOWN-WORD.a rule -- "Umm, I think he did it." no.e nope.e nah.e no_way yes.e yeah.e yep.e yup.e ok.e okay.e OK.e fine.e sure.e whatever.e someday.e sometime.e thereafter.e anyhow.e anyway.e overall.e afterwards.e afterward.e lengthwise.e worldwide.e nationwide.e statewide.e world-wide.e nation-wide.e state-wide.e industrywide.e instead.e prima_facie before_long by_hand by_car by_plane by_boat by_bus by_train by_phone by_telephone in_person at_long_last on_cue on_arrival by_request in_total in_turn over_and_over time_and_again later_on for_now day_by_day day_after_day step_by_step one_by_one for_sure for_certain even_so more_often_than_not all_of_a_sudden: ({Xd- & Xc+} & MVa-) or ({Xc+ & {Xd-}} & CO+); % Openers to directives, commands (Ic+ connection to infinitives) % or single-word interjections. These are semantically important, % so they've got to parse! no.ij nope.ij nah.ij no_way yes.ij yeah.ij yep.ij yup.ij ok.ij okay.ij OK.ij fine.ij exactly.ij sure.ij whatever.ij hah.ij hey.ij well.ij: Wi- or ; % Openers to directives, commands (Ic+ connection to infinitives) anyhow.ij anyway.ij afterwards.ij afterward.ij instead.ij by_hand by_car by_plane by_boat by_bus by_train by_phone by_telephone in_person at_long_last on_cue on_arrival by_request in_total in_turn over_and_over later_on for_now day_by_day day_after_day step_by_step one_by_one for_sure for_certain even_so more_often_than_not all_of_a_sudden: ; % sort-of-like given names ... stop.misc-inf sir.misc-inf madam.misc-inf ma'am: ; high.e deep.e low.e: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or ({Xc+ & {Xd-}} & CO+) or Ca+ or Qe+); left.e right.e straight.e: ({EE- or EF+} & (({Xd- & Xc+} & MVa-) or ({Xc+ & {Xd-}} & CO+) or Qe+ or Ca+)) or (Kx- & Ky+) or (Pp- & Pp+); short.e: {Yd- or EE- or EF+} & {OF+} & ({Xd- & Xc+} & MVa-); %ADVERBS USABLE ONLY PRE-VERBALLY (OR PRE-/OPENER) newly: E+; rightly: {EE-} & E+; necessarily no_longer: E+ or EBm-; ever: E+ or EBm- or EC+ or MVa-; never.e always: {EN-} & (E+ or EB-); seldom rarely.e: {EE-} & (E+ or EB-); % MVa-: "He did just what you asked." just.e: E+ or EB- or (MVl- & (MVa+ or MVp+ or MVs+)) or EN+ or EZ+ or MVa-; maybe: CO+; meantime.e secondly thirdly in_brief in_short in_sum in_essence: ({Xd- & Xc+} & E+) or ({Xc+ & {Xd-}} & CO+); furthermore: ({Xd- & Xc+} & E+) or ({Xc+ & {Xd-}} & CO+) or EB-; mainly primarily: E+ or ({Xc+ & {Xd-}} & CO+) or EB- or (MVl- & (MVa+ or MVp+ or MVs+)); only: La- or E+ or EN+ or EB- or (MVl- & (MVp+ or MVa+ or MVs+)) or MVa- or (Rnx+ & ) or (MVp+ & Wq- & Q+); never.i at_no_time not_once rarely.i since_when: {MVp+} & Wq- & Q+ & {CC+}; not_since: (J+ or Cs+) & Wq- & Q+ & {CC+}; even.e: E+ or EC+ or EB- or ((MVp+ or MVa+ or MVs+) & (MVl- or ({Xc+ & {Xd-}} & CO+))) or (Rnx+ & ); not_even: Rnx+ & ; too: {ECa-} & (EA+ or EE+ or ({Xd- & Xc+} & MVa-) or (Xd- & Xc+ & E+)); so: (EAxk+ & {HA+}) or ({EZ-} & EExk+) or ((({Xd-} & CC-) or ({Xc+} & Wc-)) & (Wd+ or Qd+ or Ws+ or Wq+)) or (Wq- & (PF+ or CQ+)) or O- or Js-; % original % sufficiently: {EE-} & (EAxk+ or EExk+ or MVak-); % modified sufficiently: {EE-} & (EAxk+ or EExk+ or ({Xd- & Xc+} & MVa-) or E+); so_that such_that: Cs+ & {Xd- & Xc+} & MVs-; % much like an ordinary adverb, except even more commas allowed % please.e: ; please.e: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or ({Xc+ & {Xd-}} & (Em+ or CO+)) or Qe+ or Ca+ or [[EA+]]); % polite command verb please.w thank_you: {Ic-} & Wi- & {{Xc+} & Vv+}; % MISCELLANEOUS WORDS AND PUNCTUATION etc: {Xi-} & Xd- & Xc+ & (MX- or MVa-); so_on the_like vice_versa v.v.: ( & ) or or (( or or or ) & {@MV+}) or M- or MV-; % Assorted interjections, treat like unknown adjectives. er err.ij errr um.ij umm uh uhh oh.ij ohh ooo woo_hoo gee gosh wow.ij ah ahh eh ehh hmm hmmm hoo zowie goody.ij jeepers Jee-sus hubba Kee-reist oops amen huh howdy dammit whammo shucks.ij heck anyways honey.ij golly man.ij baby.ij hush.ij sonuvabitch aw aww awww oh_great oh_wow emoticonID0 emoticonID1 emoticonID2 emoticonID3 emoticonID4 emoticonID5 emoticonID6 emoticonID7 emoticonID8 emoticonID9 emoticonID10 emoticonID11 emoticonID12 emoticonID13 emoticonID14 emoticonID15 emoticonID16 emoticonID17 emoticonID18 emoticonID19 emoticonID20 emoticonID21 emoticonID22 emoticonID23 emoticonID24 emoticonID25 emoticonID26 emoticonID27 emoticonID28 emoticonID29 emoticonID30 emoticonID31 emoticonID32 emoticonID33 emoticonID34 emoticonID35 emoticonID36 emoticonID37 emoticonID38 emoticonID39 emoticonID40 emoticonID41 emoticonID42 emoticonID43 emoticonID44 emoticonID45 emoticonID46 emoticonID47 emoticonID48 emoticonID49 emoticonID50 emoticonID51 emoticonID52 emoticonID53 emoticonID54 emoticonID55 emoticonID56 emoticonID57 emoticonID58 emoticonID59: or ({{Ic-} & [[Wi-]]} & {{Xd-} & Xc+} & Ic+); ".": ((Xp- or ({@Xca-} & Xc-)) & RW+) or Xi-; "!" "?": ((Xp- or ({@Xca-} & Xc-)) & RW+) or ({@Xca-} & Xq+); : {@Xca-} & Xx- & (W+ or Qd+) & {Xx+}; ";": ; % comma, as a conjunction -- "They taste bitter, not sweet" % Give MVa a cost, so that Pa is used preferentially, if possible. : ((AJla- & EBx+ & AJra+) & (Pa- or [[MVa-]])) or (AJla- & AJra+ & AJla+); : (RJlv- & RJrv+ & RJlv+); % sometimes comma is used as if it were a semicolon % Allow post-comma adverbial modifiers, but discourage these % because the modifier my be long to a following phrase. % e.g. "The blah, soon to be blah, will be blah." should not % get an EBx link to "soon". % XXX the correct solution to this is to add a new domain rule ! XXX % % Comma can conjoin nouns only if used in a list of 3 or more items: % "This, that and the other thing" % However, this is given a cost, so that geographic names are prefered: % "He went to Gaeta, Italy, and to Paris, France." % ",": ({@Xca- or [[[@Xc-]]]} & (({[EBx+]} & Xd+) or Xc-)) or [[]] or or or or [[SJl- & SJr+ & SJl+]] or (SJn- & SJr+ & SJn+); "…" ":.j" "•": ({@Xca-} & ((Xx- & (W+ or J+ or Qd+ or TH+ or TOn+) & {Xx+}) or Xe-)); % The percent sign following a number % Also -- see above, for handling of 12ft. 12in. not just 12% "%": (ND- & {DD-} & & ) or (ND- & (OD- or AN+)); % See also /en/words/currency for curency names that follow a number. $ USD.c US$.c C$.c AUD.c AUD$.c HK.c HK$.c £ ₤ € ₳ ฿ ¢ ₵ ₡ ₢ ₫ ₣ ₴ ₭ ℳ ₥ ₦ ₧ ₰ ₨ ₪ ৳ ₮ ₩ ¥ 호점 † †† ‡ § ¶ © № "#": NM*x+ & (AN+ or NM*y- or [[G+]] or (NIfu+ or NItu-) or ({EN- or NIc- or [[A- & NSa-]]} & {@MX+} & (OD- or ({DD-} & {[[@M+]]} & ( or or [[(Ss+ & ) or SIs-]]))))); "&": G- & {Xd- & G-} & G+; "’" "'": YP- & (({AL-} & {@L+} & (D+ or DD+)) or [[]] or DP+); "'s.p" "’s.p": YS- & (({AL-} & {@L+} & (D+ or DD+)) or [[]] or DP+); % lparen, rparen, etc. is to be generated by the entity detector, and % substituted, at will. This helps avoid screw-ups in the constituent % tree, and in other places where things can get wrecked by raw % punctuation. % lparenID0 lparenID1 lparenID2 lparenID3 lparenID4 lparenID5 lparenID6 lparenID7 lparenID8 lparenID9 lparenID10 lparenID11 lparenID12 lparenID13 lparenID14 lparenID15 lparenID16 lparenID17 lparenID18 lparenID19 lparenID20 lparenID21 lparenID22 lparenID23 lparenID24 lparenID25 lparenID26 lparenID27 lparenID28 lparenID29 lparenID30 lparenID31 lparenID32 lparenID33 lparenID34 lparenID35 lparenID36 lparenID37 lparenID38 lparenID39 lparenID40 lparenID41 lparenID42 lparenID43 lparenID44 lparenID45 lparenID46 lparenID47 lparenID48 lparenID49 lparenID50 lparenID51 lparenID52 lparenID53 lparenID54 lparenID55 lparenID56 lparenID57 lparenID58 lparenID59 lbracketID0 lbracketID1 lbracketID2 lbracketID3 lbracketID4 lbracketID5 lbracketID6 lbracketID7 lbracketID8 lbracketID9 lbracketID10 lbracketID11 lbracketID12 lbracketID13 lbracketID14 lbracketID15 lbracketID16 lbracketID17 lbracketID18 lbracketID19 lbracketID20 lbracketID21 lbracketID22 lbracketID23 lbracketID24 lbracketID25 lbracketID26 lbracketID27 lbracketID28 lbracketID29 lbracketID30 lbracketID31 lbracketID32 lbracketID33 lbracketID34 lbracketID35 lbracketID36 lbracketID37 lbracketID38 lbracketID39 lbracketID40 lbracketID41 lbracketID42 lbracketID43 lbracketID44 lbracketID45 lbracketID46 lbracketID47 lbracketID48 lbracketID49 lbracketID50 lbracketID51 lbracketID52 lbracketID53 lbracketID54 lbracketID55 lbracketID56 lbracketID57 lbracketID58 lbracketID59 "(" "[": {EBx+} & Xd+; rparenID0 rparenID1 rparenID2 rparenID3 rparenID4 rparenID5 rparenID6 rparenID7 rparenID8 rparenID9 rparenID10 rparenID11 rparenID12 rparenID13 rparenID14 rparenID15 rparenID16 rparenID17 rparenID18 rparenID19 rparenID20 rparenID21 rparenID22 rparenID23 rparenID24 rparenID25 rparenID26 rparenID27 rparenID28 rparenID29 rparenID30 rparenID31 rparenID32 rparenID33 rparenID34 rparenID35 rparenID36 rparenID37 rparenID38 rparenID39 rparenID40 rparenID41 rparenID42 rparenID43 rparenID44 rparenID45 rparenID46 rparenID47 rparenID48 rparenID49 rparenID50 rparenID51 rparenID52 rparenID53 rparenID54 rparenID55 rparenID56 rparenID57 rparenID58 rparenID59 rbracketID0 rbracketID1 rbracketID2 rbracketID3 rbracketID4 rbracketID5 rbracketID6 rbracketID7 rbracketID8 rbracketID9 rbracketID10 rbracketID11 rbracketID12 rbracketID13 rbracketID14 rbracketID15 rbracketID16 rbracketID17 rbracketID18 rbracketID19 rbracketID20 rbracketID21 rbracketID22 rbracketID23 rbracketID24 rbracketID25 rbracketID26 rbracketID27 rbracketID28 rbracketID29 rbracketID30 rbracketID31 rbracketID32 rbracketID33 rbracketID34 rbracketID35 rbracketID36 rbracketID37 rbracketID38 rbracketID39 rbracketID40 rbracketID41 rbracketID42 rbracketID43 rbracketID44 rbracketID45 rbracketID46 rbracketID47 rbracketID48 rbracketID49 rbracketID50 rbracketID51 rbracketID52 rbracketID53 rbracketID54 rbracketID55 rbracketID56 rbracketID57 rbracketID58 rbracketID59 ")" "]": {@Xca-} & Xc-; – --.r -.r: [[{@Xca-} & Xx- & (W+ or J+ or Qd+ or TH+ or TO+) & {Xx+}]] or ({@Xca-} & (({EBx+} & Xd+) or Xc-)); foo: F+; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Morphology guessing for unknown words. % Given a particular kind of ending to a word, try to guess % its part-of-speech. % ING-WORDS.g: ( & ) or ( & ) % or ({@E-} & A+) or ; ING-WORDS.g: [( & )] or [( & )] or [({@E- or EA-} & A+)] or [] or (( & (({D*u-} & & ( or Bsm+)) or or (YS+ & {D*u-}) or (GN+ & (DD- or [()])) or Us-)) or AN+ or {AN-}); ED-WORDS.v-d: VERB_SPPP_T(`') or or ({@E-} & A+); S-WORDS.v: VERB_S_T(`'); S-WORDS.n: ( & (({NM+ or Dmc-} & & ( or Bpm+)) or ({NM+ or Dmc-} & ) or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])) or Up-)) or [[AN+]]; LY-WORDS.e: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or Em+ or ({Xc+ & {Xd-}} & CO+) or Qe+ or Ca+ or [[EA+]]); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Morphology guessing extension rules from BioLG-1.1.12 % Words guessed based on morphology. % These occur primarily in biomedical and chemistry texts. % These are processed via regular-expression matching, in 4.0.regex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% MC-NOUN-WORDS.n: % guessed nouns that can be mass or countable (-in, -ine, -ion, -yl, -ose, -ol, -ide, -ity) ( & (({NM+ or D*u-} & & ( or Bsm+)) or ({NM+ or D*u-} & ) or (YS+ & {D*u-}) or (GN+ & (DD- or [()])) or Us-)) or AN+; C-NOUN-WORDS.n: % guessed nouns that are countable (-on, -or) ( & (((NM+ or Ds-) & & ( or Bsm+)) or ({NM+ or Ds-} & ) or (YS+ & Ds-) or (GN+ & (DD- or [()])) or Us-)) or AN+; ADJ-WORDS.a: % guessed adjectives (-ous, -ar, -ic) ; % guessed adjectives/adverbs suffixed by "fold" with or without hyphen FOLD-WORDS: ({EN-} & (MVp- or EC+ or A+)) or Em+; % latin (postposed) adjectives considered as mass nouns % in the current version LATIN-ADJ-WORDS.a: ( & (({NM+ or D*u-} & & ( or Bsm+)) or ({NM+ or D*u-} & ) or (YS+ & {D*u-}) or (GN+ & (DD- or [()])) or Us-)) or AN+; % latin (postposed) adjectives or latin plural noun always considered % as nouns in the current version LATIN-ADJ-P-NOUN-WORDS: ( & (({NM+ or Dmc-} & & ( or Bpm+)) or ({NM+ or Dmc-} & ) or (YS+ & {Dmc-}) or (GN+ & (DD- or [()])) or Up-)) or AN+; % latin (postposed) adjectives or latin singular noun always % considered as nouns in the current version LATIN-ADJ-S-NOUN-WORDS: ( & (({NM+ or D*u-} & & ( or Bsm+)) or ({NM+ or D*u-} & ) or (YS+ & {D*u-}) or (GN+ & (DD- or [()])) or Us-)) or AN+; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Guessing of unknown words, if none of the above rules applied. UNKNOWN-WORD.n: & (AN+ or ({NM+ or D*u-} & & ( or Bsm+)) or ({NM+ or D*u-} & ) or (YS+ & {D*u-}) or (GN+ & (DD- or [()])) or U-); UNKNOWN-WORD.v: {@E-} & (Sp- or (RS- & Bp-) or I- or ({Ic-} & Wi-)) & {B- or O+} & {@MV+}; UNKNOWN-WORD.a: ; LEFT-WALL: (Wd+ or Wq+ or Ws+ or Wj+ or Wc+ or Wi+ or Qd+) & {CP+} & {Xx+} & {RW+ or Xp+}; RIGHT-WALL: RW- or ({@Xca-} & Xc-); % XXX ANDABLE-CONNECTORS is now deprecated, needs to be removed for version 5.0 ANDABLE-CONNECTORS: % these are the connectors that can be combined by % conjunctions. They are listed alphabetically. A+ & A- & AF- & AN+ & B+ & B- & BI- & C+ & C- & CC+ & CO+ & CO- & D+ & D- & DD- & DT- & E+ & E- & EA- & G+ & GN+ & GN- & I+ & I- & IN- & J+ & J- & JT- & K- & L- & M+ & M- & MV- & MV+ & MX- & ND+ & NM+ & NIn+ & O+ & O- & ON- & QI+ & QI- & P- & PP- & Q- & R+ & RS- & S+ & S- & SI- & TA- & TD+ & TD- & TH+ & TH- & TI- & TM- & TO- & TS- & U- & Wd- & Wi- & Wq- & Ws- & Xc+ & Xd- & YP+ & YS+ & Z-; UNLIMITED-CONNECTORS: % These are the link-types that are not subject % to the length limit. Always use "+" for these. S+ & CO+ & C+ & Xc+ & MV+ & CC+ & TH+ & W+ & RW+ & Xp+ & Xx+ & CP+ & SFsx+; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Extensions by Peter Szolovits, psz@mit.edu, as a part of the work for % "Adding a Medical Lexicon to an English Parser. Proc. AMIA 2003 Annual % Symposium, xx-yy. % Visit http://www.medg.lcs.mit.edu/projects/text/ for more information. % although in_as_much_as whilst whereas whereof wherein: (Cs+ & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-))) or ({Xd-} & CC- & Wd+); benumbed.a bespattered.a non_compos_mentis dead_on_arrival bedimmed.a null_and_void bedewed.a au_fait dead_of_other_causes right_sacrotransverse above_board K/O.a SGA.a TBA.a DOA.a asialo.a syntonic.a loco.a haywire.a: ((Ma- or Pa- or MJra-) & {@MV+}) or ({@MV+} & MJla+) or ; subject_to status_post in_conjunction_with sensu in_relation_to neath amidst across_from circa astride previous_to together_with as_regards s/p aka amongst unto apropos_of w.i W.i: ({JQ+} & (J+ or Mgp+) & ) or (MVp- & B-); oftenest correctliest soonest disquietingliest: EA+; proof-reads.v proof_reads gells.v O.K.'s.v OK's.v O.K.’s OK’s: VERB_S_I(); propension.n: ( & ((Ds- & {@M+} & {(TOn+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or Bsm+)) or Us- or (YS+ & Ds-) or (GN+ & (DD- or [()])))) or AN+; avow.q: [[{@E-} & (((Sp- or I-) & ) or (SIpj+ & ))]]; longest-term.a: ({Xc+} & {NR-} & {[[@Ec-]]} & La-) or ({NR- or ND-} & DD- & (( & {TOn+} & ) or MVa-)); daren't mayn't shan't oughtn't mightn't daren’t mayn’t shan’t oughtn’t mightn’t: ({{Ic-} & Q-} & (SI+ or SFI+) & I+) or ({@E-} & (S- or SF- or (RS- & B-)) & (I+ or [[()]])); longer-term.a: ({ECa-} & (({[[@Ec-]]} & {Xc+} & Am+) or ((Pafm- or AFm+ or Mam-) & {@MV+} & {(TOi+ or THi+) & {LE+}}))) or (DG- & (TR+ or AF+) & {@MV+} & {TOi+ or THi+} & (ER- or (Wd- & Xc+ & ER+))); attestation.n: ( & (({D*u-} & {@M+} & {(TH+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or (Ss*t+ & ) or SIs*t- or Bsm+)) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; O.K.'d.v-d OK'd.v-d O.K.’d.v-d OK’d.v-d: VERB_SPPP_I(); whence whither: {EL+} & (Cs+ & (({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & MVs-))); % Strange -- the JT- is a time-expression link .. .is that right here ?? articulo_mortis intra_vitam in_articulo_mortis in_extremis post_cibum post_coitum: or JT- or [[E+]] or YS+ or [[]]; lest: (Cs+ or Mgp+ or Mv+) & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-) or (Xd- & Xc+ & E+)); whyever: ({EL+} & ((Wq- & Q+) or (QI- & (Cs+ or TOn+)) or (Cs+ & ((SFsx+ & ) or WY- or BIq-)))) or [[{@CO-} & Wc- & Wi+]]; albeit: (Cs+ & {Xc+ & {Xd-}} & CO*s+) or ({Xd-} & CC- & Wd+); whichever: ({EL+} & (((Ss*d+ or Bsd+ or BW+ or D**w+) & ( or (Xc+ & {Xd-} & CO+) or ({Xd- & Xc+} & MVs-))) or [[(O- or J-) & CX+]])) or ((ALx+ & J+) & (({Xd-} & Xc+ & CO+) or ({Xd- & Xc+} & MVs-))); proof-reading.v proof_reading O.K.'ing.v OK'ing.v O.K.’ing.v OK’ing.v: ( & ) or ({@E-} & A+) or ; % "I'll hire whomever I can find": Os- whomever: (R- & Cr+) or (B*w+ & (Wq- or QI*d- or BIqd- or ((Xc+ or ) & Xd- & MX*r-))) or (Os- & Bsd+) or (Jr- & (RS+ or Cr+)) or Jw-; thyself oneself one's one’s: J- or O- or E+ or MVa-; % Handy test % grrr: (A- & B- & C+ & D+) or [(E- & @F+ & @G+ & H+)] or [[(I- & J- & @K- & @L+)]]; link-grammar/data/en/4.0.affix0000644000000000000000000000177512536650432013200 0ustar % % Affixes get stripped off the left and right side of words % i.e. spaces are inserted between the affix and the word itself. % % Some of the funky UTF-8 parenthesis are used in Asian texts. % In order to allow single straight quote ' and double straight quote '' % to be sttripped off rom both the left and the right, they are % distinguished by the suffix .x and .y (as as Mr.x Mrs.x or Jr.y Sr.y) % % 。is an end-of-sentence marker used in Japanese texts. ")" "}" "]" ">" » 〉 〕 》 】 』 "’’" "’" ''.y '.y "%" "," "." 。 ":" ";" "?" "!" "…" "”" "–" "‐" 's 're 've 'd 'll 'm ’s ’re ’ve ’d ’ll ’m ¢ ™: RPUNC+; "(" "{" "[" "<" « 〈 〔 《 【 『 `` „ “ ‘ ''.x '.x "$" US$ USD C$ £ ₤ € ₳ ฿ ₵ ₡ ₢ ₫ ₣ ₴ ₭ ℳ ₥ ₦ ₧ ₰ ₨ ₪ ৳ ₮ ₩ ¥ 호점 † †† ‡ § ¶ © № "#": LPUNC+; /en/words/units.1: UNITS+; /en/words/units.1.dot: UNITS+; /en/words/units.3: UNITS+; /en/words/units.4: UNITS+; /en/words/units.4.dot: UNITS+; link-grammar/data/en/4.0.biolg.batch0000644000000000000000000003054512536650432014254 0ustar !verbosity=1 !echo !limit=1000 !batch !short=20 !constituents=1 !spell=0 %UNITS % Some basic cases The 50 kDa protein is examined The protein ( 50 kDa ) is examined The mass is 50 kDa A protein of 50 kDa is examined The rate is 10 nm per msec The rate is 10 nm per one msec of time The last 195 bp of the DNA are examined % These should work also if the tokens are "merges" of number and unit The 50-kDa protein is examined The 50kDa protein is examined The mass is 50kDa A protein of 50kDa is examined The rate is 10nm per msec The rate is 10nm per 1msec of time The last 195bp of the DNA are examined % A number derived units are also recognized The rate is 10 mg/sec The rate is 10 mol/day The rate is 10 micrograms/mouse/day % Units previously in the dictionary have not been modified, and are % not allowed all the necessary roles. The 10 foot distance is examined % The following dont work yet, and would require special ".p" definitions % of the units, similar to, for example, feet.p and seconds.p. % This would require an OD- connectors (see feet.p) It fell 10 nm % This would require an OT- connector (see seconds.p) It lasted 10 msec % This would require Yd+ (see feet.p) It happened 10 nm away % This would require Yt+ (see seconds.p) It happened 10 msec later % This would require EC+ to have the intended parse (compare feet.p) The 10 bp longer sequence is examined % This one doesn't work because of "leftmost" The leftmost 195 bp of the DNA are examined % NUMERIC RANGES The 50 to 100 kDa protein is examined Exons 40 to 50 were examined It was submitted in the period 1990 to 1995 The range is 0 to 1 The range is nine to twenty % ambiguities are mainly due to the bracketed part The production is low in rich media ( 50 to 300 LrpC molecules per cell ) The enzyme has a weight of 125,000 to 130,000 The domain ( residues 73 to 90 ) was shown The analysis revealed a transcript after 6 to 7.5 h CSF reached 50 to 100 nM A shift from 37 to 20 degrees C resulted in an increase An operon showed at 310 to 320 kb The sequence shows 28.2 to 34.6 % identities In the past 4 to 5 years results have advanced One is the region 1911 to 1917 % unnecessary (?) ambiguity with the range linking to "are" The segment includes the pacL from which genes 1 to 7 are transcribed The gene 1 to 7 mRNA synthesis was reduced There are deviations of 2 to 3 A % the range should link to the verb with MVp (~ "north"): to much ambiguous ? These transcripts are located 5 to 3 These transcripts are located 5' to 3' % Ranges with hyphens The 50 - 100 kDa protein is examined Exons 40 -- 50 were examined It was submitted in the period 1990 --- 1995 % Cases with "from" (e.g. "from 10 to 20") (TODO): % shifts The number of repeats was increased from 7 to 11 . Experiments revealed an increase from 0 to 5 min postinduction The transfer of cells from 37 to 50 degrees C repressed synthesis . The concentration increased from 125 to 325 microgram per assay . % ranges We inserted sequences from 5 to 21 bp in length The start point ranged from 17 to 18 base pairs The promoter contained a sequence near the region ( from 60 to 73 % ) A region extending from 183 to 118 base pairs was required % Cases with "between" Transcription sets in ( between 8 and 16 h of culture ) . The pH optimum is between 5 and 7 concentrations were measured between 0 and 3 h after the beginning it shows activity at a temperature between 60 and 70 degrees C The activity is stable between pH 6 and 12 % Numeric ranges with "merged" units (or "fold") also occur An 80 to 100-fold increase was observed Antigens ranged 82 to 90% % FOLD-WORDS This included an up to threefold increase There were increases in proteins, including actin (twofold to threefold) The association rate constant is also increased about 2-fold The affinity is approximately 30-fold weaker Leaves display a 2-fold accumulation This was about 10-fold higher % correct parse ranked second sigmaF was some twofold higher than sigmaE % does not parse It was two to threefold more abundant I found an at least twofold reduction It showed a fivefold anaerobic induction loci increased more than twofold % correct parse ranked fourth It corresponds to one- , two- and threefold phosphorilated proteins The structure shows a fold consisting of a beta-sheet % EQUATIONS ETC. non-denaturing gradient gel electrophoresis (r = 0.859) was used preparations of 5 x 10(8) cfu/ml are made phosphorylation was observed (P = 0.06) bacteria with low G + C DNA content contain genes the strength was in the order of gerE > cotD > yfhP P2 > yfhP P1 delta binds RNAP with an affinity of 2.5 x 10(6) M-1 % "x" between numbers denoting multiplication A single cell inside a pool of 5 x 10000 lymphocytes could be quantified A single cell inside a pool of 5 x 10(4) could be quantified % "Arrows" We consider the MPO --> PAG pathway Codon 311 (Cys --> Ser) polymorphism is associated with apolipoprotein E4 % GREEK LETTERS minicells revealed the expression of both lambda and SPP1 genes We cloned a new gene encoding an alternative sigma factor The sigma factor sigma 35 of B. thuringiensis is homologous Each polymerase had a subunit composition analogous to beta beta2 alpha sigma delta omega 1 omega 2 % SOME ADVERB CASES % compare patients are treated, therefore, even if they are negative patients are treated, however, even if they are negative % related? the results indicated, therefore, that it is required they prefer studies that are, however, open more importantly , they are open % i.e., e.g. and related they were not side-by-side (i.e., stacked) antagonists (e.g. WEB-2086) were examined receptors, e.g. GluR5 and GluR, have been examined there is genetic heterogeneity, i.e. there are several genes % UPSTREAM, DOWNSTREAM, 3', 5' The soil from the river banks is washed downstream. He was making his way upstream. The view is upstream and the discharge is about 5.0 m3/s. It will require more information from upstream. The inverted repeat is found upstream of the promoter. The promoter is located immediately upstream of ftsY. The cryIAb gene was located 3 kb upstream of its initiator codon. mphR is located downstream from mrx. These transcripts are oriented 5' to 3' % MISCELLANIA (commented out not to confuse) % the patient tested negative % "MADE OF" VARIANTS the protein films have a microstructure formed of woven sheaves The sheaves are composed of well-defined whisker crystallites Different conjugates, composed of a peptide carrier and a cytotoxic moiety, have been investigated A study was made of the stability a protein made of the luminal domain fused to the tail the intracellular pool of enzyme is formed of newly synthesized molecules % "DESIGNATED" ETC. Mice that express epitope tagged SF-1 are being used The method labelled FAXS is rapid % ATTACH TO Isolated eosinophils from healthy donors rapidly attach to ASMC Dystrophin can attach to the cytoskeleton % INVESTIGATED, EXAMINED WHETHER this study examined whether AQP1 is present in HPMC % from PASBio % abolish.01 % MEDLINE No.1 This mutation abolishes splicing % EMBO No.1 (passive) Transcription is completely abolished % alter.01 % MEDLINE No.1 Mutations alter splice sites % EMBO No.3 Phosphorylation was not altered by treating the cells % begin.01 ("start existing") % EMBO No.1 The density begins between amino acids 136 and 140 % begin.02 ("start doing") % EMBO No.1 The levels begin to return % block.01 % MEDLINE No.1 ('the' was manually added to "step") Mutations block the step II % EMBO No.3 (passive) Labeling is blocked by pre-incubation % catalyse.01, ("catalyze") is unknown % EMBO No.2 enzymes catalyze the unwinding % MEDLINE No.1 (passive) The metabolism is most likely catalysed by P450 % confer.01 % MEDLINE No.2 The variant does not confer a risk % EMBO No.1 (passive) The phenotype can be conferred by replacing the C-terminus with Stat5 % decrease.01 % MEDLINE No.1 Treatment decreased synthesis % EMBO No.2 (passive) The protection is decreased % delete.01 % MEDLINE No.1 Transcripts delete exons % EMBO No.4 (passive) the binding was deleted % develop.01 % MEDLINE No.1 ('a' was manually added to "deficiency") The son developed a deficiency % disrupt.01 % MEDLINE No.1 A mutation disrupted a sequence % eliminate.01 % MEDLINE No.1 Deletion would eliminate a residue within a domain % EMBO No.4 (passive) All three sites are eliminated % encode.01 % MEDLINE No.1 Supt4h2 encodes a protein % EMBO No.1 SBP2 may be encoded by three transcripts % express.01 % MEDLINE No.1 (passive) ('the' was manually added to "brain") The enzyme was expressed exclusively in the brain % MEDLINE No.7 Retroelements express Pol % generate.01 % MEDLINE No.1 Prnd generates transcripts % MEDLINE No.7 Molecules are generated by an alternative splicing % inhibit.01 MEDLINE No.1 This peptide inhibited binding % inhibit.01 MEDLINE No.2 (passive) Isoforms are inhibited by rolipram % initiate.01 MEDLINE No.1 (?) Tumours had altered mRNAs , initiated within intron 1 % initiate.01 MEDLINE No.2 Cells initiate transcription at multiple sites % initiate.01 MEDLINE No.3 (intransitive) Translation initiates from an internal codon % lead.01 MEDLINE No.1 A mutation leads to ligation % lead.01 ? (passive) % lose.01 MEDLINE No.1 A variant which lost a site has been characterized % lose.01 EMBO No.3 (passive) Anchoring ability was lost % modify.01 MEDLINE No.1 (passive) Genes were modified % modify.01 EMBO No.2 Factors that can modify the binding may regulate binding % mutate.01 MEDLINE No.1 (adj?) % [there may be a problem here with "deficiency"] The mutated allele resulted in deficiency % mutate.01 MEDLINE No.2 (passive participle postmodifier) The gene mutated in mice encodes a protein % mutate.01 EMBO No.4 The fragments were mutated by the sequence % mutate.01 ? (active) % proliferate.01 MEDLINE No.1 Cells are characterized by an ability to proliferate % proliferate.01 MEDLINE No.2 Cells proliferate % proliferate.01 ? (passive) % recognize.01 MEDLINE No.1 (passive participle postmodifier) The protein would lack epitopes recognized by the serum % recognize.01 MEDLINE No.3 A number recognized by cells have been isolated % recognize.01 MEDLINE No.5 Antibodies recognize specifically a polypeptide % result.01 MEDLINE No.1 We report the existence of isoforms which result from splicing % result.01 MEDLINE No.2 Both mutations result in high proportions of mRNAs % result.01 ? (passive) % skip.01 MEDLINE No.1 sequencing revealed a mutation, which skipped exon 3 % skip.01 MEDLINE No.2 An exon can be skipped by splicing % splice.01 MEDLINE No.1 exon 30 is spliced together with the intron % splice.01 PNAS No.4 3I spliced 20% as efficiently as 3F % splice.01 PNAS No.4 (oversimplified?) 3I spliced % splice.02 MEDLINE No.1 CD1c has a form that is thought to be spliced out % splice.02 MEDLINE No.2 One exon is spliced out of the transcript % splice.02 MEDLINE No.9 Exon 16 can be spliced out % transcribe.01 MEDLINE No.1 The gene is transcribed % transcribe.01 MEDLINE No.2 KLK41 transcribes two alternative transcripts % transform.01 MEDLINE No.1 FGF8b can transform the midbrain into a cerebellum fate % transform.01 MEDLINE No.3 Phospholipase D is known to transform cells into tumorigenic forms % transform.02 MEDLINE No.1 The DNA was used to transform E. coli % translate.01 MEDLINE No.1 Splicing results in a transcript which would be translated into a protein % translate.01 EMBO No.1 Stat1 was translated % translate.01 EMBO No.2 (oversimplified? slightly modified) Stat1 translated can become a dimer % translate.02 MEDLINE No.1 This review examines technologies that can be used to translate information % translate.02 MEDLINE No.3 Acj6 translates information into specificity % translate.03 MEDLINE No.1 The functions translate into modulations % truncate.01 MEDLINE No.1 Changes were predicted to truncate the protein % truncate.01 MEDLINE No.2 The domains were truncated % verbs taking particles The recombinant plasmid was screened out The adenine bulge is looped out A monomer is built up of strands % "in gel" % should have been in-gel to be grammatical -- could a spell cheker guess this? They were measured by in gel kinase assays % IMPORTANT: CAPITALIZED-WORDS SHOULD ALLOW "that" ETC. ( missing) it encodes a GPCR that is homologous to the chemokine % compare it encodes a gPCR that is homologous to the chemokine % "ORDERED" as an adjective The complex plays a role in the construction of ordered multicellular structures % CONCENTRATED as an adjective the genes were most concentrated in the cell link-grammar/data/en/4.0.knowledge0000644000000000000000000003255212536650432014057 0ustar ; Post-processing knowledge file ; 6/96 ; ---------------------------------------------------------------------------- ; This file contains the knowledge related to post-processing, in the ; form of lists and rules. This file is read by post-process.c at run-time. ; Syntax of file: ; line starting with ";" is a comment ; commas are field delimiters ; any token beginning with the character @ is expanded to the set ; of symbols it defined. e.g. one could write ; FOO: blah1 blah2 blah3 ; thus defining a set FOO containing three strings. Then one could later write ; BAR: blah5 @FOO blah8 ; which defines a set BAR containing 5 strings. ; ; Capitalized tokens are *required*, though if you feel like providing an ; empty list afterwards, that's your right. ; ---------------------------------------------------------------------------- ; The following links start a domain. Each must be given a name in the ; table below (STARTING_LINK_TYPE_TABLE) DOMAIN_STARTER_LINKS: W Ce Cs Ca Cc Ci R* Rn Re RSe Mr QI#d Mv* Jr Mj Qd TOn TOi Mg* MVi Ss#d Bsd ER Z Ma#* SIs#g BIqx MX#p MX#a MX#r MX#j MV#o MV#p Eq COq CCq AFd PFc ; ---------------------------------------------------------------------- ; The following links start a urfl domain. They are also included in the ; domain, as opposed to regular starter links (above), which are not. A ; urfl domain includes links accessible from the root word, tracing to ; the right (as well as everything accessible from the left end of the ; starter link). URFL_DOMAIN_STARTER_LINKS: TOo I#j Pa##j CP ; ---------------------------------------------------------------------- ; The following start a urfl_only domain. These include _only_ links : ; reachable from the root word, tracing to the right. They aren't ; included in the domain URFL_ONLY_DOMAIN_STARTER_LINKS: SFsx Ss#g COp ; ---------------------------------------------------------------------- ; Links which start a domain and are also part of the domain. This must be ; a sublist of the domain_starter_list DOMAIN_CONTAINS_LINKS: Mg* Mx Bsd MX#a Ma#* Mv* MX#r Ss#d Ws Wq Qd Mj Wj Wi MX#j AFd PFc Jr Wd Mr ; ---------------------------------------------------------------------- ; These links are not put in the word/link graph. They also cannot be the ; starter links for a domain. (These links may also only be used in cycles.) IGNORE_THESE_LINKS: Xca ; ---------------------------------------------------------------------- ; These links may only be used in cycles. MUST_FORM_A_CYCLE_LINKS: R#* TOt EXx HA SFsic Jr JQ Xca ; ---------------------------------------------------------------------- ; These links are not traced further if they point back before the root word. ; The creation of Rw necessitated making B#m a restricted link, to ; prevent the (e) domain, started by Ce, from extending around through ; the Rw link. ; Reverted. ; This breaks parsing of ; How fast a program does he think it is ; I wonder how fast a program he thinks it is ; I wonder how much money you earned ; I wonder how many people you saw ; I wonder how big a department it is ; I wonder how much oil they spilled ; This is the man whose dog I bought ; I wonder which dog he said you chased ; How efficient a program is it ; Meanwhile, I can't find the Ce problem mentioned ... this needs more ; documentation! RESTRICTED_LINKS: B#* D##w B#w B#d AFh MVt Xx HL SFsic AFd Bc CX EAh H HA PFc B#j Wd PF Z ; H HA PFc B#j Wd PF Z B#m ; ---------------------------------------------------------------------- ; ---------------------- LINK TYPE TABLE------------------------------- ; ---------------------------------------------------------------------- ; The following table associates a domain type with each possible ; starting link. It contains pairs: the first of each pair is a link ; type, and the second is the domain to which that link type belongs. STARTING_LINK_TYPE_TABLE: Ce e R* r Rn r Re r W m RSe e Cs s Ca s Jr e Mr r Cc s Mv* e QI#d s BIqx s TOn e TOi e MVi e MV#o s MV#p s AFd s PFc s Mg* e Mj j Qd m MX#j j TOo x I#j x Pa##j x CP x COp d SFsx d Ss#g d SIs#g s Ss#d s Bsd s ER s Z s Ma#* e MX#p e Ci e MX#a e Eq e COq e CCq s MX#r r ; ---------------------------------------------------------------------- ; ----------------------- LINK SETS ------------------------------------ ; ---------------------------------------------------------------------- ; (Not in use at present; see comment at beginning of file) ; ---------------------------------------------------------------------- ; ----------------- RULES ---------------------------------------------- ; ---------------------------------------------------------------------- ; Explanation of syntax: as usual, each stanza begins with a label ; terminated by a colon. The interpretation of the rule depends on ; the label, as specified in each stanza. ; The following rule asserts that the linkage must *still* be connected ; when the specified set(s) of links are removed from the linkage. FORM_A_CYCLE_RULES: @MUST_FORM_A_CYCLE_LINKS , "'must form a cycle' violation0" ; For the following rules, if a domain contains a link matching the 1st ; column, it must also contain a linkage matching one of the members of the ; set in the 2nd column. The individual rules are demarcated by semicolons and ; the fields within a rule are demarcated by commas. CONTAINS_ONE_RULES: SI#* , Wq Qd CQ PFc , "Bad use of s-v inversion1" , SI#x , Wq Qd CQ PFc , "Bad use of s-v inversion2" , SFI##* , Wq Qd CQ PFc , "Bad use of s-v inversion3", SXI , Wq Qd CQ PFc , "Bad use of s-v inversion4" , Ws , D##w S##w H , "S-V inversion required5", I#a , B#m B#w , "incorrect use of 'to'6" , Wq , SI SFI SXI , "S-V inversion required7" , Qd , SI SFI SXI , "S-V inversion required8" , PFc , SI SFI SXI , "S-V inversion required9" , Mj , Jw JQ , "Incorrect relative10" , MX#j , Jw JQ , "Incorrect relative11" , Wj , Jw JQ , "Misuse of preposition12" , JQ , Mj Wj MX#j , "Misuse of preposition13" , Jw , Mj Wj MX#j , "Misuse of preposition14" , B#j , Jr , "Incorrect relative15" , Jr , B#j , "Incorrect relative16" , EAh , AF Bsm B*m Qe Ca AFm , "Incorrect use of 'how'17" , EEh , AF Bsm B*m Qe Ca AFm , "Incorrect use of 'how'18" , Qe , EEh , "Incorrect use of adverb19" , THi , SFsi SFIsi OXi , "Complement requires 'it'20" , TSi , SFsi SFIsi OXi , "Complement requires 'it'21" , QIi , SFsi SFIsi OXi , "Complement requires 'it'22" , TOi , SFsi SFIsi OXi , "Complement requires 'it'23" , Ci , SFsi SFIsi OXi , "Complement requires 'it'24" , COqi , SFsi SFIsi OXi , "Complement requires 'it'25" , CPi , SFsi SFIsi OXi , "Complement requires 'it'26" , Eqi , SFsi SFIsi OXi , "Complement requires 'it'27" , LEi , SFsi SFIsi OXi , "Complement requires 'it'28" , MVti , SFsi SFIsi OXi , "Complement requires 'it'29" , AFdi , SFsi SFIsi OXi , "Complement requires 'it'30" , O#i , SFsi SFIsi OXi , "Complement requires 'it'31" , SFst , O*t Ost Omt Bs#t B*#t Bc#t , "Bad use of 'there'32" , SFIst , O*t Ost Omt Bs#t B*#t Bc#t , "Bad use of 'there'33" , SFp , Opt Omt O*t Bp#t B*#t Bc#t , "Bad use of 'there'34" , ; ; This SFu rule forces subject-object agreement for uncountable noun objects SFu , Out Omt O*t Bp#t B*#t Bc#t , "Bad use of 'there'34a" , SFIp , Opt Omt O*t Bp#t B*#t Bc#t , "Bad use of 'there'35" , OXt , O#t B##t , "Bad use of 'there'36" , SFsi* , TOi THi QIi TSi O#i Ci THb CPi COqi CPi Eqi AFdi BIh , "Bad use of 'it'37" , SFIsi , TOi THi QIi TSi O#i Ci THb CPi COqi CPi Eqi AFdi BIh , "Bad use of 'it'38" , OXi , TOi THi QIi TSi O#i Ci THb CPi COqi CPi Eqi AFdi BIh , "Bad use of 'it'39" , THb , S##t SI##t SFsi SFIsi , "Bad use of predicate40" , BIh , Ss#b SIs#b SFsi SFIsi , "Bad use of predicate41" , BIq , S##q SI##q SFsi Ss#b SFIsi SIs#b , "Bad use of predicate42" , MVt , Dm#m EAm EEm MVm Pam Pafm AFm EB#m MVb AJrc Om Mam Am Jm Ds*m MX#m , "Bad comparative43" , MVz , D##y EAy EEy MVy EB#y , "Bad comparative44" , MV#a , Pam Pafm EAm Ds*m EAy AFm Mam Am , "Bad comparative45" , MV#i , Pam Pafm EAm Ds*m EAy AFm Mam Am , "Bad comparative46" , MV#o , D##m D##y Om Oy Jm Jy Am MX#m , "Bad comparative47" , MV#p , EEm MVb Dm#m EEy D##y MVm Om Oy Jm Jy Am MX#m , "Bad comparative48" , Pafc , EB#m EB#y , "Bad comparative49" , Pafc , Pa* Paf* , "Bad comparative50" , MVat , MVm , "Bad comparative51" , MVpt , MVm , "Bad comparative52" , MVat , MVa MVp , "Bad comparative53" , MVpt , MVa MVp , "Bad comparative54" , U#t , D##m D##y Om Oy Jm Jy Am MX#m , "Bad comparative55" , Cc , EEm EEy MVm MVb MVy , "Bad comparative56" , Sp#c , Dmcm Dmcy Om Oy Jm Jy MX#m , "Bad comparative57" , Ss#c , Dmum Dmuy Om Oy Jm Jy Ds*y MX#m , "Bad comparative58" , S##c , Dm#m D##y Om Oy Jm Jy MX#m , "Bad comparative59" , THc , TH , "Bad comparative60" , TOc , TO** TOf* TOi* , "Bad comparative61" , TOtc , TOt , "Bad comparative62" , Ma** , TO TOf TH MVp TOt QI OF MVt MVz MVh Ytm Ya , "Bad use of adjective63" , Mam , TO TOf TH MVp TOt QI OF MVt MVz MVh Ytm Ya , "Bad use of adjective64" , MX#a , TO TOf TH MVp TOt QI OF MVt MVz MVh Ytm Ya MJ , "Bad use of adjective65" , ; There's no ZZZ connector, which means that Ixd and Oxn ; are prohibited from ever occuring. 4.0.batch covers this. Ixd , ZZZ , "Can't use 'do' with that verb" , Oxn , ZZZ , "Bad use of pronoun66" , MVh , EExk EAxk D##k , "Incorrect use of that67" , ; The Rw link necessitated commenting out 68, because we had to make B#m ; a restricted link(see above) xxx reverted .. this is needed ... ; B#m , D##w H HA , "Bad use of gerund68" CONTAINS_NONE_RULES: S , Spxi , "Bad n-v agreement69" , SI , SIpxi , "Bad n-v agreement70" , Ws , B#m Ca BT , "Question inversion violated71" , SF , I* PP* TO* Pa* Pam Pg* Pv* LE* AFd* MVta , "Bad use of 'filler' subject72" , SFI , I* PP* TO* Pa* Pam Pg* Pv* LE* AFd* MVta , "Bad use of 'filler' subject73" , OX , I* PP* TO* Pa* Pam Pg* Pv* LE* AFd* MVta , "Bad use of 'filler' subject74" , MXsr , Sp#w , "Bad n-v agreement75" , MXpr , Ss#w S#iw , "Bad n-v agreement76" , Mr , B#* , "Bad use of 'whose'77" ; ---------------------------------------------------------------------- ; The following rule asserts that all specified domains must have the ; property that all of the words that touch a link in the domain are ; not to the left of the root word of the domain. These rules are ; different from the above in that the first field is a *domain name*, ; rather than a set of links. BOUNDED_RULES: s , "Unbounded s domain78" , r , "Unbounded r domain79" link-grammar/data/en/4.0.dict0000644000000000000000000112506712536650432013030 0ustar %***************************************************************************% % % % Copyright (C) 1991-1998 Daniel Sleator and Davy Temperley % % Copyright (c) 2003 Peter Szolovits and MIT. % % Copyright (c) 2008, 2009, 2010, 2011 Linas Vepstas % % % % See file "README" for information about commercial use of this system % % % %***************************************************************************% % Dictionary version number is 4.7.4 (formatted as V4v7v4+) : V4v7v4+; % _ORGANIZATION OF THE DICTIONARY_ % % I. NOUNS % II. PRONOUNS % III. DETERMINERS % IV. NUMERICAL EXPRESSIONS % V. VERBS % A. Auxiliaries; B. Common verb types; C. complex intransitive verbs; % D. complex intransitive verbs; E. complex verbs taking [obj] + % [complement]; F. idiomatic verbs % VI. PREPOSITIONS % VII. TIME AND PLACE EXPRESSIONS % VIII. QUESTION-WORDS AND CONJUNCTIONS % IX. ADJECTIVES % X. COMPARATIVES AND SUPERLATIVES % XI. ADVERBS % A. Mainly adjectival; B. Mainly post-verbal; C. Post-verbal/pre-verbal; % D. Post-verbal/pre-verbal/openers; E. Post-verbal/openers; % F. Pre-verbal/openers % XII. MISCELLANEOUS WORDS AND PUNCTUATION % % NEW LINKS INVENTED BY MIKE ROSS % Ct and Cta are used with comparatives so that 'than' links to the relative clause % John is bigger than Dave is. % John wants more cookies than Dave wants. % % Rw is used similarly to Ct, Cta, and Rn to link question words to the relative clauses % that follow them. % For auxillary verbs, replaced "{Q-}" with "(Rw- or Q-}". % For nouns and others, replaced "B*m+" with "(Rw+ & B*m+)" (for any *) % For who,what,which,whom, replaced "B*" with "(R+ & B*+)" (for any *) % % TODO: % To-do: many verb simple past-tense forms include ({@E-} & A+) to % make them adjective-like. Strictly speaking, these should probably % copied into words.adj.1 and treated like common adjectives, right? % % Many nouns in words.n.4 are treated as "mass or count". The side % effect is that mass nouns are inconsistently treated as sometimes % singular, sometimes plural. e.g. words.n.3 gets & % . This is a kind-of ugly tangle, it should really % be sorted out so that links are properly marks as s, p or m. % This is mostly fixed, except that some uses of % remain, below. % Null links. These are used to drop the requirement for certain words % to appear during parsing. Basically, if a parse fails at a given cost, % it is retried at a higher cost (by raising the disjunct_cost). % Currently, two different nulls are defined: a regular null, and a % costly null. The regular null is used to make determiners optional; % this allows for the parsing of newspaper headlines and clipped % technical speech (e.g. medical, engineering, where dterminers are % dropped). The costly-null is used during panic parsing. % Currently, both have the same cost: using the ordinary null allows % too many sentences to be parsed incorrectly. : [[[()]]]; : [[[()]]]; % NOUNS % The marker-entity is used to identify identity names. % The marker-common-entity is used to identify all common nouns % and adjectives that might appear in entity names: % e.g. "Great Southern Federal Bank and Railroad" or "Aluminum Bahrain" : XXXENTITY+; : XXXGIVEN+; % The RJ links connect to "and"; the l,r prevent cross-linking : RJrc- or RJlc+; : {({@COd-} & (C- or )) or ({@CO-} & (Wd- & {CC+})) or [Rn-]}; : {({@COd-} & (C- or )) or ({@CO-} & (Wd- & {CC+}))}; : {({@COd-} & (C- or )) or ({@CO-} & (Wd- or {CC+})) or Re-}; % Post-nominal qualifiers, complete with commas, etc. : ({[B*j+]} & Xd- & (Xc+ or ) & MX-); : ({[Bsj+]} & Xd- & (Xc+ or ) & MX-); : ({[Bpj+]} & Xd- & (Xc+ or ) & MX-); : ({[Buj+]} & Xd- & (Xc+ or ) & MX-); % noun-main-x -- singular or plural or mass. : (S+ & ) or SI- or J- or O- or or ; % noun-main-s -- singular : (Ss+ & ) or SIs- or Js- or Os- or or ; % noun-main-p -- plural : (Sp+ & ) or SIp- or Jp- or Op- or or ; % noun-main-u -- u == uncountable % TODO: alter this to use Su+, SIu- someday. likewise Buj+ % Doing this requires adding Su- links to many entries : (Ss+ & ) or SIs- or Ju- or Ou- or or ; % noun-main-m -- m == mass % TODO: get rid of this someday. % To get rid of this, any noun that uses this needs to be split into % two: the countable form, which will used and the % uncountable form, which will use : (Ss+ & ) or SIs- or Jp- or Os- or or ; : (Ss*b+ & ) or SIs*b- or Js- or Os- or or ; : J- or O- or or ; : Js- or Os- or or ; % Xd- or [[()]] allows parsing of "I have no idea what that is." % without requiring comma after "idea" : Js- or Os- or ({[Bsj+]} & (Xd- or [[()]]) & (Xc+ or ) & MX-) or ; : Jp- or Op- or or ; : Jp- or Os- or or ; % TO+: "The inability to laugh signifies trouble" % @M+: "The disability of John means he is slow" % XXX wait .. TO+ should only be for mass nouns ?? : {@M+} & {TO+} & {R+ & B+ & {[[@M+]]}} & {@MX+}; : {@M+} & {TO+} & {R+ & Bs+ & {[[@M+]]}} & {@MXs+}; : {@M+} & {TO+} & {R+ & Bp+ & {[[@M+]]}} & {@MXp+}; : {@AN-} & {@A- & {[[@AN-]]}}; % conjoined nouns or noun-phrases. % The l and r prevent two nouns from hooking up directly, they % must hook up to a conjunction (and, or) in the middle. % SJl == connect to left % SJr == connect to right % SJ*s == singular % SJ*p == plural % SJ*u == mass % % M+: "gloom of night and heat will not stop me" % The "of night" can connect to the left noun, but rarely to the right noun % because it should then connect to the "and", not the right noun. % but then: "neither heat nor gloom of night shall stop me" % Looks like only a proper semantic decision can determine the correct parse here ... : ({@M+} & SJls+) or ({[@M+]} & SJrs-) or (Dn- & SJn+); : ({@M+} & SJlp+) or ({[@M+]} & SJrp-) or (Dn- & SJn+); : ({@M+} & SJlu+) or ({[@M+]} & SJru-) or (Dn- & SJn+); : ({@M+} & SJl+) or ({[@M+]} & SJr-) or (Dn- & SJn+); : ({@M+} & SJlp+) or ({[@M+]} & SJrp-) or ({@M+} & SJlu+) or ({[@M+]} & SJru-) or (Dn- & SJn+); : {Rw+} & B*m+; : {Rw+} & Bsm+; : {Rw+} & Bpm+; % The use of Coa here needs to be carefully rexamined; it is used much too freely. : {[[Wi-]]} & ((Xc+ & Ic+) or ({Xd-} & (Xc+ or [[()]]) & [[COa+]])); % Just pure singular entities, no mass nouns % The CAPITALIZED-WORDS rule is triggered by regex matching, and % applies to all capitalized words that are not otherwise found in % the dictionary. % ({[[@MX+]]} & AN+) comes from postposed modifiers: % "Codon 311 (Cys --> Ser) polymorphism" % % We do NOT tag these with , a this messes up first-word % processing in tokenize.c. So for example, we do *not* want "There" % in "There they are" tagged as an entity, just because its capitalized. % We really do want to force the lower-case usage, because the lower case % is in the dict, and its the right word to use. (The only entities that % should be tagged as such are those that are in the dicts, in thier % capitalized form, e.g. "Sue.f" female given name as opposed to "sue.v" % verb in the sentence "Sue went to the store.") % % To help discourage capitalized use when the lower-case is in the dict, % we give a slight cost to [ & (JG- or )] to % discourage use as a common noun, so that the lower-case version can % play this role. % % MX+ & : country names: "...went to Paris, France" % CAPITALIZED-WORDS INITIALS NAME : ({NM+} & ({G-} & {[MG+]} & (({DG- or [[GN-]] or [[@A- & @AN-]] or [[{@A-} & {D-}]]} & ([ & (JG- or )] or or YS+)) or ({[[@MX+]]} & AN+) or G+))) or (MXs+ & ( or )) or ; % Capitalized words that seem to be plural (by ending with an s, etc) % -- But not all words that end with an 's' are plural: % e.g. Cornwallis ... and some of these can take a singular determiner: % "a Starbucks" PL-CAPITALIZED-WORDS: ({NM+} & {G-} & {[MG+]} & (({DG- or [[GN-]] or [[{@A-} & ({Dmc-} or {Ds-})]] } & ([ & (JG- or )] or or YS+ or YP+)) or AN+ or G+)) or ; % capitalized words ending in s % -- hmm .. proper names not used anywhere right now, has slot for plural ... !!?? : ({G-} & {[MG+]} & (({DG- or [[GN-]] or [[{@A-} & {D-}]]} & (({@MX+} & (JG- or )) or (YS+ or YP+))) or AN+ or G+)); % "Tom" is a given name, but can also be a proper name, so e.g. % "The late Mr. Tom will be missed." which needs A-, D- links : {G-} & {[MG+]} & (({DG- or [[GN-]] or [[{@A-} & {D-}]]} & (({@MX+} & {NMr+} & (JG- or or )) or YS+ or YP+)) or AN+ or G+); % Whole, entire entities, cannot participate in G links % because the entire entity has already been identified. : ({DG- or [[GN-]] or [[{@A-} & {D-}]]} & (({@MX+} & ) or or YS+)) or AN+; personID0 personID1 personID2 personID3 personID4 personID5 personID6 personID7 personID8 personID9 personID10 personID11 personID12 personID13 personID14 personID15 personID16 personID17 personID18 personID19 personID20 personID21 personID22 personID23 personID24 personID25 personID26 personID27 personID28 personID29 personID30 personID31 personID32 personID33 personID34 personID35 personID36 personID37 personID38 personID39 personID40 personID41 personID42 personID43 personID44 personID45 personID46 personID47 personID48 personID49 personID50 personID51 personID52 personID53 personID54 personID55 personID56 personID57 personID58 personID59 personID60: or ; organizationID0 organizationID1 organizationID2 organizationID3 organizationID4 organizationID5 organizationID6 organizationID7 organizationID8 organizationID9 organizationID10 organizationID11 organizationID12 organizationID13 organizationID14 organizationID15 organizationID16 organizationID17 organizationID18 organizationID19 organizationID20 organizationID21 organizationID22 organizationID23 organizationID24 organizationID25 organizationID26 organizationID27 organizationID28 organizationID29 organizationID30 organizationID31 organizationID32 organizationID33 organizationID34 organizationID35 organizationID36 organizationID37 organizationID38 organizationID39 organizationID40 organizationID41 organizationID42 organizationID43 organizationID44 organizationID45 organizationID46 organizationID47 organizationID48 organizationID49 organizationID50 organizationID51 organizationID52 organizationID53 organizationID54 organizationID55 organizationID56 organizationID57 organizationID58 organizationID59 organizationID60: or ; locationID0 locationID1 locationID2 locationID3 locationID4 locationID5 locationID6 locationID7 locationID8 locationID9 locationID10 locationID11 locationID12 locationID13 locationID14 locationID15 locationID16 locationID17 locationID18 locationID19 locationID20 locationID21 locationID22 locationID23 locationID24 locationID25 locationID26 locationID27 locationID28 locationID29 locationID30 locationID31 locationID32 locationID33 locationID34 locationID35 locationID36 locationID37 locationID38 locationID39 locationID40 locationID41 locationID42 locationID43 locationID44 locationID45 locationID46 locationID47 locationID48 locationID49 locationID50 locationID51 locationID52 locationID53 locationID54 locationID55 locationID56 locationID57 locationID58 locationID59 locationID60: or ; % Words that are also given names % Cannot take A or D links. % Art Bell Bill Bob Buck Bud % % The bisex dict includes names that can be given to both % men and women. /en/words/entities.given-bisex.sing /en/words/entities.given-female.sing /en/words/entities.given-male.sing: or or ; % Special handling for certain given names. These are words that have a % lower-case analog in the dictionary, and are also used in upper-case % form in an "idiomatic name" e.g. Vatican_City. Without the below, % this use of "City" would prevent it from being recognized in other % (non-idiomatic) proper name constructions, e.g. New York City. /en/words/entities.organizations.sing: or ; /en/words/entities.locations.sing: or ; % % entity IDs (mirror Capitalized-words - a mix of plural and singular) : ({DG- or [[GN-]] or [[{@A-} & {D-}]]} & (({@MX+} & ) or or YS+ or YP+)) or AN+; entityID0 entityID1 entityID2 entityID3 entityID4 entityID5 entityID6 entityID7 entityID8 entityID9 entityID10 entityID11 entityID12 entityID13 entityID14 entityID15 entityID16 entityID17 entityID18 entityID19 entityID20 entityID21 entityID22 entityID23 entityID24 entityID25 entityID26 entityID27 entityID28 entityID29 entityID30 entityID31 entityID32 entityID33 entityID34 entityID35 entityID36 entityID37 entityID38 entityID39 entityID40 entityID41 entityID42 entityID43 entityID44 entityID45 entityID46 entityID47 entityID48 entityID49 entityID50 entityID51 entityID52 entityID53 entityID54 entityID55 entityID56 entityID57 entityID58 entityID59 entityID60: or ; % words.n.4: nouns that can be mass or countable % allocation.n allotment.n alloy.n allure.n alteration.n alternation.n % piano.n flute.n belong here, because of "He plays piano" % This class has now been eliminated: nouns are either singular, plural % or mass. If they can be more than one, then they are listed separately % in each class e.g. words.n.1 and/or words.n.2 and/or words.n.3, etc. : & (({NM+} & AN+) or ({NM+} & {D*u-} & & ( or )) or or (YS+ & {D*u-}) or (GN+ & (DD- or [()])) or Us-); GREEK-LETTER-AND-NUMBER pH.i x.n: ; % Same as pattern used in words.n.4 -- mass nouns or countable nouns : ; % Pattern used for words.n.2.s % Similar to , but with different determiners for number % agreement. : [[AN+]] or ( & (({NM+ or Dmc-} & & ( or )) or ({NM+ or Dmc-} & ) or SJrp- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])) or Up-)); genericID0 genericID1 genericID2 genericID3 genericID4 genericID5 genericID6 genericID7 genericID8 genericID9 genericID10 genericID11 genericID12 genericID13 genericID14 genericID15 genericID16 genericID17 genericID18 genericID19 genericID20 genericID21 genericID22 genericID23 genericID24 genericID25 genericID26 genericID27 genericID28 genericID29 genericID30 genericID31 genericID32 genericID33 genericID34 genericID35 genericID36 genericID37 genericID38 genericID39 genericID40 genericID41 genericID42 genericID43 genericID44 genericID45 genericID46 genericID47 genericID48 genericID49 genericID50 genericID51 genericID52 genericID53 genericID54 genericID55 genericID56 genericID57 genericID58 genericID59 genericID60: or or ; %from words.y year numbers : NMd- or ({EN-} & (NIfn+ or NItn-)) or NN+ or AN+ or ((Xd- & TY- & Xc+) or TY-) or ({EN- or NIc-} & (ND+ or OD- or ({{@L+} & DD-} & ([[Dmcn+]] or (( or TA-) & (JT- or IN- or [[]])))))); dateID0 dateID1 dateID2 dateID3 dateID4 dateID5 dateID6 dateID7 dateID8 dateID9 dateID10 dateID11 dateID12 dateID13 dateID14 dateID15 dateID16 dateID17 dateID18 dateID19 dateID20 dateID21 dateID22 dateID23 dateID24 dateID25 dateID26 dateID27 dateID28 dateID29 dateID30 dateID31 dateID32 dateID33 dateID34 dateID35 dateID36 dateID37 dateID38 dateID39 dateID40 dateID41 dateID42 dateID43 dateID44 dateID45 dateID46 dateID47 dateID48 dateID49 dateID50 dateID51 dateID52 dateID53 dateID54 dateID55 dateID56 dateID57 dateID58 dateID59 dateID60: ; % ??? wtf? Is this like "roman numeral" ?? See I.p for "me" % XXX this is wrong or inappropriate .. % I.n: [[{Xi+} & {G-} & G+]]; % Explicitly include the period at the end of the abbreviation. Ms..x Mrs..x Mr..x Messrs..x Rev..x Dr..x Prof..x Atty..x Gov..x Sen..x Rep..x Gen..x Brig..x Col..x Capt..x Lieut..x Lt..x Maj..x Sgt..x Pvt..x Cmdr..x Adm..x Corp..x St..x Mt..x Ft..x Cie..x HMS..x: G+; % Period is missing in the abbreviation! Accept, but with a cost. Ms.x Mrs.x Mr.x Messrs.x Rev.x Sir.x Dr.x Prof.x Atty.x Gov.x Sen.x Rep.x Gen.x Brig.x Col.x Capt.x Lieut.x Lt.x Maj.x Sgt.x Pvt.x Cmdr.x Adm.x Corp.x St.x Mt.x Ft.x Cie.x HMS.x: [[G+]]; St.y St..y Ave.y Ave..y Av.y Av..y Pl.y Pl..y Ct.y Ct..y Dr.y Dr..y Gr.y Gr..y Rd.y Rd..y Blvd.y Blvd..y Pkwy.y Pkwy..y Hwy.y Hwy..y AG.y Assn.y Assn..y Corp.y Corp..y Co.y Co..y Inc.y Inc..y PLC.y Pty.y Pty..y Ltd.y Ltd..y LTD.y Bldg.y Bldg..y and_Co GmBH.y: G- & {Xi+} & {[MG+]} & (({DG- or [[GN-]] or [[{@A-} & {D-}]]} & (({@MX+} & (JG- or )) or or YS+ or YP+)) or AN+ or G+); % e.g. Joe Blow, Esq. or Dr. Smarty Pants, Ph.D. % Gack. See absurdely large collection at: % http://en.wikipedia.org/wiki/List_of_post-nominal_letters Jr.y Jr..y Sr.y Sr..y Esq.y Esq..y AB.y A.B..y AIA.y A.I.A..y BA.y B.A..y BFA.y B.F.A..y BS.y B.S..y BSc.y B.Sc..y CEng.y CEng..y CFA.y CPA.y CPL.y CSV.y DD.y D.D..y DDS.y D.D.S..y DO.y D.O..y D.Phil..y D.P.T..y Eng.D..y JD.y J.D..y KBE.y K.B.E..y LLD.y LL.D..y MA.y M.A..y MBA.y M.B.A..y MD.y M.D.y MFA.y M.F.A..y MS.y M.S..y MSc.y M.Sc..y OFM.y PE.y P.E..y Pharm.D..y PhD.y Ph.D.y Ph.D..y RA.y R.A..y RIBA.y R.I.B.A..y RN.y R.N..y USMC.y USN.y: {Xi+} & {Xd- & {Xc+}} & G- & {[MG+]} & (({DG- or [[GN-]] or [[{@A-} & {D-}]]} & (({@MX+} & (JG- or )) or or YS+ or YP+)) or AN+ or G+); HYPHENATED-WORDS.n: [[({@AN-} & {@A-} & (({NM+ or D-} & (( & ( or )) or )) or U-)) or ((YS+ or YP+) & {@AN-} & {@A-} & {D-})]]; % the generic category for strings containing a hyphen % NOUNS -------------------------------------------------------- % Nouns typically take determiners (a, the). The minor flags are: % D link: determiners: D1234 % position 1 can be s, m for singular, mass % position 2 can be c for count, u for uncountable % position 3 can be k,m,y for comparatives, w for questions. % words.n.1: Common nouns % activist.n actor.n actress.n actuary.n ad.n adage.n adagio.n adapter.n % The naked SJr- allows article to be skipped in conjunction (and,or) % constructions ("the hammer and sickle") : & (AN+ or ((NM+ or ({[NM+]} & (Ds- or ))) & (( & ( or )) or )) or SJrs- or (YS+ & Ds-) or (GN+ & (DD- or [()])) or Us-); /en/words/words.n.1 /en/words/words.n.1.wiki : or ; % Common plural nouns ending in "s" % allocations.n allotments.n allowances.n alloys.n allures.n allusions.n /en/words/words.n.2.s /en/words/words.n.2.s.wiki : or ; /en/words/words.n.2.s.biolg: ; PL-GREEK-LETTER-AND-NUMBER: ; % plural nouns not ending in "s" % aircraft.p bacteria.p bellmen.n buffalo.p businessmen.n chairmen.n /en/words/words.n.2.x /en/words/words.n.2.x.wiki : or ( & ([[AN+]] or ({NM+ or Dmc-} & (( & ( or )) or )) or (YS+ & {Dmc-}) or (GN+ & (DD- or [()])) or Up-)); % XXX should probably eliminate and replace by % but this requires other spread-out changes : or ( & (AN+ or ({NM+ or Dmu-} & (( & ( or )) or )) or (YS+ & {Dmu-}) or (GN+ & (DD- or [()])) or Up-)); % nouns that are mass only % absolutism.n absorption.n abstinence.n abundance.n academia.n /en/words/words.n.3: ; % Want to cost this so that it doesn't interfere with given name "Tom". tom.n-u: []; % Nouns that are also adjectives (e.g. red.n) and so we don't want to % allow these to take AN+ links. We need these as nouns, so as to % parse 'she prefers red'. However, assign a cost, so that 'her shoes % are red' gets red.a perfered over red.n. % [[Ds-]] to allow: "The house was painted a fading yellow" % % Doesn't seem to need a noun-and-x to make this work ... auburn.n black.n blue.n brown.n green.n gray.n pink.n purple.n red.n tawny.n ultramarine.n yellow.n: or ( & ((({Dmu- or [[Ds-]]}) & & ([ or ])) or (YS+ & {Dmu-}) or (GN+ & (DD- or [()])) or Up-)); % US state names and abbreviations % NM N.M. NY N.Y. NC N.C. ND N.D. Ohio Okla. /en/words/entities.us-states.sing: or ({G-} & {DG- or [[GN-]] or [[{@A-} & {D-}]]} & (({MG+} & {@MX+} & (JG- or or )) or G+ or ({[[MG+]]} & (AN+ or YS+ or YP+)))) or (Xc+ & Xd- & G- & AN+); % SINGULAR ENTITIES FOR ENTITY EXTRACTION % This must appear after other categories so it doesnt interfere with those. /en/words/entities.national.sing: or ; % Enable parsing of "Mother likes her" aunt.f auntie.f brother.m dad.m daddy.m father.m grandmother.f granny.f granddad.m grandfather.m grandpa.f grandpop.m mom.f mommy.f mother.f pop.m papa.m poppy.m pops.m sis.f sister.f uncle.m: ; alter_ego au_pair mise_en_scene faux_pas non_sequitur fait_accompli modus_vivendi head_of_state tour_de_force: ( & ((Ds- & & ( or )) or ({Ds-} & ) or Us- or (YS+ & Ds-) or (GN+ & (DD- or [()])))) or AN+; kung_fu joie_de_vivre op_art noblesse_oblige lese_majesty a_must time_of_day time_of_year force_majeure top_dollar year_end skim_milk breach_of_contract sleight_of_hand power_of_attorney word_of_mouth carte_blanche: ( & (({Dmu-} & & ( or )) or ({Dmu-} & ) or Um- or (YS+ & {Dmu-}) or (GN+ & (DD- or [()])))) or AN+; % title nouns (president, chairman) % auditor.t bailiff.t broker.t buyer.t candidate.t captain.t cardinal.t /en/words/words.n.t: & {@M+} & (BIt- or (Xd- & (Xc+ or ) & MX-) or TI-); % Almost identical to below. majority.n minority.n bunch.n batch.n bulk.n handful.n group.n: ( & ((Ds- & & ( or B*x+)) or ({Ds-} & ) or Us- or (YS+ & Ds-) or (GN+ & (DD- or [()])))) or AN+; % Almost identical to above. number.n: ( & ((Ds- & {NM+} & & ( or B*x+)) or ({Ds-} & {NM+} & ) or Us- or (YS+ & Ds-) or (GN+ & (DD- or [()])))) or AN+; % number appreviations: no.x No.x No.x no.x Num.x num.x: (Xi+ or [[()]]) & AN+; kind_of: ({{@AN-} & @A-} & U+ & ((Ds- & & ( or )) or ({Ds-} & ) or Us-)) or EA+ or EE+; type_of sort_of breed_of: {{@AN-} & @A-} & U+ & ((Ds- & & ( or )) or ({Ds-} & ) or Us-); kinds_of types_of sorts_of breeds_of: {{@AN-} & @A-} & U+ & (({Dmc-} & & ( or )) or ({Dmc-} & ) or Up-); percent.u: ( & ((ND- & {DD-} & & ( or B*x+)) or (ND- & {DD-} & ) or U-)) or (ND- & (OD- or AN+ or YS+)); % This set of disjuncts should probably be split up and refined. % "shame.n", "crux.n" are here because they need the Ss*t connector % to pick up "that" in "The crux of it is that we must act first." % However, report.n and sign.n and remark.n, etc. do not seem to % need this connector ... argument.n report.n sign.n impression.n conclusion.n complaint.n allegation.n announcement.n position.n restriction.n notion.n remark.n assertion.n proclamation.n reassurance.n saying.n accusation.n possibility.n idea.n problem.n claim.n result.n statement.n hunch.n assumption.n concept.n hypothesis.n implication.n message.n premonition.n prerequisite.n indication.n truism.n fallacy.n proposition.n prospect.n presupposition.n inkling.n supposition.n finding.n amount.n answer.n crux.n shame.n: ( & ((Ds- & {@M+} & {(TH+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or (Ss*t+ & ) or SIs*t- or )) or ({Ds-} & ) or Us- or (YS+ & Ds-) or (GN+ & (DD- or [()])))) or AN+; proof.n doubt.n suspicion.n hope.n knowledge.n relief.n disclosure.n fear.n acknowledgment.n acknowledgement.n principle.n concern.n philosophy.n risk.n threat.n understanding.n conviction.n theory.n assurance.n speculation.n awareness.n news.n opinion.n belief.n contention.n thought.n myth.n discovery.n rumor.n probability.n fact.n explanation.n feeling.n comment.n expectation.n perception.n sense.n realization.n view.n insistence.n consensus.n notification.n rule.n danger.n warning.n suggestion.n: ( & (({D*u-} & {@M+} & {(TH+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or (Ss*t+ & ) or SIs*t- or )) or ({D*u-} & ) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; evidence.n reasoning.n likelihood: ( & (({Dmu-} & {@M+} & {(TH+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or (Ss*t+ & ) or SIs*t- or )) or ({Dmu-} & ) or Up- or (YS+ & {Dmu-}) or (GN+ & (DD- or [()])))) or AN+; ideas.n opinions.n statements.n beliefs.n facts.n arguments.n principles.n theories.n philosophies.n signs.n impressions.n conclusions.n contentions.n complaints.n proofs.n doubts.n suspicions.n allegations.n reports.n claims.n announcements.n positions.n risks.n hopes.n explanations.n restrictions.n threats.n thoughts.n myths.n feelings.n discoveries.n rumors.n comments.n realizations.n probabilities.n remarks.n notions.n convictions.n hunches.n assumptions.n concepts.n hypotheses.n assertions.n expectations.n implications.n perceptions.n proclamations.n reassurances.n fears.n sayings.n senses.n messages.n disclosures.n accusations.n views.n concerns.n understandings.n acknowledgments.n acknowledgements.n possibilities.n premonitions.n prerequisites.n provisos.n truisms.n fallacies.n assurances.n speculations.n propositions.n prospects.n presuppositions.n inklings.n suppositions.n findings.n amounts.n rules.n dangers.n warnings.n indications.n answers.n suggestions.n: ( & (({Dmc-} & {@M+} & {(TH+ or (R+ & Bp+)) & {[[@M+]]}} & {@MXp+} & ( or (Sp*t+ & ) or SIp*t- or )) or ({Dmc-} & ) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or [[AN+]]; request.n requirement.n condition.n recommendation.n provision.n stipulation.n: ( & (({D*u-} & {@M+} & {(TH+ or TS+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or (Ss*t+ & ) or SIs*t- or )) or ({D*u-} & ) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; requests.n requirements.n conditions.n recommendations.n provisions.n stipulations.n: ( & (({Dmc-} & {@M+} & {(TH+ or TS+ or (R+ & Bp+)) & {[[@M+]]}} & {@MXp+} & ( or (Sp*t+ & ) or SIp*t- or )) or ({Dmc-} & ) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or [[AN+]]; excuse.n decision.n proposal.n attempt.n plan.n plot.n pledge.n urge.n mission.n right.n desire.n mandate.n promise.n option.n campaign.n offer.n vow.n permit.n impetus.n proclivity.n propensity.n move.n vote.n bill.n: ( & ((Ds- & {@M+} & {(TOn+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or )) or ({Ds-} & ) or Us- or (YS+ & Ds-) or (GN+ & (DD- or [()])))) or AN+; failure.n haste.n refusal.n reluctance.n pressure.n willingness.n responsibility.n intent.n temptation.n readiness.n effort.n determination.n capacity.n unwillingness.n need.n will.n eagerness.n opportunity.n commitment.n ambition.n ability.n order.n obligation.n incentive.n: ( & (({D*u-} & {@M+} & {(TOn+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or )) or ({D*u-} & ) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; excuses.n decisions.n proposals.n failures.n efforts.n attempts.n refusals.n pledges.n urges.n missions.n rights.n desires.n needs.n ambitions.n capacities.n mandates.n promises.n abilities.n options.n commitments.n intents.n opportunities.n plans.n plots.n responsibilities.n chances.n campaigns.n offers.n pressures.n obligations orders.n temptations.n vows.n permits.n impetuses.n proclivities.n propensities.n moves.n votes.n bills.n incentives.n: ( & (({Dmc-} & {@M+} & {(TOn+ or (R+ & Bp+)) & {[[@M+]]}} & {@MXp+} & ( or )) or ({Dmc-} & ) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or [[AN+]]; chance.n: ( & (({D*u-} & {@M+} & {(TOn+ or TH+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or )) or ({D*u-} & ) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; question.n issue.n: ( & ((Ds- & {@M+} & {R+ & Bs+ & {[[@M+]]}} & {@MXs+} & ( or (Ss*q+ & ) or SIs*q- or )) or ({Ds-} & ) or Us- or (YS+ & Ds-) or (GN+ & (DD- or [()])))) or AN+; questions.n issues.n: ( & (({Dmc-} & {@M+} & {R+ & Bp+ & {[[@M+]]}} & {@MXp+} & ( or (Sp*q+ & ) or SIp*q- or )) or ({Dmc-} & ) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or AN+; reason.n: ( & (({D*u-} & {@M+} & {TH+ or Ce+ or TOn+ or WY+ or (R+ & Bs+)} & {@MXs+} & ( or (Ss*t+ & ) or SIs*t- or )) or ({D*u-} & ) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; reasons.n: ( & (({Dmc-} & {@M+} & {TH+ or Ce+ or TOn+ or WY+ or (R+ & Bp+)} & {@MXp+} & ( or )) or ({Dmc-} & ) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or [[AN+]]; way.n: ( & ((Ds- & {@M+} & {TOn+ or TH+ or Ce+ or (R+ & Bs+)} & {@MXs+} & (MVa- or or )) or ({Ds-} & ) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; place.n: ( & ((Ds- & {@M+} & {TOn+ or TH+ or Ce+ or (R+ & Bs+)} & {@MXs+} & ([[MVa-]] or or )) or ({Ds-} & ) or or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; time.n: ( & (({D*u-} & {@M+} & {TOn+ or WN+ or TH+ or Ce+ or (R+ & Bs+)} & {@MXs+} & ([[MVa-]] or or )) or ({D*u-} & ) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; ways.n: ( & (({Dmc-} & {@M+} & {TOn+ or TH+ or Ce+ or (R+ & Bp+)} & {@MXp+} & (MVa- or or )) or ({Dmc-} & ) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or [[AN+]]; places.n: ( & (({Dmc-} & {@M+} & {TOn+ or TH+ or Ce+ or (R+ & Bp+)} & {@MXp+} & ([[MVa-]] or or )) or ({Dmc-} & ) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or [[AN+]]; times.n: ( & (({Dmc-} & {@M+} & {TOn+ or WN+ or TH+ or Ce+ or (R+ & Bp+)} & {@MXp+} & ([[MVa-]] or or )) or ({Dmc-} & ) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or [[AN+]]; %PRONOUNS she he: {[[R+ & Bs+]]} & ((Ss+ & ) or SIs- or SJls+ or (Dn- & SJn+)); % The E- is for "It's either us or them" ... not ideal, but OK me him them us: J- or Ox- or ({[[E-]]} & SJl+) or SJr-; myself yourself himself herself itself themselves ourselves yourselves: J- or O- or E+ or MVa-; each_other: J- or O- or YS+; her.d: ({AL-} & {@L+} & (D+ or DD+)) or DP+; her.p: J- or Ox-; its my your their our: ({AL-} & {@L+} & (D+ or DD+)) or DP+; his: DP+ or ({AL-} & {@L+} & (D+ or DD+)) or []; you: J- or Ox- or (Sp+ & ) or SIp- or SJlp+ or (Dn- & SJn+); it: J- or Ox- or ((Ss+ or SFsi+) & ) or SIs- or SFIsi- or OXi- or Vp- or SJls+ or SJrs- or (Dn- & SJn+); % O*c: "we will go faster than they" they: ({[[R+ & Bp+]]} & ((Sp+ & ) or SIp-)) or Ox- or SJlp+ or SJrp- or (Dn- & SJn+); we: (Sp+ & ) or Ox- or SIp- or SJlp+ or SJrp- or (Dn- & SJn+); % XXX why is this marked plural (Sp, SIp) ?? a cheap hack to make I've work? % We use here to prevent lower-case magnling by % the tokenizer. % SJrp-: allows only "...and I", disallows "I and ..." % Ds- & SJl+: "Either I or ..." % Dn- & SJn+: "Neither I not ..." I.p: or ((Sp*i+ or SX+) & ) or SIp*i- or SJr- or (Ds- & SJl+) or (Dn- & SJn+) or SXI-; them_all us_all you_all: Ox- or J-; % it_all gets a cost when used as direct object (Ox) to avoid % inappropriate parse "Please paint it all white" it_all: [[Ox-]] or J-; %we're they're I'm you're: %(({@EBm+} & (((O*t+ or K+ or BI+ or OF+ or Pp+) & {@MV+}) or TO+ or Pa+)) or %({N+} & (Pg+ or Pv+))) & ; ’m 'm: SX- & (({@EBm+} & (((O*t+ or K+ or BI+ or OF+ or Pp+) & {@MV+}) or TO+ or Pa+)) or ({N+} & (Pg+ or Pv+))); ’re 're: Spx- & (({@EBm+} & (((O*t+ or K+ or BI+ or OF+ or Pp+) & {@MV+}) or TO+ or Pa+)) or ({N+} & (Pg+ or Pv+))); %I've they've you've we've: PP+ & ; ’ve 've: Sp- & PP+; %we'd they'd I'd he'd she'd you'd: (PP+ or ({Vw+} & I+)) & ; %I'll he'll she'll we'll they'll you'll it'll: I+ & ; ’d 'd: S- & (PP+ or I+); ’ll 'll: S- & I+; something someone somebody: {EL+} & (({Pa+} & & {@MXs+} & ) or or YS+); nothing no_one nobody: {EN-} & {EL+} & (({Pa+} & & {@MXs+} & ) or or YS+); everything everyone anyone everybody anybody anything: {EN-} & {EL+} & (((({Pa+} & ) or CX+) & {@MXs+} & ) or or YS+); else: EL-; others: {Dmc-} & (( & ) or ); mine.p yours theirs hers ours: or SJl+ or SJr- or (Dn- & SJn+); % DETERMINERS % (L+ & (AJld+ or AJrd-)): "the biggest and the baddest ..." the: ({AL-} & {@L+} & (D+ or DD+)) or DG+ or (TR- & U+) or (L+ & (AJld+ or AJrd-)); those: ({AL-} & (Dmc+ or DD+)) or ( & ( or RJlr+ or RJrr-)) or ; this.p: or ; this.d: ({AL-} & D*u+) or DTn+; these: or or ({AL-} & (Dmc+ or DD+)); both.d: Dmc+ or E+ or ({M+ or (ALx+ & Jp+)} & ) or ; both.a: Paf- or AJra-; % half: prefer NJ+ over noun-main-x, because half is almost surely % modifying something, instead of being a direct object, subject, etc. half: {EN-} & (NJ+ or [(({DD-} & {@Mp+ or (R+ & B+)}) or (AL+ & J+)) & ]); % "How many years" -- prefer TQ+ over Dmc+ many: (H- & ([[Dmc+]] or ND+ or NIn+ or TQ+)) or (AM- & (Dmcy+ or Oy- or Jy-)) or ({EE-} & (ND+ or NIn+)) or ({DD-} & {EAx-} & Dmc+) or ((({EAx-} & {DD-}) or H-) & & ( or )); all.a: ({EN-} & (E+ or Dm+ or NIc+ or ({@M+ or (ALx+ & (Jp+ or Ju+)) or (R+ & B+) or EL+} & ( or (S**t+ & ) or SI**t-)) or )) or DTa+; all_that: EA+ or EE+ or ( & ); all_this: ( & ) or ; all_those all_these: ( & ) or ; one: NA+ or NMw- or NN+ or ({EN-} & NIfn+) or ({NA-} & {EN-} & (({DD-} & Ds+) or ({{@A- & {[[@AN-]]}} & Ds-} & (YS+ or ( & ( or )) or )))) or NIm+ or NSn+ or (NA- & ND+) or DTi+ or (NA- & Xd- & TY- & Xc+); ones: {@A- & {[[@AN-]]}} & {Dmc-} & (YP+ or ( & ) or ); any: ({EN-} & (D+ or DD+ or ( & ) or )) or EC+; % XXX why doesn't this clash with a.eq ?? a an: ({(AA- & HA-) or ALa- or [[Lf+]]} & Ds+) or NN+ or NSa+ or NIm+; such: (ND- & Dmc+) or Dm*k+; such_a such_an: Ds*k+; % "all of the time". These are all temporal modifiers: use MVw ("when") : MVw- & OF+; a_lot: ( & ) or or EC+ or MVa- or ; few: {EA- or EF+ or ({EA-} & DD-)} & (Dmc+ or ( & ) or ); a_couple: ( & ) or ; a_couple_of: NN+ or ND+ or NIn+; a_few: NN+ or ND+ or NIn+ or ({EN-} & (Dmc+ or ND+ or NIn+ or ( & ))); some: D+ or EN+ or MF+ or ( & ) or or ; little.i: ({EE-} & (MVa- or Ca+ or Qe+)) or ({EEx- or H-} & (Dmu+ or ( & ( or )) or )) or (AM- & (Dmuy+ or MVy- or Oy- or Jy-)) or ({Ds-} & ); % "he likes you most" has no determiner, just uses MVa-. most: Dm+ or [EE+] or EA+ or MF+ or ( & ) or or or [{DD-} & MVa- & {Mp+}]; part.i: (OF+ & ) or or ({Ds-} & ); all.e: ; the_most: MVa- or EE+ or Dm+ or ( & ); % "he likes you least of all" has no determiner, just uses MVa-. least.a: EA+; least.e: {DD-} & MVa- & {Mp+}; none: ( & ) or or ; % rest.i: DG ??? huh? what's the example ?? rest.i: (DG- & & ) or (DD- & ); plenty: ({@M+} & ( or )) or or [MVa-]; other: Dmu+ or ({ND-} & {DD-} & Dmc+) or (DD- & (Ds+ or DD+ or or )); one_other every_other: or or Ds+; any_other no_other: or or D+; all_other: Dm+; most_other: Dmc+; quite_a quite_an one_such not_every: Ds+; some_other no_such: D+; every.d: {EN-} & (Ds+ or DTn+ or [[NIc+]]); another: Ds+ or NIc+ or ( & ) or or YS+; one_another: ( & ) or or YS+; each: Ds+ or ( & ) or or DTn+ or E+ or MVa-; no.misc-d: ({EN-} & D+) or EC+; a_little: Dmu+ or ( & ) or or EA+ or EC+ or EE+ or MVa-; a_great_deal: EC+ or MVa- or ( & ) or ; many_more a_few_more a_couple_more plenty_more a_lot_more: Dmcc+ or ( & ) or ; some_more: MVa- or Dm+ or ( & ) or ; one_more: Ds+ or ( & ) or ; not_many: Dmc+ or ( & (Sp+ & )); not_all not_everything: Dm+ or (((ALx+ & Jp+) or ) & (S+ & )); not_one: Ds+ or ( & (Ss+ & )); enough.n: ({OF+} & ) or ; enough.r: EF- or MVa-; enough.a: ({@E-} & Pa- & {Pg+ or Os+ or @MV+}) or ({@E-} & Dm+); enough.ij: Wi- & {Pg+}; not_enough: ({OF+} & ) or or Dm+; % NUMERICAL EXPRESSIONS % Numeric ranges, e.g. "15 to 20". The "to" (or hyphen) acts as a % number in a range, and the requirements should match NUMBER. % The NIf connectors (second subscript position is "n" for number % and "u" for unit) allow "15 to 20", "15 to 20 kDa" and % "15 kDa to 20 kDa", but not "15 kDa to 20". % Allowing EC+ for "two to threefold more abundant". This allows also the % nonsense "two to three more abundant", but this is likely harmless. -.j-ru --.j-ru ---.j-ru or.j-ru to.j-ru ->.j-ru -->.j-ru: (NIfn- & {NIr-} & NItn+ & (NM- or EC+ or (NN+ or [[NF+]] or ({EN- or NIc-} & (ND+ or OD- or ({{@L+} & DD-} & (Dmcn+ or ( & [])))))))) or (NIfu- & {NIr-} & NItu+ & ((( & ( or Bsm+)) or (Us- & {Mp+})) or AN+ or Yd+ or Ya+)) or (NIfp- & {NIr-} & NItp+ & (NM- or AN+ or ({Xc+ & Xd-} & Ma-) or (Wq- & PF+) or MVp- or Pp- or FM- or (Xc+ & Xd- & (MVx- or MX-)))); and.j-ru: (NIfn- & {NIr-} & NItn+ & (NM- or (NN+ or [[NF+]] or ({EN- or NIc-} & (ND+ or OD- or ({{@L+} & DD-} & (Dmcn+ or ( & [])))))))) or (NIfu- & {NIr-} & NItu+ & ((( & ( or Bsm+)) or (Us- & {Mp+})) or AN+ or Yd+ or Ya+)); % and.j-sum is used in numerical sums: "It's a hundred and two in the shade." % It's a hundred 'n two in the shade." and.j-sum 'n.j-sum: NA- & NA+; % For number, cost is added to the roles to prioritize % postmodifier and numeric determiner roles. two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twenty-one twenty-two twenty-three twenty-four twenty-five twenty-six twenty-seven twenty-eight twenty-nine thirty thirty-one thirty-two thirty-three thirty-four thirty-five thirty-six thirty-seven thirty-eight thirty-nine forty forty-one forty-two forty-three forty-four forty-five forty-six forty-seven forty-eight forty-nine fifty fifty-one fifty-two fifty-three fifty-four fifty-five fifty-six fifty-seven fifty-eight fifty-nine sixty sixty-one sixty-two sixty-three sixty-four sixty-five sixty-six sixty-seven sixty-eight sixty-nine seventy seventy-one seventy-two seventy-three seventy-four seventy-five seventy-six seventy-seven seventy-eight seventy-nine eighty eighty-one eighty-two eighty-three eighty-four eighty-five eighty-six eighty-seven eighty-eight eighty-nine ninety ninety-one ninety-two ninety-three ninety-four ninety-five ninety-six ninety-seven ninety-eight ninety-nine oh-one oh-two oh-three oh-four oh-five oh-six oh-seven oh-eight oh-nine o-one o-two o-three o-four o-five o-six o-seven o-eight o-nine zero-one zero-two zero-three zero-four zero-five zero-six zero-seven zero-eight zero-nine several: NA+ or NMw- or ({EN-} & (NIfn+ or NItn-)) or NN+ or NW+ or ({EN- or NIc- or NA-} & (ND+ or NIn+ or ({{@L+} & DD-} & (Dmc+ or ( & []))))) or (NA- & { & }) or (NA- & Xd- & TY- & Xc+); oh.zero: (NA- & NA+); zero.n: (NA- & NA+) or NN+ or Ds+ or ( & ); % the generic "number" category % AN+ is needed for date-ranges % FRACTIONS are simple fractions % Ditto for fractions ... % Not clear why we use Dmcn+ here, instead of allowing nouns to take ND- % as effectively Dmcn and ND are the "same thing" more or less. NUMBERS FRACTION: NMn- or ({EN-} & (NIfn+ or NItn-)) or NN+ or [[NF+]] or [[AN+]] or ({EN- or NIc-} & (ND+ or NIn+ or OD- or ({{@L+} & DD-} & (Dmcn+ or ( & []))))) or EQt+ or EQt-; % HMS-TIME consists of HH:MM:SS(AM|PM) type expressions % and should probably have a narrower set of parse patterns than numbers in % general. e.g. should not have EQ links XXX todo -- fix this. HMS-TIME: NUMBERS & {TZ+}; % Allowing postposed roman numerals only for now. % e.g "Pope Pious XII" ROMAN-NUMERAL-WORDS.rn: NMr-; % nouns that look like roman numerals. Limited requirements to avoid % excessive ambiguity. ROMAN-NUMERAL-WORDS.n: {@MX+} & (); % Allow post-posed letter moifiers: e.g. "Vitamin A" A.id B.id C.id D.id E.id F.id G.id H.id J.id K.id L.id M.id N.id O.id P.id Q.id R.id S.id T.id U.id V.id W.id X.id Y.id Z.id: NMa-; % Avoid having I.id interfere with pronoun I. I.id: [[NMa-]]; % Days of month % Note, however, this over-rides generic numbers in this range % and so is a superset of the generic numbers disjuncts % The following should match NUMBERS with the addition of "or TM-". 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: NUMBERS or TM- or [[G+]]; % Ordinals - day-of-month expressions. % Used only in espressions such as "December 2nd" % Must use regex here as well, to avoid conflict with other regexes first.ti second.ti third.ti fourth.ti fifth.ti sixth.ti seventh.ti eighth.ti ninth.ti tenth.ti eleventh.ti twelfth.ti thirteenth.ti fourteenth.ti fifteenth.ti sixteenth.ti seventeenth.ti eighteenth.ti nineteenth.ti twentieth.ti twenty-first.ti twenty-second.ti twenty-third.ti twenty-fourth.ti twenty-fifth.ti twenty-sixth.ti twenty-seventh.ti twenty-eighth.ti twenty-ninth.ti thirtieth.ti thirty-first.ti DAY-ORDINALS.ti: TM-; % Years w/o apostrophe: e.g. 47 Ford Fairlane or 57 Chevy 01 02 03 040 05 06 07 08 09: or [[G+]]; 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99: NUMBERS or or [[G+]]; % year numbers % 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 /en/words/words.y: or [[G+]]; % Years: e.g. '47 Ford Fairlane or '57 Chevy '00 '01 '02 '03 '04 '05 '06 '07 '08 '09 '10 '11 '12 '13 '14 '15 '16 '17 '18 '19 '20 '21 '22 '23 '24 '25 '26 '27 '28 '29 '30 '31 '32 '33 '34 '35 '36 '37 '38 '39 '40 '41 '42 '43 '44 '45 '46 '47 '48 '49 '50 '51 '52 '53 '54 '55 '56 '57 '58 '59 '60 '61 '62 '63 '64 '65 '66 '67 '68 '69 '70 '71 '72 '73 '74 '75 '76 '77 '78 '79 '80 '81 '82 '83 '84 '85 '86 '87 '88 '89 '90 '91 '92 '93 '94 '95 '96 '97 '98 '99: or [[G+]]; 1: NMn- or ({EN-} & (NIfn+ or NItn-)) or NN+ or [[NF+]] or ({EN- or NIc-} & (ND+ or NIm+ or OD- or ({{@L+} & DD-} & (D**n+ or ( & []))))) or TM- or NSn+ or EQt+ or EQt-; %%%%% or [[G- & (({MXs+} & ) or G+ or AN+ or YS+)]] 0: NMn- or ({EN-} & (NIfn+ or NItn-)) or NN+ or [[NF+]] or ({EN- or NIc-} & (ND+ or NIn+ or OD- or ({{@L+} & DD-} & (Dmcn+ or [[Ds+]] or ( & []))))) or NSn+; %%%%% or [[G- & (({MXs+} & ) or G+ or AN+ or YS+)]] % TODO: no numers or related expressions below this point take the new NM % connector, although e.g. "point 1/2" would appear reasonable. Go through % these and add NM- analogously to other numbers as applicable. % the DECADE-TIME regex matches 1950s 1950's 1950’s etc. DECADE-TIME '20s '30s '40s '50s '60s '70s '80s '90s ‘20s ‘30s ‘40s ‘50s ‘60s ‘70s ‘80s ‘90s: {TA-} & DG- & (IN- or [[]]); twenties thirties, forties fifties sixties seventies eighties nineties hundreds.cnt: {NA-} & {TA-} & DG- & (IN- or [[]]); % teens could be above or teenagers (words.n.2) teens: ({TA-} & DG- & (IN- or )) or ; hundred thousand half-thousand million half-million quarter-million billion half-billion quarter-billion trillion half-trillion quarter-trillion dozen half-dozen bajillion bazillion gadzillion gagillion gajillion gazillion godzillion jillion jizillion kabillion kajillion katrillion killion umptillion zillion: NN- & (NNy+ or NMw- or NA+ or ({EN- or NIc-} & (ND+ or NIn+ or OD- or ({{@L+} & DD-} & (Dmcn+ or ( & )))))); half_a_dozen half_a_million: ({EN- or NIc-} & (ND+ or NIn+ or OD- or ({{@L+} & DD-} & (Dmcn+ or ( & ))))); hundreds.a thousands millions billions trillions dozens bajillions bazillions gadzillions gagillions gajillions gazillions godzillions jillions jizillions kabillions kajillions katrillions killions umptillions zillions: ({DD- or Dmc-} & & ); tens: {DD-} & OF+ & ; dozens_of tens_of hundreds_of thousands_of millions_of billions_of trillions_of bajillions_of bazillions_of gadzillions_of gagillions_of gajillions_of gazillions_of godzillions_of jillions_of jizillions_of kabillions_of kajillions_of katrillions_of killions_of umptillions_of zillions_of: ND+ or NIn+; 1/2 3/4 2/3 1/3 1/4 1/8 3/8 5/8 7/8 ½ ⅓ ⅔ ¼ ¾ ⅛ ⅜ ⅝ ⅞: ({NNx-} & NNy+) or NF+ or NIe+ or ({NNx-} & {EN- or NIc-} & (ND+ or NIn+ or OD- or ({DD-} & ([[Ds+]] or Dmcn+ or ( & ))))); and_a_half: (NW- or NSn-) & (NNy+ or ({EN- or NIc-} & (ND+ or NIn+ or ({DD-} & (Dmcn+ or ( & )))))); quarter.i: NS- & {EN-} & (NF+ or ( & )); thirds.m fourths.m quarters.m fifths.m sixths.m sevenths.m eighths.m ninths.m tenths.m: NW- & {EN-} & (NF+ or ( & )); first.a: L- or Pa- or E+ or MVa- or ({Xc+ & {Xd-}} & CO+) or A+ or [Jp-] or TT+ or ((DD- or [[NSa-]]) & & {TOn+} & ); last.a dead_last: L- or Pa- or MVa- or ({Xc+ & {Xd-}} & CO+) or [Jp-] or DTi+ or TT+ or (DD- & & {TOn+} & ) or A+; second.a: L- or Pa- or MVa- or ({Xc+ & {Xd-}} & CO+) or (DD- & & {TOn+} & ) or NR+ or A+; % This uses the L link for superlatives, but leads to strange parses: % "We celebrated their eleventh anniversary" parses differently % than "tenth anniversary". XXX this should be fixed, I suppose ... % A+: "fifteenth century Italy" % Jp-: "Mike finished in first place, and John in third." third.a fourth.a fifth.a sixth.a seventh.a eighth.a ninth.a tenth.a : L- or Pa- or MVa- or ({Xc+ & {Xd-}} & CO+) or (NS- & {EN-} & NF+) or (((NS- & & {EN-}) or (DD- & & {TOn+})) & ) or NR+ or A+ or Jp-; % NS-: "I gave him a third of the loot." eleventh.a twelfth.a thirteenth.a fourteenth.a fifteenth.a sixteenth.a seventeenth.a eighteenth.a nineteenth.a twentieth.a twenty-first.a twenty-second.a twenty-third.a twenty-fourth.a twenty-fifth.a twenty-sixth.a twenty-seventh.a twenty-eighth.a twenty-ninth.a thirtieth.a thirty-first.a thirty-second.a thirty-third.a thirty-fourth.a thirty-fifth.a thirty-sixth.a thirty-seventh.a thirty-eighth.a thirty-ninth.a fourtieth.a fourty-first.a fourty-second.a fourty-third.a fourty-fourth.a fourty-fifth.a fourty-sixth.a fourty-seventh.a fourty-eighth.a fourty-ninth.a fiftieth.a fifty-first.a fifty-second.a fifty-third.a fifty-fourth.a fifty-fifth.a fifty-sixth.a fifty-seventh.a fifty-eighth.a fifty-ninth.a sixtieth.a sixty-first.a sixty-second.a sixty-third.a sixty-fourth.a sixty-fifth.a sixty-sixth.a sixty-seventh.a sixty-eighth.a sixty-ninth.a seventieth.a seventy-first.a seventy-second.a seventy-third.a seventy-fourth.a seventy-fifth.a seventy-sixth.a seventy-seventh.a seventy-eighth.a seventy-ninth.a eightieth.a eighty-first.a eighty-second.a eighty-third.a eighty-fourth.a eighty-fifth.a eighty-sixth.a eighty-seventh.a eighty-eighth.a eighty-ninth.a ninetieth.a ninety-first.a ninety-second.a ninety-third.a ninety-fourth.a ninety-fifth.a ninety-sixth.a ninety-seventh.a ninety-eighth.a ninety-ninth.a: Pa- or MVa- or ({Xc+ & {Xd-}} & CO+) or (NS- & {EN-} & NF+) or (((NS- & & {EN-}) or (DD- & & {TOn+})) & ) or NR+ or A+ or Jp-; % Miscellaneous ordinal numbers, adjectival usage % prefer G+ over A+ in general, as these are typically parts of names. 1º.a 2º.a 3º.a 4º.a 5º.a 6º.a 7º.a 8º.a 9º.a DAY-ORDINALS.a ORDINALS.a: Pa- or MVa- or ({Xc+ & {Xd-}} & CO+) or (DD- & & {TOn+} & ) or NR+ or G+ or [A+] or AJla+ or ({Ds-} & AJra-) or (Dn- & AJn+); % "Next on our list..." are ordinals. % XXX should be converted to regex... % Note also another list of ordinals below, used for time expressions. first.ord next.ord last.ord second.ord third.ord fourth.ord fifth.ord sixth.ord seventh.ord eighth.ord ninth.ord tenth.ord eleventh.ord twelfth.ord thirteenth.ord fourteenth.ord fifteenth.ord sixteenth.ord seventeenth.ord eighteenth.ord nineteenth.ord twentieth.ord twenty-first.ord twenty-second.ord twenty-third.ord twenty-fourth.ord twenty-fifth.ord twenty-sixth.ord twenty-seventh.ord twenty-eighth.ord twenty-ninth.ord thirtieth.ord thirty-first.ord thirty-second.ord thirty-third.ord thirty-fourth.ord thirty-fifth.ord thirty-sixth.ord thirty-seventh.ord thirty-eighth.ord thirty-ninth.ord fourtieth.ord fourty-first.ord fourty-second.ord fourty-third.ord fourty-fourth.ord fourty-fifth.ord fourty-sixth.ord fourty-seventh.ord fourty-eighth.ord fourty-ninth.ord fiftieth.ord fifty-first.ord fifty-second.ord fifty-third.ord fifty-fourth.ord fifty-fifth.ord fifty-sixth.ord fifty-seventh.ord fifty-eighth.ord fifty-ninth.ord sixtieth.ord sixty-first.ord sixty-second.ord sixty-third.ord sixty-fourth.ord sixty-fifth.ord sixty-sixth.ord sixty-seventh.ord sixty-eighth.ord sixty-ninth.ord seventieth.ord seventy-first.ord seventy-second.ord seventy-third.ord seventy-fourth.ord seventy-fifth.ord seventy-sixth.ord seventy-seventh.ord seventy-eighth.ord seventy-ninth.ord eightieth.ord eighty-first.ord eighty-second.ord eighty-third.ord eighty-fourth.ord eighty-fifth.ord eighty-sixth.ord eighty-seventh.ord eighty-eighth.ord eighty-ninth.ord ninetieth.ord ninety-first.ord ninety-second.ord ninety-third.ord ninety-fourth.ord ninety-fifth.ord ninety-sixth.ord ninety-seventh.ord ninety-eighth.ord ninety-ninth.ord DAY-ORDINALS.ord ORDINALS.ord : (Wd- & {M+} & Ss*o+); % EQUATIONS ETC. % The below is just barely enough to parse just very simple equation % and expressions, nothing complex -- no general math or anything like % that. Relations are treated as "transitive verbs", taking a subject % and requiring an object. % Relations % "verb" use, e.g. "( p < 0.01 )" for "( p is less than 0.01 )" =.v <.v >.v =<.v >=.v ==.v eq.v ne.v lt.v lte.v le.v gt.v gte.v ge.v equiv.v sim.v simeq.v approx.v ~.v: ([S-] or EQ*r-) & ([O+] or EQ*r+) & (Xd- & (Xc+ or ) & (MX- or MVa-)); % Binary operators: % these occur in "simple" expressions *.v "/.v" +.v -.v x.v: ([S-] or EQ-) & ([O+] or EQ+) & (Xd- & (Xc+ or ) & (MX- or MVa-)); % Allows parsing of "dollars per day" or "mL/sec" but is somewhat % inconsistent with the equation persing otherwise described below. % XXX overall, eqn parsing could be strengthened. per "/.per": Us+ & Mp-; % Binary operators, strict: % Here EQt attaches only to terms, which may be numbers or letters. % By contrast, EQrr can only attach to relations (=, < > etc.) +.eq -.eq *.eq "/.eq" x.eqn: (EQt+ & EQt-) & (EQrr- or EQrr+ or AN+); ->.eq -->.eq: (S- & O+) & (AN+ or (Xd- & Xc+ & MX-)); % "adverb" use, e.g. "< 10" for "less than 10" =.e <.e =<.e <=.e >.e >=.e +.e -.e x.e: EN+; % TODO: un-parenthesized cases, e.g. % - preparations of 5 x 10(8) cfu/ml are made % - the strength was in the order of gerE > cotD > yfhP P2 > yfhP P1 % also remember "-->" A.eq B.eq C.eq D.eq E.eq F.eq G.eq H.eq I.eq J.eq K.eq L.eq M.eq N.eq O.eq P.eq Q.eq R.eq S.eq T.eq U.eq V.eq W.eq X.eq Y.eq Z.eq a.eq b.eq c.eq d.eq e.eq f.eq g.eq h.eq i.eq j.eq k.eq l.eq m.eq n.eq o.eq p.eq q.eq r.eq s.eq t.eq u.eq v.eq w.eq x.eq y.eq z.eq: EQt+ or EQt-; fiscal.i: TY+ & ; or_so: ND- & {{@L+} & DD-} & (Dmcn+ or ( & )); %VERBS : Xd- & (Xc+ or ) & (MX*p- or MVg-); : {Xd-} & Xc+ & COp+; % These are the verb-form expressions for ordinary verbs. % % is a marker which should never be used in a link. % It is used to flag past-tense forms in the dictionary. It's only use % is to supply an answer to the "isPastTense" call in the Java API. % which is needed by relex-version 1.2.0 and earlier. Newer versions % use the v-d, w-d, and q-d tags to identify past-tense verbs, and so % the Java API is no longer needed. It should be marked obsolete/deprecated % as soon as possible, and removed by late-2010/early-2011 : XXXPAST+; : {@E-} & ((I- & {@E-} & {Wi-}) or ({CO-} & Wi-)); : ({@E-} & (Sp- or (RS- & Bp-))) or ; : {@E-} & (Sp- or (RS- & Bp-)); : {@E-} & (Ss- or (RS- & Bs-)); : {@E-} & I-; : or ({@E-} & (S- or (RS- & B-) or PP-)); : or ({@E-} & (S- or (RS- & B-))); : {@E-} & PP-; : {@E-} & (Pg- or Mg-); : {@E-} & (Pv- or Mv-) & {@MV+}; : {@E-} & (Pv- or Mv-); : {@E-} & ( or or ({[DP-]} & ((Ss*g+ & ) or SIs*g- or )) or [DP- & J-] or [[Wq- & PF+]]); % ({[[Ds-]]} & OF+) : "a running of the bulls" "a polishing of prose" % AJ: allows use of gerunds as adjectives: "described as smooth and obliging" % : allows use of gerunds as nouns. % VJ*g: ??? this is commented out, where would this occur? : ( & (Dmu- or [[()]]) & (({[[Ds-]]} & OF+) or [[()]]) & (( & {@MXs+} & ((Ss+ & ) or SIs- or Os- or J-)) or AJra- or AJla+ or )) or [[AN+]]; : {@E-} & ( ({[DP-]} & ((Ss*g+ & ) or SIs*g- or )) or Mg- or Pg- or or or [DP- & J-] or [[Wq- & PF+ & {@MV+}]]); : {@E-} & {@MV+} & ( or or [[Wq- & PF+ & {@MV+} & {CC+}]]); % These are the verb-form expressions for special verbs that can take % filler-"it" as a subject. : {@E-} & (Sp- or If- or (RS- & Bp-) or Wi-); : {@E-} & (Ss- or SFsi- or (RS- & Bs-)); : or ({@E-} & (S- or SFsi- or PPf- or (RS- & B-))); : or ({@E-} & (S- or SFsi- or (RS- & B-))); : {@E-} & PPf-; : {@E-} & (Pgf- or Mg-); : {@E-} & (Pvf- or Mv-) & {@MV+}; : {@E-} & (Pvf- or Mv-); % These are the verb-form expressions for special verbs that can take % either filler-"it" or filler-"there" as a subject. : {@E-} & (Sp- or SFp- or If- or (RS- & Bp-) or Wi-); : {@E-} & (Ss- or SFs- or (RS- & Bs-)); : {@E-} & (Ss- or SFs- or SFu- or (RS- & Bs-)); : or ({@E-} & (S- or SF- or (RS- & B-) or PPf-)); : or ({@E-} & (S- or SF- or (RS- & B-))); : {@E-} & PPf-; : {@E-} & (Pgf- or Mg-); : {@E-} & (Pgf- or Mg- or ({[DP-]} & ((Ss*g+ & ) or SIs*g- or )) or or or [DP- & J-] or [[Wq- & PF+ & {@MV+}]]); % conjoined verbs. % VJr == left % VJl == right % VJb == but % VJd == ditransitive % VJn == neither-nor % % VJ*s == singular subject % VJ*p == plural subject % VJ*g == conjoined gerunds "He was running and jumping" % VJ*h == past participle (PP- link) "He had run and jumped" % % The following control whether the conjunction can take an object. % The conjunction should take an object if both verbs are transitive, % e.g. "I saw and greeted Sue", which should parse as % "I (saw and greeted) Sue". % VJ**i == intranstive % VJ**t == transitive % % s == singluar, pl == plural, sp == singular or plural % g == gerund : {@E-} & VJrs-; : {@E-} & VJls+; : {@E-} & VJrp-; : {@E-} & VJlp+; : {@E-} & VJr-; : {@E-} & VJl+; : {@E-} & VJr*i-; : ({@E-} & VJl*i+) or (VJn*i+ & Dn-) or (VJb*i+ & Db-); : {@E-} & VJr*t-; : {@E-} & VJl*t+; : {@E-} & VJrg-; : {@E-} & VJlg+; : {@E-} & VJrh-; : {@E-} & VJlh+; : or or (VJn*t+ & Dn-); % Verb macros making use of above connectors. % plural-infinitive macro; the cost on $1 encourages any MV links to % attach to the "and.j-v" instead of to the individual verb. % singular present tense macro; same comments as above... % present tense, but allows transitive connectinos to 'and' % past tense macro, intransitive variation % past tense macro, transitive variation % Same as above, but without the PP link % as above but for past participles % the filler-it variation of the above rules. % XXX TODO need to provide macro-ized versions for , % and the variants as well. % AUXILIARY VERBS %: (((B- or O+ or [[@MV+ & O*n+]] or Vd+ or ({N+} & (CX- or [[()]]))) & {@MV+}) %or ({N+} & I*d+)); %do.v: ({@E-} & (Sp- or SFp- or (RS- & Bp-) or Wi-) & ) %or ((SIp+ or SFIp+) & (({Q-} & I*d+) or CQ-)) or %({@E-} & I- & ((B- or O+ or [[@MV+ & O*n+]] or CX-) & {@MV+})); %does.v: ( & ) or ((SIs+ or SFIs+) & (({Q-} & I*d+) or CQ-)); %did.v: ( & ) or ((SI+ or SFI+) & (({Q-} & I*d+) or CQ-)); %done.v: ( & (B- or O+ or [[@MV+ & O*n+]] or Vd+)) or or ; %doing.v: & (O+ or B- or [[@MV+ & O*n+]] or Vd+) & {@MV+}; %doing.g: ((O+ or B- or [[@MV+ & O*n+]] or Vd+) & {@MV+} & ) or ; % %don't: (({Q-} & (SIp+ or SFIp+) & I*d+) or ({@E-} & (Sp- or SFp- or %(RS- & Bp-) or Wi-))) & (I*d+ or [[()]]); %doesn't: (({Q-} & (SIs+ or SFIs+) & I*d+) or ) & %(I*d+ or [[()]]); %didn't: or ((({Q-} & (SI+ or SFI+)) or ({@E-} & (S- or SF- or %(RS- & B-)))) & (I*d+ or [[()]])); %Mike replaced "{Q-}" with "(Rw- or Q- or [()])" : (((B- or O+ or [[@MV+ & O*n+]] or Vd+ or ({N+} & (CX- or [[()]]))) & {@MV+}) or ({N+} & I*d+)); do.v: ({@E-} & (Sp- or SFp- or (RS- & Bp-) or ({Ic-} & Wi-)) & ) or ((SIp+ or SFIp+) & (((Rw- or ({Ic-} & Q-) or [()]) & I*d+) or CQ-)) or ({@E-} & I- & ((B- or O+ or [[@MV+ & O*n+]] or CX-) & {@MV+})); does.v: ( & ) or ((SIs+ or SFIs+) & (((Rw- or ({Ic-} & Q-) or [()]) & I*d+) or CQ-)); did.v-d: ( & ) or ((SI+ or SFI+) & (((Rw- or ({Ic-} & Q-) or [()]) & I*d+) or CQ-)); % % XXX why not here ? % verb-pv-b: "I want it done." "I want the job done" : B- or O+ or [[@MV+ & O*n+]] or Vd+; done.v: (( & ()) or ( & (([]) or ())) or (() & )) or or or S-; % adjectival modifier: "I am done working", "I am through being mad" done.a finished.a through.a: ({@E-} & Pa- & {Pg+ or Os+ or @MV+}) or (AJra- & {@MV+}) or ({@MV+} & AJla+); doing.v: & (O+ or B- or [[@MV+ & O*n+]] or Vd+) & {@MV+}; doing.g: ((O+ or B- or [[@MV+ & O*n+]] or Vd+) & {@MV+} & ) or ; better.i fine.i ok.i okay.i OK.i poorly.i well.i: {EE-} & Vd-; don't don’t: (((Rw- or ({Ic-} & Q-) or [()]) & (SIp+ or SFIp+) & I*d+) or ({@E-} & (Sp- or SFp- or (RS- & Bp-) or ({Ic-} & Wi-)))) & (I*d+ or [[()]]); doesn't doesn’t: (((Rw- or ({Ic-} & Q-) or [()]) & (SIs+ or SFIs+) & I*d+) or ) & (I*d+ or [[()]]); didn't.v-d didn’t.v-d: or ((((Rw- or ({Ic-} & Q-) or [()]) & (SI+ or SFI+)) or ({@E-} & (S- or SF- or (RS- & B-)))) & (I*d+ or [[()]])); : ({@MV+} & TO+) or ((B- or O+) & {@MV+} & {[I*j+ or Pv+]}) or (([[@MV+ & O*n+]] or CX- or [[()]]) & {@MV+}) or ({N+} & PP+); have.v: ((SIp+ or SFIp+) & (((Rw- or ({Ic-} & Q-) or [()]) & PP+) or CQ-)) or ( & ); has.v: ((SIs+ or SFIs+) & (((Rw- or ({Ic-} & Q-) or [()]) & PP+) or CQ-)) or ( & ) or ( & ) or ( & ); % XXX probably should be verb-and-sp-i- etc !? had.v-d: ((SI+ or SFI+) & (((Rw- or ({Ic-} & Q-) or [()]) & PP+) or CQ-)) or ( & ) or ( & ) or ( & ) or ( & (TO+ or ((B- or O+) & {@MV+} & {[I*j+ or Pv+]}) or (([[@MV+ & O*n+]] or CX-) & {@MV+}))) or [[(SI*j+ or SFI**j+) & PP+ & ((Xd- & CCq- & Xc+) or CCq- or ({{Xd-} & Xc+} & COp+))]]; having.v: & ; having.g: ( & ) or ; hasn't hasn’t: (((Rw- or ({Ic-} & Q-) or [()]) & (SIs+ or SFIs+)) or ()) & (PP+ or ([[O+]] & {@MV+}) or [[()]]); haven't haven’t: (((Rw- or ({Ic-} & Q-) or [()]) & (SIp+ or SFIp+)) or ({@E-} & (Sp- or SFp- or (RS- & Bp-)))) & (PP+ or ([[O+]] & {@MV+}) or [[()]]); hadn't.v-d hadn’t.v-d: or ((((Rw- or ({Ic-} & Q-) or [()]) & (SI+ or SFI+)) or ({@E-} & (S- or SFs- or SFp- or (RS- & B-)))) & (PP+ or ([[O+]] & {@MV+}) or [[()]])); % Give [K+] a cost so as to prefer Pp+ in general %: % ({@EBm+} & (((O*t+ or [B**t-] or [K+] or BI+ or OF+ or PF- or % (Osi+ & R+ & Bs+) or % (Opi+ & R+ & Bp+) or % [[()]]) & {@MV+}) or % (Pp+ & {THi+ or @MV+}) or % THb+ or % TO+ or % Pa+)) or % ({N+} & (AF- or Pv+ or I*v+)) or % (({N+} or {Pp+}) & Pg*b+); : ({@EBm+} & ((([B**t-] or [K+] or BI+ or OF+ or PF- or (Osi+ & R+ & Bs+) or (Opi+ & R+ & Bp+) or [[()]]) & {@MV+}) or (Pp+ & {THi+ or @MV+}) or THb+ or TO+ or Pa+)) or ({N+} & (AF- or Pv+ or I*v+)) or (({N+} or {Pp+}) & Pg*b+); : {@EBm+} & O*t+ & {@MV+}; : {@EBm+} & (Ost+ or Opt+) & {@MV+}; : {@EBm+} & Out+ & {@MV+}; : or ; : or ; % Colon can be used as a synonym for "is" % "The answer to your question: yes" % "The capital of Germany: Berlin" ":.v": & ; % verb-x-s,u: "there is blood on his hands" % Unfortunately, this allows "There is chasing dogs", which pairs SFu to Op % and has to be removed via post-processing. is.v: ( & ) or ( & ) or ( & ) or (((Rw- or ({Ic-} & Q-) or [()]) & (SIs+ or SFIs+)) & ); 's.v ’s.v: [[( & (({@EBm+} & (((O*t+ or [K+] or BI+ or OF+ or (Osi+ & R+ & Bs+) or (Opi+ & R+ & Bp+)) & {@MV+}) or (Pp+ & {THi+ or @MV+}) or THb+ or TO+ or Pa+)) or ({Pp+} & Pg+) or Pv+ or PP+)) or (SIs+ & PF-)]]; % are.v: % (({@E-} & (Spx- or SFp- or (RS- & Bp-))) or % ((Rw- or ({Ic-} & Q-) or [()]) & (SIpx+ or SFIp+))) & ; % Don't allow are.v with uncountable noun objects. are.v: ({@E-} & (Spx- or SFp- or (RS- & Bp-)) & ) or ((Rw- or ({Ic-} & Q-) or [()]) & (SIpx+ or SFIp+) & ); was.v-d: or ( & ) or ( & ) or ( & ) or ({@E-} & SX- & ) or (((Rw- or ({Ic-} & Q-) or [()]) & (SFIs+ or SIs+ or SXI+)) & ); % XXX probably should be verb-and-sp-i- etc !? were.v-d: or (({@E-} & (Spx- or SFp- or [[Ss-]] or [[SX-]] or (RS- & Bp-))) & ) or ((Rw- or ({Ic-} & Q-) or [()]) & (SIpx+ or SFIp+) & ) or ( & ) or ( & ) or [[(SI*j+ or SFI**j+) & & ((Xd- & CCq- & Xc+) or CCq- or ({{Xd-} & Xc+} & COp+))]]; % XXX the verb-and construction is probably too broad. am.v: ((({@E-} & SX-) or ((Rw- or ({Ic-} & Q-) or [()]) & SXI+)) & ) or ( & ) or ( & ); % S*x- used for passive participles: "this action be taken". be.v: {@E-} & (Ix- or ({Ic-} & Wi-) or [S*x-]) & ; been.v: {@E-} & PPf- & ; being.v: ((({@EBm+} & (((O*t+ or [B**t-] or Pp+ or K+ or OF+ or BI+ or TO+ or THb+) & {@MV+}) or Pa+)) or AF- or Pv+) & ) or ; isn't isn’t: ( or ((Rw- or ({Ic-} & Q-) or [()]) & (SIs+ or SFIs+))) & ; wasn't.v-d wasn’t.v-d: or ((({@E-} & (Ss- or SX- or SFs- or (RS- & Bs-))) or ((Rw- or ({Ic-} & Q-) or [()]) & (SI*+ or SXI+ or SFIs+))) & ); aren't aren’t: (({@E-} & (Spx- or SFp- or (RS- & Bp-))) or ((Rw- or ({Ic-} & Q-) or [()]) & (SIpx+ or SFIp+))) & ; weren't.v-d weren’t.v-d: or ((({@E-} & (Spx- or SFp- or (RS- & Bp-))) or ((Rw- or ({Ic-} & Q-) or [()]) & (SIpx+ or SFIp+))) & ); % XXX probably should be verb-and-sp-i- etc !? will.v can.v may.v must.v could.v might.v shall.v: ((SI+ or SFI+) & (((Rw- or ({Ic-} & Q-) or [()]) & I+) or CQ-)) or ({N+} & {@E-} & (S- or SF- or (RS- & B-)) & (I+ or (CX- & {@MV+}) or [[()]])) or ( & {N+} & {@E-} & I+) or ({N+} & {@E-} & I+ & ); should.v: ((SI+ or SFI+) & (((Rw- or ({Ic-} & Q-) or [()]) & I+) or CQ-)) or ({N+} & {@E-} & (S- or SF- or (RS- & B-)) & (I+ or (CX- & {@MV+}) or [[()]])) or ( & I+) or (I+ & ) or [[(SI*j+ or SFI**j+) & I+ & ((Xd- & CCq- & Xc+) or CCq- or ({{Xd-} & Xc+} & COp+))]]; would.v: ((SI+ or SFI+) & (((Rw- or ({Ic-} & Q-) or [()]) & {Vw+} & I+) or CQ-)) or ({N+} & {@E-} & (S- or SF- or (RS- & B-)) & (({RT+} & I+) or (CX- & {@MV+}) or [[()]])) or ( & I+) or (I+ & ); ought.v: (((Rw- or ({Ic-} & Q-) or [()]) & (SI+ or SFI+)) or ({@E-} & (S- or SF- or (RS- & B-))) or ) & (TO+ or (N+ & I+)); won't can't mustn't couldn't shouldn't cannot needn't won’t can’t mustn’t couldn’t shouldn’t needn’t: ((Rw- or ({Ic-} & Q-) or [()]) & (SI+ or SFI+) & I+) or ({@E-} & (S- or SF- or (RS- & B-)) & (I+ or [[()]])) or ( & {@E-} & I+) or ({@E-} & I+ & ); wouldn't wouldn’t: ((Rw- or ({Ic-} & Q-) or [()]) & (SI+ or SFI+) & {RT+} & I+) or ({@E-} & (S- or SF- or (RS- & B-)) & (({RT+} & I+) or [[()]])) or ( & {@E-} & (({RT+} & I+) or [[()]])) or ({@E-} & (({RT+} & I+) or [[()]]) & ); % =================================================================== % COMMON VERB CATEGORIES (The last number of the file name indicates % the verb form: 1=plural-infinitive, 2=singular, 3=past("ed"), % 4=progressive("-ing"), 5=gerund("-ing".) % abbreviations for ditransitive and optionally ditranstive verbs % ditranstive verbs take a direct and indirect object % e.g. "I gave her a rose" : (O+ & {[[@MV+]]} & O*n+ & {VJd+}); : (O+ & {{[[@MV+]]} & O*n+ & {VJd+}}); : (O+ & {{[[@MV+]]} & [O*n+] & {VJd+}}); % common intransitive verbs : {@MV+}; % XXX Hmmm. There is a fair number of verbs in here that are "weakly" % transitive, i.e. are transitive in various rare usages: % "I ambled the horse", "I hydroplaned the car", etc. Per theory of % functional grammar and related, transitivity should be taken as % variable, so e.g. we could assign a high cost to the transitive use % of some of these verbs ... % % accrue.v ache.v acquiesce.v ad-lib.v adhere.v adjoin.v alight.v /en/words/words.v.1.1: (( & ()) or ( & ([()] or ())) or (() & )); % accounts.v accrues.v aches.v acquiesces.v ad-libs.v adheres.v /en/words/words.v.1.2: (( & ()) or ( & ([()] or ())) or (() & )); % accounted.v accrued.v ached.v acquiesced.v ad-libbed.v adhered.v /en/words/words.v.1.3: (( & ()) or ( & (([]) or ())) or (() & )); fundheld.v-d strove.v-d: (( & ()) or ( & (([]) or ())) or (() & )); % accruing.v aching.v acquiescing.v ad-libbing.v adhering.v adjoining.v /en/words/words.v.1.4: ( & ) or ({@E-} & A+) or ; arisen.v: {@E-} & PP- & {@MV+}; % -------------------------------------------------------------- % intransitive verbs that can take particles like "up" and "out" : {K+} & {@MV+}; % barge.v booze.v bottom.v bow.v branch.v breeze.v brim.v bulge.v cave.v /en/words/words.v.5.1: (( & ()) or ( & ([()] or ())) or (() & )); /en/words/words.v.5.2: (( & ()) or ( & ([()] or ())) or (() & )); /en/words/words.v.5.3: (( & ()) or ( & (([]) or ())) or (() & )) or ({@E-} & A+); slunk.v-d: (( & ()) or ( & (([]) or ())) or (() & )); lay.v-d: (( & ()) or ( & (([]) or ())) or (() & )); lain.v: (( & ()) or ( & (([]) or ())) or (() & )); /en/words/words.v.5.4: ( & ) or ({@E-} & A+) or ; % -------------------------------------------------------------- % irregular -- coming is in words.v.5.4 ... : {(K+ & {Pa+}) or [[Pg+]]} & {@MV+}; come.v: (( & ()) or ( & ([()] or ())) or (() & )) or (( & ()) or ( & (([]) or ())) or (() & )) or ({@E-} & Ix- & O*t+); comes.v: (( & ()) or ( & ([()] or ())) or (() & )); came.v-d: (( & ()) or ( & (([]) or ())) or (() & )); % -------------------------------------------------------------- % optionally transitive verbs % abdicate.v abide.v abort.v accelerate.v acclimate.v acclimatize.v : {O+ or B- or [[@MV+ & O*n+]]} & {@MV+}; /en/words/words.v.2.1: (( & ()) or ( & ([()] or ())) or (() & )); /en/words/words.v.2.2: (( & ()) or ( & (([]) or ())) or (() & ) or ); /en/words/words.v.2.3: (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+) or ; shrank.v-d withdrew.v-d sank.v-d forgave.v-d hove.v-d spoilt.v-d unbent.v-d overfed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ({@E-} & A+); shrunk.v withdrawn.v sunk.v forgiven.v: (( & ()) or ( & (([]) or ())) or (() & )) or or ({@E-} & A+) or ; bid.v-d hurt.v-d thrust.v-d broadcast.v-d outbid.v-d sublet.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & ) or or ({@E-} & A+) or ; /en/words/words.v.2.4: & ; /en/words/words.v.2.5: ( & ) or ({@E-} & A+) or ; % -------------------------------------------------------------- % vc-judge: a lot like vc-delcare, except optionally transitive. : or ((B- or O+) & ({@MV+} & Pa**j+)); judge.v: (( & ()) or ( & ([()] or ())) or (() & )); judges.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); judged.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {{@MV+} & Pa+}) or ({@E-} & A+) or ; judging.v: & ; judging.g: ( & ) or ({@E-} & A+) or ; % -------------------------------------------------------------- : {K+ or OD+} & {@MV+}; rise.v fall.v: (( & ()) or ( & ([()] or ())) or (() & )); rises.v falls.v: (( & ()) or ( & ([()] or ())) or (() & )); rose.v-d fell.v-d: (( & ()) or ( & (([]) or ())) or (() & )); risen.v: (( & ()) or ( & (([]) or ())) or (() & )); fallen.v: (( & ()) or ( & (([]) or ())) or (() & )) or ({@E-} & A+); rising.v falling.v: ( & ) or ({@E-} & A+) or ; % words.v.6: Optionally transitive verbs that can take particles % like "up" and "out" -- see also words.v.8 % average.v back.v bail.v bang.v beam.v beef.v bellow.v bend.v bind.v % The [[@MV+ & O*n+]] term allows some bad parses, e.g. allows: % "she walked out of the room two minutes" % % Pa**j link: "The thugs beat him senseless" "You are driving me crazy" % XXX However, very few of these verbs actually take the Pa**j link ... % and so should be reclaased. : ((K+ & {[[@MV+]]} & O*n+) or ({O+ or B-} & {K+}) or ((B- or O+) & ({@MV+} & Pa**j+)) or [[@MV+ & O*n+]]) & {@MV+}; /en/words/words.v.6.1: (( & ()) or ( & ([()] or ())) or (() & )); /en/words/words.v.6.2: (( & ()) or ( & (([]) or ())) or (() & ) or ); /en/words/words.v.6.3: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {K+} & {@MV+}) or ({@E-} & A+) or ({K+} & ); split.v-d spread.v-d beat.v-d fit.v-d shut.v-d cast.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & ) or ( & {K+}) or ({@E-} & A+) or ({K+} & ); ate.v-d bit.v-d blew.v-d broke.v-d drank.v-d drove.v-d flew.v-d froze.v-d hid.v-d ran.v-d rang.v-d rode.v-d sprang.v-d stalked.v-d woke.v-d test-drove.v-d forbore.v-d oversaw.v-d throve.v-d shrove.v-d countersank.v-d outgrew.v-d strode.v-d offsetted.v-d overthrew.v-d partook.v-d begot.v-d overdid.v-d smote.v-d stank.v-d quick-froze.v-d backbit.v-d awoke.v-d redid.v-d chidded.v-d reran.v-d rived.v-d befell.v-d outrode.v-d betrode.v-d outdid.v-d ridded.v-d deep-froze.v-d forbad.v-d deep-freezed.v-d retook.v-d interwove.v-d bespoke.v-d underwent.v-d slew.v-d overdrew.v-d overcame.v-d outwore.v-d foreknew.v-d wove.v-d trod.v-d outwent.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; beaten.v bitten.v blown.v broken.v driven.v drunk.v eaten.v flown.v frozen.v hidden.v ridden.v rung.v sprung.v stricken.v swum.v woken.v befallen.v interwoven.v overborne.v outgone.v outgrown.v test-driven.v outdone.v shrunken.v countersunk.v bespoken.v underlain.v partaken.v redone.v overdone.v outridden.v deep-frozen.v bestrid.v undergone.v outbidden.v shorn.v outworn.v bestridden.v stunk.v borne.v slain.v woven.v riven.v backbitten.v overlain.v bestrewn.v forborne.v quick-frozen.v browbeaten.v aquitted.v overseen.v smitten.v overdrawn.v striven.v thriven.v shriven.v backslidden.v retaken.v trodden.v chidden.v begotten.v sown.v sewn.v sawn.v hewn.v cloven.v foreknown.v overthrown.v strewn.v awoken.v bidden.v stridden.v slain_dead: (( & ()) or ( & (([]) or ())) or (() & )) or ( & {K+}) or ({@E-} & A+) or ({K+} & ); run.v: (( & ()) or ( & ([()] or ())) or (() & )) or (( & ()) or ( & (([]) or ())) or (() & )) or ( & {K+}) or ({@E-} & A+) or ({K+} & ); /en/words/words.v.6.4: ( & ) or or ; /en/words/words.v.6.5: ( & ) or or ({@E-} & A+); frizz.v frizzle.v prink.v slough.v scuff.v tog.v swot.v: (( & ()) or ( & ([()] or ())) or (() & )); % just like & , except that "and" is the one % XXX TODO review this ... and.v-fill: ((VJlg- & VJrg+) & (Pg- or Mg- or ({Xd-} & VJrg-))) & ; % ------------------------------------------------------------ % common transitive verbs % abandon.v abase.v abbreviate.v abduct.v abet.v abhor.v abolish.v : (O+ or B- or [[@MV+ & O*n+]]) & {@MV+}; /en/words/words.v.4.1 : (( & ()) or ( & ([()] or ())) or (() & )); /en/words/words-medical.v.4.1: (( & ()) or ( & ([()] or ())) or (() & )); /en/words/words.v.4.2: (( & ()) or ( & (([]) or ())) or (() & ) or ); /en/words/words-medical.v.4.2: (( & ()) or ( & (([]) or ())) or (() & ) or ); /en/words/words.v.4.3: (( & ()) or ( & (([]) or ())) or (() & )) or or or (({@E-} or {@EA-} or {@AN-}) & A+) or ; % !?XXX many of the new additions fail some common sentences, such as: % The candle guttered. It plummeted to the bottom. Prices plummeted! /en/words/words-medical.v.4.3: (( & ()) or ( & (([]) or ())) or (() & )) or or or (({@E-} or {@EA-}) & A+) or ; forsook.v-d overrode.v-d overtook.v-d rewrote.v-d undid.v-d overran.v-d mistook.v-d underwrote.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; hit.v-d misread.v-d shed.v-d rid.v-d overcome.v-d offset.v-d overrun.v-d upset.v-d undercut.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & ) or or ({@E-} & A+) or ; forsaken.v overridden.v overtaken.v rewritten.v undone.v beset.v mistaken.v underwritten.v: (( & ()) or ( & (([]) or ())) or (() & )) or or ({@E-} & A+) or ; /en/words/words.v.4.4 /en/words/words-medical.v.4.4: & ; /en/words/words.v.4.5 /en/words/words-medical.v.4.5: ( & ) or ; % ----------------------------------------------------------------- % words.v.8: Transitive verbs that can take particles like "up" and "out" % auction.v bandy.v bar.v batten.v bite.v block.v blot.v blurt.v % See also words.v.6 for optionally transitive verbs. % XXX TODO: should be reviewed, as some of them are optionally transitive % : ((K+ & {[[@MV+]]} & O*n+) or ((O+ or B-) & {K+}) or [[@MV+ & O*n+]]) & {@MV+}; /en/words/words.v.8.1: (( & ()) or ( & ([()] or ())) or (() & )); /en/words/words.v.8.2: (( & ()) or ( & (([]) or ())) or (() & ) or ); stole.v-d threw.v-d tore.v-d wore.v-d overate.v-d over-ate.v-d forewent.v-d oversewed.v-d forswore.v-d foreswore.v-d forwent.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; stolen.v shaken.v thrown.v torn.v worn.v forgone.v curretted.v forsworn.v oversewn.v over-eaten.v foresworn.v overeaten.v: (( & ()) or ( & (([]) or ())) or (() & )) or ( & {K+} & {@MV+}) or ({@E-} & A+) or ({K+} & ); /en/words/words.v.8.3: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {K+} & {@MV+}) or ({@E-} & A+) or ({K+} & ); cut.v: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & ) or ( & {K+} & {@MV+}) or ({@E-} & A+) or ({K+} & ); /en/words/words.v.8.4: & ; /en/words/words.v.8.5: ( & ) or ; % -------------------------------------------------------------- : (((O+ or B-) & {OD+}) or [[@MV+ & O*n+]]) & {@MV+}; raise.v lower.v up.v: (( & ()) or ( & ([()] or ())) or (() & )); raises.v lowers.v ups.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); raised.v-d lowered.v-d upped.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+) or ; raising.v lowering.v upping.v: & ; raising.g lowering.g upping.g: ( & ) or ; % much like words.v.2.1, except can have "TO" link. % tending.g remains in words.v.2.5 % I tended for years to believe that shepherds tend sheep. : & {TO+}; tend.v: (( & ()) or ( & ([()] or ())) or (() & )); tends.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); tended.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+) or ; tending.v: & ; % INTRANSITIVE COMPLEX VERBS (those that do not take O+) : {@MV+} & {TO+}; consent.v endeavor.v hesitate.v proceed.v aspire.v purport.v: (( & ()) or ( & ([()] or ())) or (() & )); consents.v endeavors.v hesitates.v proceeds.v aspires.v purports.v: (( & ()) or ( & ([()] or ())) or (() & )); consented.v-d endeavored.v-d hesitated.v-d proceeded.v-d aspired.v-d purported.v-d: (( & ()) or ( & (([]) or ())) or (() & )); consenting.v endeavoring.v hesitating.v proceeding.v aspiring.v purporting.v: ( & ) or ; : {@MV+} & TO+; endeavour.v condescend.v deign.v: (( & ()) or ( & ([()] or ())) or (() & )); endeavours.v condescends.v deigns.v: (( & ()) or ( & ([()] or ())) or (() & )); endeavoured.v-d condescended.v-d deigned.v-d: (( & ()) or ( & (([]) or ())) or (() & )); endeavouring.v condescending.v deigning.v: ( & ) or ; : {@MV+} & {TO+ or THi+}; happen.v: (( & ()) or ( & ([()] or ())) or (() & )); happens.v: (( & ()) or ( & ([()] or ())) or (() & )); happened.v-d: (( & ()) or ( & (([]) or ())) or (() & )); happening.v: ( & ) or ; % ditransitve : ({@MV+} & {TH+ or Ce+ or RSe+ or TO+}) or ; wish.v: (( & ()) or ( & ([()] or ())) or (() & )); wished.v-d: (( & ()) or ( & (([]) or ())) or (() & )); wishes.v: (( & ()) or ( & ([()] or ())) or (() & )); wishing.v: ( & ) or ; % The O+ target is to handle "I hope so", but really, we should have % a special-case for this (i.e. a new minor letter). % See also for the same problem. : ({@MV+} & {TH+ or Ce+ or RSe+ or TO+}) or [[O+ & {@MV+}]]; hope.v agree.v pretend.v swear.v pray.v vow.v vote.v: (( & ()) or ( & ([()] or ())) or (() & )); hopes.v agrees.v pretends.v swears.v prays.v vows.v votes.v: (( & ()) or ( & ([()] or ())) or (() & )); pretended.v-d prayed.v-d: (( & ()) or ( & (([]) or ())) or (() & )); % The ( & THi+) allows "it is hoped that ..." to parse. hoped.v-d voted.v-d vowed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & THi+); agreed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & TH+); swore.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; sworn.v: (( & ()) or ( & (([]) or ())) or (() & )) or ({@E-} & A+); hoping.v agreeing.v pretending.v swearing.v praying.v vowing.v voting.v: ( & ) or ; : {@MV+} & {Pa+ or TOf+ or THi+ or AF- or [[Pv+]]}; appear.v: & ; appears.v: & ; appeared.v-d: & ; appearing.v: ( & ) or ; : {@MV+} & (Pa+ or TOf+ or LI+ or THi+ or AF- or [[Pv+]]); seem.v: & ; seems.v: & ; seemed.v-d: & ; seeming.v: ( & ) or ; : {@MV+} & {TO+ or QI+}; care.v: (( & ()) or ( & ([()] or ())) or (() & )); cares.v: (( & ()) or ( & ([()] or ())) or (() & )); cared.v-d: (( & ()) or ( & (([]) or ())) or (() & )); caring.v: ( & ) or ; : ({@MV+} & (TH+ or RSe+ or Z- or Ce+)); assert.v contend.v remark.v retort.v intimate.v exclaim.v conjecture.v allege.v surmise.v opine.v insinuate.v suppose.v: (( & ()) or ( & ([()] or ())) or (() & )); asserts.v contends.v remarks.v retorts.v intimates.v exclaims.v conjectures.v alleges.v surmises.v opines.v insinuates.v supposes.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); retorted.v intimated.v exclaimed.v conjectured.v surmised.v-d opined.v-d insinuated.v-d: (( & ()) or ( & (([]) or ())) or (() & )); asserted.v-d contended.v-d remarked.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & THi+); alleged.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & THi+) or ({@E-} & A+); supposed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {TOf+ or THi+ or Z-}) or ({@E-} & A+); asserting.v contending.v remarking.v retorting.v intimating.v exclaiming.v conjecturing.v alleging.v surmising.v opining.v insinuating.v supposing.v: ( & ) or ; : {@MV+} & {TH+}; theorize.v attest.v fantasize.v muse.v speculate.v concur.v: (( & ()) or ( & ([()] or ())) or (() & )); theorizes.v attests.v fantasizes.v muses.v speculates.v concurs.v: (( & ()) or ( & ([()] or ())) or (() & )); attested.v-d fantasized.v-d mused.v-d speculated.v-d concurred.v-d: (( & ()) or ( & (([]) or ())) or (() & )); theorized.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ( & THi+); theorizing.v attesting.v fantasizing.v musing.v speculating.v concurring.v: ( & ) or ; : ({@MV+} & {TH+ or Ce+}); reply.v whisper.v argue.v sigh.v mutter.v testify.v comment.v respond.v hint.v reason.v brag.v: (( & ()) or ( & ([()] or ())) or (() & )); replies.v whispers.v argues.v sighs.v mutters.v testifies.v comments.v responds.v hints.v reasons.v brags.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); replied.v-d sighed.v-d commented.v-d responded.v-d bragged.v-d: (( & ()) or ( & (([]) or ())) or (() & )); % The ( & THi+) allows "it is reasoned that ..." to parse. argued.v-d hinted.v-d muttered.v-d reasoned.v-d testified.v-d whispered.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & THi+); replying.v whispering.v arguing.v sighing.v muttering.v testifying.v commenting.v responding.v hinting.v reasoning.v bragging.v: ( & ) or ; : {@MV+} & {Ce+ or TH+ or RSe+ or (OF+ & {@MV+}) or BW-}; dream.v complain.v: (( & ()) or ( & ([()] or ())) or (() & )); dreams.v complains.v: (( & ()) or ( & ([()] or ())) or (() & )); dreamt.v-d dreamed.v-d complained.v-d: (( & ()) or ( & (([]) or ())) or (() & )); dreaming.g complaining.g: ( & ) or ; dreaming.v complaining.v: & ; % The O+ is to handle "do you think so, too?", however, a special % target for objects like "so" or "it" would be better... % "hope.v" has the same problem. : ({@MV+} & {Ce+ or TH+ or RSe+ or Z- or (OF+ & {@MV+}) or BW-}) or [[O+ & {@MV+}]]; think.v: (( & ()) or ( & ([()] or ())) or (() & )); thinks.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); thought.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {THi+ or Z-}); thinking.g: ( & ) or ; thinking.v: & ; : {@MV+} & {THi+ or QIi+}; matter.v: (( & ()) or ( & ([()] or ())) or (() & )) or ; matters.v: & ; mattered.v-d: (( & ()) or ( & (([]) or ())) or (() & )); mattering.v: ( & ) or ; : {@MV+} & {THi+}; suffice.v: (( & ()) or ( & ([()] or ())) or (() & )); suffices.v: (( & ()) or ( & ([()] or ())) or (() & )); sufficed.v-d: (( & ()) or ( & (([]) or ())) or (() & )); sufficing.v: ( & ) or ; : ({@MV+} & {TH+ or Zs- or TS+ or Ce+}) or (SI*j+ & I*j+); insist.v: (( & ()) or ( & ([()] or ())) or (() & )); insists.v: (( & ()) or ( & ([()] or ())) or (() & )); insisted.v-d: (( & ()) or ( & (([]) or ())) or (() & )); insisting.v: ( & ) or ; : {@MV+} & {QI+}; wonder.v inquire.v: (( & ()) or ( & ([()] or ())) or (() & )); wonders.v inquires.v: (( & ()) or ( & ([()] or ())) or (() & )); wondered.v-d inquired.v-d: (( & ()) or ( & (([]) or ())) or (() & )); wondering.v inquiring.v: ( & ) or ; % Imperative go: "go play ball", "go take a walk", "go swimming" % Similar pattern to "please.r" -- "please play ball" etc. % "You and Rover go play with the ball." requires an S- link. % Hmm ... changes to go.v seem to have obsoleted the need for this ... % go.w: {E-} & (Wi- or S-) & I+; : {K+ or [[Pa+]] or [Pg+] or I*g+} & {@MV+}; go.v: (( & ()) or ( & ([()] or ())) or (() & )); % SFs-: "There goes the cutest guy ever!", needs O*t to survive PP. % However, prefer Pg over O*t when possible... goes.v: ( & ( or [[O*t+ & {@MV+}]])) or ( & ) or ( & ); went.v-d: ( & ( or [[O*t+ & {@MV+}]])) or ( & ) or ( & ); % XXX TODO maybe need VJ and-able links for gone, going etc. ??? gone.v: (( & ()) or ( & (([]) or ())) or (() & )); % The keys are gone. The popcorn is all gone. gone.a: ({@E-} & Pa-) or (AJra- & {@MV+}) or ({@MV+} & AJla+); going.v: ((TOf+ or ({K+ or [[Pa+]]} & {@MV+})) & ) or ({@E-} & A+) or ; % transitive: "stay the prisoner's execution" : {({@MV+} & (Pa+ or AF-)) or ({K+} & {@MV+}) or (O+ & {@MV+})}; stay.v: (( & ()) or ( & ([()] or ())) or (() & )); stays.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); stayed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; staying.v: ( & ) or ; : {({@MV+} & Pa+) or ({O+ or B-} & {K+} & {@MV+})}; stand.v sit.v: (( & ()) or ( & ([()] or ())) or (() & )); stands.v sits.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); stood.v-d sat.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; standing.v sitting.v: & ; standing.g sitting.g: ( & ) or or ({@E-} & A+); : ({@MV+} & {LI+ or Pa+ or AF-}) or {O+ & K+ & {@MV+}}; sound.v: (( & ()) or ( & ([()] or ())) or (() & )); sounds.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); sounded.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; sounding.v: ( & ) or ; : {({@MV+} & (LI+ or Pa+)) or ({K+ or AF-} & {@MV+})}; act.v: (( & ()) or ( & ([()] or ())) or (() & )); acts.v: (( & ()) or ( & ([()] or ())) or (() & )); % "be acted upon quikly" acted.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ( & {K+} & {@MV+}); acting.v: ( & ) or ; % O+ & K+: She looked him over. : {({@MV+} & (LI+ or Pa+)) or ({K+ or AF-} & {@MV+}) or ((O+ & K+) & {@MV+})}; look.v: (( & ()) or ( & ([()] or ())) or (() & )); looks.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); looked.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; looking.v: ( & ) or ; : {{@MV+ or ({Xc+} & @EB+)} & OF+}; repent.v disapprove.v: (( & ()) or ( & ([()] or ())) or (() & )); repents.v disapproves.v: (( & ()) or ( & ([()] or ())) or (() & )); repented.v-d disapproved.v-d: (( & ()) or ( & (([]) or ())) or (() & )); repenting.v disapproving.v: ( & ) or ; : & ; talk.v: (( & ()) or ( & ([()] or ())) or (() & )); talks.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); talked.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; talking.v: ( & & ) or ; : {@MV+ or @EB+} & OF+; consist.v: (( & ()) or ( & ([()] or ())) or (() & )); consists.v: (( & ()) or ( & ([()] or ())) or (() & )); consisted.v-d: (( & ()) or ( & (([]) or ())) or (() & )); consisting.v: ( & ) or ; : {K+ or OF+} & {@MV+}; die.v: (( & ()) or ( & ([()] or ())) or (() & )); dies.v: (( & ()) or ( & ([()] or ())) or (() & )); died.v-d: (( & ()) or ( & (([]) or ())) or (() & )); dying.v: ( & ) or ; : {({[[@MV+]]} & OT+) or BT-} & {@MV+}; last.v wait.v: (( & ()) or ( & ([()] or ())) or (() & )); lasts.v waits.v: (( & ()) or ( & ([()] or ())) or (() & )); lasted.v-d waited.v-d: (( & ()) or ( & (([]) or ())) or (() & )); lasting.v waiting.v: & ; lasting.g waiting.g: ( & ) or ; % TRANSITIVE COMPLEX VERBS (Those that take O+) : or ({@MV+} & TO+); attempt.v undertake.v deserve.v manage.v plot.v prefer.v neglect.v afford.v commit.v profess.v desire.v: (( & ()) or ( & ([()] or ())) or (() & )); attempts.v undertakes.v deserves.v manages.v plots.v prefers.v neglects.v affords.v commits.v professes.v desires.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); attempted.v deserved.v managed.v plotted.v preferred.v neglected.v afforded.v committed.v professed.v-d desired.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+) or ; undertook.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; undertaken.v: (( & ()) or ( & (([]) or ())) or (() & )) or ; attempting.g undertaking.g deserving.g plotting.g preferring.g neglecting.g affording.g committing.g professing.g desiring.g: ( & ) or ; managing.g: ( & ) or or ({@E-} & A+); attempting.v undertaking.v deserving.v managing.v plotting.v preferring.v neglecting.v affording.v committing.v professing.v desiring.v: & ; % like but with particle : ({@MV+} & TO+) or ((((O+ or B-) & {K+}) or (K+ & {[[@MV+]]} & O*n+) or ([[@MV+ & O*n+]])) & {@MV+}); seek.v: (( & ()) or ( & ([()] or ())) or (() & )); seeks.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); sought.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ; seeking.g: ( & ) or ; seeking.v: & ; : {} or ({@MV+} & TO+); decline.v fail.v hasten.v volunteer.v aim.v: (( & ()) or ( & ([()] or ())) or (() & )); declines.v fails.v hastens.v volunteers.v aims.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); declined.v-d hastened.v-d volunteered.v-d aimed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ; failed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+); declining.g failing.g hastening.g volunteering.g: ( & ) or or ({@E-} & A+); declining.v failing.v hastening.v volunteering.v aiming.v: & ; % like but with particle : ({@MV+} & TO+) or ({({O+ or B-} & {K+}) or (K+ & {[[@MV+]]} & O*n+) or [[@MV+ & O*n+]]} & {@MV+}); fight.v: (( & ()) or ( & ([()] or ())) or (() & )); fights.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); fought.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {K+} & {@MV+}) or ({K+} & ); fighting.g: ( & ) or ; fighting.v: & ; : or ({@MV+} & (TO+ or TH+ or Zs- or Ce+)); threaten.v mean.v arrange.v pledge.v: (( & ()) or ( & ([()] or ())) or (() & )); threatens.v means.v arranges.v pledges.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); threatened.v-d meant.v-d arranged.v-d pledged.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+) or ; meaning.g arranging.g threatening.g pledging.g: ( & ) or ; meaning.v arranging.v threatening.v pledging.v: & ; : or ({@MV+} & {TO+ or TH+ or Zs- or Ce+}); plan.v confess.v: (( & ()) or ( & ([()] or ())) or (() & )); plans.v confesses.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); planned.v-d confessed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+) or ; planning.g confessing.g: ( & ) or ; planning.v confessing.v: & ; : or ({@MV+} & {QI+ or TH+ or TO+ or Ce+ or RSe+ or Zs-}); decide.v resolve.v: (( & ()) or ( & ([()] or ())) or (() & )); decides.v resolves.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); decided.v-d resolved.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {THi+}) or ; deciding.v resolving.v: & ; deciding.g resolving.g: ( & ) or ; : {} or ({@MV+} & (QI+ or TH+ or TO+ or Ce+ or RSe+ or Zs- or Pg+)); remember.v forget.v: (( & ()) or ( & ([()] or ())) or (() & )); remembers.v forgets.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); remembered.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ; forgot.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; forgotten.v: (( & ()) or ( & (([]) or ())) or (() & )) or or ({@E-} & A+) or ; remembering.g forgetting.g: ( & ) or ; remembering.v forgetting.v: & ; : {} or ({@MV+} & (TH+ or TO+ or Ce+ or RSe+ or Zs- or QI+ or (OF+ & {@MV+}))); learn.v: (( & ()) or ( & ([()] or ())) or (() & )); learns.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); learned.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {THi+}) or ; learning.g: ( & ) or ; learning.v: & ; : or ({@MV+} & (TO+ or TH+ or Ce+ or RSe+ or Z- or Pg+ or TS+ or (SI*j+ & I*j+))); propose.v: (( & ()) or ( & ([()] or ())) or (() & )); proposes.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); proposed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {THi+ or TSi+ or Z-}) or ({@E-} & A+) or ; proposing.g: ( & ) or ; proposing.v: & ; : or ({@MV+} & ((TO+ or TH+ or Z- or TS+ or ((SI*j+ or SFI**j+) & I*j+)))); demand.v: (( & ()) or ( & ([()] or ())) or (() & )); demands.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); demanded.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ; demanding.v: & ; demanding.g: ( & ) or ; : {} or ({@MV+} & ((TO+ or TH+ or Z- or TS+ or ((SI*j+ or SFI**j+) & I*j+)))); beg.v plead.v: (( & ()) or ( & ([()] or ())) or (() & )); begs.v pleads.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); begged.v-d pleaded.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ; begging.v pleading.v: & ; begging.g pleading.g: ( & ) or ; : ; bear.v: ( & ( or ({@MV+} & (Pg+ or TH+ or TO+)))) or ( & ); bears.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); bore.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; born.v: (( & ()) or ( & (([]) or ())) or (() & )) or or ; bearing.g: ( & ) or ; bearing.v: & ; : or ({@MV+} & (TO+ or Pg+)); love.v dislike.v hate.v: (( & ()) or ( & ([()] or ())) or (() & )); loves.v dislikes.v hates.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); loved.v-d disliked.v-d hated.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ; loving.g disliking.g hating.g: ( & ) or ; loving.v disliking.v hating.v: & ; % "It begins here" : {} or ({@MV+} & ({TO+} or Pg+)); begin.v continue.v cease.v: (( & ()) or ( & ([()] or ())) or (() & )); begins.v continues.v ceases.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); ceased.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ; continued.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or or ({@E-} & A+); began.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; begun.v: (( & ()) or ( & (([]) or ())) or (() & )) or or ; beginning.g ceasing.g: ( & ) or ; continuing.g: ( & ) or or ({@E-} & A+); beginning.v continuing.v ceasing.v: & ; % with particle : ((({O+ or B-} & {K+}) or (K+ & {[[@MV+]]} & O*n+) or [[@MV+ & O*n+]]) & {@MV+}) or ({@MV+} & (TO+ or Pg+)); start.v stop.v try.v: (( & ()) or ( & ([()] or ())) or (() & )); starts.v stops.v tries.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); started.v-d stopped.v-d tried.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {K+} & {@MV+}) or ({K+} & ); starting.g stopping.g trying.g: ( & ) or ; starting.v stopping.v trying.v: & ; % The Pg+ doesn't really apply to all of these ... : or ({@MV+} & (TH+ or Zs-)) or ({@MV+} & Pg+); recognize.v dispute.v accept.v calculate.v record.v deduce.v envision.v recount.v signify.v clarify.v disclose.v recollect.v adduce.v posit.v reiterate.v infer.v presuppose.v: (( & ()) or ( & ([()] or ())) or (() & )); recognizes.v disputes.v calculates.v records.v deduces.v accepts.v envisions.v recounts.v signifies.v clarifies.v discloses.v recollects.v adduces.v posits.v reiterates.v infers.v presupposes.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); recognized.v-d disputed.v-d accepted.v-d calculated.v-d recorded.v-d deduced.v-d envisioned.v-d recounted.v-d signified.v-d clarified.v-d disclosed.v-d recollected.v-d adduced.v-d posited.v-d reiterated.v-d inferred.v-d presupposed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {THi+}) or ({@E-} & A+) or ; recognizing.g disputing.g accepting.g calculating.g deducing.g recording.g envisioning.g recounting.g signifying.g clarifying.g disclosing.g recollecting.g adducing.g positing.g reiterating.g inferring.g presupposing.g: ( & ) or ; recognizing.v disputing.v accepting.v calculating.v deducing.v recording.v envisioning.v recounting.v signifying.v clarifying.v disclosing.v recollecting.v adducing.v positing.v reiterating.v inferring.v presupposing.v: & ; undisputed.v: ( & {THi+}); : {} or ({@MV+} & TH+); repeat.v reflect.v provide.v counter.v signal.v: (( & ()) or ( & ([()] or ())) or (() & )); repeats.v reflects.v provides.v counters.v signals.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); repeated.v-d reflected.v-d countered.v-d signaled.v-d signalled.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or or ({@E-} & A+); provided.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or or ({@E-} & A+) or ((TH+ or Ce+) & (({{Xd-} & Xc+} & CO+) or ({Xd- & Xc+} & MVs-))); repeating.v reflecting.v providing.v countering.v signaling.v signalling.v: & ; repeating.g reflecting.g countering.g signaling.g signalling.g: ( & ) or ; providing.g: ( & ) or or ((TH+ or Ce+) & (({{Xd-} & Xc+} & CO+) or ({Xd- & Xc+} & MVs-))); : or ({@MV+} & (Ce+ or TH+ or RSe+ or Pg+)); sense.v doubt.v reaffirm.v reckon.v regret.v proclaim.v ascertain.v discern.v stipulate.v affirm.v certify.v trust.v postulate.v ensure.v imply.v verify.v boast.v: (( & ()) or ( & ([()] or ())) or (() & )); senses.v reaffirms.v doubts.v reckons.v regrets.v proclaims.v stipulates.v ascertains.v discerns.v affirms.v certifies.v trusts.v postulates.v ensures.v implies.v verifies.v boasts.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); doubted.v-d reaffirmed.v-d sensed.v-d reckoned.v-d regretted.v-d stipulated.v-d proclaimed.v-d ascertained.v-d discerned.v-d affirmed.v-d certified.v-d trusted.v-d postulated.v-d ensured.v-d implied.v-d verified.v-d boasted.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {THi+}) or ({@E-} & A+) or ; reaffirming.g sensing.g doubting.g stipulating.g reckoning.g regretting.g proclaiming.g ascertaining.g discerning.g affirming.g certifying.g trusting.g postulating.g ensuring.g implying.g verifying.g boasting.g: ( & ) or ; sensing.v doubting.v reckoning.v reaffirming.v stipulating.v regretting.v proclaiming.v ascertaining.v discerning.v affirming.v certifying.v trusting.v postulating.v ensuring.v implying.v verifying.v boasting.v: & ; % Pv+ link: "John imagines himself lost in the woods." % Pg+ link: "John imagines himself singing from a mountaintop" % AZ+ link: "John imagined Mary as innocent as a lamb" % similar to vc-see : or ({@MV+} & (Ce+ or TH+ or RSe+ or Z-)) or ((B- or O+) & {@MV+} & {Pg+ or AZ+ or Pv+}) or ({@MV+} & Pg+); imagine.v: (( & ()) or ( & ([()] or ())) or (() & )); imagines.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); imagined.v: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {THi+}) or ({@E-} & A+) or ; imagining.g: ( & ) or ; imagining.v: & ; % Pa**j link: The doctor declared him insane. : or ({@MV+} & (Ce+ or TH+ or RSe+ or Pg+ or Z-)) or ((B- or O+) & ({@MV+} & Pa**j+)); declare.v fear.v conclude.v suspect.v concede.v presume.v foresee.v emphasize.v maintain.v acknowledge.v note.v confirm.v stress.v assume.v: (( & ()) or ( & ([()] or ())) or (() & )); declares.v fears.v concludes.v suspects.v concedes.v presumes.v foresees.v emphasizes.v maintains.v acknowledges.v notes.v confirms.v stresses.v assumes.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); declared.v feared.v concluded.v suspected.v conceded.v presumed.v emphasized.v maintained.v acknowledged.v noted.v confirmed.v-d stressed.v-d assumed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {THi+ or ({@MV+} & Pa+) }) or ({@E-} & A+) or ; foresaw.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; foreseen.v: (( & ()) or ( & (([]) or ())) or (() & )) or ( & {@MV+ or THi+}) or ({@E-} & A+) or ; declaring.g fearing.g concluding.g suspecting.g conceding.g presuming.g foreseeing.g emphasizing.g maintaining.g acknowledging.g noting.g confirming.g stressing.g assuming.g: ( & ) or ; declaring.v fearing.v concluding.v suspecting.v conceding.v presuming.v foreseeing.v emphasizing.v maintaining.v acknowledging.v noting.v confirming.v stressing.v assuming.v: & ; : {} or ({@MV+} & (Ce+ or TH+ or RSe+)); believe.v answer.v worry.v protest.v: (( & ()) or ( & ([()] or ())) or (() & )); believes.v answers.v worries.v protests.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); believed.v-d answered.v-d worried.v-d protested.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {THi+ or TOf+}) or ; believing.g answering.g worrying.g protesting.g: ( & ) or ; believing.v answering.v worrying.v protesting.v: & ; % with particle : ({@MV+} & (Ce+ or TH+ or RSe+)) or ((({O+ or B-} & {K+}) or (K+ & {[[@MV+]]} & O*n+) or [[@MV+ & O*n+]]) & {@MV+}); rule.v add.v: (( & ()) or ( & ([()] or ())) or (() & )); rules.v adds.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); ruled.v-d added.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {({@MV+} & (THi+ or TOf+)) or ({K+} & {@MV+})}) or ({K+} & ) or ({@E-} & A+); ruling.g adding.g: ( & ) or ; ruling.v adding.v: & ; % with particle : ({@MV+} & (TH+ or Zs- or Ce+)) or ((((O+ or B-) & {K+}) or (K+ & {[[@MV+]]} & O*n+)) & {@MV+}) or ([[@MV+ & O*n+]]); figure.v: (( & ()) or ( & ([()] or ())) or (() & )); figures.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); figured.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {K+} & {@MV+}) or ({K+} & ); figuring.g: ( & ) or ; figuring.v: & ; % (QI+ & {MV+}): "I did not say why until recently" : or ({@MV+} & (Ce+ or TH+ or RSe+ or Zs-)) or ({@MV+} & (QI+ & {MV+})); predict.v realize.v discover.v determine.v announce.v say.v mention.v admit.v recall.v reveal.v state.v observe.v indicate.v analyse.v analyze.v assess.v establish.v evaluate.v examine.v question.v test.v hypothesize.v hypothesise.v document.v envisage.v: (( & ()) or ( & ([()] or ())) or (() & )); predicts.v realizes.v discovers.v determines.v announces.v says.v mentions.v admits.v recalls.v reveals.v states.v observes.v indicates.v analyses.v analyzes.v assesses.v establishes.v evaluates.v examines.v questions.v tests.v hypothesizes.v hypothesises.v envisages.v documents.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); predicted.v realized.v discovered.v determined.v announced.v mentioned.v admitted.v recalled.v revealed.v stated.v observed.v indicated.v analysed.v analyzed.v assessed.v established.v evaluated.v examined.v questioned.v tested.v hypothesized.v-d hypothesised.v-d well-established.v-d documented.v-d envisaged.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {THi+}) or ({@E-} & A+) or ; said.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ({@E-} & (Pvf- or [[Mv-]]) & {@MV+} & {THi+}) or [[{@E-} & A+]] or [[]]; predicting.g realizing.g discovering.g determining.g announcing.g saying.g mentioning.g admitting.g recalling.g revealing.g stating.g observing.g indicating.g analysing.g analyzing.g assessing.g establishing.g evaluating.g examining.g questioning.g testing.g hypothesizing.g hypothesising.g documenting.g envisaging.g: ( & ) or ; predicting.v realizing.v discovering.v determining.v announcing.v saying.v mentioning.v admitting.v recalling.v revealing.v stating.v observing.v indicating.v analysing.v analyzing.v assessing.v establishing.v evaluating.v examining.v questioning.v testing.v hypothesizing.v hypothesising.v documenting.v envisaging.v: & ; : {} or ({@MV+} & (TH+ or QI+ or Ce+ or RSe+ or Zs-)); guess.v estimate.v understand.v notice.v explain.v demonstrate.v: (( & ()) or ( & ([()] or ())) or (() & )); guesses.v estimates.v understands.v notices.v explains.v demonstrates.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); guessed.v-d understood.v-d noticed.v-d explained.v-d demonstrated.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {THi+}) or ; estimated.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {THi+}) or or ({@E-} & A+); guessing.g estimating.g understanding.g noticing.g explaining.g demonstrating.g: ( & ) or ; guessing.v estimating.v understanding.v noticing.v explaining.v demonstrating.v: & ; % (QI+ & {MV+}): "I did not know why until recently" : {} or ({@MV+} & (((OF+ or QI+)& {@MV+}) or Ce+ or TH+ or RSe+ or Zs-)); know.v: (( & ()) or ( & ([()] or ())) or (() & )); knows.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); knew.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; known.v: (( & ()) or ( & (([]) or ())) or (() & )) or ( & {THi+ or TOf+ or QIi+}) or or ({@E-} & A+); knowing.g: ( & ) or ; knowing.v: & ; : or ({@MV+} & (TH+ or Ce+ or RSe+ or Zs- or TS+ or ((SI*j+ or SFI**j+) & I*j+))); request.v: (( & ()) or ( & ([()] or ())) or (() & )); requests.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); requested.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {THi+ or TSi+}) or ({@E-} & A+) or ; requesting.g: ( & ) or ; requesting.v: & ; : or ({@MV+} & (Pa+ or TH+ or Ce+ or RSe+ or AF- or Vf+ or (LI+ or {@MV+}) or [[Pv+]])); feel.v: (( & ()) or ( & ([()] or ())) or (() & )); feels.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); felt.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {THi+}) or ; feeling.g: ( & ) or ; feeling.v: & ; : {} or ({@MV+} & (QI+ or TH+ or Pg+)); mind.v: (( & ()) or ( & ([()] or ())) or (() & )); minds.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); minded.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ; minding.g: ( & ) or ; minding.v: & ; : {} or ({@MV+} & QI+); study.v: (( & ()) or ( & ([()] or ())) or (() & )); studies.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); studied.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+) or ; studying.g: ( & ) or ; studying.v: & ; % QI+ link: "I will discuss which vitamins I take" : or ({@MV+} & (Pg+ or QI+)); discuss.v: (( & ()) or ( & ([()] or ())) or (() & )); discusses.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); discussed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+) or ; discussing.g: ( & ) or ; discussing.v: & ; : or ({@MV+} & Pg+); oppose.v enjoy.v advocate.v contemplate.v entail.v necessitate.v justify.v risk.v avoid.v involve.v favor.v: (( & ()) or ( & ([()] or ())) or (() & )); opposes.v enjoys.v advocates.v contemplates.v entails.v necessitates.v justifies.v risks.v avoids.v involves.v favors.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); opposed.v-d enjoyed.v-d advocated.v-d contemplated.v-d entailed.v-d necessitated.v-d justified.v-d risked.v-d avoided.v-d involved.v-d favored.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+) or ; opposing.g enjoying.g advocating.g contemplating.g entailing.g necessitating.g justifying.g risking.g avoiding.g favoring.g involving.g: ( & ) or ; opposing.v enjoying.v advocating.v contemplating.v entailing.v necessitating.v justifying.v risking.v avoiding.v involving.v favoring.v: & ; : {} or ({@MV+} & Pg+); finish.v practice.v resist.v: (( & ()) or ( & ([()] or ())) or (() & )); finishes.v practices.v resists.v quits.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); % : "I want it finished" finished.v-d practiced.v-d resisted.v-d quitted.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+) or ; quit.v-d: (( & ()) or ( & ([()] or ())) or (() & )) or (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+) or ; finishing.g practicing.g resisting.g quitting.g: ( & ) or ; finishing.v practicing.v resisting.v quitting.v: & ; % Pv-: "I want it over with" over_with: ; % with particle % and also Pa**j for "The witch turned him green" : ((O+ or (K+ & {[[@MV+]]} & O*n+) or ({O+ or B-} & {K+}) or ((O+ or B-) & Pa**j+) or [[@MV+ & O*n+]]) & {@MV+}) or ({@MV+} & (Pa+ or AF-)); turn.v: (( & ()) or ( & ([()] or ())) or (() & )); turns.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); turned.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {K+} & {@MV+}) or ({K+} & ); turning.v: & ; turning.g: ( & ) or ; % plus TI : ((O+ or B- or TI+ or [[@MV+ & (O*n+ or TI+)]] or [[Pv+]]) & {@MV+}) or ({@MV+} & (AF- or Pa+)); become.v: (( & ()) or ( & ([()] or ())) or (() & )) or or ( & ) or ; becomes.v: & ; became.v-d: & ; becoming.g: ( & ) or ; becoming.v: & ; % plus TI : ({@MV+} & (AF- or Pa+)) or ({O+ or B- or TI+ or [[@MV+ & (O*n+ or TI+)]] or [[Pv+]]} & {@MV+}); remain.v: (( & ()) or ( & ([()] or ())) or (() & )); remains.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); remained.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; remaining.g: ( & ) or or ({@E-} & A+); remaining.v: & ; % plus particle : ({@MV+} & (AF- or Pa+)) or ((({O+ or B-} & {K+}) or (K+ & {[[@MV+]]} & O*n+) or [[@MV+ & O*n+]]) & {@MV+}); grow.v: (( & ()) or ( & ([()] or ())) or (() & )); grows.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); grew.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; grown.v: (( & ()) or ( & (([]) or ())) or (() & )) or ( & {K+} & {@MV+}) or ({@E-} & A+) or ({K+} & ); growing.g: ( & ) or ({@E-} & A+) or ; growing.v: & ; % plus OF : {O+ or B- or [[@MV+ & O*n+]] or ({@MV+} & OF+)} & {@MV+}; approve.v: (( & ()) or ( & ([()] or ())) or (() & )); approves.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); approved.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+) or ; approving.g: ( & ) or ; approving.v: & ; % plus OF : (O+ or B- or [[@MV+ & O*n+]] or ({@MV+} & OF+)) & {@MV+}; dispose.v conceive.v: (( & ()) or ( & ([()] or ())) or (() & )); disposes.v conceives.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); disposed.v-d conceived.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+) or ; disposing.g conceiving.g: ( & ) or ; disposing.v conceiving.v: & ; % plus particle : ((K+ & {[[@MV+]]} & O*n+) or ({O+ or B-} & {K+}) or [[@MV+ & O*n+]] or OF+) & {@MV+}; speak.v: (( & ()) or ( & ([()] or ())) or (() & )); speaks.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); spoke.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; spoken.v: (( & ()) or ( & (([]) or ())) or (() & )) or ( & {K+} & {@MV+}) or ({K+} & ) or ({@E-} & A+); speaking.v: & ; speaking.g: ( & ) or or ({@E-} & A+); : or ({@MV+} & ((LI+ & {@MV+}) or AF- or Pa+ or OF+)); taste.v: (( & ()) or ( & ([()] or ())) or (() & )); tastes.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); tasted.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ; tasting.g: ( & ) or ; tasting.v: & ; : {} or ({@MV+} & ((LI+ & {@MV+}) or AF- or Pa+ or OF+)); reek.v smell.v: (( & ()) or ( & ([()] or ())) or (() & )); reeks.v smells.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); reeked.v-d smelled.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ; reeking.g smelling.g: ( & ) or ; reeking.v smelling.v: & ; % plus partcle and Vt : (((K+ & {[[@MV+]]} & O*n+) or ((O+ or B-) & {K+ or Vt+}) or [[@MV+ & O*n+]]) & {@MV+}) or ({O+} & (OT+ or BT-) & {@MV+} & {(TOt+ & B+) or TOi+}) or (OXii+ & Vtg+ & {@MV+} & TH+) or @MV+; take.v: (( & ()) or ( & ([()] or ())) or (() & )) or ; takes.v: & ; took.v-d: & ; taken.v: ( & ) or ( & {K+} & {@MV+}) or ({@E-} & A+) or ({K+} & ) or (Pvf- & Vtg+ & THi+); taking.v: & ; taking.g: ( & ) or ; for_granted: Vtg-; % VERBS TAKING [OBJ] + [OTHER COMPLEMENT] % basically, all these are plus mess : ((K+ & {[[@MV+]]} & O*n+) or ((O+ or B-) & (K+ or Pp+ or WR-)) or (Vp+ & (Zs- or MVa+))) & {@MV+}; put.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & ) or ( & (K+ or Pp+ or WR-) & {@MV+}) or ((K+ or Pp+) & ); puts.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); putting.v: & ; putting.g: ( & ) or ; % K+ & O*n+: "He costed out the plan" : (( or (K+ & O*n+) or (B- & {O+})) & {@MV+} & {TOi+}) or ([[@MV+ & O*n+]]); cost.v-d: (( & ()) or ( & ([()] or ())) or (() & )) or or ( & ); costed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & (({K+} & {@MV+}) or Pa+ or Pg+)) or ({K+ or Pa+ or Pg+} & ); costs.v: & ; costing.v: & ; costing.g: ( & ) or ; % ditransitive : ( & {@MV+}) or (K+ & {[[@MV+]]} & O*n+) or (B- & O+) or ((O+ or B-) & (({@MV+} & (Pa+ or AF- or Pg+)) or ({K+} & {@MV+}))) or ([[@MV+ & O*n+]]) or ({@MV+} & (TH+ or Ce+ or RSe+)); find.v: (( & ()) or ( & ([()] or ())) or (() & )); finds.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); found.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & (({K+ or AF-} & {@MV+}) or Pa+ or Pg+)) or ({K+ or Pa+ or Pg+} & ); finding.v: & ; finding.g: ( & ) or ; % ditranstive : ((O+ or B-) & (({K+} & {@MV+}) or ({@MV+} & (Pa+ or AF- or Pv+)))) or (( or (K+ & {[[@MV+]]} & O*n+) or K+ or (B- & O+) ) & {@MV+}) or ({@MV+} & (Pa+ or AF- or Pv+ or Pp+ or TO+)); get.v: (( & ()) or ( & ([()] or ())) or (() & )); gets.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); got.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; gotten.v: (( & ()) or ( & (([]) or ())) or (() & )) or ( & {K+ or Pp+} & {@MV+}) or ({K+ or Pp+} & ); getting.v: & ; getting.g: ( & ) or ; : ((O+ or B-) & (({K+} & {@MV+}) or ({@MV+} & {Pa+ or AF- or Pv+ or Pg+}))) or ({(K+ & {[[@MV+]]} & O*n+) or ([[@MV+ & O*n+]])} & {@MV+}); leave.v: (( & ()) or ( & ([()] or ())) or (() & )); leaves.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); left.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & (({K+ or AF-} & {@MV+}) or Pv+ or Pa+ or Pg+)) or ({K+ or ({@MV+} & (Pv+ or Pa+ or Pg+))} & ); leaving.v: & ; leaving.g: ( & ) or ; : ((O+ or (K+ & {[[@MV+]]} & O*n+) or [[@MV+ & O*n+]] or Vk+) & {@MV+}) or ({O+ or B-} & ((K+ & {@MV+}) or ({@MV+} & (Pa+ or AF- or Pg+ or Pv+)))); keep.v: (( & ()) or ( & ([()] or ())) or (() & )); keeps.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); kept.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & (({K+ or AF-} & {@MV+}) or Pa+ or Pg+ or Pv+)) or ({K+ or ({@MV+} & (Pa+ or Pg+ or Pv+))} & ); keeping.v: & ; keeping.g: ( & ) or ; watch.i vigil.i pace.i: Vk-; track.i: Vk- & {OF+}; : ((K+ & {[[@MV+]]} & O*n+) or ({O+ or B-} & {K+ or Vs+}) or [[@MV+ & O*n+]]) & {@MV+}; set.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & ) or ( & {K+ or Vs+} & {@MV+}) or ({@E-} & A+) or ({K+ or Vs+} & ); sets.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); setting.v: & ; setting.g: ( & ) or or ({@E-} & A+); free.i straight.i loose.i: Vs- & {MV+}; : ((K+ & {[[@MV+]]} & O*n+) or ({O+ or B-} & {K+ or Vh+}) or [[@MV+ & O*n+]]) & {@MV+}; hold.v: (( & ()) or ( & ([()] or ())) or (() & )); holds.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); held.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {K+ or Vh+} & {@MV+}) or ({@E-} & A+) or ({K+ or Vh+} & ); holding.v: & ; holding.g: ( & ) or ; hostage.i captive.i: Vh- or Vth-; : ({@MV+} & (Ce+ or TH+ or RSe+ or Z- or TO+)) or ((O+ or OX+ or B-) & {@MV+} & {TOo+}) or ([[@MV+ & O*n+]]); expect.v claim.v: (( & ()) or ( & ([()] or ())) or (() & )); expects.v claims.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); expected.v-d claimed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {TOf+ or THi+ or Z-}) or ({@E-} & A+) or ({@MV+} & {TO+} & ); expecting.g claiming.g: ( & ) or ; expecting.v claiming.v: & ; : ({@MV+} & (TH+ or Z- or TO+)) or ((O+ or OX+ or B-) & {@MV+} & TOo+); intend.v: (( & ()) or ( & ([()] or ())) or (() & )); intends.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); intended.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {TO+ or Z- or @MV+}) or ({@E-} & A+) or ({@MV+} & {TO+} & ); intending.g: ( & ) or ; intending.v: & ; : (N+ & I+) or ({@MV+} & TO+) or ((O+ or B-) & {@MV+} & TOo+); dare.v: (( & ()) or ( & ([()] or ())) or (() & )); dares.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); dared.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & TO+) or ({@MV+} & TO+ & ); daring.g: ( & ) or ; daring.v: & ; : ({@MV+} & (TO+ or Pg+)) or ((O+ or B- or OX+) & {@MV+} & {TOo+}) or ([[@MV+ & O*n+]]); like.v: (( & ()) or ( & ([()] or ())) or (() & )); likes.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); liked.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ; liking.g: ( & ) or ; liking.v: & ; % ditranstive : (( or (B- & {O+})) & {@MV+}) or ({@MV+} & TO+) or ([[@MV+ & O*n+]]); offer.v: (( & ()) or ( & ([()] or ())) or (() & )); offers.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); offered.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {O+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or [[@MV+ & O*n+]]} or ); offering.g: ( & ) or ; offering.v: & ; % ditransitive % unlike vc-offer, "to" is optional. : (( or (B- & {O+})) & {@MV+}) or ({@MV+} & {TO+}) or ([[@MV+ & O*n+]]); refuse.v: (( & ()) or ( & ([()] or ())) or (() & )); refuses.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); refused.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {O+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or [[@MV+ & O*n+]]} & ); refusing.g: ( & ) or ; refusing.v: & ; % Pa**j+: predicative adjective -- "I want it green", "I want it very shiny." : ({@MV+} & TO+) or ((O+ or OX+ or B-) & {@MV+} & {TOo+ or Pv+ or Pa**j+}) or ([[@MV+ & O*n+]]) or [[CX- & {@MV+}]]; want.v need.v: (( & ()) or ( & ([()] or ())) or (() & )); need.i: {@E-} & (S- or (RS- & B-)) & (N+ & I+); wants.v needs.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); wanted.v-d needed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+) or ; wanting.g needing.g: ( & ) or ; wanting.v needing.v: & ; : ({@MV+} & {TO+}) or ((O+ or B-) & {@MV+} & {TOo+}) or ([[@MV+ & O*n+]]); choose.v: (( & ()) or ( & ([()] or ())) or (() & )); chooses.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); chose.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; chosen.v: (( & ()) or ( & (([]) or ())) or (() & )) or ( & {TO+}) or ({@E-} & A+) or ({@MV+} & {TO+} & ); choosing.g: ( & ) or ; choosing.v: & ; % is identical to : ({@MV+} & {TO+}) or ((O+ or B-) & {@MV+} & {TOo+}) or ([[@MV+ & O*n+]]); prepare.v press.v: (( & ()) or ( & ([()] or ())) or (() & )); prepares.v presses.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); prepared.v-d pressed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+) or ; preparing.g pressing.g: ( & ) or ; preparing.v pressing.v: & ; : ((O+ or B-) & {@MV+} & {TOo+}) or ({@MV+} & (TH+ or Ce+ or TS+ or (SI*j+ & I*j+))) or Zs- or ([[@MV+ & O*n+]]); require.v: (( & ()) or ( & ([()] or ())) or (() & )); requires.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); required.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {TO+ or TSi+}) or ({@E-} & A+) or ({@MV+} & {TO+} & ); requiring.g: ( & ) or ; requiring.v: & ; : ({@MV+} & (TH+ or Zs- or TS+ or Ce+)) or ((O+ or B-) & {@MV+} & {TOo+}) or ([[@MV+ & {O*n+}]]); command.v order.v urge.v: (( & ()) or ( & ([()] or ())) or (() & )); commands.v orders.v urges.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); : (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {TO+ or TH+ or TS+}) or ({@MV+} & {TH+ or TO+ or TS+} & ); commanded.v-d urged.v-d: ; % An "ordered list" ordered.v: or ({@E-} & A+); commanding.g ordering.g urging.g: ( & ) or ; commanding.v ordering.v urging.v: & ; % ditransitive : ({@MV+} & (TH+ or Pg+)) or ((O+ or OX+ or B-) & {@MV+} & {TOo+ or Pa+}) or (((O+ & (B- or ({[[@MV+]]} & O*n+))) or ([[@MV+ & O*n+]])) & {@MV+}); consider.v: (( & ()) or ( & ([()] or ())) or (() & )); considers.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); considered.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & (({@MV+} & (TOf+ or Pa+)) or ({O+ or B- or [[@MV+ & O*n+]]} & {@MV+}))) or ((({@MV+} & (TOf+ or Pa+)) or ({O+ or [[@MV+ & O*n+]]})) & ); considering.g: ( & ) or ; considering.v: & ; : ({@MV+} & (TH+ or Ce+)) or ((O+ or OX+ or B-) & {@MV+} & {TOo+}) or ([[@MV+ & O*n+]]); perceive.v: (( & ()) or ( & ([()] or ())) or (() & )); perceives.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); perceived.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {TO+}) or ({@E-} & A+) or ({@MV+} & {TO+} & ); perceiving.g: ( & ) or ; perceiving.v: & ; : ({@MV+} & {TH+ or Z- or Ce+}) or ((O+ or B-) & {@MV+} & {TOo+}) or ([[@MV+ & O*n+]]); report.v: (( & ()) or ( & ([()] or ())) or (() & )); reports.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); reported.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {TOf+ or Z-}) or ({@E-} & A+) or ({@MV+} & {TO+} & ); reporting.g: ( & ) or ; reporting.v: & ; : ((O+ or B-) & {@MV+} & {TH+ or Ce+ or TOo+}) or ({@MV+} & {TH+ or Zs-}) or ([[@MV+ & O*n+]]); caution.v: (( & ()) or ( & ([()] or ())) or (() & )); cautions.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); cautioned.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & ((O+ or B-) & {@MV+} & {TH+ or Ce+ or Zs- or TO+})) or ({@MV+} & {TH+ or Ce+ or TO+} & ); cautioning.g: ( & ) or ; cautioning.v: & ; : ((O+ or B-) & {@MV+} & {TH+ or Ce+ or TOo+ or (OF+ & {@MV+})}) or ({@MV+} & {TH+ or Zs- or (OF+ & {@MV+})}) or ([[@MV+ & O*n+]]); warn.v advise.v: (( & ()) or ( & ([()] or ())) or (() & )); warns.v advises.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); warned.v-d advised.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {TH+ or Ce+ or Zs- or TO+ or (OF+ & {@MV+})}) or ({@MV+} & {TH+ or Ce+ or TO+ or OF+} & ); warning.g advising.g: ( & ) or ; warning.v advising.v: & ; : ((B- or O+) & {@MV+} & {I*j+ or Pg+}) or ({@MV+} & {TH+ or Zs- or Ce+ or (OF+ & {@MV+})}) or ([[@MV+ & O*n+]]); hear.v: (( & ()) or ( & ([()] or ())) or (() & )); hears.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); heard.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {Pg+}) or ({@MV+} & {Pg+} & ); hearing.g: ( & ) or ; hearing.v: & ; : ((B- or O+) & {@MV+} & {I*j+ or Pg+ or AZ+ or Pv+}) or ({@MV+} & {TH+ or Zs- or QI+ or Ce+}) or ([[@MV+ & O*n+]]); see.v: (( & ()) or ( & ([()] or ())) or (() & )); sees.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); saw.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; seen.v: (( & ()) or ( & (([]) or ())) or (() & )) or ( & {Pg+ or AZ+}) or ({@MV+} & {Pg+ or AZ+} & ); seeing.g: ( & ) or ; seeing.v: & ; % ditranstive verbs -- taking direct and indirect objects : ( or (B- & {O+}) or ([[@MV+ & O*n+]])) & {@MV+}; owe.v deliver.v accord.v award.v term.v grant.v begrudge.v assign.v rename.v repay.v dub.v entitle.v fine.v: (( & ()) or ( & ([()] or ())) or (() & )); owes.v delivers.v accords.v awards.v terms.v grants.v begrudges.v assigns.v renames.v repays.v dubs.v entitles.v fines.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); owed.v delivered.v accorded.v awarded.v granted.v-d begrudged.v-d assigned.v-d repaid.v-d fined.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {O+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or [[@MV+ & O*n+]]} & ); owing.v delivering.v according.v awarding.v terming.v granting.v begrudging.v assigning.v renaming.v repaying.v dubbing.v entitling.v fining.v: & ; owing.g delivering.g according.g awarding.g terming.g granting.g begrudging.g assigning.g renaming.g repaying.g dubbing.g entitling.g fining.g: ( & ) or ; % extended linking requirements based on the above termed.v-d dubbed.v-d entitled.v-d renamed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {O+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or [[@MV+ & O*n+]]} & ) or ({@E-} & A+); % ditransitive % 'Give' requires both direct *and* indirect object: X gave Y a Z. % 'sent', 'poured': optional indirect object. : ((B- & {O+ or K+}) or or (O+ & K+) or (K+ & ({[[@MV+]]} & O*n+)) or ([[@MV+ & O*n+]])) & {@MV+}; give.v send.v buy.v bring.v lend.v issue.v hand.v pour.v telegraph.v wire.v: (( & ()) or ( & ([()] or ())) or (() & )); gives.v sends.v buys.v brings.v lends.v issues.v hands.v pours.v telegraphs.v wires.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); sent.v-d bought.v-d brought.v-d lent.v-d handed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {O+ or B- or K+ or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or K+ or [[@MV+ & O*n+]]} & ); issued.v-d poured.v-d telegraphed.v-d wired.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ({@E-} & A+) or ( & {O+ or B- or K+ or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or K+ or [[@MV+ & O*n+]]} & ); gave.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; given.v: (( & ()) or ( & (([]) or ())) or (() & )) or ({@E-} & A+) or ( & {O+ or B- or K+ or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or K+ or [[@MV+ & O*n+]]} & ); giving.g sending.g buying.g bringing.g lending.g issuing.g handing.g pouring.g telegraphing.g wiring.g: ( & ) or ; giving.v sending.v buying.v bringing.v lending.v issuing.v handing.v pouring.v telegraphing.v wiring.v: & ; % ditransitive : {(B- & {O+ or K+}) or or (O+ & K+) or (K+ & {{[[@MV+]]} & O*n+}) or ([[@MV+ & O*n+]])} & {@MV+}; pass.v pay.v sell.v deal.v: (( & ()) or ( & ([()] or ())) or (() & )); passes.v pays.v sells.v deals.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); passed.v-d paid.v-d payed.v-d sold.v-d dealt.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {O+ or B- or K+ or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or K+ or [[@MV+ & O*n+]]} & ); passing.g paying.g selling.g dealing.g: ( & ) or ; passing.v paying.v selling.v dealing.v: & ; % ditransitive : {(B- & {O+ or Pa+ or K+}) or or (O+ & (Pa+ or K+)) or (K+ & {{[[@MV+]]} & O*n+}) or ([[@MV+ & O*n+]])} & {@MV+}; call.v shout.v: (( & ()) or ( & ([()] or ())) or (() & )); calls.v shouts.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); called.v-d shouted.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {O+ or B- or K+ or Pa+ or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or K+ or Pa+ or [[@MV+ & O*n+]]} & ); calling.g shouting.g: ( & ) or ; calling.v shouting.v: & ; % Minimal ditransitive extenstion of words.v.6 % ditransitive: "Please paint it lime green" : or ; color.v colour.v paint.v: (( & ()) or ( & ([()] or ())) or (() & )); colors.v colours.v paints.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); colored.v-d coloured.v-d painted.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {O+ or K+} & {@MV+}) or ({K+} & ) or ({@E-} & A+); coloring.v colouring.v painting.v: ( & ) or or ; coloring.g colouring.g painting.g: ( & ) or ; % ditransitive % Writing -- direct and indirect object are optional: % 'he wrote' 'he wrote a letter' 'he wrote me a letter' 'he wrote me' % 'he wrote me that S' but '*he drew me that S' : ({(B- & {O+ or K+}) or or (O+ & K+) or (K+ & {{[[@MV+]]} & O*n+}) or ([[@MV+ & O*n+]])} & {@MV+}) or ({@MV+} & (TH+ or Ce+)); write.v charge.v draw.v: (( & ()) or ( & ([()] or ())) or (() & )); writes.v reads.v charges.v draws.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); wrote.v-d drew.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; read.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & ) or ( & {O+ or B- or K+ or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or K+ or [[@MV+ & O*n+]]} & ); charged.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {O+ or B- or K+ or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or K+ or [[@MV+ & O*n+]]} & ); written.v drawn.v: (( & ()) or ( & (([]) or ())) or (() & )) or ( & {O+ or B- or K+ or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or K+ or [[@MV+ & O*n+]]} & ) or ({@E-} & A+); writing.g reading.g charging.g drawing.g: ( & ) or ; writing.v reading.v charging.v drawing.v: & ; % ditransitive % Singing: if there's an indirect object, then a direct object is % mandatory: '*she sang me' % but then: 'she sang soprano' : ({(B- & {O+ or K+}) or or (O+ & K+) or (K+ & {{[[@MV+]]} & O*n+}) or ([[@MV+ & O*n+]])} & {@MV+}); sing.v dance.v cry.v: (( & ()) or ( & ([()] or ())) or (() & )); sings.v dances.v cries.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); sang.v-d danced.v-d cried.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; sung.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; singing.g dancing.g crying.g: ( & ) or ; singing.v dancing.v crying.v: & ; % : ; % shout.v: VERB_PLI(); % shouts.v: VERB_S_T(); % shouted.v: VERB_SP_T(); % shouting.g: ( & ) or ; % shouting.v: & ; % ditransitive : (( or ([[@MV+]] & O*n+)) & {@MV+}) or ((O+ or B-) & {@MV+} & {B- or TOo+}); allow.v: (( & ()) or ( & ([()] or ())) or (() & )); allows.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); allowed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & (({O+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({@MV+} & TO+))) or ({O+ or [[@MV+ & O*n+]] or ({@MV+} & TO+)} & ); allowing.g: ( & ) or ; allowing.v: & ; % ditransitive : ({O+ or B-} & {@MV+} & {B- or TO+ or Ce+ or TH+ or RSe+ or Zs-}) or (( or ([[@MV+ & O*n+]])) & {@MV+}); promise.v: (( & ()) or ( & ([()] or ())) or (() & )); promises.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); promised.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & (({O+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({@MV+} & (TO+ or Ce+ or TH+ or RSe+ or Zs-)))) or ({@E-} & A+) or ({O+ or [[@MV+ & O*n+]] or ({{@MV+} & (TO+ or Ce+ or TH+)})} & ); promising.g: ( & ) or ; promising.v: & ; % ditransitive : ({O+ or B-} & ({@MV+} & (QI+ or Ce+ or TH+ or RSe+ or Zs- or B-))) or (( or (O+ & K+) or (K+ & (B- or ({[[@MV+]]} & O*n+))) or ([[@MV+ & O*n+]]) or [[()]]) & {@MV+}); show.v: (( & ()) or ( & ([()] or ())) or (() & )); shows.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); showed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; shown.v: (( & ()) or ( & (([]) or ())) or (() & )) or ( & (({O+ or K+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({@MV+} & (QI+ or Ce+ or TH+ or RSe+ or Zs-)))) or ({O+ or K+ or [[@MV+ & O*n+]] or ({@MV+} & (QI+ or Ce+ or TH+))} & ); showing.g: ( & ) or ; showing.v: & ; % ditransitive : ((O+ or B-) & ({@MV+} & (QI+ or Ce+ or TH+ or RSe+ or Zs- or B- or TOo+))) or ({ or (B- & {[[@MV+]]} & O*n+) or ([[@MV+ & O*n+]])} & {@MV+}); teach.v: (( & ()) or ( & ([()] or ())) or (() & )); teaches.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); taught.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & (({O+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({@MV+} & (QI+ or Ce+ or TH+ or RSe+ or Zs- or TO+)))) or ({O+ or [[@MV+ & O*n+]] or ({@MV+} & (QI+ or Ce+ or TH+))} & ); teaching.g: ( & ) or ; teaching.v: & ; : ((O+ or B-) & {@MV+} & TOo+); compel.v: (( & ()) or ( & ([()] or ())) or (() & )); compels.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); compelled.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & TO+) or ({@MV+} & TO+ & ); compelling.v: & ; compelling.g: ( & ) or ; : (((O+ or B-) & (({@MV+} & TOo+) or K+ or [()])) or (K+ & O*n+) or ([[{K+} & @MV+ & O*n+]])) & {@MV+}; force.v: (( & ()) or ( & ([()] or ())) or (() & )); forces.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); forced.v-d willed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & ((K+ & {@MV+}) or ({@MV+} & TO+))) or ((K+ or ({@MV+} & TO+)) & ) or ({@E-} & A+); forcing.g: ( & ) or ; forcing.v: & ; % ----------------------------------------- : ((O+ or B-) & {@MV+} & {TOo+}) or ([[@MV+ & O*n+ & {@MV+}]]); design.v permit.v authorize.v use.v cause.v enable.v pressure.v train.v sentence.v prompt.v spur.v disincline.v invite.v reelect.v encourage.v draft.v hire.v entice.v inspire.v aid.v forbid.v employ.v educate.v tempt.v condemn.v commission.v counsel.v induce.v instruct.v license.v incite.v nominate.v destine.v provoke.v challenge.v exhort.v implore.v motivate.v impel.v: (( & ()) or ( & ([()] or ())) or (() & )); designs.v permits.v pressures.v trains.v sentences.v causes.v enables.v authorizes.v uses.v prompts.v spurs.v disinclines.v invites.v reelects.v encourages.v drafts.v hires.v entices.v inspires.v aids.v forbids.v employs.v educates.v tempts.v condemns.v commissions.v counsels.v induces.v instructs.v licenses.v incites.v nominates.v destines.v provokes.v challenges.v exhorts.v implores.v motivates.v impels.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); designed.v-d permitted.v-d pressured.v-d trained.v-d sentenced.v-d caused.v-d enabled.v-d authorized.v-d prompted.v-d spurred.v-d invited.v-d disinclined.v-d reelected.v-d encouraged.v-d drafted.v-d hired.v-d enticed.v-d inspired.v-d aided.v-d employed.v-d educated.v-d tempted.v-d condemned.v-d commissioned.v-d counseled.v-d induced.v-d instructed.v-d licensed.v-d incited.v-d nominated.v-d destined.v-d provoked.v-d challenged.v-d exhorted.v-d implored.v-d motivated.v-d impelled.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {TO+}) or ({@E-} & A+) or ({{@MV+} & TO+} & ); forbade.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or ; forbidden.v: (( & ()) or ( & (([]) or ())) or (() & )) or ( & {TO+}) or ({@E-} & A+) or ({{@MV+} & TO+} & ); designing.g permitting.g pressuring.g causing.g enabling.g training.g sentencing.g authorizing.g prompting.g spurring.g inviting.g disinclining.g reelecting.g encouraging.g drafting.g hiring.g enticing.g inspiring.g aiding.g employing.g educating.g tempting.g condemning.g commissioning.g counseling.g inducing.g instructing.g licensing.g inciting.g nominating.g destining.g provoking.g challenging.g exhorting.g imploring.g motivating.g impelling.g: ( & ) or ; designing.v permitting.v pressuring.v causing.v enabling.v training.v sentencing.v authorizing.v using.v prompting.v disinclining.v spurring.v inviting.v reelecting.v encouraging.v drafting.v hiring.v enticing.v inspiring.v aiding.v employing.v educating.v tempting.v condemning.v commissioning.v counseling.v inducing.v instructing.v licensing.v inciting.v nominating.v destining.v provoking.v challenging.v exhorting.v imploring.v motivating.v impelling.v: & ; used.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {TOo+}) or ( & TO+) or ({@MV+} & {TOo+} & ) or ({@E-} & A+); using.g: ( & ( or MVs-)) or ; % -------------------------------------------------- : ((O+ or B-) & (({@MV+} & {TOo+}) or ({[[@MV+]]} & (O*n+ or TI+)))) or ([[@MV+ & O*n+ & {@MV+}]]); elect.v appoint.v: (( & ()) or ( & ([()] or ())) or (() & )); elects.v appoints.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); elected.v-d appointed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & (({B- or (O+ or TI+ or [[@MV+ & (O*n+ or TI+)]])} & {@MV+}) or ({@MV+} & TO+))) or (({O+ or TI+ or [[@MV+ & (O*n+ or TI+)]]} or ({@MV+} & TO+)) & ) or ({@E-} & A+); electing.g appointing.g: ( & ) or ; electing.v appointing.v: & ; % vc-name is a ditransitive extension of vc-trans (with an extra TI+) : ( or (O+ & {[[@MV+]]} & TI+) or (B- & {O+ or TI+}) or ([[@MV+ & O*n+]])) & {@MV+}; name.v designate.v label.v: (( & ()) or ( & ([()] or ())) or (() & )); names.v designates.v labels.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); named.v-d designated.v-d labelled.v-d labeled.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & ({B- or (O+ or TI+ or [[@MV+ & (O*n+ or TI+)]])}) & {@MV+}) or ({O+ or TI+ or [[@MV+ & (O*n+ or TI+)]]} & ) or ({@E-} & A+); naming.g designating.g labelling.g labeling.g: ( & ) or ; naming.v designating.v labelling.v labeling.v: & ; % optionally ditransitive, modeled on "name.v" : or ; tag.v: (( & ()) or ( & ([()] or ())) or (() & )); tags.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); tagged.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or (( & ({B- or (O+ or TI+ or [[@MV+ & (O*n+ or TI+)]])}) & {@MV+}) or ) or ({O+ or TI+ or [[@MV+ & (O*n+ or TI+)]]} & ) or ({@E-} & A+); tagging.g: ( & ) or ({@E-} & A+) or ; tagging.v: & ; : {((O+ or B-) & {@MV+} & {TOo+}) or @MV+ or ([[@MV+ & O*n+ & {@MV+}]])}; program.v oblige.v: (( & ()) or ( & ([()] or ())) or (() & )); programs.v obliges.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); programed.v-d programmed.v-d obliged.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {TO+}) or ({@E-} & A+) or ({{@MV+} & TO+} & ); programing.g programming.g obliging.g: ( & ) or ; programing.v programming.v obliging.v: & ; : ((O+ or B-) & {@MV+} & {TOo+ or TH+ or Ce+}) or ([[@MV+ & O*n+ & {@MV+}]]); convince.v persuade.v: (( & ()) or ( & ([()] or ())) or (() & )); convinces.v persuades.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); convinced.v-d persuaded.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {TO+ or TH+ or Ce+}) or ({{@MV+} & (TO+ or TH+ or Ce+)} & ); convincing.g persuading.g: ( & ) or ; convincing.v persuading.v: & ; % K+ is for "tell him off" % bare MVp+ for "Today, we will tell about ..." % OF+ for "They have told of the soldiers' fear" % (QI+ & {MV+}): "I did not tell why until recently" : (((O+ & {O*n+ or K+}) or B-) & {@MV+} & {TH+ or Ce+ or RSe+ or Zs- or TOo+ or QI+ or BW-}) or OF+ or (QI+ & {MV+}) or ([[@MV+ & {O*n+} & {@MV+}]]); tell.v: (( & ()) or ( & ([()] or ())) or (() & )); tell.w: {@E-} & I- & {@MV+} & (QI+ or TH+ or Ce+ or RSe+ or Zs-); tells.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); told.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {TH+ or Ce+ or RSe+ or Zs- or TO+ or QI+ or BW-}) or ( & O+ & {@MV+}) or ({{@MV+} & (Ce+ or TO+ or QI+ or TH+)} & ); telling.g: ( & ) or ; telling.v: & ; % (QI+ & {MV+}): "I did not ask why until recently" : ({(O+ & {O*n+}) or B-} & {@MV+} & {TS+ or TOo+ or (QI+ & {MV+}) or BW-}) or ([[@MV+ & O*n+ & {@MV+}]]); ask.v: (( & ()) or ( & ([()] or ())) or (() & )); asks.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); asked.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {TO+ or QI+ or BW- or TH+ or TS+}) or ( & O+ & {@MV+}) or ({{@MV+} & (TO+ or QI+ or TH+ or TS+)} & ); asking.g: ( & ) or ; asking.v: & ; : ({O+ or B-} & {@MV+} & {TO+ or I+}) or ([[@MV+ & O*n+ & {@MV+}]]); help.v: (( & ()) or ( & ([()] or ())) or (() & )); helps.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); helped.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {TO+}) or ({{@MV+} & TO+} & ); helping.g: ( & ) or ; helping.v: & ; : ((O+ or B-) & {@MV+} & (TOo+ or TH+ or Ce+ or (OF+ & {@MV+}))) or ([[@MV+ & O*n+ & {@MV+}]]); remind.v: (( & ()) or ( & ([()] or ())) or (() & )); reminds.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); reminded.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {TO+ or TH+ or Ce+ or (OF+ & {@MV+})}) or ({{@MV+} & (Ce+ or TO+ or TH+ or (OF+ & {@MV+}))} & ); reminding.g: ( & ) or ; reminding.v: & ; : ((O+ or B-) & {@MV+} & {(OF+ & {@MV+}) or TH+ or Zs- or Ce+}) or ([[@MV+ & O*n+ & {@MV+}]]); inform.v reassure.v alert.v guarantee.v notify.v forewarn.v: (( & ()) or ( & ([()] or ())) or (() & )); informs.v reassures.v alerts.v guarantees.v notifies.v forewarns.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); informed.v-d reassured.v-d alerted.v-d guaranteed.v-d notified.v-d forewarned.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {Ce+ or TH+ or Zs- or (OF+ & {@MV+})}) or ({{@MV+} & (Ce+ or TH+ or OF+)} & ) or ({@E-} & A+); informing.g reassuring.g alerting.g guaranteeing.g notifying.g forewarning.g: ( & ) or ; informing.v reassuring.v alerting.v guaranteeing.v notifying.v forewarning.v: & ; : ((O+ or B-) & {@MV+} & {(OF+ & {@MV+}) or TH+ or Zs- or Ce+}) or ([[@MV+ & O*n+ & {@MV+}]]) or ({@MV+} & (TH+ or Ce+)); assure.v: (( & ()) or ( & ([()] or ())) or (() & )); assures.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); assured.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {(OF+ & {@MV+}) or Ce+ or TH+ or Zs-}) or ({{@MV+} & (Ce+ or TH+ or OF+)} & ); assuring.g: ( & ) or ; assuring.v: & ; : ((B- or O+) & {@MV+} & {I+ or ((K+ or Pp+) & {@MV+})}) or ([[@MV+ & O*n+ & {@MV+}]]); let.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & ) or ( & ((K+ or Pp+) & {@MV+})) or ((K+ or Pp+) & ); lets.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); letting.g: ( & ) or ; letting.v: & ; let's let’s: ({Ic-} & Wi- & {N+} & I+) or ({Ic-} & Wi- & N+); : ((B- or O+) & {@MV+} & {I*j+ or Pg+}) or ([[@MV+ & O*n+ & {@MV+}]]) or {@MV+}; watch.v: (( & ()) or ( & ([()] or ())) or (() & )); watches.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); watched.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ; watching.g: ( & ) or ; watching.v: & ; : ((B- or O+) & {@MV+} & {Pg+}) or ([[@MV+ & O*n+ & {@MV+}]]); appreciate.v spend.v: (( & ()) or ( & ([()] or ())) or (() & )); appreciates.v spends.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); appreciated.v-d spent.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {Pg+}) or ({{@MV+} & Pg+} & ); appreciating.g spending.g: ( & ) or ; appreciating.v spending.v: & ; % Pa**j is used for predicative adjectives % ditransitive : ((B- or O+ or OX+) & {({@MV+} & {I*j+ or Pa**j+ or B-}) or ((K+ or AF-) & {@MV+})}) or (( or (K+ & {[[@MV+]]} & O*n+) or K+ or Vm+ or ([[{K+} & @MV+ & O*n+]])) & {@MV+}) or [[()]]; make.v: (( & ()) or ( & ([()] or ())) or (() & )); makes.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); made.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & (({@MV+} & Pa+) or ({K+} & {@MV+}))) or ({({@MV+} & Pa+) or K+} & ); built_of built_up_of composed_of constructed_of formed_of made_of made_up_of: ( & (B- or O+) & {@MV+}) or (O+ & ); making.g: ( & ) or ; making.v: & ; : (((B- or O+) & {({@MV+} & Pa+) or AF-}) or ([[@MV+ & O*n+]])) & {@MV+}; render.v deem.v: (( & ()) or ( & ([()] or ())) or (() & )); renders.v deems.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); rendered.v-d deemed.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {Pa+ or AF-}) or ({{@MV+} & Pa+} & ); rendering.g deeming.g: ( & ) or ; rendering.v deeming.v: & ; : (((O+ or B-) & {{@MV+} & OF+}) or ([[@MV+ & O*n+]])) & {@MV+}; deprive.v accuse.v acquit.v purge.v disabuse.v exonerate.v absolve.v rob.v convict.v: (( & ()) or ( & ([()] or ())) or (() & )); deprives.v accuses.v acquits.v purges.v disabuses.v exonerates.v absolves.v robs.v convicts.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); deprived.v accused.v acquitted.v purged.v disabused.v exonerated.v absolved.v robbed.v convicted.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {OF+} & {@MV+}) or ({@E-} & A+) or ({{@MV+} & OF+} & ); depriving.g accusing.g acquitting.g purging.g disabusing.g exonerating.g absolving.g robbing.g convicting.g: ( & ) or ; depriving.v accusing.v acquitting.v purging.v disabusing.v exonerating.v absolving.v robbing.v convicting.v: & ; : (((O+ or B-) & {({@MV+} & OF+) or K+}) or ({K+} & O*n+) or K+ or ([[{K+} & @MV+ & O*n+]])) & {@MV+}; clear.v: (( & ()) or ( & ([()] or ())) or (() & )); clears.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); cleared.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {({@MV+} & OF+) or K+} & {@MV+}) or ({K+ or ({@MV+} & OF+)} & ); clearing.g: ( & ) or ; clearing.v: & ; : ({(O+ & {O*n+}) or (B- & {O+})} & {@MV+} & {TH+ or Ce+ or RSe+}) or ([[@MV+ & O*n+ & {@MV+}]]); bet.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & ) or ( & {O+ or B-} & {@MV+} & {TH+ or Ce+ or RSe+ or @MV+}); bets.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); betted.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {O+ or B-} & {@MV+} & {TH+ or Ce+ or RSe+ or @MV+}) or ({O- or [[@MV+ & O*n+]] or TH+ or Ce+} & ); betting.g: ( & ) or ; betting.v: & ; : ({@MV+} & TO+) or ((O+ or B-) & {@MV+} & {THi+}) or ([[@MV+ & O*n+ & {@MV+}]]); bother.v: (( & ()) or ( & ([()] or ())) or (() & )) or ; bothers.v: & ; bothered.v-d: ( & ) or or ; bothering.v: & ; bothering.g: ( & ) or ; : ((O+ or B-) & {@MV+} & {THi+}) or ([[@MV+ & O*n+]]); surprise.v alarm.v amaze.v amuse.v astonish.v astound.v excite.v depress.v disgust.v distress.v dismay.v irritate.v embarrass.v annoy.v: (( & ()) or ( & ([()] or ())) or (() & )) or ; surprises.v alarms.v amazes.v amuses.v astonishes.v astounds.v excites.v depresses.v disgusts.v distresses.v dismays.v irritates.v embarrasses.v annoys.v: & ; surprised.v alarmed.v amazed.v amused.v astonished.v astounded.v excited.v depressed.v disgusted.v distressed.v dismayed.v irritated.v embarrassed.v annoyed.v-d: ( & ) or or ; surprising.v alarming.v amazing.v amusing.v astonishing.v astounding.v exciting.v depressing.v disgusting.v distressing.v dismaying.v embarrassing.v annoying.v: & ; surprising.g alarming.g amazing.g amusing.g astonishing.g astounding.g exciting.g depressing.g disgusting.g distressing.g dismaying.g embarrassing.g annoying.g: ( & ) or ; : ((O+ or B- or [[@MV+ & O*n+]]) & {@MV+}) or ((O+ or OX+ or B-) & {@MV+} & (TOo+ or [[Pa+]])) or ({@MV+} & (TOf+ or TH+ or Ce+ or RSe+ or Zs- or Pa+)); prove.v: & ; proves.v: & ; proved.v-d: ( & ) or ( & {THi+ or TOf+}) or ({@E-} & A+) or ({{@MV+} & Pa+} & ); proven.v: ( & ) or ( & {THi+ or TOf+ or Pa+}) or ({@E-} & A+) or ({{@MV+} & Pa+} & ); proving.g: ( & ) or ; proving.v: & ; : ((O+ or B- or [[@MV+ & O*n+]]) & {@MV+}) or ({@MV+} & (Pg+ or TH+ or Ce+ or RSe+ or Zs- or TS+ or ((SI*j+ or SFI**j+) & I*j+))); suggest.v anticipate.v recommend.v: (( & ()) or ( & ([()] or ())) or (() & )); suggests.v anticipates.v recommends.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); suggested.v-d anticipated.v-d recommended.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {THi+ or TSi+ or Z-}) or ({@E-} & A+) or ; suggesting.g anticipating.g recommending.g: ( & ) or ; suggesting.v anticipating.v recommending.v: & ; % ditransitive : (( or (B- & {O+}) or [[@MV+ & O*n+]]) & {@MV+}) or ({@MV+} & (Pg+ or TH+ or Ce+ or RSe+)); deny.v: (( & ()) or ( & ([()] or ())) or (() & )); denies.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); denied.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {O+ or B- or [[@MV+ & O*n+]]} & {@MV+}) or ({O+ or ([[@MV+ & O*n+]])} & ); denying.g: ( & ) or ; denying.v: & ; : ((O+ or B-) & {@MV+} & {AZ+}) or ({@MV+} & (QI+ or Z-)) or ([[@MV+ & O*n+ & {@MV+}]]); describe.v: (( & ()) or ( & ([()] or ())) or (() & )); describes.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); described.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {AZ+ or Z-}) or ({@E-} & A+) or ({@MV+} & {AZ+} & ); describing.g: ( & ) or ; describing.v: & ; : ((O+ or B-) & {@MV+} & {AZ+}) or ([[@MV+ & O*n+ & {@MV+}]]); portray.v depict.v regard.v view.v characterize.v: (( & ()) or ( & ([()] or ())) or (() & )); portrays.v depicts.v regards.v views.v characterizes.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); portrayed.v-d depicted.v-d regarded.v-d viewed.v-d characterized.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & {AZ+}) or ({@E-} & A+) or ({@MV+} & {AZ+} & ); portraying.g depicting.g regarding.g viewing.g characterizing.g: ( & ) or ; portraying.v depicting.v regarding.v viewing.v characterizing.v: & ; % ------------------------------------------------------------------------------- % IDIOMATIC VERBS do_so take_place show_up take_office do_battle give_way make_way take_part catch_up catch_on file_suit pick_up take_off break_free take_over jump_ship see_fit take_note: (( & ()) or ( & ([()] or ())) or (() & )); does_so takes_place shows_up pleads_guilty pleads_innocent takes_office does_battle gives_way makes_way takes_part catches_up catches_on files_suit picks_up takes_off breaks_free takes_over jumps_ship sees_fit lets_go takes_note comes_true comes_clean comes_of_age: (( & ()) or ( & (([]) or ())) or (() & ) or ); showed_up pleaded_guilty pleaded_innocent made_way caught_up caught_on filed_suit picked_up jumped_ship: (( & ()) or ( & (([]) or ())) or (() & )); plead_guilty plead_innocent: (( & ()) or ( & (([]) or ())) or (() & )) or ( & ); let_go: (( & ()) or ( & (([]) or ())) or (() & )) or ( & ) or ; did_so took_place took_office did_battle gave_way took_part took_off broke_free took_over saw_fit took_note came_true came_clean came_of_age: (( & ()) or ( & (([]) or ())) or (() & )); done_so taken_place shown_up taken_office done_battle given_way taken_part taken_off broken_free taken_over seen_fit taken_note: (( & ()) or ( & (([]) or ())) or (() & )); come_true come_clean come_of_age: (( & ()) or ( & ([()] or ())) or (() & )) or (( & ()) or ( & (([]) or ())) or (() & )); doing_so taking_place showing_up pleading_guilty pleading_innocent taking_office doing_battle giving_way making_way taking_part catching_up catching_on filing_suit picking_up taking_off breaking_free taking_over jumping_ship seeing_fit letting_go taking_note coming_true coming_clean coming_of_age: ( & ) or ; : (O+ or B- or [[@MV+ & O*n+]]) & {@MV+}; allow_for bring_about get_rid_of let_go_of take_note_of: (( & ()) or ( & ([()] or ())) or (() & )); puts_up_with allows_for brings_about gets_rid_of lets_go_of takes_note_of: (( & ()) or ( & (([]) or ())) or (() & ) or ); put_up_with let_go_of: (( & ()) or ( & (([]) or ())) or (() & )) or or ( & ); allowed_for brought_about got_rid_of took_note_of: (( & ()) or ( & (([]) or ())) or (() & )) or ; gotten_rid_of taken_note_of: (( & ()) or ( & (([]) or ())) or (() & )); putting_up_with allowing_for bringing_about getting_rid_of letting_go_of taking_note_of: ( & ( or )) or ; : {[@MV+]} & TH+; take_it make_out point_out give_notice serve_notice: (( & ()) or ( & ([()] or ())) or (() & )); takes_it makes_out points_out gives_notice serves_notice: (( & ()) or ( & ([()] or ())) or (() & )); made_out pointed_out served_notice: (( & ()) or ( & (([]) or ())) or (() & )) or or ; took_it gave_notice: (( & ()) or ( & (([]) or ())) or (() & )); taken_it given_notice: (( & ()) or ( & (([]) or ())) or (() & )); taking_it making_out pointing_out giving_notice serving_notice: ( & ) or ; : {[@MV+]} & THi+; turn_out: (( & ()) or ( & ([()] or ())) or (() & )) or ; turns_out: & ; turned_out: & ; turning_out: & ; % (QI+ & {MV+}): "I did not figure out why until recently" : {[@MV+]} & (TH+ or (QI+ & {MV+}) or Ce+); find_out figure_out: (( & ()) or ( & ([()] or ())) or (() & )); finds_out figures_out: (( & ()) or ( & ([()] or ())) or (() & )); found_out figured_out: (( & ()) or ( & (([]) or ())) or (() & )) or or ; finding_out figuring_out: ( & ) or ; : {Pg+ or @MV+}; keep_on give_up go_around: (( & ()) or ( & ([()] or ())) or (() & )) or ; keeps_on gives_up goes_around: & ; kept_on: & ; gave_up went_around: & ; given_up gone_around: & ; keeping_on giving_up going_around: ( & ) or ; % XXX TODO need to provide and-able links for these. : Pg+ or Pa+ or ({AF-} & {@MV+}); end_up: (( & ()) or ( & ([()] or ())) or (() & )) or ; ends_up: & ; ended_up: & ; ending_up: ( & ) or ; /en/words/words.v.1.p: or ; % two-word passives % done_for accounted_for adhered_to arrived_at barked_at belched_at catered_to : {@MV+} & (((Xd- or Xq-) & (Xc+ or ) & (COq+ or (CP- & {CC+}) or Eq+)) or [(Xc+ or Xe+) & Ce+]); : {@MV+} & (((Xd- or Xq-) & (Xc+ or ) & (COq+ or (CPx- & {CC+}) or Eq+)) or [(Xc+ or Xe+) & Ce+]); : {@MV+} & (Xd- or Xq-) & (Xc+ or ) & (COqi+ or (CPi- & {CC+}) or Eqi+); % paraphrasing verbs like "say", "reply" % acknowledge.q add.q admit.q affirm.q agree.q announce.q argue.q /en/words/words.v.10.1: [[{@E-} & (((Sp- or I-) & ) or (SIpj+ & ))]]; /en/words/words.v.10.2: [[{@E-} & ((Ss- & ) or (SIsj+ & ))]]; /en/words/words.v.10.3: or ({@E-} & (((S- or PP-) & ) or (SI*j+ & ) or [[Pvf- & ]])); read.q-d: or ({@E-} & (((S- or I- or PP-) & ) or (SI*j+ & ))); wrote.q-d: or ({@E-} & ((S- & ) or (SI*j+ & ))); written.q: {@E-} & PP- & ; /en/words/words.v.10.4: [[{@E-} & Pg- & ]]; seem.q appear.q: [[{@E-} & (SFp- or If-) & ]]; seems.q appears.q: [[{@E-} & SFs- & ]]; seemed.q-d appeared.q-d: or ({@E-} & (SF- or PPf-) & ); seeming.q appearing.q: [[{@E-} & Pgf- & ]]; say.q: {@E-} & (((Sp- or I-) & ) or (SIpj+ & )); says.q: {@E-} & ((Ss- & ) or (SIsj+ & )); said.q-d: or ({@E-} & (((S- or PP-) & ) or (SI*j+ & ))); saying.q: {@E-} & Pg- & ; tell.q: [[{@E-} & (Sp- or I- or SIpj+) & O+ & ]]; tells.q: [[{@E-} & (Ss- or SIsj+) & O+ & ]]; told.q-d: or ({@E-} & (((S- or PP- or SI*j+) & O+) or Pv-) & ); telling.q: [[{@E-} & Pg- & O+ & ]]; ask.q: [[{@E-} & (((Sp- or I-) & {O+}) or SIpj+) & ]]; asks.q: [[{@E-} & ((Ss- & {O+}) or SIsj+) & ]]; asked.q-d: or ({@E-} & (((S- or PP-) & {O+}) or Pv- or SI*j+) & ); asking.q: [[{@E-} & Pg- & {O+} & ]]; % idiomatic "voted yes/no" expressions using the V link. : Vv+ & {@MV+}; say.w vote.w: (( & ()) or ( & ([()] or ())) or (() & )); says.w votes.w: (( & ()) or ( & ([()] or ())) or (() & )); said.w-d voted.w-d: (( & ()) or ( & (([]) or ())) or (() & )); saying.w voting.w: ( & ); yes.misc-vote no.misc-vote: Vv-; double.v triple.v quadruple.v quintuple.v: {EN-} & (( & ()) or ( & ([()] or ())) or (() & )); doubles.v triples.v quadruples.v quintuples.v: {EN-} & (( & ()) or ( & (([]) or ())) or (() & ) or ); doubled.v-d tripled.v-d quadrupled.v-d quintupled.v-d: {EN-} & ( (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+) or ); doubling.v tripling.v quadrupling.v quintupling.v: {EN-} & ( & ); doubling.g tripling.g quadrupling.g quintupling.g: {EN-} & (( & ) or ({@E-} & A+) or ); % =================================================================== % PREPOSITIONS % conjoin preps: "prep and prep": "the coverage on TV and on the radio..." : MJrp- or MJlp+; % alter-preps: "it is somewhere in or near the house" % The "or" must take a prep object. % XXX TODO: most preps below need this rule. : MJrj- or MJlj+; : or [Mp-] or Pp- or MVp- or [({Xc+ & {Xd-}} & CO+)] or (Xd- & Xc+ & (MX*x- or MVx-)); : or (Cs+ & (Mj- or (Xd- & Xc+ & MX*j-))) or (Wj- & Qd+) or [Wq- & PF+]; : or [Mpn-] or Pp- or MVpn- or [({Xc+ & {Xd-}} & CO*n+)] or (Xd- & Xc+ & (MX- or MVx-)); : or [Mp-] or Pp- or MVa- or [({Xc+ & {Xd-}} & CO+)] or (Xd- & Xc+ & (MX*x- or MVx-)); under beneath: ({Yd-} & {JQ+} & J+ & ( or FM-)) or (MVp- & B-) or (Yd- & Pp-); below above behind.p: ({Yd-} & {{JQ+} & J+} & ( or FM-)) or (MVp- & B-); within: ({JQ+} & J+ & ) or (MVp- & B-); during: ({JQ+} & J+ & ( or UN-)) or (MVp- & B-); from: ({Yd-} & {JQ+} & (FM+ or J+ or Mgp+) & ) or (MVp- & B-) or MVp- or NIr+; at toward towards without: ({JQ+} & (J+ or Mgp+) & ) or (MVp- & B-); % % XXX fixme: MVp- & J+ is wrong: "*I saw John except Fred" except but.misc-ex: ({JQ+} & (J+ or Mgp+) & ) or (MVp- & B-) or ((MVp+ or TO+) & ); against beyond beside: ({JQ+} & (J+ or Mgp+) & ) or (MVp- & B-); between: ({JQ+} & (J+ or Mgp+) & ) or (MVp- & B-) or NIr+; with: ({JQ+} & (J+ or Mgp+) & ( or RJrv-)) or (Jw+ & (RJrj- or RJlj+)) or (MVp- & B-) or (J+ & {EBm+} & ([P+] or [[O*n+]]) & ([({Xc+ & {Xd-}} & CO+)] or MVp- or (Xd- & Xc+ & (MX*x- or MVx-)))); among: ({JQ+} & (J+ or Mgp+) & ( or FM-)) or (MVp- & B-); for.p: ({JQ+} & (J+ or Mgp+ or TI+) & ) or (J+ & (RJrj- or RJlj+)) or (MVp- & B-) or (MG- & JG+) or (MVp- & FL+); into: ({JQ+} & (J+ or Mgp+ or QI+) & ) or (MVp- & B-); about: ({JQ+} & (J+ or Mgp+ or QI+) & ) or EN+ or EZ+ or (MVp- & B-) or (TOf+ & (Mp- or MVp- or Pp-)) or MVa-; through.r: ({JQ+} & J+ & ( or FM-)) or (MVp- & B-); : ({JQ+} & J+ & ( or FM-)) or K- or (MVp- & B-); across along: ; off: or (MVp+ & {Xc+ & {Xd-}} & COp+); past.p: ({Yd-} & {JQ+} & J+ & ( or FM-)) or K- or (MVp- & B-); around: or ({JQ+} & (J+ or Mgp+) & ( or FM-)) or K- or (MVp- & B-) or [EN+] or MVa-; out up.r down.r: ({Yd-} & {JQ+} & ([J+] or [[MVp+]]) & (({Xd- & Xc+} & MVa-) or FM-)) or K- or ({Yd-} & Pp-) or (MVp- & B-); by: or ({JQ+} & (J+ or Mgp+ or JT+) & ( or FM-)) or K- or (MVp- & B-); in: or ({JQ+} & (J+ or Mgp+ or IN+) & ( or FM-)) or K- or (MVp- & B-) or (MG- & JG+); on upon: or ({JQ+} & (J+ or Mgp+ or ON+ or [QI+]) & ) or K- or (MVp- & B-); over: ({Yd-} & {JQ+} & (J+ or Mgp+ or QI+ or [[MVp+]]) & ( or FM-)) or K- or EN+ or (MVp- & B-) or (Yd- & Pp-); just_over just_under well_over: EN+; % XXX original LG recommends using the LI link, however the % sort of clobbers this. Should this be "fixed"? like.p: ({[EA-]} & (((J+ or Mgp+ or [[Mp+ or MVs+]]) & ) or (Vf- & Mgp+) or (LI- & (J+ or Cs+)))) or (MVp- & B-); unlike: J+ & (MVp- or Pp- or [({Xc+ & {Xd-}} & CO+)] or (Xd- & Xc+ & (E+ or MVx-))); of: ({JQ+} & (J+ or Mgp+ or QI+) & (Mp- or OF- or (Xd- & Xc+ & MX*x-) or (Cs+ & (Mj- or (Xd- & Xc+ & MX*j-))) or [[({Xc+ & {Xd-}} & CO+)]])) or ((OF- or Mp-) & B-) or (MG- & JG+) or (NF- & NJ+) or (Mp- & TI+); of_them: (ND- or MF-) & (J+ or Pa+) & Xd- & (MX*x- or MVx-) & Xc+; % MX-PHRASE: The blah, to be blahed, will be blah. % TO- & Xc+: "I'd like to, I want to." (null infinitive) to.r: ({@E-} & {NT-} & I+ & (TO- or [{Xd- & Xc+} & MVi-] or or [] or [[R-]] or (SFsx+ & ))) or (TO- & Xc+) or I*a+ or ({JQ+} & (J+ or Mgp+) & ) or VJ+ or [MVp- & B-]; so_as_to: I+ & {Xd- & Xc+} & MVi-; besides: {J+ or Mgp+} & ([({Xc+ & {Xd-}} & CO+)] or MVp- or [Wq- & PF+]); throughout: {J+} & ([({Xc+ & {Xd-}} & CO+)] or MVp- or [Wq- & PF+]); inside.r outside.r underneath alongside: {J+} & ( or FM-); amid plus.p minus.p via onto: J+ & ( or [Wq- & PF+]); versus: (J+ & Mp-) or (G- & G+); vs: {Xi+} & G- & G+; worth.p: (Mp- & (J+ or OF+)) or (Paf- & Mgp+) or (Pa- & (J+ or B-)); opposite.p: J+ & ; better_off worse_off: {EC-} & Pa- & {Pg+}; off_of out_of: ({JQ+} & J+ & ) or (MVp- & B-); despite notwithstanding other_than apart_from aside_from: (J+ or Mgp+) & (MVp- or (Xd- & Xc+ & (MVx- or E+)) or [({Xc+ & {Xd-}} & CO+)]); rather_than: (J+ or Mgp+ or Mp+ or I+) & ((Xd- & Xc+ & (E+ or MVx-)) or MVp- or [({Xc+ & {Xd-}} & CO+)]); instead_of because_of prior_to: (J+ or Mgp+) & (MVp- or Pp- or [({Xc+ & {Xd-}} & CO+)] or (Xd- & Xc+ & (E+ or MVx-))); as_well_as: (J+ or Mgp+) & (MG- or Mp- or MVp- or [({Xc+ & {Xd-}} & CO+)] or (Xd- & Xc+ & (MX*x- or MVx-))); according_to as_of in_case_of in_response_to unbeknownst_to thanks_to: J+ & (MVp- or Pp- or [({Xc+ & {Xd-}} & CO+)] or (Xd- & Xc+ & (E+ or MVx-))); due_to along_with en_route_to in_connection_with: J+ & ; regardless_of as_to irrespective_of: (J+ or QI+) & (MVp- or [({Xc+ & {Xd-}} & CO+)] or (Xd- & Xc+ & (E+ or MVx-))); overhead.r midway in_public in_private en_route a_la_mode a_la_carte side_by_side from_coast_to_coast: ; abroad upstairs.r downstairs.r overseas.r next_door: or FM-; elsewhere: or FM- or [[J-]]; ahead at_hand in_store in_reverse in_place in_town under_way in_office out_of_office out_of_reach in_reach within_reach on_guard at_large in_hand on_hand for_free on_file in_line on_line in_loco_parentis on_board en_route in_bed out_of_bed on_strike on_top from_afar at_stake in_question at_issue on_lease on_trial in_league in_cahoots in_front in_back on_break on_camera in_command in_concert by_association in_association on_deck on_disk on_file on_foot on_location on_line online.r: MVp- or Mp- or Pp- or (Xc+ & Xd- & (MX*x- or MVx-)); uptown downtown.r offshore.r underground.r out_of_town: MVp- or Mp- or Pp- or FM- or (Xc+ & Xd- & MVx-); : MVp- or Pp- or (Xc+ & Xd- & MVx-); forward.r backward forwards.r backwards sideways ashore abreast aft half-way two-fold downhill southward underfoot westward eastward northward overnight.r on_hold on_track in_situ in_toto off_balance in_check on_course off_course under_oath at_end by_example on_holiday by_invitation on_patrol on_stage in_step in_tempo on_schedule behind_schedule ahead_of_schedule for_good for_keeps in_phase out_of_step out_of_phase in_tune out_of_tune in_session out_of_session in_phase neck_and_neck under_contract: ; /en/words/words-medical.prep.1: ; % 5' 3' are DNA ends upstream downstream 5' 3': A+ or NIfp+ or NItp- or ({Yd- or EZ- or EE- or EI-} & {MVp+ or OF+} & (({Xc+ & Xd-} & (Ma- or MJra-)) or MJra+ or (Wq- & PF+) or MVp- or Pp- or FM- or (Xc+ & Xd- & (MVx- or MX-)))); %upstream downstream 3' 5': %A+ or %((EZ- or Y-) & (MVp+ or OF+) & (MV- or MV+)) or %(EI- or EZ- or Y- & Ma- & (MVp+ or OF+)) or %(EE- or Y- & (FM- or TO-) & MVp+ or OF+); indoors outdoors underwater.r: MVp- or Pp- or FM- or (Xc+ & Xd- & MVx-); everywhere anywhere: {EL+} & ((Cs+ & (({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & MVs-))) or (MVp- or Pp- or FM- or (Xc+ & Xd- & MVx-))); somewhere someplace: ({EL+} & (MVp- or Pp- or FM- or [({Xc+ & {Xd-}} & CO+)] or (Xc+ & Xd- & MVx-)) & Mp+) or ({EL+} & {Xc+ & {Xd-}} & MVp+ & {Xc+ & {Xd-}} & COp+) or [[{EL+} & {Xc+ & {Xd-}} & CO+]]; nowhere: {EL+} & (MVp- or Pp- or FM- or (Xc+ & Xd- & MVx-)); as_usual to_date on_average in_turn so_far in_particular in_response in_general thus_far in_reply: MVp- or Mp- or ({Xc+ & {Xd-}} & CO+) or (Xc+ & Xd- & (MVx- or MX*x-)); recently: {EE- or EF+} & (({Xd- & Xc+} & MVp-) or Pp- or E+ or ({Xc+ & {Xd-}} & CO+) or EB- or JT- or Ca+ or Qe+ or [[Mp-]]); now.r: ({Xd- & Xc+} & MVp-) or Pp- or E+ or ({Xc+ & {Xd-}} & CO+) or EB- or [[Mp-]]; then.r: ({Xd- & Xc+} & MVp-) or Pp- or E+ or ({Xc+ & {Xd-}} & CO+) or EB- or (S+ & Xd- & Xc+ & MVs-) or [[Mp-]]; later earlier: ({ECa- or Yt-} & (E+ or Mp- or Pp- or MVb- or [({Xc+ & {Xd-}} & CO+)] or (Xd- & Xc+ & (MX*x- or MVx-)) or ({[[@Ec-]]} & {Xc+} & A+) or AJrc- or AJlc+)) or (Yt- & (Ca+ or Qe+)); away: ({Yd-} & (MVp- or Pp- or ({Xc+ & {Xd-}} & CO+))) or K-; aboard: ((MVp- or Mp- or Pp-) & {J+}) or K-; apart: {Yd-} & K-; % wtf ?? what is home.i for ?? home.i: [[K-]]; % Bare-naked MVp-: "I want it back" back.r: ({Yd-} & K-) or (MVp+ & (MVp- or FM-)) or MVp-; forth aside.p: K- or MVa-; % SF*p+: "nearby is another temple" (using p for 'prep') % SFpp+: "nearby are more ruins" nearby: A+ or MVp- or Pp- or FM- or (SF*p+ & ); close_by: (SF*p+ & ); next_to in_back_of in_front_of close_to on_top_of outside_of inside_of atop: or (J+ & ( or FM- or [Wq- & PF+])); ahead_of by_way_of akin_to betwixt vis-a-vis in_lieu_of on_account_of in_place_of in_search_of: or (J+ & ( or [Wq- & PF+])); near.p: {EE- or EF+} & ( or (J+ & ( or FM- or [Wq- & PF+]))); all_over all_around: {J+} & (Pp- or MVp- or [({Xc+ & {Xd-}} & CO+)] or FM- or Mp-); such_as: J+ & (MVa- or Mp- or (Xc+ & Xd- & (MVx- or MX*x-))); % Consider "Here's the ball." We have two choices: SFst+ as a filler-it, % or the more questionable [Wq- & PF+]. Note that (Wd- & PF+) is barred % by the post-processing rules. Maybe PF is reasonable.. but SFst seems % better at the moment. here: J- or or (SFst+ & ); there.r: J- or or ((SFst+ or SFp+ or SFut+) & ) or SFIst- or SFIp- or OXt- or Wi-; % Patronymics and misc french/spanish/german connectives % Many of these are already in the adjectives list à auf aus aux comte comtes dans de de_la del della delle der des du duc la las le.c los nach noch och os ou på por sans te über un une vom von zum zur zu: {G-} & G+; y.and: G- & G+; % TIME AND PLACE EXPRESSIONS this_time this_one_time this_once that_time these_days: or [[E+]]; last_time next_time: or JT- or YS+ or [[]]; day.r week.r month.r year.r weekend.r morning.r afternoon.r evening.r night.r semester.r term.r season.r session.r: ((DTn- or DTi-) & ( or [[E+]])) or (DTi- & (JT- or [[]] or YS+)) or (DTa- & ); the_next the_previous the_following this_past: DTn+; today tonight: or JT- or [[E+]] or YS+ or [[]]; yesterday: {TD+} & ( or JT- or [[E+]] or YS+ or [[]]); tomorrow: {TD+} & ( or JT- or YS+ or [[]]); Monday Tuesday Wednesday Thursday Friday Saturday Sunday.i: ((DTn- or DTie- or [()]) & {G-} & {TD+ or TW+} & (YS+ or or JT- or ON- or [[]])) or [[AN+]]; morning.i afternoon.i night.i evening.i: TD-; January.i February March April.i May.i June.i July August.i September.i October November December: ((DTn- or DTie- or ({TA-} & {TY+})) & (JT- or IN- or [[]] or [] or YS+)) or ((DTn- or DTie-) & ) or (TM+ & {TY+} & ((Xd- & Xc+ & TW-) or ON- or JT- or [[ or MVp- or Mp- or AN+]])) or AN+; AM.ti PM.ti am.ti pm.ti a.m. p.m. o'clock: ND- & {@MX+} & & {TZ+} ; % Time-zone names A.tz ACDT.tz ACST.tz ADT.tz AEDT.tz AEST.tz AKDT.tz AKST.tz AST.tz AWDT.tz AWST.tz B.tz BST.tz C.tz CDT.tz CEDT.tz CEST.tz CET.tz CST.tz CXT.tz D.tz E.tz EDT.tz EEDT.tz EEST.tz EET.tz EST.tz F.tz G.tz GMT.tz H.tz HAA.tz HAC.tz HADT.tz HAE.tz HAP.tz HAR.tz HAST.tz HAT HAY.tz HNA.tz HNC.tz HNE.tz HNP.tz HNR.tz HNT.tz HNY.tz I.tz IST.tz K.tz L.tz M.tz MDT.tz MESZ.tz MEZ.tz MSD MSK.tz MST.tz N.tz NDT.tz NFT.tz NST.tz O.tz P.tz PDT.tz PST.tz Q.tz R.tz S.tz T.tz U.tz UTC.tz V.tz W.tz WDT.tz WEDT WEST.tz WET.tz WST.tz X.tz Y.tz Z.tz: {Xd-} & TZ-; % Abbreviated month names. Jan.x Feb.x Mar.x Apr.x May.x Jun.x Jul.x Aug.x Sep.x Sept.x Oct.x Nov.x Dec.x: {Xi+} & TM+ & {TY+} & ((Xd- & Xc+ & TW-) or ON- or JT- or [[ or MVpn- or Mp- or AN+]]); fall.i spring.i winter.i summer.i: ((DTn- or DTi-) & ) or (DTi- & (JT- or YS+ or [[]])); weeks.i days.i hours.i minutes.i seconds.i months.i years.i decades.i centuries.i semesters.i terms.i nights.i: ((ND- or [[EN-]] or [()]) & (Yt+ or (OT- & {Mp+}))) or (ND- & Ye-) or (TQ- & BT+); week.i day.i hour.i minute.i second.i month.i year.i decade.i century.i semester.i term.i night.u: (NS- & (({NJ-} & {EN-} & (Yt+ or OT-)) or (EN- & J-))) or (NSa- & [[Mp- or Ys-]]) or ({NR- or TT-} & DG- & ((Cs+ & (({Xc+ & {Xd-}} & CO+) or MVp- or (Xd- & Xc+ & MVx-))) or Yt+)); year_and_a_half: NSa- & {EN-} & (Yt+ or OT-); moment.u: (NS- & (({EN-} & (Yt+ or OT-)) or (EN- & J-))) or ({NR- or TT-} & DG- & ((Cs+ & (({Xc+ & {Xd-}} & CO+) or MVp- or (Xd- & Xc+ & MVx-))) or Yt+)); a_while: J- or Yt+ or OT- or MVa-; now.i then.i: JT- or FM-; now_on then_on there_on: FM-; from_now: Yt- & ; a_long_time some_time a_few_moments moments.u: Yt+ or OT-; ago: Yt- & ( or Ca+ or Qe+ or JT-); every.i: {EN-} & Ye+ & ; times.i x.i: (ND- & (({Xc+ & {Xd-}} & CO+) or MVp- or EC+ or EZ+ or Ca+ or Qe+)) or (((({ND-} & DG-) & {Cs+}) or (ND- & Ys+)) & (({Xc+ & {Xd-}} & CO+) or MVp- or (Xd- & Xc+ & MVx-))); time.i: {TT- or NR-} & DG- & {Cs+} & (({Xc+ & {Xd-}} & CO+) or MVp- or (Xd- & Xc+ & MVx-)); the_year: TY+ & ; every_time: {EN-} & (Cs+ & (({Xc+ & {Xd-}} & CO+) or MVp- or (Xd- & Xc+ & MVx-))); week.n moment.n hour.n minute.n year.n instant.n period.n month.n second.n decade.n century.n: {NM+} & (( & ((Ds- & {@M+} & {WN+ or TH+ or [[Ce+]] or (R+ & Bs+)} & {@MXs+} & ( or or )) or Us- or (YS+ & Ds-) or (GN+ & (DD- or [()])))) or AN+); day.n night.n: {NM+} & (( & (({D*u-} & {@M+} & {WN+ or TH+ or [[Ce+]] or (R+ & Bs+)} & {@MXs+} & ( or or )) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+); days.n weeks.n moments.n hours.n minutes.n years.n instants.n periods.n months.n nights.n seconds.n decades.n centuries.n: {NM+} & (( & (({Dmc-} & {@M+} & {WN+ or TH+ or Ce+ or (R+ & Bp+)} & {@MXp+} & ( or or )) or Up- or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])))) or [[AN+]]); % XXX A major problem here is that the dict entries for miles.n, feet.n % create a mass of parses that are wrong & interfere with the below. : ((ND- or [()] or [[EN-]]) & (Yd+ or Ya+ or EC+ or [[MVp-]] or OD-)) or (ND- & (NIfu+ or NItu- or EQt+ or EQt-)); % AU is abbreviation for "astronomical units" blocks.i feet.i miles.i yards.i inches.i meters.i millimeters.i centimeters.i micrometers.i kilometers.i microns.i Angstroms.i wavelengths.i AU.i au.i astronomical_units light-years.i: ; block.i foot.i mile.i yard.i inch.i meter.i millimeter.i centimeter.i micrometer.i kilometer.i micron.i Angstrom.i wavelength.i astronomical_unit light-year.i: (NS- & {NJ-} & {EN-} & (Yd+ or EC+ or [[MVp-]] or Ya+ or OD-)) or Us-; % make sure that mile.i always has precedence over mile.n % XXX TODO: probably same for the other .i's above... mile.n: or []; a_long_way: Yd+; point.i percentage_point: (NS- or NIe-) & {NJ-} & (Yd+ or OD-); points.u percentage_points: ND- & (Yd+ or MVp-); dollars.i cents.i: NIn- & (EC+ or Yd+ or OD-); 1_dollar one_dollar a_dollar 1_cent one_cent a_cent: {NJ-} & (EC+ or Yd+ or OD-); share.i pound.i ounce.i gallon.i barrel.i head.x: NSa- & Mp-; dollar.i cent.i: ((NIm- or NIn- or NIe-) & AN+) or (NS- & {NJ-} & (EC+ or Yd+ or OD-)); twofold threefold fourfold fivefold sixfold sevenfold eightfold ninefold tenfold a_hundredfold a_thousandfold: {EN-} & (MVp- or Em+ or EC+ or [Pa-] or A+ or (Xd- & (Xc+ or ) & MX-) or NIfn+ or NItn-); % Add cost to Op-, try to use any other linkage before making % a unit be a plain-old object. : ((ND- or NS- or NIe-) & (NIfu+ or NItu-)) or ((ND- or NS- or NIe-) & (AN+ or EQt+ or EQt-)) or ((ND- or NS- or NIe-) & (DD- or EN-) & {Wd-} & ({Mp+} & Sp+ )) or ((ND- or NS- or NIe-) & ([[{DD-} & Op-]] or Jp-) & {Mp+}) or ((ND- or NS- or NIe-) & Xd- & MX- & Xc+) or ((ND- or NS-) & {NJ-} & (EC+ or Y+ or OD- or (Us- & {Mp+}))) or Us-; % Abbreviations of scientific units that follow numbers % km².u mi².u in².u ft².u m².u cm².u /en/words/units.1: ; UNITS: ; % Units abbreviations that can be followed by a period: % ft. tbsp. yds. /en/words/units.1.dot: {Xi+} & ; % Abbreviations that form noun-like things "degrees_Fahrenheit" etc. /en/words/units.3: ND- & ; % Time unit abbreviations: : or ((ND- or NS-) & {NJ-} & OT-); /en/words/units.4: ; /en/words/units.4.dot: {Xi+} & ; % money, similar to units, above. /en/words/currency: ((NIm- or NIn- or NIe-) & AN+) or ((NIm- or NIn- or NIe-) & (Op- or Jp-) & {Mp+}) or ((NIm- or NIn-) & {NJ-} & (EC+ or Yd+ or OD-)) or Us-; /en/words/currency.p: ((NIn- or NIe-) & AN+) or ((NIn- or NIe-) & (Op- or Jp-) & {Mp+}) or ((NIn-) & {NJ-} & (EC+ or Yd+ or OD-)) or Us-; % number-and-unit combinations, such as "50-kDa". The linking requirements % should largely follow those for units except not allowing a numeric % determiner. % TODO: the linking requirements are likely rarely used, and % it might be beneficial to cost them. If this is done, make the same % modification for unit ranges also. % NUMBER-AND-UNIT: % ((({D*u-} or {Dmc-}) & & % ( or Bsm+)) or (({D*u-} or {Dmc-}) & Us- & {Mp+})) or A+; % Above screw up the usual units processing. %QUESTION WORDS & CONJUNCTIONS %who: (R- & (({MVp+ or MVx+} & RS+) or Cr+)) or %({EL+} & (S**w+ or B*w+) & (Ws- or Wq- or QI*d- or BIqd-)) or %({MVp+ or MVx+} & (S**w+ or B*w+) & (Xd- & (Xc+ or ) & MX*r-)); % QI- & (): "I do not know who" who: (R- & (({MVp+ or MVx+} & RS+) or Cr+)) or [QI-] or ({EL+} & (S**w+ or (R+ & B*w+)) & (Ws- or Wq- or QI*d- or BIqd-)) or ({MVp+ or MVx+} & (S**w+ or (R+ & B*w+)) & (Xd- & (Xc+ or ) & MX*r-)); % "what are the answers?" takes Sp+ what: ({EL+} & (D**w+ or Ss*w+ or Sp*w+ or (R+ & (Bsw+ or BW+))) & (Wq- or Ws- or QI*d- or BIqd- or QJ+ or QJ-)) or ((Ss*d+ or (R+ & (Bsd+ or BW+))) & ( or (Ss*t+ & ) or SIs*t-)) or (D+ & JQ-); % QI- & (): "I do not know which" which: ((Jr- or R-) & (({MVp+ or MVx+} & RS+) or Cr+)) or [QI-] or ((D**w+ or ({OF+} & (S**w+ or (R+ & B*w+)))) & (Wq- or Ws- or QI*d- or BIqd-)) or Jw- or (JQ- & D+) or ({MVp+ or MVx+} & (S**w+ or B*w+) & ((Xc+ or ) & Xd- & MX*r-)); whom: (R- & Cr+) or (R+ & B*w+ & (Wq- or QI*d- or BIqd- or ((Xc+ or ) & Xd- & MX*r-))) or (Jr- & (RS+ or Cr+)) or Jw-; whose: (D**w+ & (Mr- or Wq- or Ws- or QI*d- or BIqd- or ((Xc+ or ) & Xd- & MX*d-))) or (JQ- & D+) or (U+ & Jr- & (RS+ or Cr+)); whoever: {EL+} & (((Ss*d+ or Bsd+ or [[CX+]]) & ( or SJr- or (Xc+ & {Xd-} & CO+) or ({Xd- & Xc+} & MVs-))) or [[(O- or J-) & CX+]]); whatever.c: ({EL+} & (((Ss*d+ or Bsd+ or BW+ or D**w+) & ( or (Xc+ & {Xd-} & CO+) or ({Xd- & Xc+} & MVs-))) or [[(O- or J-) & CX+]])) or ((ALx+ & J+) & (({Xd-} & Xc+ & CO+) or ({Xd- & Xc+} & MVs-))); whenever wherever however.c: {EL+} & (Cs+ & (({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & MVs-))); no_matter: QI+ & ((Xc+ & {Xd-} & CO+) or ({Xd- & Xc+} & MVs-)); that.j-c: (Cet+ & ([SFsx+ & ] or TH- or [[MVh-]] or RJ*t+ or RJ*t-)) or (TS- & (SI*j+ or SFI**j+) & I*j+); that.j-d: [{AL-} & D*u+]; that.j-r: (R- & (({MVp+ or MVx+} & RS+) or Cr+)) or EE+ or (EA+ & {HA+}) or DTn+; that.j-p: ({[[M+]]} & ) or ; % (Rnx+ & ): "Because I said so" because: (Cs+ & (({Xc+ & {Xd-}} & CO*s+) or BIh- or ({Xd- & Xc+} & MVs-))) or (OF+ & (({Xc+ & {Xd-}} & CO+) or BIh- or ({Xd- & Xc+} & MVa-))) or (Rnx+ & ); now_that just_as if_only in_case whereby whereupon insofar_as inasmuch_as ere on_the_grounds_that on_grounds_that in_that in_the_event_that in_the_event: Cs+ & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-)); on_condition: (TH+ or TS+) & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-)); unless though.c even_though: (Cs+ or Mgp+ or Mv+) & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-) or (Xd- & Xc+ & E+)); as_if as_though: ((Cs+ or Mgp+ or Mv+ or Mp+) & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-) or (Xd- & Xc+ & E+))) or ((BIh- or LI-) & Cs+); as_soon_as: Cs+ & {Xc+ & {Xd-}} & CO*s+; until 'til ’til ‘til `til til: ((Mgp+ or J+ or JT+ or UN+) & (({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & MVp-) or [Mp-])) or (Cs+ & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-))); since: ((Mgp+ or J+ or JT+ or UN+) & (({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & MVp-) or [Mp-])) or (Cs+ & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-))) or [[MVa-]] or [[E+]]; ever_since: (J+ or Mgp+ or Cs+) & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-)); after: {EI- or Yt-} & (((Mgp+ or J+ or JT+) & ( or UN- or Ca+ or Qe+)) or (Cs+ & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-)))); before: ({EI- or Yt-} & (({Mgp+ or J+ or JT+} & ( or UN-)) or (Cs+ & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-))))) or (Yt- & (Ca+ or Qe+)); if: (Cs+ & {Xc+ & {Xd-}} & (Wd- & (Qd+ or Ws+ or Wq+))) or ((Cs+ or [Mgp+] or [Mv+]) & (({Xd- & Xc+} & MVs-) or ({Xc+ & {Xd-}} & CO*s+))) or (QI- & Cs+); if_possible if_necessary: MVp- or (Xd- & Xc+ & (MVx- or E+)) or ({Xc+ & {Xd-}} & CO+); if_so: ({Xc+ & {Xd-}} & CO+); if_only: ((MVp+ or MVa+ or MVs+) & ({Xd- & Xc+} & MVp-)) or (Wd+ & Wc-); no_wonder: Wd+ & Wc-; while: ((Cs+ or Mgp+ or Mp+) & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-) or (Xd- & Xc+ & E+))); : RJlv+ or RJrv-; % once as adverb once.e: ({Cs+ or Mp+} & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-) or (Xd- & Xc+ & E+))) or or E+ or EB-; % -------------------------------------------------------------------------- % Conjunctions % Should these be treated as clause-openers (taking CO link)? % e.g. "Also on this list is the Colossus of Rhodes." % Currently, they take Wc- as they are "coordinating conjuctions" % that are tied to previous sentences (i.e. to the left-wall). % Another possibility: (Rnx+ & ) "Because I say so" but.ij and.ij or.ij not.ij also.ij but_not and_not: [[(({Xd-} & CC-) or Wc-) & {Xc+} & (Wdc+ or Qd+ or Ws+ or Wq+)]]; and/or: [(({Xd-} & CC-) or Wc-) & (Wdc+ or Qd+ or Ws+ or Wq+)]; % and used as a conjunction in proper names: % The Great Southern and Western Railroad % Hmm, Maybe should use MG- & JG+ here, to be consistent with "of", "for": % "The Society of Engineers", "The League for Abstinence" and.j-g: [[G- & G+]]; % Conjoined adjectival modifiers. % The black and white cat sleeps % She ran hot and cold. % The EB+ link handles "not", "yet" after the "and" -- "blah and not blah" % See also for similar structures. % The {Xd-} allows "blah blah, and blah" % MVa is given a cost, so that Pa is used, if possible. % (In general, we want to never use MVa if Pa is possible... ) % AJla- & AJr*+ allows "he is clever and funnier than Mike." % % AJ*a: ordinary adjectives % AJ*c: comparative adjectives % AJ*s: superlative adjectives % and.j-a but.j-a yet.j-a: ({Xd-} & AJla- & {EB+} & AJr+) & (A+ or Pa- or [MVa-] or AJra-); or.j-a: ({Xd-} & AJla- & AJra+) & (A+ or Pa- or [MVa-] or AJra-); % The SJn, Dn links are propagated through the linkage, guaranteeing that % "neither" will be used together with "nor". nor.j-a: AJn- & AJ+ & (A+ or Pa- or [MVa-]); % compartives: % he is bigger, and badder, than the pope. % If one comma is there, then the other must be also. and.j-c or.j-c but.j-c yet.j-c: ((AJlc- & AJrc+) or (Xd- & AJlc- & AJrc+ & Xc+)) & (((Pam- or Mam- or AFm+) & {@MV+}) or ({[ECa-]} & MVb-) or Am+); and.j-s: (AJls- & AJrs+ & La-) or (AJld- & AJrd+ & (D+ or DD+)); % conjoined post-nominal modifiers % [Ma-]: it is more grammatically correct to have commas ... but.j-m and.j-m or.j-m: (({Xd-} & MJla- & MJra+) & ([Ma-] or (Xd- & Xc+ & MX*a-))) or (({Xd-} & MJlp- & MJrp+) & (Mp- or MVp- or (Xc+ & CO+))) or (({Xd-} & MJlj- & MJrj+ & {Xc+}) & J+ & ([Mp-] or Pp- or MVp-)); % Conjoined question words. % When and where is the party? % How and why did you do that? and.j-q: (QJ- & QJ+) & ((Wq- & (Q+ or PF+)) or QI-); % conjoined adverbs/prepositional phrases % RJ*v: adverbs % RJ*t: that "He said that ... and that ..." % RJ*c: subordinate clauses: "Although he said ... and he did ..., ..." % RJ*j: prep-object-relative (Mj): "the man for whom and with whom ..." % RJ*r: "those" relative clauses: "...: those who do and those who don't" and.j-r or.j-r: ((RJlv- & RJrv+) & MVr-) or ((RJlt- & RJrt+) & TH-) or ((RJlc- & RJrc+) & Cs-) or ((RJlj- & RJrj+) & Mj- & Cs+) or (({Xd-} & RJlr- & RJrr+) & J-); % Conjoined nouns/noun phrases. % "The cost and reliability were questioned" (Spx+) % "He wrote for piano and flute." (Ju-) % "Where is the sickle and hammer?" (SIs-) % Op- has a cost, so that "they verbed X and verbed Y" gets the VJ link % at zero cost, and the SJ link at higher cost (since a "verbed Y" can be % understood as a modified noun). Acutally, should probably have some % post-processing rule to disallow this XXX to do fix above. Example of % bad SJ usage: "He bangs drums and played piano" i.e "he bangs a played piano" % % : ({Xd-} & SJl- & SJr+) & etc. % would allow "X , and Y" constructions, but these have tricky rules... % % noun-conj-dep-s & SI-: Are a dog and a cat here? % % XXX There should be a noun-sub-u but this requires a lot of work ... : ({Xd-} & SJls- & SJrs+ & {[[Xc+]]}); : ({Xd-} & SJlp- & SJr+ & {[[Xc+]]}) or ({Xd-} & SJls- & SJrp+ & {[[Xc+]]}); : ({Xd-} & SJlu- & SJr+ & {[[Xc+]]}) or ({Xd-} & SJlp- & SJru+ & {[[Xc+]]}) or ({Xd-} & SJls- & SJru+ & {[[Xc+]]}); % Give AN+ a cost, because in general, we don't want to conjoind nouns, % and then use the resulting phrase to modify another noun ... : Ju- or SJl+ or [[AN+]]; and.j-n but_not: ( & & ( or (Spx+ & ) or SIp- or [Os-] or )) or ( & & ( or (Spx+ & ) or SIp- or [Op-] or )) or ( & & ( or (Sux+ & ) or SIu- or [Ou-] or )); or.j-n: ( & & ( or (S*x+ & ) or SI- or [Os-] or )) or ( & & ( or (Spx+ & ) or SIp- or [Op-] or )); % The SJn, Dn links are propagated through the linkage, guaranteeing that % "neither" will be used together with "nor". nor.j-n: SJn- & SJ+ & ((Wd- & S*x+) or SI- or Os- or SJn+); % The Dn- link is used for both nouns, as above, and on neither..nor for verbs % e.g. "We neither ate nor drank" neither.j: Dn+; % Force use of commas: "Mary, but not Louise, is coming to the party" % Not John, but Mary led the way. but.j-n: ((Xd- & SJl- & EBx+ & SJr+ & Xc+) & (Wd- & Ssx+)) or ((Xd- & SJl- & EBy- & SJr+) & (Wd- & Ssx+)) or ((SJl- & EBy- & SJr+) & Ou-); % -------------------------------------------------------------------------- % Conjoined verbs/verb phrases % "Oscar Peterson played piano and wrote music." % Pass through singular/plural agreement of subject. % The weirdo (B- & {B+}) allows the following to parse: % "This is a problem Moscow created and failed to solve." : (({Xd-} & VJlsi- & VJrsi+) & (({@MV+} & Ss-) or (I- & {@MV+}) or ({Xd-} & VJrsi-))) or (({Xd-} & VJlpi- & VJrpi+) & (({@MV+} & Sp-) or (I- & {@MV+}) or ({Xd-} & VJrpi-))) or (({Xd-} & VJlst- & VJrst+) & ((({@MV+} & Ss-) or (I- & {@MV+})) & (O+ or (B- & {B+})))) or (({Xd-} & VJlpt- & VJrpt+) & ((({@MV+} & Sp-) or (I- & {@MV+})) & (O+ or (B- & {B+})))) or (({Xd-} & VJlh- & VJrh+) & (PP- & {@MV+})) or ((VJlg- & VJrg+) & (J-)); and.j-v or.j-v: ; % ditransitive conjunction: "I gave Bob a doll and Mary a gun" : {Xd-} & VJd- & O+ & O*n+; and.j-o or.j-o: ; % The VJn- gaurentees that nor.j-v is used with neither.j-v nor.j-v: (VJn*i- & VJr*i+ & ({@MV+} & S-)) or (VJn*t- & VJr*t+ & ({@MV+} & S- & O+)); % Similar to and, but allows optional comma before "but" % "blah blah, but blah" but.j-v: ((({Xd-} & VJls-) & VJrs+) & (Ss- or ({Xd-} & VJrs-))) or ((({Xd-} & VJlp-) & VJrp+) & (Sp- or ({Xd-} & VJrp-))) or ((VJl- & VJr+) & (I-)); % The VJb- guarentees that bit.j-b is used with not_only % "We not only X'ed but also Y'ed". % This is the same pattern as the neither..nor... pattern above. but.j-b: (VJb*i- & VJr*i+ & ({@MV+} & S-)); not_only: Db+; % XJ: collocations with holes, i.e. "... blah blah X um um Y" % where "blah blah" is always used with "um um". % XJ*i: with infinitives % ... not only X, but Y % "you should not only ask for your money back, but demand it" not_only: I- & I+ & XJi+; but.j-r: {Xd-} & XJi- & I+; % XXX to-do: should have special linkage for either... or .... % instead of dependeingg on the E+ link. See neither..nor... for examples. either.r: Ds+ or E+ or ({OF+} & ) or ({Xd+ & Xc-} & MVa-); neither.r: Ds+ or E+ or ({OF+} & ); nor.r: ((Xd- & CC-) or Wd-) & Qd+; for.r: [[(({Xd-} & CC-) or Wc-) & (Wd+ or Qd+ or Ws+ or Wq+)]]; yet.r: ((({Xd-} & CC-) or Wc-) & Wd+) or E+ or MVa- or ({Xd-} & Xc+ & CO+); thus therefore: ({Xc+ & {Xd-}} & CO+) or ({Xd-} & CC- & Wd+) or ({Xd- & Xc+} & (E+ or EB-)) or (Xd- & Xc+ & MVa-); % QI- & (): "I do not know when" when: ((WN- or BIh-) & Cs+) or ((PF+ or TOn+ or Cs+) & (BIq- or QI- or (SFsx+ & ))) or [QI-] or QJ- or QJ+ or (Wq- & (Q+ or PF+)) or ((Cs+ or Mp+ or Mgp+ or Mv+) & (({Xd- & Xc+} & MVs-) or ({Xc+ & {Xd-}} & CO*s+) or (Xd- & Xc+ & E+))); % QI- & (): "I do not know why" why: ({EL+} & ((Wq- & Q+) or (QI- & (Cs+ or TOn+ or [()])) or (Cs+ & ((SFsx+ & ) or WY- or BIq- or QJ+ or QJ-)))) or QJ- or QJ+ or [[{@CO-} & Wc- & Wi+]]; why_not: [[{@CO-} & Wc- & Wi+]]; % QI- & (): "I do not know where" % R+ & Bsw+: "Where does it go to?" where: {EL+} & ( (Wq- & ((Rw+ & WR+) or (R+ & Bsw+) or ({Rw+} & PF+) or Q+)) or [QI-] or QJ- or QJ+ or ((WR+ or Cs+ or TOn+ or PF+) & (BIq- or QI- or (SFsx+ & ))) or ((Cs+ or PF+ or WR+) & )); whether: (((QI- or BIq-) & (Cs+ or TOn+)) or (Cs+ & SFsx+ & )) or [[(Cs+ or MV+) & (({Xd- & Xc+} & MVs-) or ({Xc+ & {Xd-}} & CO*s+))]]; whether_or_not: ((QI- or BIq-) & (Cs+ or TOn+)) or (Cs+ & (({Xd- & Xc+} & MVs-) or ({Xc+ & {Xd-}} & CO*s+))); % QI- & (): "I do not know how" how: ((((EAh+ or EEh+) & {HA+}) or H+ or AFh+) & (BIqd- or QI*d- or Wq- or Ws-)) or (Wq- & (Q+ or AF+)) or [QI-] or QJ- or QJ+ or ((Cs+ or TOn+) & (QI- or BIq- or (SFsx+ & ))); % EBy+ link is for "verbed not X but Y" not.e: EB- or ({@E-} & N-) or NT+ or EBy+ or [[((Ma+ or Mg+ or Mv+ or Mp+) & CO+) or (Mg- & Mgn+) or (Mv- & Mvn+) or (Mp- & Mp+) or (Ma- & Ma*n+)]]; % We include this, though it's not one of the strippable strings n't n’t: N- or EB-; %ADJECTIVES % Common disjuncts shared by virtually all adjectives. % Dn- & AJn+: for neither...nor constructions. : [[{@E-} & Wq- & {@MV+} & PF+ & {@MV+} & {CC+}]] or (AJra- & {@MV+}) or ({@MV+} & AJla+) or (Dn- & AJn+) or ({@E-} & {@MV+} & ([[]] or (Xd- & Xc+ & MX*a-))); % Ordinary adjectives % abject.a abnormal.a abominable.a abortive.a abrasive.a abrupt.a % "the rich and powerful": [[{DD-} & ]] : {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+}) or ({@MV+} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ); /en/words/words.adj.1: or ; HYPHENATED-WORDS.a: ({EA- or EF+} & (({[[@Ec-]]} & {Xc+} & Ah+) or (Pa- & {@MV+}))) or [[AN+]]; % "We caught a through flight", "its a done job" - adjective -- !? probably over-broad. : {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((AF+ or Ma- or MJra-) & {@MV+}) or ({@MV+} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]]); done.c gone.c through.c: ; responsible.a accountable.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or Vh- or MJra-) & {@MV+}) or ({@MV+} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ); long.a: or ((Ya- or Yt-) & (Pa- or Ma- or MJra- or MJla+)) or (H- & (BT+ or Yt+)); % Hmm does distant really belong here? % "The river is a mile wide here": Ya- & Pa- & MVp+ wide.a tall.a deep.a distant.a: or (Ya- & (Pa- or Ma- or MJra- or ) & {@MV+}) or (Ya- & {@MV+} & MJla+); old.a: or (Ytm- & (Pa- or Ma- or or MJra- or MJla+)); % ??? adj-op already has MX*a- in it, why do we need a bar MX- here ? aged.i: NM+ & (Pa- or Max- or or (Xd- & MX- & Xc+) or MJra- or MJla+); % The following all have a very regular pattern, with just one variable % part, the TO TH type section. This regularity should be exploted so % simplify the expressions ... easy.a hard.a simple.a difficult.a fun.a expensive.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {((TOt+ & B+) or TOi+) & {LE+}}) or ({@MV+} & {((TOt+ & B+) or TOi+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TOt+ & B+} & )); ready.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {((TOt+ & B+) or TO+) & {LE+}}) or ({@MV+} & {((TOt+ & B+) or TO+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TO+ or (TOt+ & B+)} & )); silly.a nasty.a pleasant.a unpleasant.a dangerous.a cruel.a standard.a safe.a legal.a illegal.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {((TOt+ & B+) or TOi+) & {LE+}}) or ({@MV+} & {((TOt+ & B+) or TOi+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TOt+ & B+} & )); : {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {((TOt+ & B+) or THi+ or TOi+) & {LE+}}) or ({@MV+} & {((TOt+ & B+) or THi+ or TOi+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TOt+ & B+} & )); good.a bad.a unusual.a useful.a a_bitch nice.a strange.a wonderful.a terrible.a possible.a impossible.a annoying.a fair.a unfair.a tough.a: ; great.a: or ; important.a essential.a crucial.a necessary.a imperative.a vital.a: or ({EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & (({@MV+} & {(THi+ or TOi+ or TSi+) & {LE+}}) or (TOt+ & B+))) or ((({@MV+} & {(THi+ or TOi+ or TSi+) & {LE+}}) or (TOt+ & B+)) & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TOt+ & B+} & ))); common.a practical.a original.a normal.a helpful.a striking.a confusing.a frustrating.a disturbing.a logical.a illogical.a elegant.a efficient.a awful.a just.a unjust.a absurd.a natural.a alarming.a acceptable.a unacceptable.a deplorable.a detestable.a scary.a shocking.a poetical.a: or ({EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(THi+ or TOi+) & {LE+}}) or ({@MV+} & {(THi+ or TOi+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or )); surprising.a interesting.a odd.a remarkable.a amazing.a exciting.a depressing.a rare.a embarrassing.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(THi+ or Ci+ or TOi+) & {LE+}}) or ({@MV+} & {(THi+ or Ci+ or TOi+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ); crazy.a sane.a insane.a stupid.a ridiculous.a wrong.a curious.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(TO+ or TOi+ or THi+) & {LE+}}) or ({@MV+} & {(TO+ or TOi+ or THi+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TO+} & )); wise.a unwise.a smart.a intelligent.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(TO+ or TOi+) & {LE+}}) or ({@MV+} & {(TO+ or TOi+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TO+} & )); unlikely.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(TOf+ or THi+ or Ci+) & {LE+}}) or ({@MV+} & {(TOf+ or THi+ or Ci+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TO+} & )); likely.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(TOf+ or THi+ or Ci+) & {LE+}}) or ({@MV+} & {(TOf+ or THi+ or Ci+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TO+} & ) or [E+]); apparent.a false.a official.a strict.a significant.a funny.a notable.a untrue.a tragic.a plain.a urgent.a a_drag a_bummer definite.a evident.a impressive.a incredible.a inevitable.a mysterious.a pathetic.a probable.a admirable.a commendable.a conceivable.a insignificant.a miraculous.a self-evident.a undeniable.a plausible.a understandable.a demonstrable.a hilarious.a improbable.a inexcusable.a outrageous.a paradoxical.a shameful.a inconceivable.a unbelievable.a astonishing.a disgraceful.a debatable.a arguable.a lamentable.a regrettable.a well-known.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(THi+ or Ci+) & {LE+}}) or ({@MV+} & {(THi+ or Ci+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ); clear.a unclear.a relevant.a irrelevant.a obvious.a immaterial.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(THi+ or QIi+) & {LE+}}) or ({@MV+} & {(THi+ or QIi+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ); clear.i: {EA- or EF+} & Vm- & TH+; sure.i certain.i: {EA- or EF+} & Vm- & (TH+ or TO+ or (OF+ & {@MV+})); tactful.a conventional.a advisable.a prudent.a sensible.a tactless.a polite.a impolite.a arrogant.a conceited.a obnoxious.a valuable.a reasonable.a unreasonable.a traditional.a unnecessary.a tempting.a usual.a inadvisable.a lovely.a a_mistake ethical.a unethical.a immoral.a childish.a awkward.a appropriate.a costly.a customary.a desirable.a dumb.a effective.a fashionable.a foolish.a healthy.a hip.a okay.a OK.a ok.a painful.a selfish.a sufficient.a advantageous.a boring.a inappropriate.a insufficient.a irrational.a irresponsible.a mandatory.a meaningless.a preferable.a senseless.a trivial.a wrongheaded.a premature.a risky.a dishonest.a hypocritical.a enjoyable.a idiotic.a inconvenient.a unkind.a pointless.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {TOi+ & {LE+}}) or ({@MV+} & {TOi+ & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ); unknown.a questionable.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {QIi+}) or ({@MV+} & {QIi+} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ); certain.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Paf- or AF+ or Ma- or MJra-) & {@MV+} & {(Ce+ or TOf+ or TH+ or QI+ or (OF+ & {@MV+})) & {LE+}}) or ({@MV+} & {(Ce+ or TOf+ or TH+ or QI+ or (OF+ & {@MV+})) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({Ce+ or TO+ or TH+ or QI+ or OF+} & )); sure.a unsure.a uncertain.a careful.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {(Ce+ or TO+ or TH+ or QI+ or (OF+ & {@MV+})) & {LE+}}) or ({@MV+} & {(Ce+ or TO+ or TH+ or QI+ or (OF+ & {@MV+})) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({Ce+ or TO+ or TH+ or QI+ or OF+} & )); % common adjectives, taking "to", "that" e.g. "was incorrect that" correct.a incorrect.a right.a excited.a disappointed.a upset.a sorry.a content.a determined.a amused.a amazed.a astonished.a astounded.a pleased.a disgusted.a distressed.a dismayed.a irritated.a embarrassed.a alarmed.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {(TO+ or TH+) & {LE+}}) or ({@MV+} & {(TO+ or TH+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TO+ or TH+} & )); glad.a fortunate.a unfortunate.a lucky.a unlucky.a happy.a sad.a surprised.a delighted.a overjoyed.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {(Ce+ or TO+ or TH+) & {LE+}}) or ({@MV+} & {(Ce+ or TO+ or TH+) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({Ce+ or TO+ or TH+} & )); % common adjectives, taking "to", "of", "that" e.g. "proud that" proud.a scared.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {(TO+ or TH+ or (OF+ & {@MV+})) & {LE+}}) or ({@MV+} & {(TO+ or TH+ or (OF+ & {@MV+})) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TO+ or TH+ or OF+} & )); % common adjectives, taking "of" e.g. "tired of", "sick of" etc. tired.a pooped.a full.a sick.a critical.a guilty.a innocent.a typical.a capable.a contemptuous.a incapable.a reminiscent.a scornful.a mindful.a short.a appreciative.a complimentary.a born.a worthy.a free.a terrified.a unworthy.a prognostic.a dead.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {OF+ & {@MV+}}) or ({@MV+} & {OF+ & {@MV+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({OF+ & {@MV+}} & )); fond.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & OF+ & {@MV+}) or (OF+ & {@MV+} & MJla+) or (OF+ & )); afraid.a ashamed.a unafraid.a unashamed.a: {EA- or EF+} & (((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {((OF+ & {@MV+}) or Ce+ or TH+ or TO+) & {LE+}}) or ({@MV+} & {((OF+ & {@MV+}) or Ce+ or TH+ or TO+) & {LE+}} & MJla+) or ({OF+ or Ce+ or TH+ or TO+} & )); apprehensive.a secure.a optimistic.a pessimistic.a annoyed.a confused.a offended.a insulted.a concerned.a depressed.a doubtful.a grateful.a mad.a mistaken.a hopeful.a unhappy.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {TH+ & {LE+}}) or ({@MV+} & {TH+ & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TH+} & )); aware.a unaware.a: {EA- or EF+} & (((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {(TH+ or (OF+ & {@MV+})) & {LE+}}) or ({@MV+} & {(TH+ or (OF+ & {@MV+})) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TH+ or OF+} & )); true.a conscious.a confident.a skeptical.a jealous.a suspicious.a envious.a desirous.a convinced.a unconvinced.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {(TH+ or (OF+ & {@MV+})) & {LE+}}) or ({@MV+} & {(TH+ or (OF+ & {@MV+})) & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TH+ or OF+} & )); eager.a reluctant.a able.a unable.a impatient.a eligible.a brave.a anxious.a apt.a desperate keen.a prepared.a willing.a hesitant.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Ma- or MJra-) & {@MV+} & {TO+ & {LE+}}) or ({@MV+} & {TO+ & {LE+}} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ({TO+} & )); former.a: A+ or G+ or (DG- & ); latter.a: DG- & ; overall.a onetime.a outboard.a pinstripe.a goddam.a de_facto de_jure erstwhile.a foster.a outright.a online.a: A+; pro_forma ad_hoc bona_fide: A+ or Pa-; a_priori a_posteriori: A+ or MVa- or ({Xc+ & {Xd-}} & CO+); asleep.a awake.a alike.a alive.a ablaze.a adrift.a afire.a aflame.a afloat.a afoot.a aghast.a aglow.a agog.a ajar.a amiss.a askew.a astir.a awash.a awry.a de_rigeur rife.a fraught.a lacking.a: ((Ma- or Pa- or MJra-) & {@MV+}) or ({@MV+} & MJla+) or ; alone.a: ((Ma- or Pa- or MJra-) & {@MV+}) or ({@MV+} & MJla+) or or MVp- or E+; outstanding.a available.a: {EA- or EF+} & (({[[@Ec-]]} & {Xc+} & A+) or ((Pa- or AF+ or Max- or MJra-) & {@MV+}) or ({@MV+} & MJla+) or AA+ or [[DD- & ]] or [[{DD-} & ]] or ); due.i effective.i: (TY+ or JT+) & ; north.a south.a east.a west.a northeast.a northwest.a southeast.a southwest.a: or A+ or ({Yd-} & {OF+} & (Pp- or MVp- or Mp- or (Xc+ & Xd- & (MVx- or MX*x-)))) or [[DD- & ]]; northern.a southern.a eastern.a western.a northeastern.a northwestern.a southeastern.a southwestern.a: or A+ or G+; % ------------------------------------------------------------------------- %COMPARATIVES AND SUPERLATIVES more: ({ECa-} & (EAm+ or EEm+ or [MVm-] or [EB*m-] or Qe+ or Ca+ or AJrc- or AJlc+)) or ({OF+} & (({ECn-} & (Dmum+ or (Ss+ & ) or Bsm+)) or ({ECx- or ND-} & (Dmcm+ or (Sp+ & ) or Bpm+)) or ({ECn- or ECx- or ND-} & (Om- or Jm- or (Xd- & MVt+ & Xc+ & MX*m-))))) or (DG- & (({MVa+} & Cs+) or B+ or Dm*w+ or EA+) & (ER- or (Wd- & Xc+ & ER+))); more_of_a more_of_an: Ds*m+; less: ({ECn-} & (Dmum+ or Om- or Jm- or (Ss+ & ) or Bsm+)) or ({ECa-} & (EAm+ or EEm+ or [MVm-] or [EB*m-] or AJrc- or AJlc+)) or (DG- & (({MVa+} & Cs+) or B+ or Dm*w+ or EA+) & (ER- or (Wd- & Xc+ & ER+))); fewer: ({ECn-} & (Dmcm+ or Om- or Jm- or (Sp+ & ) or AJrc- or AJlc+)) or (DG- & Dm*w+ & (ER- or (Wd- & Xc+ & ER+))); farther: ({ECa-} & {K+} & (MVb- or Qe+ or Ca+ or AJrc- or AJlc+)) or A+; further.r: ({ECa-} & {K+} & (MVb- or Qe+ or Ca+ or AJrc- or AJlc+)) or A+ or E+ or ({Xd-} & Xc+ & CO+); % links to adverbs on left.. % Hmm, probably want to give EAy a cost, to avoid its use in % "William is described as smooth, yet thoughtful" as.e-y: {EZ-} & ((EAy+ & {HA+}) or EEy+ or AM+); % uses comparative links as.e-c: (MVz- & (((O*c+ or S**c+ or ({SFsic+} & Zc+)) & {Mp+}) or Mpc+ or Cc+)) or (MVzo- & Ct+ & Bc+ & {U+}) or (MVzp- & (CX+ or CQ+)) or (MVza- & Cta+ & ((AFd+ & {Pa+}) or PFc+)); % prepositional, mostly as.e: ((J+ or Mp+ or TI+ or ({SFsic+} & Zs+)) & (({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & MVp-))) or (Cs+ & (({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & MVs-))) or ((J+ or Mp+ or BIt+) & ([Mp-] or (Xd- & Xc+ & MX*x-))) or (AZ- & Pa+) or [[(PFc+ or CQ+) & ({Xd- & Xc+} & MVs-)]]; as_possible: MVz-; as_expected as_reported as_imagined as_suspected as_anticipated as_predicted as_realized as_proposed as_intended as_supposed as_hypothesized as_hypothesised as_discussed as_established as_compared as_determined as_measured as_assessed as_demonstrated as_evidenced as_indicated as_revealed as_judged as_detected as_opposed as_observed as_defined as_reflected as_evaluated as_suggested as_monitored as_described as_confirmed as_assayed as_estimated as_analyzed as_identified as_deduced as_documented as_related as_studied as_inferred as_exemplified as_used as_expressed as_visualized as_tested as_manifested as_illustrated as_applied as_mediated as_characterized as_affected as_examined as_ascertained as_quantified as_influenced as_represented as_marked as_induced as_concluded as_calculated as_verified as_required as_recognized as_probed as_presented as_obtained as_needed as_indexed as_derived as_based as_analysed as_supported as_restricted as_recorded as_recommended as_quantitated as_produced as_postulated as_noted as_caused as_summarized as_prepared as_outlined as_occurred as_modified as_localized as_involved as_implied as_gauged as_exhibited as_encountered as_displayed as_contained as_catalyzed as_advocated as_achieved: MVz- or (({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & MVs-)); % MODIFIED 'THAN' so that it links to the clause following it % using 'C' links -- like a relative clause than: (MVt- & (((O*c+ or ({SFsic+} & Zc+) or U*c+) & {Mp+}) or Mpc+ or S**c+ or MVat+ or MVpt+ or Cc+ or Pafc+)) or ((MVta- or LE-) & Cta+ & ((AFd+ & {Pa+}) or PFc+)) or ((MVti- or LEi-) & AFdi+ & {Pa+}) or (((LE- & {AFd+}) or (LEi- & {AFdi+})) & (THc+ or TOic+ or TOfc+ or (TOtc+ & B+))) or (((MVto- & Ct+ & Bc+ & {U+}) or (MVtp- & (CX+ or CQ+))) & {Mp+}); % cost on MVa-: "we will arrive much sooner", want "much" to modify "sooner". much: ({EE-} & ([[MVa-]] or ECa+ or Ca+ or Qe+)) or ({EEx- or H-} & (ECn+ or Dmu+ or ( & ( or Bsm+)))) or (AM- & (Dmuy+ or MVy- or Oy- or Jy- or EB*y-)); slightly somewhat: EC+ or EA+ or MVa- or Em+; far.c infinitely: EC+; significantly substantially: ({EE- or EF+} & (EC+ or E+ or MVa- or ({Xc+ & {Xd-}} & CO+))) or ({EE-} & EB-); % comparative adjectives % angrier.a balder.a balmier.a baser.a bawdier.a bigger.a blacker.a : ({ECa-} & (((Pam- or Mam- or AFm+ or AJrc-) & {@MV+}) or ({[[@Ec-]]} & {Xc+} & Am+) or AJlc+)) or (DG- & (TR+ or AF+) & {@MV+} & (ER- or (Wd- & Xc+ & ER+))); /en/words/words.adj.2: ; easier.a-c: ({ECa-} & (({[[@Ec-]]} & {Xc+} & Am+) or ((Pafm- or AFm+ or Mam- or AJrc-) & {@MV+} & {((TOt+ & B+) or TOi+) & {LE+}}) or AJlc+)) or (DG- & (TR+ or AF+) & {@MV+} & {(TOt+ & B+) or TOi+} & (ER- or (Wd- & Xc+ & ER+))); harder.a-c: ({ECa-} & (({[[@Ec-]]} & {Xc+} & Am+) or ((Pafm- or AFm+ or Mam- or AJrc-) & {@MV+} & {((TOt+ & B+) or TOi+) & {LE+}}) or MVb- or AJlc+)) or (DG- & (TR+ or AF+) & {@MV+} & {(TOt+ & B+) or TOi+} & (ER- or (Wd- & Xc+ & ER+))); higher.a-c deeper.a-c lower.a-c faster.a-c quicker.a-c: ({ECa-} & (((Pam- or AFm+ or Mam- or AJrc-) & {@MV+}) or ({[[@Ec-]]} & {Xc+} & Am+) or MVb- or Qe+ or Ca+ or AJlc+)) or (DG- & (TR+ or AF+ or Cs+) & {@MV+} & (ER- or (Wd- & Xc+ & ER+))); sooner.a-c: ({ECa- or Yt-} & (((Pam- or AFm+ or Mam- or AJrc-) & {@MV+}) or ({[[@Ec-]]} & {Xc+} & Am+) or MVb- or Qe+ or Ca+ or AJlc+)) or (DG- & (TR+ or AF+ or Cs+) & {@MV+} & (ER- or (Wd- & Xc+ & ER+))); longer.a-c: ({ECa- or Yt-} & (((Pam- or AFm+ or Mam- or AJrc-) & {@MV+}) or ({[[@Ec-]]} & {Xc+} & Am+) or MVb- or Qe+ or Ca+ or OT- or FL- or AJlc+)) or (DG- & (TR+ or AF+ or Cs+) & {@MV+} & (ER- or (Wd- & Xc+ & ER+))); smarter.a-c nicer.a-c worse.a-c: ({ECa-} & (({[[@Ec-]]} & {Xc+} & Am+) or ((Pafm- or AFm+ or Mam- or AJrc-) & {@MV+} & {(TOi+ or THi+) & {LE+}}) or AJlc+)) or (DG- & (TR+ or AF+) & {@MV+} & {TOi+ or THi+} & (ER- or (Wd- & Xc+ & ER+))); better.a-c: ({ECa-} & (({[[@Ec-]]} & {Xc+} & Am+) or ((Pafm- or AFm+ or Mam- or AJrc-) & {@MV+} & {(TOi+ or THi+) & {LE+}}) or MVb- or E+ or Qe+ or Ca+ or AJlc+)) or (DG- & (TR+ or AF+) & {@MV+} & {TOi+ or THi+} & (ER- or (Wd- & Xc+ & ER+))); different.a: ({ECa- or EA- or EF+} & (({[[@Ec-]]} & {Xc+} & Am+) or ((Pafm- or AFm+ or Mam- or AJrc-) & {@MV+}) or AA+ or [[DD- & ]] or )); than_expected than_imagined than_proposed than_suspected than_realized than_intended than_supposed than_reported than_ever than_usual than_normal than_suggested than_anticipated than_recommended: MVt-; more_than no_more_than fewer_than less_than as_many_as an_estimated an_additional up_to as_much_as no_fewer_than no_less_than greater_than: EN+; at_least: EN+ or CO+ or [[{Xd- & Xc+} & MVa-]] or EB-; % This is not quite right, since there may be other words in between % "all ... but": "All was lost but for one tree." % "Everything but one tree remained." % nothing_but all_but: EN+ or E+; all_but: EN+ or E+; nothing_but: Vd- & I+; % -------------------------------------------------------------------------- % superlative adjectives % angriest.a baldest.a balmiest.a basest.a bawdiest.a biggest.a : ({Xc+} & {NR-} & {[[@Ec-]]} & La-) or ({NR- or ND-} & DD- & & {TOn+} & ) or AJrs- or AJls+; /en/words/words.adj.3: ; favorite.a favourite.a: or ({Xc+} & {[[@Ec-]]} & [[Lf-]]) or ([[Ds-]] & & {TOn+} & ); sole.a main.a: {Xc+} & {NR-} & {[[@Ec-]]} & L-; same.a own.a: ({Xc+} & {NR-} & {[[@Ec-]]} & La-) or (DD- & & {TOn+} & ); the_same: {EZ-} & (D**y+ or Oy- or Jy- or MVy-); next.a: ({Xc+ & {Xd-}} & CO+) or MVp- or DTi+ or NR+ or ({Xc+} & {[[@Ec-]]} & L-) or (DD- & & {TOn+} & ); past.a previous.a: ({[[@Ec-]]} & {Xc+} & A+) or L- or (Pa- & {@MV+}); following.a remaining.a top.i: L-; hardest.a easiest.a: ({Xc+} & {NR-} & {[[@Ec-]]} & La-) or ({NR- or ND-} & DD- & & {TOt+ & B+} & ) or AJrs- or AJls+; worst.a longest.a fastest.a furthest.a farthest.a: ({Xc+} & {NR-} & {[[@Ec-]]} & La-) or ({NR- or ND-} & DD- & (( & {TOn+} & ) or MVa-)) or AJrs- or AJls+; % "he likes you best of all" has no determiner, just uses MVa-. best.a: ({Xc+} & {NR-} & {[[@Ec-]]} & La-) or ({NR- or ND-} & DD- & (( & {TOn+} & ) or (MVa- & {Mp+}))) or [[E+]] or [MVa- & {Mp+}] or AJrs- or AJls+; % =========================================================================== %ADVERBS %ADVERBS WHOSE MAIN USE IS ADJECTIVAL far_from: {EE-} & EA+; a_bit a_little_bit a_little_while: ({EE-} & EA+) or EC+ or EE+ or ({Xd- & Xc+} & MVa-) or ; % pretty.e extremely very_very very_very_very exceptionally unbelievably incurably extraordinarily jolly.e mighty.e damn.e exceedingly overly downright plumb vitally abundantly chronically frightfully genuinely humanly patently singularly supremely unbearably unmistakably unspeakably awfully decidedly demonstrably fashionably frighteningly horrifyingly indescribably intolerably laughably predominantly unalterably undisputedly unpardonably unreasonably unusually hugely infernally: ({EE-} & EA+) or EE+; notoriously.e: ({EE-} & EA+) or EE+ or Em+; % Adverbs whose main use is adjectival, but can be used with % adverbs such as "faster", "dumber", etc. % "That one is marginally better". (thus EBm+) % "It's an inherently better method" thus E+ link fabulously incomparably inherently marginally moderately relatively ridiculously unacceptably unarguably undeniably unimaginably: ({EE-} & EA+) or EE+ or ({EE-} & EBm-) or E+; wide.e: EE+; very.e way.e: ({EE-} & EA+) or EE+ or [[La-]]; real.e: [[EA+ or EE+]]; quite: ({EE-} & EA+) or EE+ or EZ+ or [[Em+]]; amazingly strangely incredibly: ({EE-} & EA+) or EE+ or ({Xd- & Xc+} & Em+) or ({Xc+ & {Xd-}} & CO+) or EBm- or (Xd- & Xc+ & MVa-); rather: EA+ or EE+ or Vw- or ({Xc+ & {Xd-}} & CO+); particularly: EA+ or EE+ or Em+ or EB- or (MVl- & (MVp+ or MVa+ or MVs+)) or ({Xc+ & {Xd-}} & CO+); notably: EB- or EA+ or EE+ or ({Xc+ & {Xd-}} & CO+); almost nearly: EA+ or EE+ or EN+ or EZ+ or Em+ or EBm-; just_about: Em+ or EN+ or EZ+ or EA+; entirely reasonably highly fairly totally completely terribly: EA+ or EE+ or ({EE- or EF+} & (({Xd- & Xc+} & MVa-) or Em+ or Qe+ or Ca+)); absolutely: EA+ or EE+ or EBm- or ({EE- or EF+} & (({Xd- & Xc+} & MVa-) or Em+ or Qe+ or Ca+)); % allowing as opener also altogether equally: EA+ or EE+ or ({EE- or EF+} & (({Xd- & Xc+} & MVa-) or Em+ or Qe+ or Ca+)) or ({Xc+ & {Xd-}} & CO+); really: EA+ or EE+ or Em+ or EBm-; surprisingly: EA+ or EE+ or ({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & E+) or (Xd- & Xc+ & MVa-); especially: EA+ or EE+ or EB- or Em+ or (MVl- & (MVp+ or MVa+ or MVs+)) or ({Xc+ & {Xd-}} & CO+); virtually: EA+ or EE+ or EN+ or EZ+ or Em+; wholly fully critically greatly grossly duly unduly: EA+ or ({EE- or EF+} & (({Xd- & Xc+} & MVa-) or Em+ or Qe+ or Ca+)); seemingly utterly: EA+ or Em+; barely scarcely hardly merely truly practically: Em+ or EBm- or EA+; partly.e largely.e mostly.e chiefly.e simply.e1 purely.e solely.e: Em+ or EA+ or EB- or (MVl- & (MVp+ or MVa+ or MVs+)); % "It sure is great" sure.ee: Em+; more_and_more less_and_less more_or_less: Em+; % Adverbs like "biochemically". These tend to answer the question "how?" % with a noun-form (as opposed to being verb-derived) A lot of these are % of the "-ically" form /en/words/words.adv.3: EA+ or ({Xd- & Xc+} & (E+ or MVa-)) or EBm- or ({{Xd-} & Xc+} & CO+); in_part: EB- or (MVl- & (MVp+ or MVa+ or MVs+)); % academically administratively aesthetically %ADVERBS WHOSE ONLY (MAIN) USE IS POST_VERBAL barefoot.e willy-nilly quarterly.e madly.e outright.e staccato.e legato.e all_the_way all_the_time anymore.e aloud.e upwards.e downwards.e upward.e downward.e inward.e outward.e inwards.e outwards.e anytime.e live.e wholesale.e anew.e forever.e awhile.e aback.e afoul.e afresh.e aloft.e amok.e amuck.e onstage.e apiece.e askance.e astern.e asunder.e inter_alia mutatis_mutandis par_excellence upside-down.e ab_initio ad_infinitum ad_lib ad_libitum ad_nauseum en_masse aground.e astray.e into_account into_effect to_market to_bid from_scratch to_office for_office for_good at_once to_normal to_bed to_town into_office in_advance to_trial by_lot in_stride by_credit_card by_ear by_foot in_kind en_masse to_mind in_mind in_pencil in_pen to_scale for_trial all_right full_time part_time by_proxy: {Xd- & Xc+} & MVa-; % Adjectives that appear post-verbally e.g. "she wiped the table dry" % "we will arrive exhausted" % comparative link *must* have EE- to "more", "less" % These are more or less adverbs ... dry.e flat.e blind.e tired.e refreshed.e fresh.e exhausted.e rejuvenated.e: ({EE- or EF+ } & (MVa- or AJra- or AJla+)) or (EE- & (AJrc- or AJlc+)); wild.e rampant.e shut.e tight.e open.e loud.e hot.e cold.e free.e: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or Ca+); hard.e wrong.e: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or Qe+ or Ca+); early.e late.e: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or TA+ or Qe+ or Ca+); far.e: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or Ca+ or Qe+ or Yd+); yet.e: ({Xd- & Xc+} & MVa-) or EBm-; %ADVERBS USABLE POST-VERBALLY OR PRE-VERBALLY properly.e: ({Xd- & Xc+} & MVa-) or Em+; finely specially literally heavily alternately severely dearly voluntarily dramatically flatly purposely jointly narrowly universally thickly widely: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or Em+ or Qe+ or Ca+ or [[EA+]]); respectively: ({Xd- & Xc+} & MVa-) or ({Xd- & Xc+} & E+) or ({Xd- & Xc+} & EB-); long.e: E+ or ({EE- or EF+} & (({Xd- & Xc+} & MVa-) or OT- or FL- or Yt+)); daily.e nightly.e weekly.e monthly.e yearly.e hourly.e partially: ({Xd- & Xc+} & MVa-) or E+ or EB-; exactly.e: E+ or ({Xd- & Xc+} & MVa-) or EB- or EN+ or EZ+; well.e: ({EE- or EF+} & (({Xd- & Xc+} & MVa-) or Qe+ or Ca+ or [E+])) or [{EA- or EF+} & (Pa- or AF+)] or Yd+; roughly approximately: EA+ or ({EE- or EF+} & (EN+ or EZ+ or ({Xd- & Xc+} & MVa-) or E+)) or ({Xc+ & {Xd-}} & CO+); together: ({Xd- & Xc+} & MVa-) or E+ or K- or [Mp-] or ({Xc+ & {Xd-}} & CO+); definitely: {EE-} & (E+ or EB- or (Xd- & Xc+ & MVa-)); by_far: EB- or E+ or MVa-; hereby thereby reputedly: E+ or ({Xd- & Xc+} & EB-) or ({Xc+ & {Xd-}} & CO+); %ADVERBS USABLE POST-VERBALLY, PRE-VERBALLY, OR AS OPENERS initially already somehow again once_again nowadays sometimes nevertheless nonetheless at_first at_best at_present of_late indeed: ({Xd- & Xc+} & MVa-) or E+ or ({Xc+ & {Xd-}} & CO+) or EBm-; twice.e: ({Xd- & Xc+} & MVa-) or E+ or ({Xc+ & {Xd-}} & CO+) or EBm- or or ({EN-} & EZ+); hence: (Yt- & ({Xd- & Xc+} & MVa-)) or E+ or ({Xc+ & {Xd-}} & CO+) or EBm-; otherwise formerly lately: ({Xd- & Xc+} & MVa-) or E+ or ({Xc+ & {Xd-}} & CO+) or EB-; also.e: ({Xd- & Xc+} & (E+ or MVa-)) or ({Xc+ & {Xd-}} & CO+) or EB-; gradually.e sadly.e broadly.e clearly.e annually.e characteristically.e comparatively.e confidentially.e currently.e fundamentally.e hypothetically.e ironically.e justifiably.e momentarily.e mercifully.e nominally.e ominously.e periodically.e precisely.e realistically.e simultaneously.e subsequently.e superficially.e thankfully.e unofficially.e effectively.e traditionally.e briefly.e eventually.e ultimately.e mysteriously.e naturally.e oddly.e plainly.e truthfully.e appropriately.e simply.e2: {EE- or EF+} & (({Xd- & Xc+} & (MVa- or E+)) or ({Xc+ & {Xd-}} & CO+) or EB- or Qe+ or Ca+ or [[EA+]]); occasionally.e often.e specifically.e generally.e originally.e: {EE- or EF+} & (({Xd- & Xc+} & (MVa- or E+)) or ({Xc+ & {Xd-}} & CO+) or EB- or Qe+ or Ca+); % ordinary manner adverbs % abjectly ably abnormally abortively abruptly absent-mindedly absently : {EE- or EF+} & (({Xd- & Xc+} & MVa-) or Em+ or ({Xc+ & {Xd-}} & CO+) or Qe+ or Ca+ or or [[EA+]]); /en/words/words.adv.1: ; /en/words/words-medical.adv.1: ; % words.adv.4 contains "prepositional" adverbs, e.g. lingually % meidally subdermally ... Right now we treat these as ordinary % adverbs, and add the Pp- link .. but is this link actually used % anywhere? /en/words/words.adv.4: or Pp-; differently: {EE- or EF+} & (({MVp+} & {Xd- & Xc+} & MVa-) or Em+ or ({MVp+} & {Xc+ & {Xd-}} & CO+) or Qe+ or Ca+ or [[EA+]]); independently: {EE- or EF+} & (({(MVp+ or OF+)} & {Xd- & Xc+} & MVa-) or Em+ or ({(MVp+ or OF+)} & {Xc+ & {Xd-}} & CO+) or Qe+ or Ca+ or [[EA+]]); shortly: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or E+ or EI+ or ({Xc+ & {Xd-}} & CO+) or Qe+ or Ca+); immediately stat.e: ({Xd- & Xc+} & MVa-) or E+ or EI+ or ({Xc+ & {Xd-}} & CO+) or EB-; soon: ({EE- or EF+} & (({Xd- & Xc+} & MVa-) or E+ or EI+ or ({Xc+ & {Xd-}} & CO+) or EB- or Qe+ or Ca+)) or ({EA- or EF+} & (Pa- or AF+)); certainly possibly probably importantly remarkably interestingly: {EE-} & (E+ or (Xd- & Xc+ & (E+ or MVa-)) or ({Xc+ & {Xd-}} & CO+) or ({Xc+ & {Xd-}} & EB-)); /en/words/words.adv.2: % ordinary clausal adverbs E+ or (Xd- & Xc+ & (E+ or MVa-)) or ({Xc+ & {Xd-}} & CO+) or EBm-; % absurdly actually additionally admittedly allegedly alternatively % These are taken from words.adv.2 and allowed EB- when separated by % commas. however.e consequently.e moreover.e potentially.e conversely.e finally.e actually.e thusly.e: E+ or (Xd- & Xc+ & (E+ or MVa-)) or ({Xc+ & {Xd-}} & CO+) or ({Xc+ & {Xd-}} & EBm-); % TODO: "similarly" and "differently" get very different linking requirements. % see if these should be made the same. similarly.e: ({MVp+} & {Xd- & Xc+} & (E+ or MVa-)) or ({MVp+} & {Xc+ & {Xd-}} & CO+) or ({Xc+ & {Xd-}} & EBm-); not_suprisingly if_nothing_else: E+ or (Xd- & Xc+ & (E+ or MVa-)) or ({Xc+ & {Xd-}} & CO+) or EBm-; though.e: (Xd- & Xc+ & (E+ or MVa-)) or ({Xc+ & {Xd-}} & CO+); still.e presumably undoubtedly evidently apparently usually typically perhaps: E+ or (Xd- & Xc+ & (E+ or MVa-)) or ({Xc+ & {Xd-}} & CO+) or EB-; in_fact of_course in_effect for_example for_instance e.g. i.e. : E+ or (Xd- & Xc+ & (E+ or MVa-)) or ({Xc+ & {Xd-}} & CO+) or (EB- & {Xc+}) or (Xd- & EB- & Xc+) or ({Xd-} & CC- & Wd+); % ADVERBS USABLE POST_VERBALLY OR AS OPENERS % Note that similar interjective openers will be given COp+ links % by the UNKNOWN-WORD.a rule -- "Umm, I think he did it." no.e nope.e nah.e no_way yes.e yeah.e yep.e yup.e ok.e okay.e OK.e fine.e sure.e whatever.e someday.e sometime.e thereafter.e anyhow.e anyway.e overall.e afterwards.e afterward.e lengthwise.e worldwide.e nationwide.e statewide.e world-wide.e nation-wide.e state-wide.e industrywide.e instead.e prima_facie before_long by_hand by_car by_plane by_boat by_bus by_train by_phone by_telephone in_person at_long_last on_cue on_arrival by_request in_total in_turn over_and_over time_and_again later_on for_now day_by_day day_after_day step_by_step one_by_one for_sure for_certain even_so more_often_than_not all_of_a_sudden: ({Xd- & Xc+} & MVa-) or ({Xc+ & {Xd-}} & CO+); % Openers to directives, commands (Ic+ connection to infinitives) % or single-word interjections. These are semantically important, % so they've got to parse! no.ij nope.ij nah.ij no_way yes.ij yeah.ij yep.ij yup.ij ok.ij okay.ij OK.ij fine.ij exactly.ij sure.ij whatever.ij hah.ij hey.ij well.ij: Wi- or ; % Openers to directives, commands (Ic+ connection to infinitives) anyhow.ij anyway.ij afterwards.ij afterward.ij instead.ij by_hand by_car by_plane by_boat by_bus by_train by_phone by_telephone in_person at_long_last on_cue on_arrival by_request in_total in_turn over_and_over later_on for_now day_by_day day_after_day step_by_step one_by_one for_sure for_certain even_so more_often_than_not all_of_a_sudden: ; % sort-of-like given names ... stop.misc-inf sir.misc-inf madam.misc-inf ma'am: ; high.e deep.e low.e: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or ({Xc+ & {Xd-}} & CO+) or Ca+ or Qe+); left.e right.e straight.e: ({EE- or EF+} & (({Xd- & Xc+} & MVa-) or ({Xc+ & {Xd-}} & CO+) or Qe+ or Ca+)) or (Kx- & Ky+) or (Pp- & Pp+); short.e: {Yd- or EE- or EF+} & {OF+} & ({Xd- & Xc+} & MVa-); %ADVERBS USABLE ONLY PRE-VERBALLY (OR PRE-/OPENER) newly: E+; rightly: {EE-} & E+; necessarily no_longer: E+ or EBm-; ever: E+ or EBm- or EC+ or MVa-; never.e always: {EN-} & (E+ or EB-); seldom rarely.e: {EE-} & (E+ or EB-); % MVa-: "He did just what you asked." just.e: E+ or EB- or (MVl- & (MVa+ or MVp+ or MVs+)) or EN+ or EZ+ or MVa-; maybe: CO+; meantime.e secondly thirdly in_brief in_short in_sum in_essence: ({Xd- & Xc+} & E+) or ({Xc+ & {Xd-}} & CO+); furthermore: ({Xd- & Xc+} & E+) or ({Xc+ & {Xd-}} & CO+) or EB-; mainly primarily: E+ or ({Xc+ & {Xd-}} & CO+) or EB- or (MVl- & (MVa+ or MVp+ or MVs+)); only: La- or E+ or EN+ or EB- or (MVl- & (MVp+ or MVa+ or MVs+)) or MVa- or (Rnx+ & ) or (MVp+ & Wq- & Q+); never.i at_no_time not_once rarely.i since_when: {MVp+} & Wq- & Q+ & {CC+}; not_since: (J+ or Cs+) & Wq- & Q+ & {CC+}; even.e: E+ or EC+ or EB- or ((MVp+ or MVa+ or MVs+) & (MVl- or ({Xc+ & {Xd-}} & CO+))) or (Rnx+ & ); not_even: Rnx+ & ; too: {ECa-} & (EA+ or EE+ or ({Xd- & Xc+} & MVa-) or (Xd- & Xc+ & E+)); so: (EAxk+ & {HA+}) or ({EZ-} & EExk+) or ((({Xd-} & CC-) or ({Xc+} & Wc-)) & (Wd+ or Qd+ or Ws+ or Wq+)) or (Wq- & (PF+ or CQ+)) or O- or Js-; % original % sufficiently: {EE-} & (EAxk+ or EExk+ or MVak-); % modified sufficiently: {EE-} & (EAxk+ or EExk+ or ({Xd- & Xc+} & MVa-) or E+); so_that such_that: Cs+ & {Xd- & Xc+} & MVs-; % much like an ordinary adverb, except even more commas allowed % please.e: ; please.e: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or ({Xc+ & {Xd-}} & (Em+ or CO+)) or Qe+ or Ca+ or [[EA+]]); % polite command verb please.w thank_you: {Ic-} & Wi- & {{Xc+} & Vv+}; % MISCELLANEOUS WORDS AND PUNCTUATION etc: {Xi-} & Xd- & Xc+ & (MX- or MVa-); so_on the_like vice_versa v.v.: ( & ) or or (( or or or ) & {@MV+}) or M- or MV-; % Assorted interjections, treat like unknown adjectives. er err.ij errr um.ij umm uh uhh oh.ij ohh ooo woo_hoo gee gosh wow.ij ah ahh eh ehh hmm hmmm hoo zowie goody.ij jeepers Jee-sus hubba Kee-reist oops amen huh howdy dammit whammo shucks.ij heck anyways honey.ij golly man.ij baby.ij hush.ij sonuvabitch aw aww awww oh_great oh_wow emoticonID0 emoticonID1 emoticonID2 emoticonID3 emoticonID4 emoticonID5 emoticonID6 emoticonID7 emoticonID8 emoticonID9 emoticonID10 emoticonID11 emoticonID12 emoticonID13 emoticonID14 emoticonID15 emoticonID16 emoticonID17 emoticonID18 emoticonID19 emoticonID20 emoticonID21 emoticonID22 emoticonID23 emoticonID24 emoticonID25 emoticonID26 emoticonID27 emoticonID28 emoticonID29 emoticonID30 emoticonID31 emoticonID32 emoticonID33 emoticonID34 emoticonID35 emoticonID36 emoticonID37 emoticonID38 emoticonID39 emoticonID40 emoticonID41 emoticonID42 emoticonID43 emoticonID44 emoticonID45 emoticonID46 emoticonID47 emoticonID48 emoticonID49 emoticonID50 emoticonID51 emoticonID52 emoticonID53 emoticonID54 emoticonID55 emoticonID56 emoticonID57 emoticonID58 emoticonID59: or ({{Ic-} & [[Wi-]]} & {{Xd-} & Xc+} & Ic+); ".": ((Xp- or ({@Xca-} & Xc-)) & RW+) or Xi-; "!" "?": ((Xp- or ({@Xca-} & Xc-)) & RW+) or ({@Xca-} & Xq+); : {@Xca-} & Xx- & (W+ or Qd+) & {Xx+}; ";": ; % comma, as a conjunction -- "They taste bitter, not sweet" % Give MVa a cost, so that Pa is used preferentially, if possible. : ((AJla- & EBx+ & AJra+) & (Pa- or [[MVa-]])) or (AJla- & AJra+ & AJla+); : (RJlv- & RJrv+ & RJlv+); % sometimes comma is used as if it were a semicolon % Allow post-comma adverbial modifiers, but discourage these % because the modifier my be long to a following phrase. % e.g. "The blah, soon to be blah, will be blah." should not % get an EBx link to "soon". % XXX the correct solution to this is to add a new domain rule ! XXX % % Comma can conjoin nouns only if used in a list of 3 or more items: % "This, that and the other thing" % However, this is given a cost, so that geographic names are prefered: % "He went to Gaeta, Italy, and to Paris, France." % ",": ({@Xca- or [[[@Xc-]]]} & (({[EBx+]} & Xd+) or Xc-)) or [[]] or or or or [[SJl- & SJr+ & SJl+]] or (SJn- & SJr+ & SJn+); "…" ":.j" "•": ({@Xca-} & ((Xx- & (W+ or J+ or Qd+ or TH+ or TOn+) & {Xx+}) or Xe-)); % The percent sign following a number % Also -- see above, for handling of 12ft. 12in. not just 12% "%": (ND- & {DD-} & & ) or (ND- & (OD- or AN+)); % See also /en/words/currency for curency names that follow a number. $ USD.c US$.c C$.c AUD.c AUD$.c HK.c HK$.c £ ₤ € ₳ ฿ ¢ ₵ ₡ ₢ ₫ ₣ ₴ ₭ ℳ ₥ ₦ ₧ ₰ ₨ ₪ ৳ ₮ ₩ ¥ 호점 † †† ‡ § ¶ © № "#": NM*x+ & (AN+ or NM*y- or [[G+]] or (NIfu+ or NItu-) or ({EN- or NIc- or [[A- & NSa-]]} & {@MX+} & (OD- or ({DD-} & {[[@M+]]} & ( or or [[(Ss+ & ) or SIs-]]))))); "&": G- & {Xd- & G-} & G+; "’" "'": YP- & (({AL-} & {@L+} & (D+ or DD+)) or [[]] or DP+); "'s.p" "’s.p": YS- & (({AL-} & {@L+} & (D+ or DD+)) or [[]] or DP+); % lparen, rparen, etc. is to be generated by the entity detector, and % substituted, at will. This helps avoid screw-ups in the constituent % tree, and in other places where things can get wrecked by raw % punctuation. % lparenID0 lparenID1 lparenID2 lparenID3 lparenID4 lparenID5 lparenID6 lparenID7 lparenID8 lparenID9 lparenID10 lparenID11 lparenID12 lparenID13 lparenID14 lparenID15 lparenID16 lparenID17 lparenID18 lparenID19 lparenID20 lparenID21 lparenID22 lparenID23 lparenID24 lparenID25 lparenID26 lparenID27 lparenID28 lparenID29 lparenID30 lparenID31 lparenID32 lparenID33 lparenID34 lparenID35 lparenID36 lparenID37 lparenID38 lparenID39 lparenID40 lparenID41 lparenID42 lparenID43 lparenID44 lparenID45 lparenID46 lparenID47 lparenID48 lparenID49 lparenID50 lparenID51 lparenID52 lparenID53 lparenID54 lparenID55 lparenID56 lparenID57 lparenID58 lparenID59 lbracketID0 lbracketID1 lbracketID2 lbracketID3 lbracketID4 lbracketID5 lbracketID6 lbracketID7 lbracketID8 lbracketID9 lbracketID10 lbracketID11 lbracketID12 lbracketID13 lbracketID14 lbracketID15 lbracketID16 lbracketID17 lbracketID18 lbracketID19 lbracketID20 lbracketID21 lbracketID22 lbracketID23 lbracketID24 lbracketID25 lbracketID26 lbracketID27 lbracketID28 lbracketID29 lbracketID30 lbracketID31 lbracketID32 lbracketID33 lbracketID34 lbracketID35 lbracketID36 lbracketID37 lbracketID38 lbracketID39 lbracketID40 lbracketID41 lbracketID42 lbracketID43 lbracketID44 lbracketID45 lbracketID46 lbracketID47 lbracketID48 lbracketID49 lbracketID50 lbracketID51 lbracketID52 lbracketID53 lbracketID54 lbracketID55 lbracketID56 lbracketID57 lbracketID58 lbracketID59 "(" "[": {EBx+} & Xd+; rparenID0 rparenID1 rparenID2 rparenID3 rparenID4 rparenID5 rparenID6 rparenID7 rparenID8 rparenID9 rparenID10 rparenID11 rparenID12 rparenID13 rparenID14 rparenID15 rparenID16 rparenID17 rparenID18 rparenID19 rparenID20 rparenID21 rparenID22 rparenID23 rparenID24 rparenID25 rparenID26 rparenID27 rparenID28 rparenID29 rparenID30 rparenID31 rparenID32 rparenID33 rparenID34 rparenID35 rparenID36 rparenID37 rparenID38 rparenID39 rparenID40 rparenID41 rparenID42 rparenID43 rparenID44 rparenID45 rparenID46 rparenID47 rparenID48 rparenID49 rparenID50 rparenID51 rparenID52 rparenID53 rparenID54 rparenID55 rparenID56 rparenID57 rparenID58 rparenID59 rbracketID0 rbracketID1 rbracketID2 rbracketID3 rbracketID4 rbracketID5 rbracketID6 rbracketID7 rbracketID8 rbracketID9 rbracketID10 rbracketID11 rbracketID12 rbracketID13 rbracketID14 rbracketID15 rbracketID16 rbracketID17 rbracketID18 rbracketID19 rbracketID20 rbracketID21 rbracketID22 rbracketID23 rbracketID24 rbracketID25 rbracketID26 rbracketID27 rbracketID28 rbracketID29 rbracketID30 rbracketID31 rbracketID32 rbracketID33 rbracketID34 rbracketID35 rbracketID36 rbracketID37 rbracketID38 rbracketID39 rbracketID40 rbracketID41 rbracketID42 rbracketID43 rbracketID44 rbracketID45 rbracketID46 rbracketID47 rbracketID48 rbracketID49 rbracketID50 rbracketID51 rbracketID52 rbracketID53 rbracketID54 rbracketID55 rbracketID56 rbracketID57 rbracketID58 rbracketID59 ")" "]": {@Xca-} & Xc-; – --.r -.r: [[{@Xca-} & Xx- & (W+ or J+ or Qd+ or TH+ or TO+) & {Xx+}]] or ({@Xca-} & (({EBx+} & Xd+) or Xc-)); foo: F+; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Morphology guessing for unknown words. % Given a particular kind of ending to a word, try to guess % its part-of-speech. % ING-WORDS.g: ( & ) or ( & ) % or ({@E-} & A+) or ; ING-WORDS.g: [( & )] or [( & )] or [({@E- or EA-} & A+)] or [] or (( & (({D*u-} & & ( or Bsm+)) or or (YS+ & {D*u-}) or (GN+ & (DD- or [()])) or Us-)) or AN+ or {AN-}); ED-WORDS.v-d: (( & ()) or ( & (([]) or ())) or (() & )) or or or ({@E-} & A+); S-WORDS.v: (( & ()) or ( & (([]) or ())) or (() & ) or ); S-WORDS.n: ( & (({NM+ or Dmc-} & & ( or Bpm+)) or ({NM+ or Dmc-} & ) or (YP+ & {Dmc-}) or (GN+ & (DD- or [()])) or Up-)) or [[AN+]]; LY-WORDS.e: {EE- or EF+} & (({Xd- & Xc+} & MVa-) or Em+ or ({Xc+ & {Xd-}} & CO+) or Qe+ or Ca+ or [[EA+]]); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Morphology guessing extension rules from BioLG-1.1.12 % Words guessed based on morphology. % These occur primarily in biomedical and chemistry texts. % These are processed via regular-expression matching, in 4.0.regex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% MC-NOUN-WORDS.n: % guessed nouns that can be mass or countable (-in, -ine, -ion, -yl, -ose, -ol, -ide, -ity) ( & (({NM+ or D*u-} & & ( or Bsm+)) or ({NM+ or D*u-} & ) or (YS+ & {D*u-}) or (GN+ & (DD- or [()])) or Us-)) or AN+; C-NOUN-WORDS.n: % guessed nouns that are countable (-on, -or) ( & (((NM+ or Ds-) & & ( or Bsm+)) or ({NM+ or Ds-} & ) or (YS+ & Ds-) or (GN+ & (DD- or [()])) or Us-)) or AN+; ADJ-WORDS.a: % guessed adjectives (-ous, -ar, -ic) ; % guessed adjectives/adverbs suffixed by "fold" with or without hyphen FOLD-WORDS: ({EN-} & (MVp- or EC+ or A+)) or Em+; % latin (postposed) adjectives considered as mass nouns % in the current version LATIN-ADJ-WORDS.a: ( & (({NM+ or D*u-} & & ( or Bsm+)) or ({NM+ or D*u-} & ) or (YS+ & {D*u-}) or (GN+ & (DD- or [()])) or Us-)) or AN+; % latin (postposed) adjectives or latin plural noun always considered % as nouns in the current version LATIN-ADJ-P-NOUN-WORDS: ( & (({NM+ or Dmc-} & & ( or Bpm+)) or ({NM+ or Dmc-} & ) or (YS+ & {Dmc-}) or (GN+ & (DD- or [()])) or Up-)) or AN+; % latin (postposed) adjectives or latin singular noun always % considered as nouns in the current version LATIN-ADJ-S-NOUN-WORDS: ( & (({NM+ or D*u-} & & ( or Bsm+)) or ({NM+ or D*u-} & ) or (YS+ & {D*u-}) or (GN+ & (DD- or [()])) or Us-)) or AN+; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Guessing of unknown words, if none of the above rules applied. UNKNOWN-WORD.n: & (AN+ or ({NM+ or D*u-} & & ( or Bsm+)) or ({NM+ or D*u-} & ) or (YS+ & {D*u-}) or (GN+ & (DD- or [()])) or U-); UNKNOWN-WORD.v: {@E-} & (Sp- or (RS- & Bp-) or I- or ({Ic-} & Wi-)) & {B- or O+} & {@MV+}; UNKNOWN-WORD.a: ; LEFT-WALL: (Wd+ or Wq+ or Ws+ or Wj+ or Wc+ or Wi+ or Qd+) & {CP+} & {Xx+} & {RW+ or Xp+}; RIGHT-WALL: RW- or ({@Xca-} & Xc-); % XXX ANDABLE-CONNECTORS is now deprecated, needs to be removed for version 5.0 ANDABLE-CONNECTORS: % these are the connectors that can be combined by % conjunctions. They are listed alphabetically. A+ & A- & AF- & AN+ & B+ & B- & BI- & C+ & C- & CC+ & CO+ & CO- & D+ & D- & DD- & DT- & E+ & E- & EA- & G+ & GN+ & GN- & I+ & I- & IN- & J+ & J- & JT- & K- & L- & M+ & M- & MV- & MV+ & MX- & ND+ & NM+ & NIn+ & O+ & O- & ON- & QI+ & QI- & P- & PP- & Q- & R+ & RS- & S+ & S- & SI- & TA- & TD+ & TD- & TH+ & TH- & TI- & TM- & TO- & TS- & U- & Wd- & Wi- & Wq- & Ws- & Xc+ & Xd- & YP+ & YS+ & Z-; UNLIMITED-CONNECTORS: % These are the link-types that are not subject % to the length limit. Always use "+" for these. S+ & CO+ & C+ & Xc+ & MV+ & CC+ & TH+ & W+ & RW+ & Xp+ & Xx+ & CP+ & SFsx+; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Extensions by Peter Szolovits, psz@mit.edu, as a part of the work for % "Adding a Medical Lexicon to an English Parser. Proc. AMIA 2003 Annual % Symposium, xx-yy. % Visit http://www.medg.lcs.mit.edu/projects/text/ for more information. % although in_as_much_as whilst whereas whereof wherein: (Cs+ & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-))) or ({Xd-} & CC- & Wd+); benumbed.a bespattered.a non_compos_mentis dead_on_arrival bedimmed.a null_and_void bedewed.a au_fait dead_of_other_causes right_sacrotransverse above_board K/O.a SGA.a TBA.a DOA.a asialo.a syntonic.a loco.a haywire.a: ((Ma- or Pa- or MJra-) & {@MV+}) or ({@MV+} & MJla+) or ; subject_to status_post in_conjunction_with sensu in_relation_to neath amidst across_from circa astride previous_to together_with as_regards s/p aka amongst unto apropos_of w.i W.i: ({JQ+} & (J+ or Mgp+) & ) or (MVp- & B-); oftenest correctliest soonest disquietingliest: EA+; proof-reads.v proof_reads gells.v O.K.'s.v OK's.v O.K.’s OK’s: (( & ()) or ( & ([()] or ())) or (() & )); propension.n: ( & ((Ds- & {@M+} & {(TOn+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or Bsm+)) or Us- or (YS+ & Ds-) or (GN+ & (DD- or [()])))) or AN+; avow.q: [[{@E-} & (((Sp- or I-) & ) or (SIpj+ & ))]]; longest-term.a: ({Xc+} & {NR-} & {[[@Ec-]]} & La-) or ({NR- or ND-} & DD- & (( & {TOn+} & ) or MVa-)); daren't mayn't shan't oughtn't mightn't daren’t mayn’t shan’t oughtn’t mightn’t: ({{Ic-} & Q-} & (SI+ or SFI+) & I+) or ({@E-} & (S- or SF- or (RS- & B-)) & (I+ or [[()]])); longer-term.a: ({ECa-} & (({[[@Ec-]]} & {Xc+} & Am+) or ((Pafm- or AFm+ or Mam-) & {@MV+} & {(TOi+ or THi+) & {LE+}}))) or (DG- & (TR+ or AF+) & {@MV+} & {TOi+ or THi+} & (ER- or (Wd- & Xc+ & ER+))); attestation.n: ( & (({D*u-} & {@M+} & {(TH+ or (R+ & Bs+)) & {[[@M+]]}} & {@MXs+} & ( or (Ss*t+ & ) or SIs*t- or Bsm+)) or Us- or (YS+ & {D*u-}) or (GN+ & (DD- or [()])))) or AN+; O.K.'d.v-d OK'd.v-d O.K.’d.v-d OK’d.v-d: (( & ()) or ( & (([]) or ())) or (() & )); whence whither: {EL+} & (Cs+ & (({Xc+ & {Xd-}} & CO+) or ({Xd- & Xc+} & MVs-))); % Strange -- the JT- is a time-expression link .. .is that right here ?? articulo_mortis intra_vitam in_articulo_mortis in_extremis post_cibum post_coitum: or JT- or [[E+]] or YS+ or [[]]; lest: (Cs+ or Mgp+ or Mv+) & (({Xc+ & {Xd-}} & CO*s+) or ({Xd- & Xc+} & MVs-) or (Xd- & Xc+ & E+)); whyever: ({EL+} & ((Wq- & Q+) or (QI- & (Cs+ or TOn+)) or (Cs+ & ((SFsx+ & ) or WY- or BIq-)))) or [[{@CO-} & Wc- & Wi+]]; albeit: (Cs+ & {Xc+ & {Xd-}} & CO*s+) or ({Xd-} & CC- & Wd+); whichever: ({EL+} & (((Ss*d+ or Bsd+ or BW+ or D**w+) & ( or (Xc+ & {Xd-} & CO+) or ({Xd- & Xc+} & MVs-))) or [[(O- or J-) & CX+]])) or ((ALx+ & J+) & (({Xd-} & Xc+ & CO+) or ({Xd- & Xc+} & MVs-))); proof-reading.v proof_reading O.K.'ing.v OK'ing.v O.K.’ing.v OK’ing.v: ( & ) or ({@E-} & A+) or ; % "I'll hire whomever I can find": Os- whomever: (R- & Cr+) or (B*w+ & (Wq- or QI*d- or BIqd- or ((Xc+ or ) & Xd- & MX*r-))) or (Os- & Bsd+) or (Jr- & (RS+ or Cr+)) or Jw-; thyself oneself one's one’s: J- or O- or E+ or MVa-; % Handy test % grrr: (A- & B- & C+ & D+) or [(E- & @F+ & @G+ & H+)] or [[(I- & J- & @K- & @L+)]]; link-grammar/data/en/words/0000755000000000000000000000000012537603515013005 5ustar link-grammar/data/en/words/words-medical.v.4.30000644000000000000000000011574612536650432016246 0ustar abashed.v abjured.v ablated.v abnegated.v abominated.v abscessed.v abscised.v absented.v acccoutered.v accessioned.v acclimatised.v accoupled.v accoutred.v aced.v acetified.v acetonated.v acetonized.v acetylated.v acetylised.v acetylized.v achromatised.v achromatized.v acidulated.v actualised.v actualized.v actuated.v acylated.v adducted.v adenosine_diphosphate-ribosylated adjured.v administrated.v admixed.v ADP-ribosylated.v adrenalectomized.v adsorbed.v adulated.v advantaged.v afforested.v affronted.v afterloaded.v agglomerated.v aggrieved.v agonised.v airbrushed.v alcoholised.v alcoholized.v aliased.v alined.v aliquoted.v alited.v alit.v alkalinised.v alkalinized.v alkalised.v alkalized.v alkylated.v allelotyped.v allergized.v allografted.v alloimmunised.v alloimmunized.v allotransplanted.v alloyed.v allured.v alphabetised.v alphabetized.v aluminated.v Americanised.v amidated.v aminated.v aminoacylated.v ammoniated.v amortised.v anaesthetised.v anatomized.v anergised.v anesthetised.v anglicised.v animadverted.v annualised.v annualized.v annunciated.v anodised.v anodized.v anonymised.v anonymized.v anoxiated.v antagonised.v anted.v anteriorised.v anteriorized.v antiaggregated.v anticoagulated.v antigenised.v antigenized.v antirepressed.v antisepticised.v antisepticized.v apeased.v apodized.v apologised.v apostatised.v appaled.v appareled.v apparelled.v apported.v apposed.v apprized.v arborised.v arced.v archived.v arcked.v aromatised.v aromatized.v arsonated.v arterialized.v articled.v asexualized.v asperged.v aspersed.v asseverated.v asterisked.v atomised.v attitudinised.v audiotaped.v auscultated.v authored.v autocatalysed.v autoclaved.v autogenerated.v autoimmunised.v autoimmunized.v autoinduced.v autoinducted.v autoinjected.v autolised.v automatised.v auto-oxidised.v autoperfused.v autopsied.v autopsyed.v autoradiographed.v autoregulated.v autosensitised.v autotransplanted.v auxotyped.v avalanched.v avianised.v avianized.v avowed.v avulsed.v awaked.v axotomised.v axotomized.v azotized.v babied.v babyed.v baby-sat.v baby-sited.v backcrossed.v backdroped.v backdropped.v backlabeled.v backlabelled.v backscattered.v bade.v baed.v ballasted.v balled.v balloted.v bandpass_filtered baptised.v barbered.v bariumized.v barracked.v barraged.v barreled.v bastardized.v bayoneted.v beached.v beaded.v beavered.v bedaubed.v bedded.v bedecked.v bedeviled.v behooved.v behoved.v beleaguered.v belled.v bench_pressed beneficed.v benzoylated.v bereft.v bereved.v beseted.v besmeared.v besought.v betrothed.v bettered.v beveled.v biassed.v bibbed.v bibed.v bicompartmentalised.v binged.v bioactivated.v bioassayed.v bioconverted.v bioengineered.v biomagnified.v bio-monitored.v biomonitored.v biopsied.v bioreduced.v bioremediated.v biosynthesised.v biosynthesized.v biotinylated.v biotransformed.v biotyped.v bisintercalated.v bivouacked.v blacked.v blancoed.v blanked.v blent.v blest.v blobbed.v blobed.v blooded.v bloodied.v blued.v blustered.v boated.v bobsleded.v boobed.v boomeranged.v boostered.v bootstraped.v bootstrapped.v bottle-fed.v bottlenecked.v brained.v brain-washed.v brazed.v breakfasted.v breasted.v breast-fed.v breast-feeded.v breveted.v brevetted.v broadsided.v brodded.v broded.v bromated.v brominated.v bromized.v bruited.v brutalised.v bucketed.v buffered.v bulbectomized.v bulked.v bulled.v bunkered.v burked.v burnt.v burred.v bussed.v cached.v caked.v calendered.v calipered.v calked.v callipered.v calumniated.v canalized.v cancerised.v cankered.v cannulated.v cannulized.v canopied.v canopyed.v canted.v cantilevered.v capacitated.v capillarised.v capitalised.v capitated.v caponised.v caponized.v captained.v carbamoylated.v carbamylated.v carbolated.v carbolised.v carbolized.v carbonated.v carbonised.v carboxylated.v cardiectomized.v careered.v cartooned.v cashiered.v catabolised.v catalase_tested catalised.v catalized.v cataloged.v catalysed.v catalyzed.v categorised.v catheterised.v catheterized.v caulked.v causticized.v cauterised.v cauterized.v cavitated.v C_banded C-banded.v cementified.v centrifugalised.v centrifugalized.v centrifugated.v centrifuged.v cered.v certificated.v chaffed.v chamfered.v champed.v chanced.v channeled.v chaped.v chapped.v characterised.v charbroiled.v checkered.v cheeked.v chemoattracted.v chemo-prevented.v chemoprevented.v chemo-sensitised.v chemo-sensitized.v chemosensitized.v chequered.v chickened.v chid.v chined.v chinked.v chiseled.v chlored.v chloroformed.v chloroformised.v chloroformized.v chocked.v cholecystectomised.v cholecystectomized.v chorused.v chromated.v chromatized.v chromatographed.v chromicized.v chunked.v chuted.v cicatrised.v cicatrized.v ciphered.v circularised.v circumducted.v civilised.v classed.v clear-cutted.v clearcutted.v clewed.v clocked.v clouted.v clued.v clysterized.v coactivated.v coadministered.v co-agglutinated.v co-applied.v coapplied.v coapted.v coarticulated.v co-assembled.v coassembled.v cocainised.v cocainized.v co-calibrated.v cocalibrated.v co-chromatographed.v cochromatographed.v co-circulated.v co-clustered.v coclustered.v co-colonized.v cocolonized.v cocooned.v co-crystallized.v cocrystallized.v co-cultivated.v cocultivated.v cocultured.v co-developed.v co-electroporated.v coelectroporated.v coeluted.v co-encapsidated.v coencapsidated.v coencapsulated.v co-enriched.v coenriched.v co-existed.v co-exposed.v coexposed.v coexpressed.v co-extracted.v cografted.v cogwheeled.v co-hybridised.v cohybridised.v co-hybridized.v cohybridized.v coimmobilised.v coimmobilized.v coinfected.v coinfused.v co-ingested.v coingested.v co-inherited.v coinherited.v co-inoculated.v coinoculated.v coked.v collateralised.v collectivised.v colliquated.v colonised.v colonoscoped.v colorised.v colorized.v colourized.v co-managed.v comanaged.v comedicated.v cometabolised.v commercialised.v compartmentalised.v compartmented.v compassed.v compeered.v complexed.v comported.v computerised.v concatenated.v conceptualised.v concorded.v concreted.v concussed.v conded.v condoled.v conduced.v coned.v conglomerated.v conglutinated.v consternated.v constitutionalized.v cont'd.v cont'd..v contradistinguished.v contraindicated.v controverted.v contunded.v contused.v convoluted.v co-ordinated.v coossified.v co-oxidised.v cooxidised.v co-oxidized.v cooxidized.v co-partitioned.v co-perfused.v coperfused.v copolymerised.v copolymerized.v coppered.v coproduced.v co-promoted.v copromoted.v corbeled.v corbelled.v co-reared.v coreared.v co-registered.v co-regulated.v coregulated.v co-released.v coreleased.v corkscrewed.v corned.v cornified.v corraled.v co-secreted.v cosecreted.v cosegregated.v cosensitised.v cosensitized.v coshed.v cosolubilised.v cosolubilized.v co-sponsored.v cosponsored.v cosseted.v costarred.v co-stimulated.v costimulated.v co-stored.v costored.v co-synthesised.v cosynthesised.v co-synthesized.v cosynthesized.v cotranscribed.v cotransfected.v co-transfered.v cotransfered.v co-transferred.v cotransferred.v cotransformed.v cotransmitted.v co-transported.v cotransported.v co-treated.v cotreated.v coulorised.v counselled.v counterpoised.v counterregulated.v countersinked.v counterstained.v counter-transported.v countertransported.v countervailed.v coursed.v court-martialled.v covenanted.v cowed.v cozened.v crabbed.v crafted.v craped.v crated.v cratered.v creped.v crewed.v cricked.v criminalised.v criminalized.v crimsoned.v crisped.v criss-crossed.v cristallised.v cristallized.v criticised.v critiqued.v crocked.v cross-clamped.v crossclamped.v cross_fertilized cross-linked.v cross_matched cross-matched.v cross-protected.v crossprotected.v cross-reacted.v crossreacted.v cross-referenced.v crossreferenced.v crusted.v cryo-fixed.v cryofixed.v cryo-preserved.v cryopreserved.v cryoprotected.v cryo_sectioned cryo-sectioned.v cryotreated.v crystallised.v cuckooed.v cudgelled.v cued.v cumbered.v cunded.v curarised.v curarized.v curated.v cureted.v curetted.v curtained.v cussed.v customised.v customized.v cyanylated.v cyclised.v cyphered.v cyto-adhered.v cytoreduced.v cytostained.v dansylated.v dappled.v deacetylated.v deactivated.v deacylated.v de-adenylated.v deadenylated.v deafferentated.v deafferented.v deallergised.v deamidated.v deamidized.v deaminated.v debouched.v debrided.v debulked.v debuted.v decalcified.v decannulated.v decapsulated.v decarboxylated.v decatenated.v decentralised.v decerebrated.v decerebrized.v dechlorinated.v decidualised.v decocted.v decolonised.v decolorised.v decolorized.v decolourised.v decolourized.v decomplementized.v decontroled.v decontrolled.v deconvoluted.v decoronated.v decorticated.v decoupled.v decoyed.v decreed.v deemanated.v de-energised.v deenergised.v de-energized.v deenergized.v de-epicardialized.v de-epithelialised.v deepithelialised.v deethylated.v defaecated.v defaunated.v defeminised.v defeminized.v defenestrated.v defibrillated.v defibrinated.v deflorated.v defocused.v defocussed.v deformylated.v defunctionalised.v defunctionalized.v degalactosylated.v degased.v degassed.v degaussed.v degenitalized.v deglycerated.v degreased.v dehaematised.v dehalogenated.v dehematized.v dehemoglobinized.v dehorned.v dehulled.v dehumanised.v dehydrochlorinated.v dehydrogenated.v dehydrogenised.v dehydrogenized.v dehydroxylated.v dehypnotised.v dehypnotized.v deinduced.v deinstitutionalized.v deionised.v deionized.v dejected.v de-leaded.v deleaded.v delimitated.v delipidated.v delocalised.v delocalized.v deloused.v demagnetised.v demarked.v demasculinised.v demedullated.v demembranated.v demetalised.v demetalized.v demethylated.v demilitarised.v demineralised.v demineralized.v demobilised.v democratised.v demodulated.v demonetised.v demonetized.v demoralised.v demustardized.v demyelinated.v demystified.v denationalised.v denatured.v denervated.v denitrated.v denitrified.v deodorised.v deoxidised.v deoxidized.v deoxygenated.v depancreatized.v deparaffinised.v deparaffinized.v departmentalised.v depersonalized.v dephosphorylated.v depigmented.v depilated.v depolarised.v depoliticised.v depoliticized.v depolymerised.v depotentiated.v depraved.v depressurised.v depressurized.v deprojected.v deprotected.v deproteinated.v deprotonated.v depurated.v deputed.v deputised.v deregulated.v derepressed.v deresinated.v derivatised.v derivatized.v derivitised.v derivitized.v deroofed.v derotated.v derricked.v desalinised.v desalted.v desamidated.v desamidized.v descaled.v desensitised.v desexualised.v desexualized.v desheathed.v desialylated.v desolated.v desolvated.v desorbed.v despeciated.v destabilised.v destablised.v destablized.v destained.v desulfated.v desulfurated.v desulphated.v desulphurated.v desynchronised.v dethyroidized.v detoured.v detoxicated.v deuterated.v deuteriated.v devascularized.v deviled.v devilled.v devitalised.v devitalized.v dewormed.v dextrinated.v dextrinized.v diacetylated.v diacylated.v diagramed.v diagrammed.v dialkylated.v dialoged.v dialogued.v dialysed.v diapaused.v diapered.v diazotized.v dibbled.v dickered.v dideuterated.v diesterified.v difluorinated.v digitalised.v digitilised.v digitised.v digitized.v dihalogenated.v dihydrogenated.v dihydroxylated.v diiodinated.v diked.v dilatated.v dimerised.v dimethylated.v dimited.v dimitted.v dimpled.v diphosphorylated.v dirtied.v disacidified.v disadvantaged.v disaggregated.v disambiguated.v disarrayed.v disbelieved.v disbudded.v disbuded.v disburdened.v discoed.v discoloured.v discommoded.v discomposed.v disconfirmed.v discountenanced.v discretised.v discretized.v disembodied.v disemboweled.v disencumbered.v disfavored.v dishabituated.v disheveled.v dishonored.v disimmunized.v disinhibited.v disinserted.v disjointed.v dismutated.v disoccluded.v disordered.v disorganised.v disorganized.v dispensarised.v dispensarized.v dispirited.v disproportionated.v disquieted.v disregulated.v dissatisfied.v dissimilated.v distempered.v distrained.v divulsed.v docketed.v dolled.v dollied.v dollyed.v domiciled.v dorsalised.v dorsiducted.v dosed.v dossed.v douched.v doweled.v dowelled.v downmodulated.v downregulated.v downstaged.v dowsed.v dramatised.v drated.v dratted.v driveled.v drivelled.v drudged.v dumfounded.v duned.v dunned.v duplexed.v dyked.v dysregulated.v eared.v earthed.v echolocated.v economised.v ecphorised.v ecphorized.v ectropionised.v ectropionized.v editorialised.v educed.v edulcorated.v effectuated.v effed.v egested.v ekphorized.v elated.v electroblotted.v electro-cauterised.v electrocauterised.v electro-cauterized.v electrocauterized.v electrodialysed.v electroeluted.v electro-injected.v electroinjected.v electroinserted.v electrophored.v electrophoresed.v electroplated.v electroporated.v electrotransfered.v electrotransferred.v electroverted.v eluted.v elutriated.v emaciated.v embolised.v embrocated.v emedullated.v empaneled.v empathised.v emphasised.v emplaced.v emulsioned.v enameled.v enamored.v enamoured.v encapsulated.v enchained.v encored.v encrusted.v endarterectomised.v endarterectomized.v endoscoped.v endothelialised.v endued.v energised.v energized.v enfeebled.v engrafted.v engrailed.v enkindled.v enlaced.v enplaned.v enraptured.v ensheathed.v ensilaged.v ensiled.v enterectomised.v enterectomized.v enthraled.v entropionized.v envelopped.v envenomed.v environed.v enwraped.v enwrapped.v epilated.v epimerised.v epithelialised.v epithelialized.v epithelised.v epithelized.v epitomised.v epoxidised.v epoxidized.v equaled.v equalised.v equilibrated.v eroticised.v eroticized.v erotised.v erotized.v essayed.v esterified.v estranged.v estrogenised.v estrogenized.v etherised.v etherized.v ethylated.v euthanatised.v euthanatized.v euthanised.v euthanized.v evaginated.v everted.v evidenced.v exacted.v exanimated.v excerpted.v exchange-transfused.v excogitated.v execrated.v exenterated.v exorcised.v expatriated.v exsanguinated.v exsected.v exsomatized.v exteriorised.v exteriorized.v externalised.v extruded.v extubated.v factorised.v factorized.v faggoted.v fagoted.v familiarised.v fantasised.v faradised.v faradized.v farnesylated.v fathered.v feather-beded.v fecundated.v federalised.v federalized.v fee'd.v felicitated.v feminised.v feminized.v fenestrated.v fertilised.v feued.v fictionalised.v fictionalized.v field_tested field-tested.v filched.v filtrated.v finalised.v fingerprinted.v fire-proofed.v fireproofed.v fissured.v fistulised.v flabbergasted.v flanged.v flecked.v fleshed.v flexibilised.v flexibilized.v floodlighted.v flounced.v floured.v fluidized.v fluoresceinated.v fluoridised.v fluoridized.v fluoroscoped.v fluted.v foaled.v focalised.v foged.v fogged.v footled.v footnoted.v footprinted.v footsloged.v forayed.v forboded.v forebade.v foreboded.v foredoomed.v foregrounded.v foreknowed.v forested.v foretasted.v formalinised.v formalinized.v formalised.v formatted.v formylated.v fossilised.v fowled.v foxed.v fractionated.v franchised.v fraternised.v freckled.v free_grafted free-grafted.v freeze_dried freeze-dried.v freeze-fractured.v freighted.v fringed.v frivolled.v frolicked.v fruited.v fuddled.v functionalised.v functionalized.v funked.v funneled.v furcated.v fured.v furred.v gabbed.v gabbled.v gabed.v gadded.v gaded.v galactosylated.v galavanted.v galivanted.v galvanised.v ganglionectomised.v ganglionectomized.v gangrened.v gapped.v garaged.v garlanded.v garoted.v garotted.v garroted.v garrotted.v gased.v gassed.v gastrectomised.v gastrectomized.v gated.v gavaged.v gazeted.v gazetted.v gelatinised.v gelded.v gened.v generalised.v genned.v genotyped.v gentled.v geocoded.v geranylgeranylated.v ghosted.v gingered.v girdled.v girted.v girt.v glaced.v glamorised.v glissaded.v globalised.v glomectomised.v glomectomized.v glomed.v glommed.v gloved.v glucoronised.v glucuronidated.v glued.v glycated.v glycerolated.v glycerolized.v glycosylated.v gonadectomized.v goosed.v gormandised.v gowned.v grained.v grandfathered.v grandparented.v graphed.v grassed.v graveled.v greened.v grimed.v grizzled.v grommeted.v grubbed.v grubed.v guested.v gulled.v gusseted.v guyed.v habilitated.v habituated.v haemagglutinated.v haemoagglutinated.v haemocoagulated.v haemodialysed.v haemodialyzed.v haemodiluted.v haemolysed.v haemolyzed.v haemoperfused.v haemorrhaged.v hallmarked.v halogenated.v handpicked.v haploidised.v happed.v haptenated.v harmonised.v hasped.v headlined.v hemicastrated.v hemi-deleted.v hemisected.v hemispherectomised.v hemispherectomized.v hemodialysed.v hemodialyzed.v hemodiluted.v hemolysed.v hemoperfused.v hemorrhaged.v heparinised.v heparinized.v hepatectomised.v hepatectomized.v heterodimerised.v hexed.v hied.v high-jacked.v hirudinized.v histocultured.v hoboed.v holed.v holidayed.v homed.v homodimerised.v homodimerized.v homogenised.v homografted.v honeycombed.v hooped.v horsed.v hospitalised.v hoted.v hotted.v hoved.v hoxed.v humanised.v humanized.v humored.v hurdled.v husbanded.v hyalinised.v hyalinized.v hybridised.v hydrogenated.v hydrogenized.v hydrolised.v hydrolized.v hydrolysed.v hydroxylated.v hyed.v hymned.v hyperacetylated.v hyperactivated.v hypercontracted.v hyperdefaecated.v hyperexpressed.v hyperextended.v hyperfiltrated.v hyperfractionated.v hyperimmunised.v hyperimmunized.v hyper-induced.v hyperinduced.v hyperinnervated.v hyperluteinised.v hyper-methylated.v hypermethylated.v hypernucleated.v hyperpolarised.v hyperproduced.v hypersensitised.v hyperstimulated.v hypertransfused.v hypertrophied.v hypnoidized.v hypnotised.v hypomineralised.v hypomineralized.v hypo-phosphorylated.v hypophosphorylated.v hypophysectomised.v hypophysectomized.v hyposensitized.v hypothecated.v hysterectomised.v hysterectomized.v idealised.v idolised.v imbedded.v imbeded.v immobilised.v immortalised.v immunised.v immunoabsorbed.v immunoadsorbed.v immuno_assayed immuno-assayed.v immunoassayed.v immunobloted.v immunoblotted.v immunocompromised.v immunodepleted.v immunodepressed.v immunoenhanced.v immunoexpressed.v immunoinhibited.v immunoisolated.v immunolabeled.v immunolabelled.v immunolocalised.v immunolocalized.v immunoneutralised.v immunoneutralized.v immunophenotyped.v immunopurified.v immunoradioassayed.v immunoregulated.v immunoscreened.v immunoselected.v immunostained.v immunostimulated.v immunosuppressed.v immuno-targeted.v immunotargeted.v immunotitrated.v immunotyped.v immured.v impaneled.v imperiled.v impersonalised.v impersonalized.v importuned.v incised.v inclosed.v incommoded.v incremented.v inculpated.v individualised.v individualized.v indorsed.v indued.v industrialised.v inebriated.v influxed.v ingled.v ingrafted.v ingrained.v inhumed.v initialed.v initialised.v initialized.v inlaid.v inlayed.v inned.v innervated.v inputed.v inputted.v inseted.v insetted.v insolubilised.v insolubilized.v insonified.v instanced.v institutionalised.v instrumented.v insufflated.v intellectualised.v intellectualized.v intercalated.v interconverted.v interfaced.v interiorised.v interiorized.v interlaced.v interlarded.v interleafed.v interlinked.v internalised.v internationalised.v interpellated.v interposed.v interspaced.v intrenched.v introjected.v introverted.v intrusted.v intubated.v inured.v inventoried.v inventoryed.v invoiced.v iodinated.v iodised.v ionised.v iontophoresed.v iridectomized.v isoimmunised.v isoimmunized.v isomerised.v italicised.v itemised.v jacketed.v jack_knifed jackknifed.v jecorized.v jejunectomised.v jejunectomized.v jeopardised.v jointed.v juiced.v junked.v karyotyped.v keened.v kenneled.v kennelled.v kented.v keratinised.v keyed.v kidnaped.v kinked.v kneed.v KO'd.v KO'ed.v labilised.v labyrinthectomised.v labyrinthectomized.v lacrymated.v lactonised.v laddered.v lambed.v lamed.v laminectomised.v laminectomized.v lammed.v laparotomised.v laparotomized.v lapinised.v lapinized.v larded.v lariated.v larked.v laryngectomised.v laryngectomized.v lasered.v lassooed.v lateralised.v lathed.v lathered.v lavaged.v layered.v leafleted.v leafletted.v leagued.v leant.v leap-froged.v leapfroged.v leap-frogged.v learnt.v leashed.v leeched.v leeped.v legalised.v legitimated.v legitimatised.v legitimised.v legitimized.v lentectomized.v lesioned.v lettered.v libeled.v liberalised.v ligated.v lilted.v limed.v limned.v linearized.v linged.v linned.v lipectomised.v lipectomized.v liped.v lipidated.v liposuctioned.v lipoxygenated.v lipped.v liquified.v lithographed.v lithotomized.v lobectomised.v lobectomized.v lobotomised.v lobotomized.v loosed.v lorded.v Lorded.v louped.v loured.v lowed.v lubrified.v lucked.v luteinised.v luxated.v lymphadenectomised.v lymphadenectomized.v lyophilised.v lyophilized.v lypophilised.v lypophilized.v lysogenised.v lysogenized.v macadamised.v macadamized.v machined.v macroencapsulated.v magnetised.v mainstreamed.v malaxated.v malignised.v malpositioned.v malted.v mantled.v manumited.v manumitted.v manured.v marathoned.v Marathoned.v marathonned.v Marathonned.v marginated.v marinaded.v marshaled.v marsupialized.v masculinised.v masculinized.v massacred.v mastectomised.v mastectomized.v master-minded.v materialised.v matted.v maximised.v mazed.v mechanised.v medialised.v medicalised.v medicalized.v medisected.v medullectomised.v medullectomized.v melanised.v melanized.v mentored.v mercerised.v mercerized.v merchandised.v mercurated.v mercurialized.v mercuriated.v mesmerised.v metabolised.v metabolized.v metaled.v metalled.v metastasised.v metered.v methylated.v metred.v metricised.v micellised.v microagglutinated.v microaggregated.v microbiopsied.v microcannulated.v microcatheterised.v microcatheterized.v microcomputerised.v microcomputerized.v microdetermined.v microdiluted.v microdissected.v microembolised.v microfilled.v microfiltered.v microinjected.v micromanipulated.v micromilled.v micromodified.v micronised.v micronized.v microperfused.v microprocessed.v microsequenced.v microtitrated.v microtomed.v microwaved.v middled.v mildewed.v militarised.v militarized.v mimetised.v mimetized.v mineralised.v mineralized.v miniaturised.v minified.v minimised.v minuted.v misadvised.v misattributed.v miscalled.v misclassified.v miscoded.v misconducted.v misdiagnosed.v mis-folded.v misidentified.v misincorporated.v mislabeled.v mislabelled.v mislocalised.v mislocalized.v mismatched.v mispaired.v misperceived.v misprinted.v misrecognised.v misrecognized.v misregulated.v misrepaired.v misrouted.v misruled.v misspecified.v misspelt.v mis-tuned.v mistuned.v mitered.v mitred.v mobilised.v modelled.v modernised.v moired.v moisturised.v moisturized.v moldered.v monophosphorylated.v monopolised.v moonlighted.v moralised.v morcellated.v morphinized.v morsed.v Morsed.v morticed.v mortised.v mothered.v moth-proofed.v motorcycled.v motorised.v mown.v muckraked.v mulcted.v multimerised.v mummied.v mummified.v mummyed.v mumped.v muscled.v muscularised.v mutagenized.v myectomized.v myristoylated.v narcotized.v narked.v nasalised.v nasalized.v nationalised.v naturalised.v nauseated.v nebulised.v nebulized.v necropsied.v necrotised.v negatived.v neighbored.v neighboured.v neped.v nephrectomised.v nepped.v nerved.v nesslerised.v nesslerized.v neuromodulated.v neurostimulated.v neutralised.v niched.v nickeled.v nickelled.v nimed.v nimmed.v Nissl_stained Nissl-stained.v nitrated.v nitrosated.v nitrosylated.v nobbled.v nonplused.v nonplussed.v noosed.v normalised.v nosed.v notched.v objectified.v objurgated.v oblated.v obtruded.v obtunded.v obturated.v oestrogenised.v oestrogenized.v ointed.v O.K.ed.v OKed.v oligomerised.v oligomerized.v oophorectomised.v oophorectomized.v operationalised.v operationalized.v oppugned.v opsonified.v opsonised.v optimised.v optimized.v orchidectomised.v orchidectomized.v ordinated.v organised.v orphaned.v osmicated.v osteotomised.v osteotomized.v ostracised.v outbade.v outbided.v outbraved.v out-competed.v outcompeted.v outdated.v outfaced.v out-Heroded.v outlaid.v outmaneuvered.v outmarched.v outmatched.v out-paced.v outpaced.v outperformed.v outpointed.v outputed.v outputted.v outranged.v outrivaled.v outrivalled.v outsailed.v outspreaded.v outstriped.v outstripped.v outvied.v outweared.v ovariectomised.v ovariectomized.v over-associated.v overassociated.v over-burdened.v over-capitalised.v overcapitalised.v over-capitalized.v overcapitalized.v over-charged.v over-consumed.v overconsumed.v over-cooked.v overcorrected.v overcroped.v overcropped.v over-crowded.v over-detected.v overdetected.v overdiagnosed.v overdosed.v over-eated.v over-elongated.v overelongated.v overemphasised.v over-emphasized.v over-estimated.v over-exerted.v over-exposed.v overexpressed.v over-fed.v over-feeded.v over-hanged.v overhanged.v over-heated.v over-hung.v overhung.v over-inserted.v overinserted.v overlaid.v overlayed.v overleapt.v over-learned.v overlearned.v overleeped.v overmastered.v over-praised.v over-predicted.v overpredicted.v over-produced.v over-proliferated.v over-refered.v overrefered.v over-reported.v overreported.v over-represented.v overrepresented.v oversaturated.v over-secreted.v over-simplified.v over-staged.v overstaged.v overstained.v overstimulated.v over-strained.v over-stretched.v over-synthesised.v oversynthesised.v over-synthesized.v oversynthesized.v over-transcribed.v overtreated.v overused.v over-valued.v overventilated.v overviewed.v over_weighted overweighted.v over-wraped.v overwraped.v over-wrapped.v overwrapped.v oxidised.v oxygenised.v oxygenized.v ozonised.v ozonized.v palisaded.v palliated.v palpated.v palped.v pancreatectomized.v paneled.v panelled.v paragraphed.v paralleled.v parameterised.v parameterized.v parasitised.v parasitized.v parasoled.v parathyroidectomized.v parboiled.v parceled.v parcelled.v parroted.v particularised.v pasteurised.v pastured.v patronised.v peaned.v peed.v peened.v pelleted.v pelletised.v pelletized.v penalised.v penciled.v pensioned.v peopled.v pepsinated.v pepsinised.v pepsinized.v peptonised.v percussed.v perifused.v peritomized.v peritonealized.v peritonized.v permeabilized.v permeablised.v peroxidised.v personalised.v pestled.v phagocytised.v phagocytized.v phagocytosed.v phalangized.v phenocopied.v phenolated.v phenotyped.v philosophised.v phlebotomised.v phlorhizinised.v phlorhizinized.v phloridzinised.v phloridzinized.v phosphonylated.v phosphorylated.v photoactivated.v photobleached.v photodamaged.v photodecomposed.v photoinactivated.v photoinduced.v photoisomerised.v photolabeled.v photolabelled.v photolysed.v photo-oxidised.v photooxidised.v photo-oxidized.v photopolymerised.v photopolymerized.v photoprotected.v photoreduced.v photoregulated.v photoreversed.v photosensitised.v photostated.v photostimulated.v physicked.v piggybacked.v pilled.v pillowed.v pinded.v pinealectomised.v pinealectomized.v pinioned.v pinked.v pin-pointed.v pipetted.v pithed.v plagiarised.v plaited.v planimetered.v planked.v plasmolysed.v plasmolyzed.v plateaued.v plated.v platinated.v pleaed.v pleated.v pled.v plicated.v plumed.v plumped.v plunked.v pneumonectomised.v pneumonectomized.v podded.v poded.v polarised.v pole-axed.v poleaxed.v politicised.v politzerized.v pollacked.v pollarded.v polyadenalated.v polyadenylated.v polyglutamylated.v polymerised.v polymerized.v pomaded.v pommeled.v pommelled.v poniarded.v popularised.v portacaval_shunted portioned.v postfixed.v potentiated.v poulticed.v powered.v prawned.v preabsorbed.v preadmited.v preadmitted.v precepted.v precised.v precoated.v precooked.v precooled.v precultured.v predated.v predeceased.v predefined.v predestinated.v pre-digested.v predigested.v pre-embedded.v preembedded.v pre-embeded.v preembeded.v pre-established.v preestablished.v preexisted.v pre-exposed.v preexposed.v prefeeded.v prefixed.v preimmunized.v preinduced.v preinfected.v pre-irradiated.v preirradiated.v prelabeled.v prelabelled.v preloaded.v preluded.v premedicated.v premiered.v premissed.v premixed.v preped.v prepossessed.v prepped.v preprinted.v preprocessed.v preprogramed.v preprogrammed.v preprotected.v prereduced.v prescreened.v preselected.v presensitized.v pre-seted.v preseted.v presoaked.v prespawned.v prespecified.v pressurised.v prestimulated.v pre-surfaced.v pretrained.v pretreated.v previewed.v prewarmed.v prewashed.v prickled.v prioritised.v prioritized.v prised.v privatised.v probated.v profaned.v professionalized.v prognosed.v prolated.v pronged.v propagandised.v prophesied.v propitiated.v prorated.v prorogued.v proselytised.v prospected.v prostatectomised.v prostatectomized.v proteolysed.v proteolyzed.v protracted.v provisioned.v pseudonormalised.v psyched.v psycho-analysed.v psycho-analyzed.v ptyalized.v publicised.v puddled.v pulped.v pulverised.v puped.v pupped.v purposed.v purpurated.v puttied.v pyridoxylated.v quadded.v quaded.v quadrisected.v quadruplicated.v quailed.v quantised.v quantitated.v quantized.v quarked.v quarrelled.v quartisected.v quaternized.v queened.v Queened.v quizzed.v rabbited.v rabbitted.v radiographed.v radioimmunoassayed.v radiolabeled.v radiolabelled.v radiolocalised.v radiolocalized.v radiosensitised.v radiosensitized.v ranched.v randomised.v randomized.v rappeled.v rappelled.v rarefied.v rased.v rationalised.v rayed.v razored.v reabsorbed.v reaccumulated.v reacquired.v re-adapted.v readded.v readdressed.v readied.v readministered.v re-afforested.v reafforested.v reaggregated.v realigned.v realised.v reallocated.v reamed.v re-amplified.v reamplified.v reamputated.v reanalysed.v reanalyzed.v re-animated.v reanimated.v reappraised.v re-approximated.v reapproximated.v re-arterialised.v rearterialised.v re-arterialized.v rearterialized.v reasserted.v reassigned.v reassociated.v reassorted.v reattached.v rebased.v rebinded.v rebled.v recalcified.v recalibrated.v recanalized.v recategorised.v recategorized.v recatheterised.v recatheterized.v receipted.v recemised.v recertified.v rechallenged.v rechromatographed.v recirculated.v reclassified.v recloned.v recoded.v recognised.v recolonised.v recombined.v recompressed.v reconceptualized.v reconfigured.v reconnoitered.v reconstituted.v recontaminated.v recontoured.v re-converted.v re-counted.v re-covered.v recultivated.v recultured.v redacted.v rededicated.v reded.v redescribed.v redetected.v redetermined.v redevelopped.v redirected.v redissected.v reeducated.v re-elevated.v reemphasized.v re-endothelialised.v reendothelialised.v re-endothelialized.v re-engineered.v reengineered.v re-entered.v re-epithelialised.v reepithelialised.v re-epithelialized.v re-equilibrated.v re-esterified.v reesterified.v reevaluated.v re-examined.v reexamined.v re-excised.v reexcised.v re-explored.v reexplored.v reexposed.v reexpressed.v re-extracted.v reextracted.v refaced.v refeeded.v refered.v refereed.v referenced.v reffed.v refinished.v refluxed.v refolded.v reforested.v reformated.v reformatted.v reframed.v regionalised.v regionalized.v regrafted.v regularised.v reheard.v reheared.v reheated.v rehospitalised.v rehospitalized.v reimmunized.v re-implanted.v reimplanted.v reincarcerated.v reincarnated.v re-inflated.v reinitiated.v reinjected.v reinjured.v reinnervated.v reinoculated.v reinserted.v reinstituted.v re-internalised.v reinternalised.v re-internalized.v reinternalized.v re-interviewed.v reinterviewed.v reintroduced.v reintubated.v re-invented.v re-irradiated.v reisolated.v rejiged.v rejigged.v re-joined.v relabeled.v relabelled.v relaid.v relaparoscopied.v relearned.v relined.v relipidated.v relocalised.v relocalized.v remade.v remaindered.v remaked.v remaped.v remapped.v remediated.v remilitarised.v remobilised.v remodeled.v remyelinated.v renatured.v renegued.v re-obliterated.v reobliterated.v re-occluded.v re-occurred.v reoccurred.v reorganised.v reoxidised.v reoxygenated.v repartitioned.v repatterned.v reperforated.v reperfused.v reperitonealised.v reperitonealized.v replated.v repointed.v repolarised.v repopulated.v reposed.v reposited.v repositioned.v repoted.v repotted.v reprimed.v reprobated.v reprocessed.v reprogramed.v reprogrammed.v republished.v repurified.v requited.v resampled.v rescaned.v rescanned.v re-scoered.v rescoered.v re-scored.v rescored.v rescreened.v resealed.v resected.v resensitised.v resequenced.v residualised.v residualized.v re-sliced.v resliced.v resocialised.v resocialized.v resolubilized.v resorbed.v respelled.v respelt.v restaged.v restained.v re-stenosed.v restimulated.v restretched.v restudied.v resulfated.v resulphated.v resurveyed.v resuspended.v resutured.v resynthesised.v resynthesized.v retrained.v retransformed.v retransfused.v retransplanted.v retraumatized.v retreaded.v re-treated.v retroceded.v retrofited.v retrofitted.v retrotranscribed.v retyped.v reused.v reutilised.v reutilized.v revaccinated.v revalidated.v revascularised.v revascularized.v reveiled.v revendicated.v revenged.v revitalised.v revivified.v revolutionalised.v revolutionalized.v revolutionised.v rewarmed.v reworked.v rexed.v rhapsodised.v ribosylated.v ricked.v ricochetted.v ridged.v rimed.v rited.v ritted.v ritualised.v ritualized.v robed.v romanticised.v roneoed.v rongeured.v roofed.v rooked.v roseted.v rosetted.v rosined.v rouged.v rough-casted.v roughcasted.v rough-dried.v roughhoused.v roweled.v rowelled.v rubberised.v ruddled.v ruffed.v rumoured.v rusked.v ruted.v rutted.v sabered.v sabred.v salaamed.v salified.v sallowed.v salved.v sandaraced.v sandaracked.v sand-blasted.v sanitised.v sanitized.v sated.v saucerized.v sauted.v savored.v savvied.v scabed.v scalloped.v scamed.v scammed.v scamped.v scapegoated.v scar_cicatrised scarified.v sclerotised.v sclerotized.v scolloped.v scourged.v scrabbled.v scraged.v scragged.v scribed.v scrimmaged.v scripted.v scrupled.v scrutinised.v SCUBAed.v scudded.v scuded.v scuppered.v scythed.v seamed.v secluded.v sectioned.v sectored.v secularised.v sedimented.v segmented.v semaphored.v semisynthesised.v semisynthesized.v sensibilised.v sensibilized.v sensitised.v sequenced.v sequestrated.v serialised.v serogrouped.v serotyped.v servo-controled.v servocontroled.v servo-controlled.v servocontrolled.v sexed.v sexualised.v sexualized.v shafted.v shallowed.v shambled.v shanghaied.v shanghied.v sheered.v sheeted.v shellaced.v shellacked.v shimed.v shimmed.v shinned.v shipwrecked.v shoded.v shod.v shoed.v short-listed.v shoveled.v shrined.v shrived.v shuttled.v sialadenectomized.v sialylated.v sicced.v siced.v sickled.v side-tracked.v signalised.v signalized.v siliconised.v siliconized.v silted.v silvered.v silylated.v singularised.v singularized.v sintered.v sited.v situated.v skate_boarded skateboarded.v skeined.v skeletonised.v ski'd.v slanged.v slatted.v sledded.v sleded.v sleighed.v slenderised.v sleuthed.v slivered.v slopped.v sludged.v sluiced.v smirched.v smuted.v smutted.v snaffled.v snicked.v snuged.v snugged.v soaped.v socialised.v sodded.v soded.v soft-pedaled.v soft-soaped.v soft-soldered.v solaced.v solated.v soled.v solemnised.v solemnized.v soliloquised.v soloed.v solubilised.v solubilized.v solvated.v somatised.v somatotyped.v sonicated.v sooted.v sorbed.v sorrowed.v sovietized.v spangled.v spatchcocked.v spated.v spatulated.v spilted.v spilt.v spindled.v spiralised.v spiritualised.v spiritualized.v spirted.v splenectomised.v splenectomized.v splinted.v splotched.v spoofed.v spooked.v spooled.v spooned.v sporulated.v spudded.v spuded.v squeegeed.v stabled.v stagged.v stanched.v standardised.v steam-heated.v steam-rollered.v stenciled.v stencilled.v sterilised.v stewarded.v stigmatised.v stock-piled.v stockpiled.v stomped.v stoppered.v stranded.v strangulated.v striated.v strictured.v stroped.v stropped.v strychnized.v stultified.v stupefied.v stylised.v subcategorised.v subcategorized.v sub-classified.v subclassified.v subcompartmentalised.v subcompartmentalized.v subcultivated.v subcultured.v subexcited.v subgrouped.v subindexed.v subjoined.v subletted.v sublimed.v sublocalised.v sublocalized.v subluxated.v suborned.v subsaturated.v subsidised.v subspecialised.v subtitled.v subtyped.v suctioned.v sugared.v sulfated.v sulfonated.v sulfurated.v sulfureted.v sulfuretted.v sulfurized.v sulphated.v sulphonated.v sulphurated.v sulphureted.v sulphuretted.v sulphurised.v sulphurized.v summarised.v superactivated.v superannuated.v supercooled.v superducted.v superfused.v superhydrated.v superinduced.v superintended.v superposed.v superprecipitated.v supersaturated.v supershifted.v suprarenalectomized.v surcharged.v surfeited.v suscitated.v sutured.v swabbed.v swabed.v swaddled.v swaged.v swaned.v swanned.v swilled.v swobbed.v swobed.v swoped.v swopped.v syllabicated.v syllabified.v syllabized.v symbolised.v sympathectomised.v sympathectomized.v sympathised.v synapsed.v synchronised.v synergised.v synonymized.v synostosed.v synthesised.v synthetised.v synthetized.v syringed.v systematised.v tabooed.v tabued.v tape-recorded.v tared.v targetted.v tarmaced.v tarmacked.v teed.v telecommunicated.v telefaxed.v telepathized.v teletransmited.v teletransmitted.v tempered.v temporised.v tenanted.v tenoned.v tenotomized.v tented.v tenured.v terrorised.v teslaized.v tetanised.v tetanized.v tetramerised.v thermalised.v thermocauterised.v thermocauterized.v thermocycled.v thermoregulated.v thermosensitised.v thermosensitized.v thoracotomised.v thoracotomized.v throed.v thwacked.v thymectomised.v thymectomized.v thymolized.v thyroidectomised.v thyroidectomized.v thyroidized.v thyroparathyroidectomized.v timetabled.v tinctured.v tinned.v tittivated.v toggled.v tolerised.v tolerized.v tonicized.v tonsillectomized.v tonsured.v tooled.v top-dressed.v torqued.v torrefied.v tosylated.v toweled.v trabeculated.v tracheostomized.v tracheotomized.v traduced.v trafficed.v trafficked.v trammeled.v trammelled.v tranquillised.v transactivated.v transdifferentiated.v transduced.v transected.v transesterified.v transfected.v transfigured.v transhiped.v transilluminated.v transited.v transliterated.v translocated.v transmogrified.v transphosphorylated.v transsected.v transshiped.v trapsed.v traumatised.v traumatized.v travestied.v travestyed.v treadled.v treed.v trellised.v trenched.v trended.v trepaned.v trepanned.v trephined.v triangulated.v trichinized.v trilled.v triplicated.v trisected.v tritiated.v triturated.v trivialised.v trolled.v trooped.v trucked.v trued.v trussed.v trypsinised.v trypsinized.v tubularized.v turfed.v turgidized.v twined.v twinned.v twited.v twitted.v tyrannised.v ubiquitinated.v ultrapurified.v ultrasonicated.v unbared.v unbarred.v unbinded.v unbosomed.v unbridled.v uncaped.v uncapped.v unclamped.v uncliped.v unclipped.v uncloged.v unclogged.v uncuffed.v undeceived.v undercalled.v underdetected.v underdiagnosed.v underemphasised.v underemphasized.v underexerted.v under-fed.v under-feeded.v undernourished.v underpredicted.v undersedated.v understaged.v understained.v undertreated.v underused.v underutilised.v underutilized.v unfited.v unfitted.v unhorsed.v universalized.v unknotted.v unlearnt.v unmaned.v unravelled.v unroofed.v unsayed.v unseated.v unsexed.v unsticked.v unstuck.v upregulated.v uptaked.v urbanised.v utilised.v vacuumed.v vagotomized.v vailed.v vandalised.v vandalized.v vaporised.v vapourised.v vapourized.v variegated.v variolated.v vascularised.v vascularized.v vasectomized.v vaunted.v vd.'ed.v vd.ed.v Vd'ed.v Vded.v veneered.v ventralised.v ventralized.v ventricular_hypertrophied ventriducted.v verbalised.v victimised.v victualed.v victualled.v videoed.v virilised.v virilized.v visioned.v visualised.v vitalised.v vitalized.v vitrectomised.v vitrectomized.v vivified.v vocalised.v vogued.v volitilised.v vortexed.v vulcanised.v vulcanized.v vulgarised.v vulnerated.v wagered.v wallpapered.v wanded.v wardened.v wared.v warred.v waterloged.v wearied.v weaseled.v weaved.v weekended.v weired.v welched.v welled.v wenched.v westernised.v whisked.v whized.v whizzed.v whopped.v winched.v winkled.v wintered.v wised.v womanised.v wowed.v wracked.v wreathed.v xanthated.v xenografted.v xeroxed.v Xeroxed.v x_rayed X_rayed x-rayed.v xrayed.v X-rayed.v yarned.v yellowed.v yoked.v zenkerized.v zippered.v link-grammar/data/en/words/words.v.10.40000644000000000000000000000213412536650433014713 0ustar acknowledging.q adding.q admitting.q affirming.q agreeing.q announcing.q arguing.q ascertaining.q asserting.q assuming.q believing.q bragging.q calculating.q charging.q claiming.q commanding.q commenting.q complaining.q conceding.q concluding.q confessing.q confirming.q contending.q deciding.q declaring.q deducing.q determining.q discerning.q disclosing.q discovering.q emphasizing.q envisioning.q exclaiming.q explaining.q figuring.q guessing.q hinting.q hoping.q implying.q inquiring.q insisting.q intimating.q learning.q maintaining.q musing.q muttering.q noting.q observing.q ordering.q pledging.q postulating.q predicting.q presuming.q proclaiming.q proposing.q proving.q reading.q realizing.q reasoning.q recalling.q reckoning.q recognizing.q recounting.q reflecting.q remarking.q remembering.q repeating.q replying.q reporting.q resolving.q responding.q retorting.q revealing.q ruling.q shouting.q sighing.q speculating.q stating.q stipulating.q stressing.q suggesting.q testifying.q theorizing.q thinking.q threatening.q warning.q whispering.q wondering.q writing.q relating.q continuing.q link-grammar/data/en/words/Makefile.am0000644000000000000000000000242412536650432015042 0ustar WORDS= \ currency \ currency.p \ entities.given-bisex.sing \ entities.given-female.sing \ entities.given-male.sing \ entities.locations.sing \ entities.national.sing \ entities.organizations.sing \ entities.us-states.sing \ units.1 \ units.1.dot \ units.3 \ units.4 \ units.4.dot \ words.adj.1 \ words.adj.2 \ words.adj.3 \ words.adv.1 \ words-medical.adv.1 \ words.adv.2 \ words.adv.3 \ words.adv.4 \ words.n.1 \ words.n.1.wiki \ words.n.2.s \ words.n.2.s.biolg \ words.n.2.s.wiki \ words.n.2.x \ words.n.2.x.wiki \ words.n.3 \ words.n.t \ words-medical.prep.1 \ words.v.10.1 \ words.v.10.2 \ words.v.10.3 \ words.v.10.4 \ words.v.1.1 \ words.v.1.2 \ words.v.1.3 \ words.v.1.4 \ words.v.1.p \ words.v.2.1 \ words.v.2.2 \ words.v.2.3 \ words.v.2.4 \ words.v.2.5 \ words.v.4.1 \ words-medical.v.4.1 \ words.v.4.2 \ words-medical.v.4.2 \ words.v.4.3 \ words-medical.v.4.3 \ words.v.4.4 \ words-medical.v.4.4 \ words.v.4.5 \ words-medical.v.4.5 \ words.v.5.1 \ words.v.5.2 \ words.v.5.3 \ words.v.5.4 \ words.v.6.1 \ words.v.6.2 \ words.v.6.3 \ words.v.6.4 \ words.v.6.5 \ words.v.8.1 \ words.v.8.2 \ words.v.8.3 \ words.v.8.4 \ words.v.8.5 \ words.y wordsdir=$(pkgdatadir)/en/words words_DATA = $(WORDS) EXTRA_DIST = $(WORDS) link-grammar/data/en/words/words.v.6.40000644000000000000000000001042112536650433014636 0ustar adopting.v airing.v airlifting.v angling.v armoring.v authorising.v averaging.v backfilling.v backing.v backpacking.v badging.v bailing.v banging.v beaming.v beating.v beckoning.v beefing.v bellowing.v benchmarking.v bending.v bicycling.v biking.v binding.v biting.v blaring.v bleeding.v blogging.v bloging.v blowing.v bobbing.v bogging.v boiling.v bolting.v booing.v booting.v boozing.v boring.v bouncing.v bounding.v bowling.v boxing.v branching.v breaking.v breathing.v brightening.v bruising.v brushing.v bucking.v buckling.v building.v bulging.v bumming.v bumping.v bunching.v burning.v busting.v butting.v buttoning.v buzzing.v calming.v camping.v canceling.v canoeing.v captioning.v carving.v cashing.v casting.v catching.v chambering.v changing.v chatting.v cheating.v checking.v cheering.v chewing.v chilling.v chipping.v choking.v chopping.v choreographing.v churning.v cleaning.v climbing.v clogging.v closing.v clouding.v clumping.v coffering.v coiling.v combing.v connecting.v contracting.v cooking.v cooling.v copping.v costuming.v coughing.v counting.v cracking.v cramming.v crossing.v crowding.v crumbling.v crumpling.v crunching.v curling.v dashing.v dematerializing.v dialing.v dialling.v digging.v dining.v dragging.v draining.v dressing.v drinking.v driving.v dropkicking.v dropping.v drowning.v drumming.v drying.v ducking.v dumbing.v easing.v eating.v edging.v emailing.v emceing.v emptying.v evangelizing.v evening.v facing.v fanning.v farming.v fattening.v feeding.v fending.v fetching.v feuding.v filing.v filling.v filtering.v firing.v firming.v fishing.v fisting.v flaring.v flattening.v flavoring.v flipping.v floating.v flooding.v flunking.v flushing.v flying.v folding.v following.v forking.v fouling.v freaking.v freezing.v frenching.v freshening.v frizzing.v frizzling.v fucking.v fueling.v galloping.v gathering.v glazing.v gobbling.v gonging.v grinding.v gulping.v hacking.v hammering.v hanging.v hardwiring.v harkening.v hauling.v heading.v healing.v heating.v herding.v hiding.v hiking.v hitching.v homering.v hooking.v hopping.v hunting.v ironing.v jamming.v jerking.v joining.v jumbling.v jumping.v kayaking.v killing.v knocking.v knotting.v lapping.v lashing.v leading.v leaking.v leaning.v leaping.v leveling.v levelling.v licking.v lightening.v lighting.v limbering.v lining.v livening.v logging.v looping.v loosening.v losing.v marching.v marrying.v matching.v melting.v messing.v missing.v mixing.v mopping.v mounding.v mouthing.v moving.v mucking.v nodding.v oozing.v opening.v optioning.v packing.v pairing.v panning.v parlaying.v partying.v peeing.v peeling.v piling.v pissing.v playing.v ploughing.v plowing.v plucking.v plunging.v pointing.v poking.v popping.v pounding.v prinking.v prying.v puckering.v pulling.v pumping.v quieting.v raking.v reaching.v reeling.v renting.v rerecording.v resizing.v reving.v rewinding.v riding.v ringing.v ripping.v rocking.v rolling.v rooting.v rotoscoping.v rounding.v rubbing.v running.v rushing.v sailing.v sawing.v scoping.v scouting.v scraping.v scratching.v screwing.v scuffing.v sealing.v seguing.v serving.v settling.v sewing.v shaping.v shaving.v shifting.v shipping.v shooting.v shorting.v shrugging.v shushing.v shutting.v signing.v silkscreening.v sketching.v skiing.v skin-diving.v skipping.v sliding.v slipping.v sloughing.v slowing.v smartening.v smashing.v smoothing.v snapping.v snatching.v sneaking.v sniffing.v snorkeling.v snorkelling.v snuffing.v soaking.v sobering.v softening.v spacing.v sparking.v speeding.v spelling.v spilling.v spinning.v spiraling.v spiralling.v spitting.v splicing.v splitting.v spreading.v springing.v sprouting.v sprucing.v squaring.v squeezing.v squirting.v staggering.v stalking.v stamping.v staring.v starring.v starving.v steaming.v sticking.v stiffening.v stirring.v stocking.v storming.v straightening.v stretching.v striking.v stripping.v sucking.v summing.v surfing.v swelling.v swimming.v swinging.v switching.v swotting.v tallying.v tangling.v tapering.v tasking.v thickening.v thinning.v ticking.v tidying.v tightening.v tinkling.v tipping.v tiring.v togging.v toning.v toppling.v tossing.v trailing.v treading.v trimming.v tripping.v tucking.v tumbling.v tuning.v twisting.v typing.v waking.v walking.v warming.v weaving.v weeding.v weighing.v whipping.v whooping.v winding.v winning.v wiping.v working.v wrapping.v zeroing.v link-grammar/data/en/words/words.n.10000644000000000000000000035127612536650433014477 0ustar abacus.n abbe.n abbess.n abbey.n abbot.n abbreviation.n abdication.s abdomen.n abduction.n aberration.s ablaut.n abnormality.s abode.n abolitionist.n abomination.n aboriginal.n aborigine.n abortionist.n abortion.s abrasion.n abrasive.s abridgement.s abridgment.s abscess.s absence.n absentee.n absorbent.n abstention.s abstraction.s abstract.n absurdity.s abuse.s abutment.n abyss.n acacia.n academician.n academic.n academy.n accelerando.n accelerator.n accent.n accessory.n accident.n accolade.n accommodation.s accompaniment.n accompanist.n accomplice.n accomplishment.s accordance.s accordion.s accord.s accountant.n account.n accretion.s accumulation.s accusative.n accuser.n ace.n acetate.n ache.n achievement.n acid.s acolyte.n acorn.n acoustic.n acquaintance.s acquaintanceship.n acquiescence.n acquisition.s acquittal.s acre.n acrobat.n acronym.n acropolis.n acrostic.n action.s activist.n activity.s act.n actor.n actress.n-f actuality.s actuary.n adage.n adagio.n adaptation.s adapter.n adaptor.n adder.n addiction.s addict.n addition.s additive.n addressee.n address.n adherence.n adherent.n adhesion.s adhesive.s adjective.n adjournment.n adjudicator.n adjunct.n adjuster.n adjustment.s adjutant.n administration.s administrator.n admiral.n admiralty.n admirer.n admission.s admixture.n admonition.n ad.n adolescent.n adoption.s adornment.s adulteration.s adulterer.n adulteress.n adulthood.s adult.n advance.n advancer.n advantage.s advent.n adventurer.n adventure.s adverb.n adversary.n adversity.s advertisement.s advertiser.n advert.n adviser.n advisor.n advocate.n aegis.n aeration.n aerial.n aerodrome.n aeronaut.n aeroplane.n aerosol.s aesthete.n affair.n affectation.s affidavit.n affiliate.n affiliation.s affinity.s affirmation.s affirmative.n affix.n affliction.n affront.n Afghan.s African.s aftereffect.n afternoon.s afterthought.n agar.s agency.n agenda.n agent.n age.s agglomeration.s aggrandizement.n aggravation.s aggregate.n aggregation.s aggression.s aggressor.n agidigbo.s agitation.s agitator.n agnostic.n agony.s agora.n agreement.s agronomist.n aide.n aid.s ailment.n aim.s airbed.n airbrake.n aircraft.s aircrew.n airfield.n airflow.n airing.n airline.n airliner.n airplane.n airport.n air.s airship.n airstrip.n airway.n aisle.n alarmist.n alarm.s Albanian.s albatross.n Alberian.s albino.n album.s alchemist.n alcoholic.n alcove.n alert.n ale.s Algerian.s algorithm.n alias.n alibi.n alien.n alignment.s alkali.s allegory.n allegretto.n allegro.n allergen.n allergy.n alleviation.s alley.n alleyway.n alliance.s alligator.n allocation.s allotment.s allowance.n alloy.s allure.s allusion.n ally.n almanac.n almond.s alphabet.n alpha.s alphorn.s alsatian.n altar.n alteration.s altercation.n alternate.n alternation.s alternative.n altimeter.n altitude.s alto.s altruist.n alveolar.n amalgamation.s amalgam.n amateur.n ambassador.n ambiguity.s ambit.n ambulance.n ambush.s amendment.s amenity.n American.s amethyst.s amnesty.n amoeba.n amortization.s amour.n ampere.n amphetamine.s amphibian.n amphitheatre.n amphora.n amplification.s amplifier.n amp.n amputation.s amulet.n amusement.s anachronism.n anaconda.n anaesthetic.s anaesthetist.n anagram.n analgesic.n analog.n analogue.n analogy.s analysis.s analyst.n anapaest.n anarchist.n anatomist.n ancestor.n ancestry.n anchorage.n anchorite.n anchor.n anchovy.n andante.n Andorran.s anecdote.n aneroid.n anesthetic.s anesthetist.n angel.s Angentinian.s angle.n angler.n anglicism.n Angolan.s angora.s animal.n anime.s animosity.s anise.n ankle.n anklet.n annex.n anniversary.n annotation.s announcer.n annoyance.s annual.n annuity.n annunciation.n anode.n anointment.n anomaly.n anorak.n antagonism.s antagonist.n antecedent.n antechamber.n antelope.n ante.n anteroom.n anthem.n anthology.n anthropoid.n anthropologist.n antibiotic.n antibody.n anticlimax.n antic.n antidote.n Antiguan.s antipathy.s antiquarian.n antiquary.n antique.n antiquity.s antiseptic.n antitoxin.n antler.n ant.n antonym.n anus.n anvil.n aorta.n apache.n apartment.n ape.n aperitif.n aperture.n apex.n aphorism.n aphrodisiac.s apiary.n apocalypse.n apogee.n apologist.n apology.n apostate.n apostle.n apostrophe.n apothecary.n apparatus.n apparition.n appeal.s appearance.n appellant.n appellation.n appendage.n appendectomy.n appendix.n appetite.s appetizer.n apple.s appliance.n applicant.n application.s applicator.n appointee.n appointment.s appraisal.n appraiser.n appreciation.s apprehension.s apprentice.n apprenticeship.n approach.n appropriation.s approval.s approximation.s apricot.s apron.n apse.n aptitude.s aqualung.n aquaplane.n aquarium.n aqueduct.n arabesque.n Arab.s arachnid.n arbiter.n arbitrager.n arbitration.s arbitrator.n arbour.n arcade.n archaeologist.n archaism.n archangel.s archbishop.n archbishopric.n archdeacon.n archdeaconry.n archdiocese.n archduke.n-m archer.n archetype.n archipelago.n architect.n architecture.s archivist.n archlute.s arch.n archway.n arc.n area.s arena.n aria.n aristocracy.s aristocrat.n arithmetician.n ark.n armada.n armadillo.n armament.s armature.n armband.n armchair.n Armenian.s armful.n armistice.n armlet.n arm.n armor.s armoury.n armpit.n army.n aroma.n arpeggio.n arpeggione.s arraignment.n arrangement.s array.n arrester.n arrest.s arrival.n arrowhead.n arrow.n arsehole.n arse.n arsenal.n artefact.n artery.n artichoke.s article.n articulation.s artifact.n artifice.s artisan.n artiste.n artist.n art.s artwork.s ascendant.n ascendent.n ascension.n ascent.n ascetic.n ascription.n Aserbaijani.s ash.s ashtray.n Asian.s aside.n aspect.n aspen.n aspersion.n aspirant.n aspirate.n aspiration.s aspirin.s asp.n assailant.n assassination.s assassin.n assault.s assay.n assemblage.s assembly.n assent.n assessment.s assessor.n asset.n asshole.n assignment.n assistant.n ass.n associate.n association.n assortment.n asterisk.n asteroid.s astrodome.n astrologer.n astronaut.n astronomer.n asylum.s asymptote.n atheist.n athlete.n atlas.n atmosphere.n atoll.n atomizer.n atom.n atrocity.n attache.n attachment.s attacker.n attack.s attainment.s attendant.n attic.n attitude.s attorney.n Attorney.n attraction.n attribute.n attribution.s aubergine.n auctioneer.n auction.s audience.n audition.s audit.n auditorium.n auditor.n augmentation.s augury.n auntie.n-f aunt.n-f aunty.n-f aura.n aureole.n auricle.n aurora.n Australian.s Austrian.s autarchy.s authoritarian.n authority.s authorization.s author.n autobahn.n autobiography.s autocracy.s autocrat.n autograph.n automatic.n automat.n automaton.n automobile.n auto.n autopsy.n autostrada.n autumn.s auxiliary.n avalanche.n avatar.n avenger.n avenue.n average.n aversion.s aviary.n aviator.n avocado.s avocation.n avowal.s award.n awl.n awning.n axe.n axiom.n axle.n ax.n azalea.n azimuth.n babel.n babe.n baboon.n baby.n babysitter.n baccalaureate.n bacchanal.n bachelor.n-m backache.n backbencher.n backbench.n backbiter.n backboard.n backbone.s backdoor.n backdrop.n backer.n background.n backing.s backlash.s backlog.n back.n backroom.n backscratcher.n backseat.n backside.n backstroke.s backup.n backwater.n bacteria.s bacteriologist.n badge.n badger.n baffle.n bagatelle.n bagel.s bag.n bagpipe.s Bahamian.s bailey.n bailiff.n bailout.n bail.s bait.s baker.n bakery.n balalaika.n balance.s balcony.n bale.n balk.n ballade.n ballad.n ballbearing.n ballcock.n ballerina.n ballet.s balloonist.n balloon.n ballot.n ballpen.n ballpoint.n ballroom.n ball.s balustrade.n bambino.n banality.s banana.s bandage.n bandanna.n bandit.n bandleader.n bandmaster.n band.n bandoneón.s bandstand.n bandura.s bandwagon.n banger.n Bangladeshi.s bangle.n bang.n banister.n banjo.s banker.n bank.n banknote.n bankroll.n bankruptcy.s ban.n banner.n bannister.n banquet.n banshee.n baptism.s Barbadian.s barbarian.n barbarism.n barbarity.s barbecue.n barbel.n barber.n barbican.n barbiturate.s barb.n barcarole.n barcarolle.n bard.n bargain.n barge.n bargepole.n baritone.s barker.n bark.n barmaid.n-f bar.n barnacle.n barn.n barnstormer.n barnyard.n barometer.n baronage.n baroness.n baronetcy.n baronet.n baron.n barony.n barrack.n barracuda.n barrage.n barrel.n barricade.n barrier.n barrister.n barrow.n barstar.s bartender.n baryton.s baseball.s baseboard.n basement.n base.n bash.n basilica.n basilisk.n basin.n basis.n basketball.s basket.n bas-relief.s bassinet.n bassoon.s basso.s bass.s bastard.n bastion.n bather.n bath.n bathrobe.n bathroom.n bathtub.n bat.n baton.n battalion.n batten.n batter.s battery.s battledore.n battlefield.n battleground.n battle.s battleship.n bauble.n bawu.s bayan.s bay.n bayonet.n bayou.n bazaar.n bazooka.s beachcomber.n beachhead.n beach.n beacon.n beadle.n bead.n beagle.n beaker.n beak.n beam.n beanfeast.n bean.n beano.s beanstalk.n beard.n bearer.n bearing.n bear.n bearskin.n beast.n beater.n beating.n beat.n beatnik.n beautician.n beauty.s beaver.s beck.n bedbug.n bedfellow.n bed.n bedpan.n bedpost.n bedrock.n bedroll.n bedroom.n bedside.n bedsit.n bedsitter.n bedsore.n bedspread.n bedstead.n bedtime.n beech.s beefeater.n beefsteak.n beehive.n bee.n beeper.n beep.n beer.s beetle.n beetroot.n beet.s beggar.n beginner.n beginning.n begonia.n behavior.s behaviourist.n behest.n behind.n beholder.n being.n Belarusian.s belch.n belfry.n Belgian.s believer.n Belizian.s bellboy.n belle.n bellhop.n belligerent.n bellman.n bell.n bellwether.n bellyache.n bellyflop.n bellyful.n bellylaugh.n belly.n belt.n benchmark.n bench.n bend.n benediction.n benefaction.n benefactor.n benefactress.n-f beneficiary.n benefit.n bent.n bequest.s bereavement.s beret.n berry.n berth.n beryl.s bestiary.n bestowal.s beta.s bet.n betrayal.s betrayer.n betrothal.n betrothed.n bettor.n bevel.n beverage.n bevy.n Bhutanian.s bias.s bibliographer.n bibliography.s bibliophile.n bib.n bicentenary.n bicentennial.n biceps.s bicycle.n bidder.n bidet.n bid.n biennial.n biff.n bifurcation.s bigamist.n bigot.n bigwig.n bike.n bikini.s bilabial.n bilingual.n billboard.n billet.n billfold.n billionaire.n billow.n billy.n binder.n bindery.n bind.n binge.n bin.n biochemical.n biochemist.n biographer.n biography.n biologist.n bioscope.n biped.n biplane.n birch.s birdcage.n bird.n birdseed.s birdwatcher.n biro.n birthday.n birthmark.n birthplace.n birthrate.n birthright.n birth.s biscuit.s bisexual.n bishop.n Bishop.n bishopric.n bison.s bistro.n bitch.n-f bite.n bit.n bivouac.n blabbermouth.n blackamoor.n blackberry.n blackbird.n blackboard.n blackcurrant.n blackguard.n blackhead.n blacklist.n blackmailer.n blackout.n blacksmith.n bladder.n blade.n blancmange.s blandishment.n blanket.n blank.n blasphemer.n blasphemy.s blast.n blaze.n blazer.n bleat.n bleep.n blemish.n blend.n blessing.n blighter.n blight.s blimp.n blindfold.n blink.n blip.n blister.n blitzkrieg.s blitz.n blizzard.n blob.n blockade.n blockage.n blockbuster.n blockhead.n blockhouse.n block.n bloc.n bloke.n blonde.n blond.n bloodhound.n bloodshed.s bloodstain.n bloodsucker.n bloomer.n bloom.s blossom.s blotch.n blot.n blotter.n blouse.n blower.n blowfly.n blowhole.n blowlamp.n blow.n blowout.n blowpipe.n blowtorch.n bludgeon.n bluebell.n blueberry.s bluebottle.n blueprint.n bluestocking.n bluffer.n bluff.s blunderbuss.n blunderer.n blunder.n blurb.n blur.n blush.n boa.n boarder.n boarding.s board.n boardroom.n boardwalk.n boar.n boaster.n boast.n boater.n boathouse.n boat.s boatswain.n bobby.n bobsled.n bobsleigh.n bobtail.n bodega.n bodice.n bodyguard.n body.n bogey.n bogie.n bog.n bogy.n bohemian.n boiler.n boil.n bolero.n Bolivian.s bollock.n bolster.n bolt.n bombarde.s bombardier.n bomber.n bombing.n bomb.n bombshell.n bonanza.n bonbon.n bondholder.n bond.s bone.n boner.n boneshaker.n bonfire.n bongo.n bonnet.n bonus.n boob.n booby.n boogie.s bookcase.n bookclub.n bookie.n bookkeeper.n booklet.n bookmaker.n bookmarker.n bookmark.n bookmobile.n book.n bookseller.n bookshop.n bookstall.n bookworm.n boomerang.n boomer.n boom.n boo.n boon.n boor.n booster.n boost.n booth.n bootlace.n bootlegger.n boot.n boozer.n borderland.n borderline.n border.n bordonua.s bore.n borough.n borrower.n borrowing.s borzoi.n Bosnian.s bosom.n boss.n bosun.n botanist.n bottle.n bottleneck.n bottom.n boudoir.n bough.n boulder.n boulevard.n bounce.s boundary.n bounder.n bound.n bounty.s bouquet.n bourbon.s bourgeoisie.n bourne.n bourse.n boutique.n bout.n bouzouki.s bowel.n bower.n bowler.n bowl.n bow.n boxer.n boxful.n box.n boycott.n boyfriend.n boy.n bracelet.n brace.n bracket.n braggart.n braid.n brain.s brainstorm.n brainwave.n brake.n bramble.s bra.n branch.n brand.n brandy.s brasserie.n brassiere.n brass.s brat.n brave.n brawler.n brawl.n bray.n brazier.n Brazilian.s breach.n breadbasket.n breadcrumb.n breadline.n breadth.s breadwinner.n breakage.n breakaway.n breakdown.s breaker.n breakfast.s break.n breakthrough.n breakup.n breakwater.n breast.n breathalyser.n breather.n breath.s breech.n breeder.n breed.n breeze.n breve.n breviary.n brewer.n brewery.n brew.n briar.s bribe.n brickbat.n brickkiln.n bricklayer.n brick.s bridal.n bridegroom.n-m bride.n bridesmaid.n-f bridgehead.n bridge.n bridle.n briefcase.n briefer.n brief.n brigade.n brigand.n brig.n brim.n brink.n brioche.n briquet.n briquette.n bristle.n Briton.n broadcaster.n broadcast.n broad.n broadsheet.n broadside.n brocade.s brochure.n brogue.n broiler.n brokerage.n broker.n brolly.n bromide.s bronco.n bronze.s brooch.n brood.n brook.n broom.n broomstick.n brothel.n brotherhood.s brother.n-m brouhaha.n brow.n brownie.n brownstone.s browse.n bruin.n bruise.n bruiser.n brunch.s Bruneian.s brunette.n brunt.n brush.s brutality.s brute.n bubble.n buccaneer.n bucketful.n bucket.n buckle.n buckler.n buck.n Buddhist.n buddy.n budgerigar.n budget.s budgie.n bud.n buffalo.s buffer.n buffet.n buffoon.n buff.s bugaboo.n bugbear.n bugger.n buggy.n bugler.n bugle.s bug.n builder.n building.n bulb.n Bulgarian.s bulge.n bulldog.n bulldozer.n bulletin.n bullet.n bullfighter.n bullfight.n bullfinch.n bullfrog.n bullock.n-m bullring.n bullroarer.s bull.n-m bully.n bulwark.n bumblebee.n bumper.n bumpkin.n bump.n bum.s bundle.n bungalow.n bungler.n bung.n bunion.n bunker.n bunk.s bunny.n bun.s buoy.n burden.s bureaucracy.s bureaucrat.n bureau.n burette.n burgess.n burgher.n burgh.n burglar.n burglary.s burg.n burgomaster.n burial.s burlesque.s burner.n burn.n burp.n burrito.s burr.n burro.n burrow.n bursar.n bursary.n burst.n burthen.n Burundian.s bushel.n bush.s businessman.n business.s busker.n bus.n buster.n bustle.s bust.n busybody.n butcher.n butler.n buttercup.n butterfly.n buttery.n butt.n buttock.n buttonhole.n buttonhook.n button.n buttress.n buyer.n buyout.n buzzard.n buzzer.n buzz.n bye.n bylaw.n bypass.n by-product.n byproduct.n byroad.n bystander.n byte.n byway.n byword.n cabal.n cabaret.n cabbage.s cabby.n caber.n cabinet.n cabin.n cablegram.n cable.s cab.n caboodle.n caboose.n cabstand.n cache.n cackle.n cacophony.n cactus.s cadaver.n caddie.n caddy.n cadence.n cadenza.n cadet.n cad.n cadre.n caesura.n cafe.n cafeteria.n caftan.n cage.n cairn.n cake.s calamity.n calculation.s calculator.n caldron.n calendar.n calf.n calibration.s calibre.s calif.n caliphate.n caliph.n caller.n calling.n calliope.s call.n calorie.n calumny.s calypso.n Cambodian.s camel.n cameo.n camera.n Cameroonian.s campaigner.n camper.n camp.n campus.s Canadian.s canal.n canape.n canard.n canary.n cancan.n cancellation.s cancer.s candidacy.n candidate.n candle.n candlestick.n candy.s cane.s canister.n can.n cannery.n cannibal.n cannon.n canoe.n canon.n canopy.n cantaloupe.s cantata.n canteen.n canter.n canticle.n cantilever.n canto.n canton.n cantor.n canvas.s canvass.n canyon.n capability.s cape.n caper.n capillary.n capitalist.n capital.s cap.n capon.n cappuccino.s caprice.n capsule.n captain.n caption.n captive.n captor.n capture.s carafe.n caramel.s carat.n caravan.n caravansary.n caravanserai.n caraway.n carbide.n carbine.n carbohydrate.s carbon.s carbuncle.n carburettor.n carcass.n carcinoma.s cardigan.n cardinal.n cardmember.n card.s careerist.n career.n care.s caress.n caretaker.n caret.n cargo.s caribou.s caricature.s caricaturist.n carillon.s carload.n carmine.s car.n carnation.n carnival.n carnivore.n carol.n carousel.n carpenter.n carpetbagger.n carpet.n carport.n carp.s carriage.n carriageway.n carrier.n carrot.s cartel.n carter.n carthorse.n-m cartilage.s cartload.n cart.n cartographer.n carton.n cartoonist.n cartoon.n cartridge.n cartwheel.n carver.n car_wash car-wash.n carwash.n cascade.n casebook.n casement.n case.n cashew.n cashier.n casino.n casket.n casserole.n cassette.n castanets.s castaway.n caste.s casting.n castle.n cast.n castor.n castration.s castrato.s casualty.n cataclysm.n catalog.n catalogue.n catalyst.n catamaran.n catapult.n cataract.n catastrophe.s catcall.n catcher.n catchment.n catch.n catchword.n catechism.s category.n caterer.n caterpillar.n catfish.s cathedral.n cathode.n Catholic.n cation.n catkin.n cat.n catsup.s catwalk.n caucus.n cauldron.n cauliflower.s cause.n causeway.n caution.s cavalcade.n cavalier.n cavalry.n caveat.n cave.n cavern.n cavity.n C-band.n CD.s ceasefire.n cedar.s cedilla.n ceiling.n celadon.s celebrant.n celebration.s celebrity.s celesta.s cellar.n cellist.n cell.n cello.s cemetery.n censor.n censorship.n censure.s census.n centaur.n centenarian.n centenary.n centennial.n center.n centerpiece.n centigram.n centiliter.n centime.n centimeter.n centimetre.n centipede.n centre.n centrepiece.n centrex.s centrifuge.n centurion.n ceramic.s cereal.s ceremonial.s ceremony.s certainty.s certificate.n certification.s cervix.n cesspit.n cesspool.n chaffinch.n chain.s chairman.n chair.n chairwoman.n chaise.n chalet.n chalice.n chalkpit.n chalk.s challenge.n challenger.n chalumeau.s chamberlain.n chambermaid.n-f chamber.n chamberpot.n chameleon.n chamois.n champagne.s champion.n championship.s champ.n chancellery.n chancellor.n chancel.n chancery.n chandelier.n chandler.n changeling.n changeover.n change.s channel.n chant.n chapel.n chaperon.n chaplain.n chap.n chapterhouse.n chapter.n charabanc.n character.s charade.n charger.n charge.s charioteer.n chariot.n charity.s charlady.n charlatan.n charmer.n charm.s charter.n chart.n chase.n chaser.n chasm.n chassis.s chasuble.n château.s chat.n chatterbox.n chauffeur.n chauvinist.n cheat.n checkbook.n checker.n checklist.n checkmate.n check.n checkout.n checkpoint.n checkroom.n checkup.n cheekbone.n cheek.s cheep.n cheerleader.n cheer.n cheesecake.s cheesecloth.s cheetah.n chef.n chemical.n chemise.n chemist.n chequebook.n cheque.n cherry.n cherub.n chessboard.n chesterfield.n chest.n chestnut.s chew.n chicken.s chick.n chickpea.n chief.n chieftain.n childhood.s child.n Chilean.s chile_poblano chile_relleno chile_verde chili.s chill.n chime.n chimera.n chimney.n chimneypot.n chimneysweeper.n chimneysweep.n chimpanzee.n chimp.n chinchilla.n chink.n chin.n chipmunk.n chip.n chiropodist.n chiropractor.n chirp.n chirrup.n chi.s chisel.n chitarra.s chit.n chive.s choc.n chocolate.s choice.s choirboy.n choir.n choke.n choker.n chop.n chopper.n chopstick.n chorale.n chord.n chore.n choreographer.n chorister.n chortle.n chorus.n chow.s christening.n Christian.n chromosome.n chronicle.n chronicler.n chronology.s chronometer.n chrysalis.n chrysanthemum.n chuckle.n chuck.n chug.n chump.n chum.s chunk.n churchgoer.n church.s churchwarden.n churchyard.n churn.n chute.n cicada.n cider.s cigarette.n cigar.n cimbalom.s cincture.n cinder.n cinema.n cinnabar.s cipher.n circle.n circuit.n circular.n circulation.s circumference.n circumflex.n circumlocution.s circumstance.n circus.n cissy.n cistern.n citadel.n citation.s citizen.n citron.n cittern.s city.n civilian.n civility.s civilization.s claimant.n clairvoyant.n clambake.n clam.n clamour.s clamp.n clang.n clank.n clan.n clapboard.n clap.n clapperboard.n clapper.n claret.s clarinetist.n clarinet.s clarinettist.n clarion.n clash.n clasp.n classicist.n classic.n classification.s classmate.n classroom.n class.s clause.n claves.s clavichord.s clavicle.n clavinet.s claw.n cleaner.s cleanser.s cleanup.n clearance.s clearing.n cleat.n cleavage.n cleaver.n clef.n cleft.n clerestory.n clergyman.n clergy.n cleric.n clerk.n cliche.n click.n clientele.n client.n cliff.n climate.n climax.n climber.n clime.n clincher.n clinch.n clinic.n clink.n clip.n clipper.n clique.n clitoris.n cloak.n cloakroom.n clock.n clodhopper.n clod.n clog.n cloister.n clone.n close.n closet.n clotheshorse.n clothesline.n clothier.n cloth.s clot.n cloudburst.n cloud.n clove.n clown.n clubber.n clubhouse.n club.n cluck.n clue.n clump.n clunk.n cluster.n clutch.n clutter.s coach.n coalfield.n coalition.n coalmine.n coalpit.n coaster.n coastguard.n coastline.n coast.n coat.s coating.n cobble.n cobbler.n cobblestone.n cob.n cobra.n cobweb.n cochlea.n cockatoo.n cockerel.n cocker.n cockhorse.n cockleshell.n cock.n cockney.n cockpit.n cockroach.n cockscomb.n cocktail.n coco.n coconut.s cocoon.n coda.n code.s codfish.s codger.n codification.n codpiece.n cod.s co-ed.n coed.n coefficient.n coffee.s coffer.n coffin.n cogeneration.s cog.n cognate.n cogwheel.n cohort.n coiffeur.n coiffure.n coif.n coil.n coinage.s coincidence.s coin.s coke.s cola.s cold.s collaborationist.n collaborator.n collage.s collapse.n collarbone.n collar.n colleague.n collection.n collector.n college.s collie.n collier.n colliery.n collision.s colloquialism.n colloquy.s Colombian.s colonel.n colonialist.n colonial.n colonist.n colonizer.n colon.n colonnade.n colony.n color.s colour.s colt.n columbine.n columnist.n column.n coma.n combatant.n combination.n combine.n comb.s comeback.n comedian.n comedienne.n comedown.n comedy.s comer.n comet.n comforter.n comfort.s comic.n comma.n commandant.n commander.n commandment.n command.n commando.n commencement.n commendation.s commentary.s commentator.n commercial.n commissariat.n commissar.n commissary.n commissionaire.n commissioner.n commission.s committee.n commode.n commodity.n commodore.n commonplace.n commonwealth.n commotion.s commune.n communicant.n communication.s communion.s communique.n communist.n Communist.n community.n commutation.s commuter.n compact.n companion.n company.s comparative.n comparison.s compartment.n compass.n compatriot.n compendium.n compensation.s competition.s competitor.n compilation.s compiler.n complainant.n complement.n complexion.n complexity.s complex.n complication.n compliment.n component.n comportment.n composer.n composite.n composition.s compote.s compound.s compressor.n compromise.s comptroller.n computation.s computer.n comrade.n comradeship.n concatenation.s concavity.s conceit.s concentrate.s concentration.s conception.s concertina.s concert.n concerto.n concessionaire.n concession.n conch.s concierge.n conclave.n concoction.n concordance.s concordat.n concord.s concourse.n concubine.n concurrence.s concussion.s condemnation.s condensation.s condiment.s conditioner.s condolence.s condominium.n condor.n conductivity.s conductor.n conductress.n conduit.n cone.n coney.n confab.n confabulation.n confectioner.n confection.s confederacy.n confederate.n confederation.s conference.n confessional.n confession.s confessor.n confidante.n confidant.n configuration.n confirmation.s conflagration.n conflict.s confluence.n conformation.n conformist.n confrere.n confrontation.s confutation.n conga.s conglomerate.n conglomeration.n congratulation.n congregation.s congressman.n congress.n conifer.n conjecture.s conjugate.n conjugation.s conjunction.s conjunctive.n conjurer.n conjuror.n conker.n conk.n con.n connection.n connective.n connector.n connexion.s connoisseur.n connotation.n conqueror.n conquest.n conquistador.n conscience.n conscript.n consecration.s consequence.n conservancy.n conservative.n conservatoire.n conservatory.n consideration.s consistency.s consolation.s console.n consolidation.s consomme.s consonant.n consortium.s consort.n conspectus.n conspiracy.n conspirator.n constable.n constabulary.n constant.n constellation.n constituency.n constituent.n constitutionalist.n constitution.n constraint.s constriction.s construction.s construct.n constructor.n consulate.n consul.n consulship.n consultant.n consultation.s consumer.n consummation.s consumptive.n contact.s contagion.s container.n contaminant.n contemporary.n contender.n contestant.n contest.n context.s continent.n contingency.s contingent.n continuation.s contortionist.n contortion.n contour.n contrabass.n contrabassoon.s contraceptive.n contraction.s contract.n contractor.n contradiction.s contralto.s contraption.n contrary.s contrast.s contravention.s contretemps.s contribution.n contributor.n contrivance.n controller.n control.s controversy.s contusion.n conundrum.n conurbation.n convalescent.n convenience.s convention.n convent.n conversationalist.n conversation.s conversion.s converter.n convertible.n convert.n conveyance.s conveyer.n conveyor.n convict.n convocation.s convolution.n convoy.n convulsion.n cookbook.n cooker.n cookie.n cook.n coolant.s cooler.n coolie.n coo.n coon.n co-operative.n cooper.n co-op.n coop.n coordinate.n coordinator.n coot.n copartner.n copartnership.n cope.n cop.n coppersmith.n copse.n copula.n copycat.n copyist.n copy.n copywriter.n coquette.n coral.s cordial.s cordon.n cord.s coreligionist.n core.n corgi.n corker.n cork.s corkscrew.n cormorant.n corncob.n cornea.n corner.n cornerstone.n cornet.s cornett.s cornflake.n cornflower.n cornice.n cornucopia.n corolla.n corollary.n corona.n coronary.n coronation.s coroner.n coronet.n corporal.n corporation.n corpse.n corps.s corpuscle.n corral.n correction.s corrective.n correlation.n correlative.n correspondence.s correspondent.n corridor.n corrosive.n corsage.n corset.n Corsican.s cortex.n coruscation.n corvette.n cosine.n cosmetician.n cosmology.s cosmonaut.n cosmopolitan.n cost.s costume.s costumier.n cosy.n coterie.n cotillion.n cot.n cottage.n cottonseed.n cottontail.n couchette.n couch.n cougar.n cough.n councillor.n council.s counsellor.n counselor.n counsel.s countdown.n countenance.s counterattack.n counterbalance.n counterblast.n counterclaim.n counterfeiter.n counterfeit.n counterfoil.n counter.n counteroffer.n counterpart.n counterplot.n counterpoint.s counterproposal.n countertenor.s countess.n count.n country.n countryside.n county.n coupe.n couple.n couplet.n coupling.n coup.n coupon.n courier.n course.n courtesan.n courtesy.s courtier.n courtroom.n court.s courtship.s courtyard.n cousin.n cove.n covenant.n covering.n coverlet.n cover.n covert.n coward.n cowbell.s cowboy.s cowcatcher.n cowhand.n cowherd.n cowhide.s cow.n-f cowslip.n coxcomb.n cox.n coxswain.n coyote.n crab.s crackdown.n cracker.n crack.n crackpot.n cradle.n craft.s cramp.n cranberry.n crane.n cranium.n crank.n crankshaft.n cranny.n crap.s crash.n crate.n crater.n cravat.n craven.n craving.n crawfish.n crawl.n crayfish.n crayon.n craze.n creak.n creamery.n cream.s crease.n creation.s creator.n creature.n creche.n creditor.n credit.s credo.n creed.n creek.n creeper.n creep.s cremation.s crematorium.n crescendo.n crescent.n crest.n cretin.n crevasse.n crevice.n crew.n crib.n cricketer.n cricket.s crick.n crier.n crime.s criminal.n crimson.s crinkle.n crinoline.s cripple.n crisis.s crisp.n criterion.n criticism.s critic.n critique.n croak.n Croatian.s Croat.s crock.n crocodile.n crocus.n croissant.n cromorne.s crone.n crony.n crook.n crooner.n crop.n cropper.n crossbar.n crossbeam.n crossbow.n crossbreed.n crosscheck.n crosscurrent.n crosscut.n crossfire.s crossing.n cross.n crossroad.n crossroads.n crosswalk.n crossword.n crotchet.n crotch.n crouch.n crowbar.n crowd.n crown.n crow.s crucible.n crucifixion.s crucifix.n cruelty.s cruise.n cruiser.n crumb.n crumhorn.s crumpet.s crunch.n crupper.n crusade.n crusader.n crush.n crustacean.n crust.s crutch.n crwth.s crybaby.n cry.n crypt.n cryptogram.n crystallization.s crystallophone.s crystal.s cuatro.s Cuban.s cubbyhole.n cube.n cubicle.n cubist.n cub.n cuckold.n cuckoo.n cucumber.s cuddle.n cudgel.s cue.n cuff.n cullender.n culmination.n culprit.n cult.n culture.s cummerbund.n cunt.n cupboard.n cupful.n cup.n cupola.n cuprophone.s curate.n curator.n curb.n curd.s cure-all.s cure.s curfew.n curio.n curiosity.s curler.n curl.n curmudgeon.n cur.n currant.n currency.s current.n curriculum.n curry.s curse.n curtailment.s curtain.n curtsey.n curtsy.n curve.n cushion.n cuspidor.n cusp.n cuss.n custard.s custodian.n customer.n custom.s cutback.n cuticle.n cutlass.s cutlet.n cut.n cutter.n cutting.n cuttlefish.s cycle.n cyclist.n cyclone.n cyclopaedia.n cyclostyle.n cyclotron.n cygnet.n cylinder.n cymbal.s cymbalum.s cynic.n cypher.n cypress.n Cypriote.s cyst.n czarina.n czar.n Czech.s dabbler.n dab.n dacha.n dachshund.n dactyl.n daddy.n-m dad.n-m daemon.n daffodil.n dagger.n dago.n daguerreotype.n dahlia.n daily.n dainty.n dairymaid.n-f dairy.n dais.n daisy.n dale.n dalmatian.n dame.n dam.n damn.n damselfish.s damselfly.n damsel.n dancer.n dance.s dandelion.n dandy.n Dane.n daredevil.n dare.n darkroom.n darling.n darn.n dart.n dashboard.n dash.s dateline.n date.n daughter.n dauphin.n davenport.n dawdler.n dawn.s daybook.n dayboy.n daydream.n daygirl.n daytime.n daze.n deaconess.n Deaconess.n deacon.n Deacon.n deadline.n deadlock.s dealer.n dealing.n deal.n deanery.n dean.n deathbed.n deathblow.n death.s deathtrap.n debacle.n debater.n debate.s debauchee.n debauchery.s debenture.s debit.n debtor.n debt.s debutante.n debut.n decagram.n decaliter.n decameter.n decanter.n deception.s decibel.n decigram.n deciliter.n decimeter.n decker.n deck.n declaration.n declension.s decline.n declivity.n decoder.n decoration.s decorator.n decoy.n decrease.s decree.n dedication.s deduction.s deed.n deer.s deerskin.s deerstalker.n defaulter.n defeatist.n defeat.s defection.s defect.n defector.n defence.s defendant.n defender.n defense.s deficiency.s deficit.n definition.s defoliant.n deformity.s defroster.n degenerate.n degradation.s degree.n deity.n delay.s delegate.n delegation.s deletion.s deliberation.s delicacy.s delicatessen.n delight.s delineation.s delinquent.n deliverance.s delivery.s dell.n delta.s deluge.n delusion.s demagogue.n demand.s demarche.n demeanour.s dementia.s demerit.n demigod.n demise.s democracy.s democrat.n Democrat.n demolition.s demo.n demoniac.n demon.n demonstration.n demonstrator.n demotion.s denial.s denizen.n den.n denomination.n denominator.n denouement.n density.s dentist.n dent.n denture.n denunciation.s deodorant.n department.n departure.n dependant.n dependency.s dependent.n depiction.s deportation.s deportee.n deposition.s depositor.n depository.n depot.n depravity.s depression.s depressive.n deprival.s deprivation.s depth.s deputy.n derailment.s derby.n derivation.s derivative.n dermatologist.n derrick.n dervish.n descant.n descendant.n descent.s description.n deserter.n desertion.s desert.s designation.s designer.n design.s desk.n despatch.s desperado.n despotism.s despot.n dessert.s dessertspoonful.n dessertspoon.n destination.n destiny.s destroyer.n detachment.s detail.s detainee.n detective.n detector.n detention.s detergent.s deterioration.s determinant.n determiner.n deterrent.s dethronement.n detonation.n detonator.n detour.n detractor.n deuce.n devaluation.s developer.n development.s deviant.n deviation.s device.n devil.n devotee.n devotion.s dholak.s dhow.n diabetic.n diacritic.n diagnosis.s diagonal.n diagram.n dialectician.n dialectic.n dialect.s dial.n dialogue.s diameter.n diamond.s diaper.n diaphragm.n diarist.n diary.n diatribe.n dice.s dichotomy.n dickey.n dickybird.n dictate.n dictation.s dictator.n dictatorship.s dictionary.n dictum.n didgeridoo.s die.s diesel.s dietician.n diet.n difference.n differential.n differentiation.s difficulty.s diffraction.n digestion.s digest.n digger.n digit.n dig.n dignitary.n digression.n dike.n dilemma.n dilettante.n dilution.s dime.n dimension.n diminuendo.n diminution.s diminutive.n dimple.n dinar.n diner.n dinghy.n dinner.s dinosaur.n dint.s diocesan.n diocese.n dioxide.s diphthong.n diploma.n diplomatist.n diplomat.n dipper.n dip.s dipstick.n diptych.n direction.s directive.n directorate.n director.n directorship.n directory.n dirge.n dirigible.n dirndl.n disability.s disadvantage.s disagreement.s disappearance.n disappointment.s disassembly.n disaster.s disbursement.s discard.n discharge.s disciple.n disciplinarian.n discipline.s disclaimer.n disc.n discomfort.s disco.n discontinuity.s discord.s discotheque.n discount.n discouragement.s discourse.s discourtesy.s discoverer.n discrepancy.s discus.n discussion.s disease.s disfigurement.s disguise.s dishcloth.n dishful.n dish.n dishwasher.n disillusionment.s disincentive.n disinclination.s disinfectant.s disk.n dislocation.s disloyalty.s dismemberment.n dismissal.s disorder.s disparagement.n disparity.n dispatch.s dispensary.n dispensation.s dispenser.n dispersal.s dispersion.n displacement.s display.s disposition.s disproof.s disputant.n disputation.s dispute.s disquisition.n disruption.s dissection.s dissembler.n dissension.s dissenter.n dissent.s dissertation.n disservice.n dissident.n dissimilarity.s dissolution.s dissonance.s distance.n distaste.s distension.n distillation.s distiller.n distillery.n distinction.s distortion.s distraction.s distribution.s distributor.n district.n disturbance.s ditch.n ditty.n divan.n dive.n divergence.s diver.n diversion.s divestiture.s dividend.n divination.s divine.n diviner.n divinity.s division.s divisor.n divorcee.n divorce.s divorces.n djembe.s Djiboutian.s docket.n dock.n dockyard.n doctorate.n doctor.n doctrinaire.n doctrine.s document.n dodderer.n dodge.n dodger.n dodo.n doe.n doer.n doge.n dogfish.s doggie.n doggy.n doghouse.n dogma.s dog.n dogsbody.n dogsled.n dogwood.n doily.n dollhouse.n doll.n dollop.n dolly.n dolmen.n dolphin.n dolt.n domain.n dome.n domicile.n Dominican.s dominion.s domino.n donation.s donkey.n don.n donor.n donut.s doodlebug.n doom.n doorbell.n doorcase.n doorframe.n doorhandle.n doorkeeper.n doorknob.n doorknocker.n doormat.n door.n doornail.n doorpost.n doorstep.n doorstopper.n doorway.n dopamine.s dope.s dormer.n dormitory.n dory.n dosage.s dose.n dossier.n dot.n double.n doublet.n doubloon.n douche.n doughnut.s doulophone.s dovecote.n dove.n dovetail.n dowager.n dowel.n dower.n downbeat.n downgrade.n downpour.n downturn.n dowry.n doyen.n doyly.n doze.n drachma.n draftee.n drafting.n draft.n drag.n dragnet.n dragonfly.n dragon.n dragoon.n drain.n drainpipe.n drake.n drama.s dramatist.n dramatization.s drape.n draper.n drapery.s draught.s drawback.n drawbridge.n drawer.n drawing-room.n drawing.s drawl.n draw.n dreadnought.n dreamer.n dreamland.n dream.n dreamworld.n dresser.n dressing.s dressmaker.n dress.n drier.n drifter.n drift.n drill.n drinker.n drink.s drip.n drive.n driver.n drive_through drive-through.n drivethrough.n drive_thru drive-thru.n drivethru.n driveway.n dromedary.n drone.s drop.n dropoff.n dropout.n drought.s drudge.n druggist.n drug.n drugstore.n druid.n drummer.n drum.s drumstick.n drunkard.n drunk.n dryer.n ducat.n duchess.n-f duchy.n ducking.n duckling.n duck.s ducky.n duct.n dude.n dud.n duelist.n duellist.n duel.n duet.n duffer.n dugout.n dukedom.n duke.n-m dulcian.s dulcimer.n dullard.n dulzaina.s dumbbell.n dumbwaiter.n dumdum.n dummy.n dumpling.n dump.n dunce.n dunderhead.n dune.n dungeon.n dunghill.n dupe.n duplicate.n duplication.s duplicator.n duration.s dustbin.n dustcart.n duster.n dustpan.n dutar.s duty.s duvet.n dwarf.n dweller.n dwelling.n dyer.n dye.s dyke.n dynamic.n dynamo.n dynasty.n dyspeptic.n eagle.n earache.n eardrop.n eardrum.n earful.n earldom.n earl.n earmark.n ear.n earphone.n earpiece.n earring.n earthquake.n earthworm.n easel.n eater.n eavesdropper.n ebb.n ebbtide.n eccentricity.s eccentric.n ecclesiastic.n echelon.n echo.n eclair.n eclipse.n ecologist.n economist.n economy.n ecosystem.n ecstasy.s Ecuadorian.s eddy.n edge.n edging.n edict.n edifice.n edition.n editorial.n editor.n education.s educator.n eel.n effect.s efficiency.s effigy.n effluent.s effrontery.s effusion.n egalitarian.n egghead.n eggplant.s egg.s eggshell.s egoist.n ego.n egotist.n egotrip.n egret.n Egyptian.s eiderdown.n ejaculation.s ejection.s elaboration.s elbow.n elder.n election.s electorate.n elector.n electrician.n electrocardiogram.n electrocardiograph.n electrocution.s electrode.n electrolyte.s electromagnet.n electron.n electrophoresis.s elegy.n element.n elephant.n elevation.s elevator.n elimination.s elision.s elite.n elitist.n elixir.s elk.n ellipse.n elm.s elocutionist.n elongation.s email.s emanation.s embankment.n embargo.n embarkation.s embarrassment.s embassy.n embellishment.s ember.n emblem.n embodiment.n embrace.n embryo.n emendation.s emerald.s emergence.n emergency.s emigrant.n emigre.n eminence.s emirate.n emir.n emissary.n emission.s emotion.s emperor.n-m emphasis.s empire.n empiricist.n employee.n employer.n emporium.n empress.n-f emulsion.s emu.n enactment.s encampment.n enchantment.s enchantress.n enchilada.n enchilada_ranchero enchilada_verde enclave.n enclosure.s encomium.n encounter.n encouragement.s encroachment.s encumbrance.n encyclical.n encyclopaedia.n encyclopædia.n encyclopedia.n endeavour.n endemic.n ending.n endive.s end.n endorsement.s endowment.s enema.n enemy.n enforcer.n engagement.s engineer.n engine.n engraver.n engraving.s enigma.n enlargement.s enlistment.s enormity.s enquirer.n enquiry.s ensemble.n ensign.n enslavement.s entanglement.s entente.n enterprise.s entertainer.n enthronement.n enthusiast.n enticement.s entitlement.s entity.n entomologist.n entracte.n entrance.s entrant.n entree.n entrepot.n entrepreneur.n entry.s envelope.n envelopment.n environmentalist.n environment.n envoi.n envoy.n enzyme.s eon.n epaulet.n epaulette.n epicentre.n epic.n epicurean.n epicure.s epidemic.s epidemiologist.n epiglottis.n epigram.n epileptic.n epilogue.n episcopalian.n episode.n epistle.n epitaph.n epithet.n epitome.n epoch.n epsilon.s equalizer.n equal.n equation.s equator.n equestrian.n equinox.n equity.s equivalence.s equivalent.n equivocation.s eradication.n era.n eraser.n erasure.s erection.s Eritrean.s errand.n error.s eruption.s escalation.s escalator.n escapade.n escapee.n escapement.n escape.s escapist.n escapologist.n escort.n escritoire.n escutcheon.n esophagus.n esplanade.n espresso.s essayist.n essay.n essence.s establishment.s estate.s esthete.n esthetic.n estimate.n Estonian.s estrangement.s estuary.n eta.s etching.n eternity.s Ethiopian.s ethnographer.n ethnologist.n ethyl.s etymologist.n etymology.s eucalyptus.n eulogist.n eulogy.n eunuch.n euphemism.n euphonium.s European.s evacuation.s evacuee.n evader.n evaluation.n evangelist.n evaporation.s eve.n evening.s event.n eventuality.n evergreen.n eviction.s evil.s evolution.s ewe.n exacerbation.s exaggeration.s examination.s examiner.n exam.n example.n excavation.s excavator.n exception.n excerpt.n excess.s exchange.s exchequer.n exclamation.s excommunication.s excrescence.n excretion.s excursion.n executant.n executioner.n execution.s executive.n executor.n exemplification.s exemption.n exercise.s exertion.s exhaust.s exhibitioner.n exhibitionist.n exhibition.s exhibit.n exhibitor.n exhortation.s exigency.n exile.s existence.s existentialist.n exit.n exodus.n exoneration.s expanse.n expansion.s expatriate.n expectancy.s expectorant.n expedient.n expedition.n expenditure.s expense.s experience.s experimenter.n experiment.n expert.n expletive.n exploit.n exploration.s explorer.n explosion.n explosive.n expo.n exponent.n exporter.n export.n expose.n exposition.s exposure.s expressionist.n expression.s express.s expressway.n expulsion.s extension.s extent.s exterior.n extinguisher.n extract.s extradition.s extra.n extravagance.s extravaganza.n extreme.n extremist.n extremity.n extrovert.n eyeball.n eyebrow.n eyeful.n eyeglass.n eyelash.n eyelet.n eyelid.n eye.n eyepiece.n eyesore.n eyewitness.n fable.s fabrication.s fabric.s facade.n face.n facet.n facial.n facilitator.n facility.s facsimile.n faction.s factor.n factory.n factotum.n faculty.n fad.n faerie.n faggot.n faglong.s fag.n failing.n fairground.n fair.n fairway.n fairyland.n fairy.n fairytale.n faith.s fajita.n fake.n fakir.n falcon.n fall.s falsehood.s falsetto.s falsification.s falsity.s familiarity.s family.n famine.s fanaticism.s fanatic.n fancier.n fancy.s fandango.n fanfare.s fang.n fanlight.n fan.n fanny.n fantasia.n fantasy.s farce.s fare.s farewell.n farmer.n farmhand.n farmhouse.n farm.n farmstead.n farmyard.n farthing.n fart.n fascination.s fascist.n fashion.s fastener.n fast.n fatalist.n fatality.n fate.s fathead.n fatherland.n father.n-m fathom.n faucet.n fault.n fauna.s faun.n favor.s favourite.n favour.s fawn.n fax.n feast.n featherbed.n feather.n featherweight.n feat.n feature.n federalist.n federation.n feeder.n feed.s feeler.n fee.n fegereng.s feint.n felicity.s fellow.n fellowship.s felon.n felony.n female.n feminist.n femtoliter.n femtolitre.n femtometer.n femtometre.n femtosecond.n femtowatt.n femur.n fence.n fencer.n fender.n fen.n ferment.n fern.n ferret.n ferryboat.s ferry.n fertilizer.s festival.n festivity.s fete.n fetish.n fetus.n feud.n fever.s fez.n fiancee.n fiance.n fianchetto.s fiasco.n fiat.s fibber.n fiber.s fib.n fibre.s fiction.s fiddler.n fiddle.s fiddlestick.n fief.n fielder.n field.n fiend.n fiesta.n fife.s fighter.n fight.n figment.n fig.n figurehead.n figure.n Fijian.s filament.n filbert.s file.n filibuster.n filing.n Filipino.s fillet.n filling.n filly.n film.s filter.n finale.n finalist.n final.n financier.n finch.n finder.n find.n fine.n finesse.s fingerboard.n fingermark.n finger.n fingernail.n finger-post.n fingerprint.n fingertip.n finish.n fin.n Finn.n fiord.n firearm.n fireball.n firebird.n firebomb.n firebox.n firebrand.n firebrick.s firebug.n firecracker.n firefly.n firelight.n fireman.n fireplace.n fire.s fireside.n firework.n firmament.n firm.n fir.s firstborn.n fishbone.n fishcake.n fisherman.n fisher.n fishery.n fishmonger.n fish.s fissure.n fist.n fistula.n fit.n fitter.n fitting.n fiver.n fixation.s fixative.n fixer.n fix.n fixture.n fjord.n flageolet.s flag.n flagpole.n flagship.n flagstaff.n flair.s flake.n flame.s flamethrower.n flamingo.n flange.n flank.n flan.n flannel.s flapjack.n flap.n flapper.n flare.s flashback.n flashbulb.n flashlight.n flash.n flashpoint.n flask.n flatbed.n flatfish.s flat.n flatterer.n flattery.s flauta.n flautist.n flavor.s flavouring.s flavour.s flaw.n flea.n fleck.n fledgeling.n fledgling.n fleet.n flex.s flicker.n flick.n flier.n flight.s fling.n flint.s flip.n flipper.n flirtation.s flirt.n floatation.s float.s flock.n floodgate.n flood.n floorboard.n floor.n floozie.n floozy.n flop.n florin.n florist.n flotation.s flotilla.n flounder.s flourish.n flowerbed.n flower.n flowerpot.n flow.s fluctuation.s flue.n flugelhorn.s fluidity.s fluid.s fluke.n flunkey.n flunky.n fluorescence.s fluoride.s flurry.n flu.s flush.s flute.s flutist.n flutter.s flux.s flycatcher.n flyer.n fly.n flyover.n flytrap.n flyweight.n flywheel.n foal.n foam.s focus.s foe.n fogey.n foghorn.n fog.s foible.n foil.s folder.n fold.n folgerphone.s folio.n folk.n folksong.n folktale.n follower.n following.n folly.s font.n food.s foodstuff.n fool.n footballer.n football.s footboard.n footbridge.n footer.n footfall.n footfault.n foothold.n footmark.n foot.n footnote.n footpath.n footprint.n footstep.n footstool.n foray.n force.s ford.n forearm.n foreboding.s forecaster.n forecastle.n forecast.n foreclosure.s forecourt.n forefather.n-m forefinger.n forefront.n foreground.n forehead.n foreigner.n foreleg.n forelock.n foreman.n foremast.n forename.n forerunner.n foreskin.n forester.n forest.s foretaste.n foreword.n forfeit.n forge.n forger.n forgery.s fork.n formalism.s formality.s formation.s format.s form.s formula.n formulation.s forte.n fortepiano.s fortification.s fort.n fortnight.n fortress.n fortune.s forum.n forward.n fossilization.s fossil.n foul.s foundation.n founder.n foundling.n foundry.n fountain.n fount.n foursome.n fowler.n fowl.s foxglove.n foxhole.n foxhound.n foxhunt.n fox.n foxtrot.n foyer.n fraction.n fracture.n fragmentation.s fragment.n fragrance.s frame.n framework.n franchise.n frankfurter.n fraternity.s fratricide.s fraud.s fray.n frazzle.n freak.n freckle.n freebooter.n freedom.s freeholder.n freehold.n freeway.n freeze.n freezer.n freighter.n frequency.s fresco.s freshman.n fret.n friar.n fricassee.n fricative.n fridge.n friend.n friendship.s frier.n frieze.n frigate.n fright.s frill.n fringe.n frisson.n fritter.n frivolity.s frock.n frog.n frolic.n frontage.n frontier.n frontispiece.n front.n frost.s frown.n fruitcake.s fruit.s fryer.n fuchsia.n fucker.n fuel.s fugitive.n fuglung.s fugue.n fuhrer.n fulcrum.n fullback.n full-bodied.a fullbodied.a fuller.n fumble.n fume.n functionalist.n functionality.s functionary.n function.n fundamentalist.n fundamental.n fund.n funeral.n fungicide.s fungus.s funk.n funnel.n furlong.n furlough.s furnace.n furor.n furrier.n furrow.n fur.s fury.s fuselage.n fuse.n fusilier.n fusillade.n fusion.s fusspot.n fuss.s futility.s future.n futurist.n gable.n Gabonian.s gadfly.n gadget.n gaffe.n gaffer.n gaff.n gage.n gaggle.n gag.n gain.n gait.n gala.n galaxy.n gale.n gallant.n gallantry.s galleon.n gallery.n galley.n gallicism.n gallon.n gallop.n gall.s gallstone.n gal.n galosh.n Gambian.s gambit.n gamble.n gambler.n gambol.n gamekeeper.n game.s gamma.s gammon.s gamut.n gander.n ganglion.n gang.n gangplank.n gangster.n gantry.n gaolbird.n gaolbreak.n gaoler.n gaol.s gap.n garage.n gardener.n gardenia.n garden.n gargle.n gargoyle.n garland.n garment.n garnet.s garnish.n garotte.n garret.n garrison.n garrotte.n garter.n gasbag.n gash.n gasket.n gaslight.s gasmask.n gasometer.n gasp.n gas.s gasworks.s gateau.n gatecrasher.n gatehouse.n gate.n gatepost.n gateway.n gatherer.n gathering.n gaudiness.s gaudy.n gauge.n gauntlet.n gavel.n gavotte.n gay.n gazelle.n gaze.n gazetteer.n gazette.n gearbox.n gear.s gearshift.n gecko.n geezer.n geisha.n gelding.n gel.s gem.n gemshorn.s gendarme.n gendarmerie.n gender.s genealogist.n genealogy.s gene.n generalissimo.n generality.s generalization.s general.n General.n generation.s generator.n geneticist.n genie.n genius.s genre.n gentile.n gentleman.n-m gent.n-m gentry.s genus.s geographer.n geologist.n Georgian.s geranium.n geriatrician.n German.s germicide.n germ.n gerund.n gesticulation.n gesture.n getaway.n geyser.n Ghanaian.s gherkin.n ghetto.n ghost.n ghoul.n giantess.n giant.n gibbet.n gibbon.n gibe.n gift.n gigabyte.n gigawatt.n giggle.n gig.n gigolo.n gilder.n gill.n gimmick.n gin.s gipsy.n giraffe.n girder.n girdle.n girlfriend.n girl.n girly.n gist.n giveaway.n gizzard.n glacier.s glade.n gladiator.n glance.n gland.n glare.s glasschord.s glassful.n glasshouse.n glass.s glassworks.s glaze.s gleam.n glee.s glen.n glide.n glider.n glimmer.n glimpse.n glint.n glissade.n glitch.n globe.n globetrotter.n globule.n glockenspiel.s gloom.s glory.s glossary.n gloss.n glottis.n glove.n glow.n glue.s glut.n glutton.n gnat.n gnome.n gnu.n goalie.n goalkeeper.n goal.n goatee.n goatherd.n goat.s goatskin.s goblet.n goblin.n gob.n goddaughter.n-f goddess.n-f godfather.n-m godmother.n-f god.n godparent.n godsend.n godson.n-m goitre.n goldenrod.s goldfinch.n goldfish.s goldmine.n goldsmith.n golfer.n golliwog.n gondola.n gondolier.n goner.n gong.s goodbye.n goodnight.n goody.n goof.n goolash.s goon.n gooseberry.n gopher.n gorge.n gorilla.n gosling.n gospel.s gossip.s goulash.s gourd.n gourmand.n gourmet.n governess.n government.s governor.n Governor.n gown.n grab.n gradation.n grade.n gradient.n graduate.n graduation.s graft.s grail.n grain.s grammarian.n grammar.s gram.n gramophone.n granary.n grandchild.n granddad.n-m granddaughter.n-f grandfather.n-m grandma.n-f grandmother.n-f grandpa.n-m grandparent.n grandson.n grandstand.n grange.n granny.n-f grant.n granule.n grapefruit.s grape.n grapevine.n graph.n grasp.n grasshopper.n grate.n grater.n gratification.s gratuity.n grave.n gravestone.n graveyard.n greatcoat.s Greek.s greenback.n greengage.n greengrocer.n greengrocery.n greenhorn.n greenhouse.n greenwood.n greeting.n gremlin.n Grenadan.s grenade.n grenadier.n greybeard.n greyhound.n griddle.n gridiron.n grid.n grievance.n griffin.n grille.n grill.n grimace.n grinder.n grind.n grindstone.n grin.n grip.n grizzly.n groan.n grocer.n grocery.n groin.n groom.n groove.n grotesque.n grotto.n grouch.n grounding.n groundwater.s groupie.n grouse.s grove.n grower.n growl.n growth.s grub.s grudge.n grumble.n grumbler.n grunt.n guarantee.n guarantor.n guaranty.n guardian.n guardianship.n guard.n guardrail.n guardroom.n Guatemalan.s guerilla.n guerrilla.n guess.n guesthouse.n guest.n guestroom.n guffaw.n guidebook.n guideline.n guide.n guilder.n guildhall.n guild.n guillotine.n guinea.n Guinean.s guise.n guitarist.n guitarrón.s guitar.s guitjo.s gulch.n gulf.n gullet.n gull.n gully.n gulp.n gum.s gumshoe.s gunboat.s gunman.n gun.n gunner.n gunrunner.n gunshot.n gunsmith.n guru.n gusher.n gust.n gut.n gutter.n guttersnipe.n guttural.n guvnor.n guy.n guzzler.n gym.n gymnasium.n gymnast.n gynaecologist.n gynecologist.n gyp.n gyration.s gyro.n gyroscope.n haberdasher.n habitation.s habitat.s habit.s hack.n hacksaw.n haddock.s haemophiliac.n haemorrhage.s haggis.n hag.n hail.s hailstone.n hairbrush.n haircut.n hairdo.n hairdresser.n hairline.n hairnet.n hairpiece.n hairpin.n hair.s hairstyle.n hairstylist.n Haitian.s halberdier.n halberd.n halfback.n half-breed.n half-hour.n halfwit.n halibut.s halliard.n hallmark.n hall.n hallucination.s hallway.n halo.n halter.n halt.n halyard.n hamburger.s hamlet.n hammer.n hammock.n hamper.n ham.s hamster.n hamstring.n handbag.n handbells.s handbill.n handbook.n handbrake.n handcart.n handclap.n handcuff.n handicap.n handicraft.s handkerchief.n handlebar.n handle.n handler.n handmaid.n-f hand.n handout.n handrail.n handsaw.n handshake.n handstand.n hangar.n hanger.n hanging.s hangnail.n hangover.n hankering.n hanky.n hansom.n happening.n harbinger.n harbor.n harbour.n hardback.n hardcover.n hardliner.n hardship.s harelip.n harem.n hare.n harlequin.n harlot.s harmonica.s harmonic.n harmonico.s harmonium.s harmonization.s harmony.s harness.n harper.n harpist.n harpoon.n harp.s harpsichordist.n harpsichord.s harrow.n hart.n harvester.n harvest.n hassle.n hatband.n hatchet.n hatch.n hatchway.n hatful.n hat.n hatpin.n hatred.s hatter.n haul.n haunch.n haunt.n haven.s haversack.n hawker.n hawk.n hayfork.n haymaker.n haystack.n hazard.s hazel.s haze.s headache.s headband.n headdress.n header.n heading.n headlamp.n headlight.n headline.n headmaster.n headmistress.n head.n headquarters.s headrest.n headset.n headwind.n healer.n heap.n hearer.n hearing.n hearse.n heartache.s heartbeat.n hearth.n hearthrug.n heart.s heater.n heathen.n heather.s heath.s heatwave.n heave.n heaven.s heavyweight.n heckelphone.s heckler.n hectare.n hedgehog.n hedge.n hedgerow.n hedonist.n heel.n heifer.n-f height.s heiress.n-f heirloom.n heir.n-m heist.n helicopter.n heliograph.n heliotrope.n heliport.n hellcat.n hello.n hell.s helmet.n helm.n helper.n helping.n helpmate.n hemisphere.n hemline.n hem.n hemophiliac.n hemorrhage.s hencoop.n henhouse.n hen.n heptagon.n herald.n herbalist.n herbicide.s herb.s herd.n heresy.s heretic.n heritage.n hermaphrodite.n hermitage.n hermit.n hernia.n heroine.n heron.n hero.s herring.s hertz.s hesitation.s heterosexual.n hexabyte.n hexagon.n hexameter.n heyday.n hiatus.n hiccough.n hiccup.n hick.n hickory.s hideaway.n hide.s hiding.n hierarchy.n hieroglyph.n highball.n highflier.n highflyer.n highland.n highlight.n high.n highness.s highroad.n highway.n hijacker.n hijack.n hike.n hiker.n hillbilly.n hill.n hillock.n hillside.n hilt.n hind.n hindrance.n Hindu.n hinge.n hinterland.n hint.n hip.n hippie.n hippodrome.n hippo.n hippopotamus.n hiss.n histogram.n historian.n history.s hitchhiker.n hitch.n hit.n hitter.n hive.n hoarder.n hoard.n hoax.n hobbyhorse.n hobby.n hobgoblin.n hobnail.n hobo.n hocchiku.s hodgepodge.n hoe.n hog.n holder.n holding.n hold.s holdup.n hole.n holiday.n hollow.n hollyhock.n holocaust.n holograph.n holster.n homecoming.n homeland.n homeopath.n homeowner.n home.s homestead.n hometown.n homicide.s homily.s homo.n homonym.n homophone.n homosexual.n Honduran.s hone.n honeybee.n honeycomb.s honeymoon.n honey.s honk.n honorarium.n honorific.n honor.s honour.s hoodlum.n hood.n hoof.n hooker.n hook.n hooligan.n hoop.s hooter.n hoot.n hopeful.n hop.n hopper.n horde.n horizon.n hormone.n hornet.n horn.n hornpipe.n horoscope.n horror.s horsefly.n horse.n-m horserace.n horseradish.s horseshoe.n horsewhip.n horticulturist.n hosepipe.n hose.s hosier.n hospice.n hospitalization.s hospital.n hostage.n hostel.n hostelry.n hostess.n-f hostility.s host.n hostress.n-f hotbed.n hotdog.s hotelier.n hotel.n hothead.n hothouse.n hotplate.n hound.n hourglass.n houseboat.s housebreaker.n housedog.n housefly.n houseful.n householder.n household.n housekeeper.n housemaid.n-f housemaster.n house.n housetop.n houseware.s housewife.n-f hovel.n hovercraft.s howitzer.n howler.n howl.n hubbub.s hubby.n hub.n huckleberry.s huckster.n huddle.n hue.n huff.n hug.n hula.n hulk.n hullabaloo.n hull.n humanist.n humanitarian.n human.n humdinger.n humiliation.s hummingbird.n hummock.n hum.n humorist.n humourist.n humour.s humpback.n hump.n hunchback.n Hungarian.s hunk.n hunter.n hunt.n huntress.n-f hurdle.n hurdy_gurdy hurl.n hurricane.n hurry.s husband.n hush.n husk.n husky.n hussar.n hussy.n hustler.n hut.n hyacinth.n hyaena.n hybrid.n hydra.n hydrant.n hydraulophone.s hydrocarbon.n hydrofoil.n hydrolysis.s hydroplane.n hyena.n hymen.n hymnal.n hymn.n hyperbola.n hyperbole.s hypermarket.n hyphen.n hypnotist.n hypochondriac.n hypocrite.n hypodermic.n hypotenuse.n iamb.n ibis.n iceberg.s icebox.n icebreaker.n icecap.n icecube.n icehouse.n icepack.n icepick.n icerink.n icicle.n icon.n iconoclast.n idealist.n idealization.s ideal.n identity.s ideologue.n ideology.s idiolect.n idiom.s idiosyncrasy.n idiot.n idol.n idyll.n igloo.n ignoramus.n iguana.n illegality.s ill.s illumination.s illusion.s illustration.s illustrator.n image.n imagination.s imam.n imbalance.s imbecile.n imbroglio.n imitation.s imitator.n immensity.s immersion.s immigrant.n immolation.s immortal.n impact.s impalement.n impasse.n impeachment.s impediment.n imperfection.n imperialist.n impersonation.s impersonator.n impertinence.s implementation.s implement.n implosion.n imp.n imponderable.n importation.s importer.n import.n imposition.s impossibility.s impostor.n impresario.n impressionist.n imprimatur.n imprint.n improbability.s impromptu.n impropriety.s improvement.s improvisation.s impulse.s impurity.s imputation.s inaccuracy.s inadequacy.s inanity.s inaugural.n inauguration.s incantation.s incarnation.n inception.n inch.n incidence.n incident.n incinerator.n incision.n incisor.n incitement.s incivility.s inclination.s incline.n income.s incongruity.s inconsistency.s inconvenience.s increase.n increment.n incubation.n incubator.n incumbency.n incumbent.n incurable.n incursion.s indemnity.s indentation.n indenture.n independent.n index.n Indian.s indicator.n indictment.s indignity.n indiscretion.s individualist.n individuality.s individual.n Indonesian.s inducement.s induction.s indulgence.s industrialist.n industry.s inefficiency.s inequality.s inequity.s infancy.s infant.n infantry.s infatuation.s infection.s inference.s inferior.n inferno.n infestation.s infidel.n infinitive.n infinitude.n infirmary.n infirmity.s inflammation.s inflection.s infliction.s inflow.s influence.s influx.n informality.s informant.n informer.n infraction.n infringement.s infusion.s ingenue.n ingot.n ingredient.n inhabitant.n inheritance.s inheritor.n inhibition.s inhibitor.n iniquity.s initial.n initiate.n initiative.s injection.s injunction.n injury.n injustice.s ink.s inkstand.n inkwell.n inlay.s inlet.n inmate.n inning.n innkeeper.n inn.n innovation.s innovator.n innuendo.s inoculation.s input.s inquest.n inquirer.n inquiry.s inquisition.s inquisitor.n inroad.n inscription.n insect.n insertion.s insert.n inset.n inside.n insider.n insight.s insinuation.s insole.n insolvency.s insomniac.n inspection.s inspector.n inspiration.s installation.s installment.n instalment.n instance.n instep.n instigator.n instinct.s institute.n institution.n instruction.s instructor.n instrumentalist.n instrument.n insubordination.s insulator.n insult.s insurance.s insurer.n insurgent.n insurrection.s intake.s integer.n integument.n intellect.s intellectual.n intelligentsia.n intensification.s intensity.n intention.s interaction.s interception.s interceptor.n intercession.s interchange.s intercom.n interconnection.s interdependence.n interest.s interface.n interior.n interjection.n interlocutor.n interloper.n interlude.n intermarriage.s intermediary.n intermediate.n interment.s intermezzo.n intermission.n intermixture.n internationale.n internationalist.n interne.n intern.n interpolation.s interposition.s interpretation.s interpreter.n interregnum.n interrelation.s interrelationship.s interrogative.n interrogator.n interrupter.n interruption.s intersection.s interstice.n interval.n intervention.s interviewer.n interview.n intestine.n intimacy.s intimate.n intimation.s intoxicant.n intricacy.s intrigue.s introduction.s introvert.n intruder.n intrusion.s intuition.s invader.n invalidation.s invalid.n invasion.n invention.s inventor.n inventory.s inversion.s invertebrate.n investigation.s investigator.n investment.s investor.n invitation.n invocation.s invoice.n involution.n involvement.s ion.n ionosphere.n iota.s Iranian.s Iraqi.s iris.n ironmonger.n iron.s ironwork.n ironworks.s irony.s irregularity.s irrelevance.s irrelevancy.s irritant.n irruption.n islander.n island.n isle.n isolationist.n isotope.n Israeli.s issuer.n isthmus.n Italian.s itch.n item.n iteration.n itinerary.n Ivorian.s jabberer.n jab.n jackal.n jackass.n jackboot.n jackdaw.n jacket.n jack.n jackpot.n jade.s jaguar.n jailer.n jailor.n jail.s jalopy.n Jamaican.s jamb.n jamboree.n jamjar.n jampot.n jam.s janitor.n jarful.n jar.n jaunt.n javelin.n jawbone.n jawbreaker.n jaw.n jay.n jaywalker.n jeep.n jeer.n jellyfish.s jelly.s jenny.n jeremiad.n jerk.n jerry.n jersey.n jester.n jest.n jet.n jetty.n jeweller.n jewel.n Jew.n jibe.n jib.n jiffy.n jigger.n jig.n jigsaw.n jihad.n jimmy.n jingle.n jinx.n jitterbug.n jobber.n job.n jockey.n jogger.n jog.n joiner.n join.n joint.n joist.n joke.n joker.n jollity.s jolt.n Jordanian.s joule.n journalist.n journal.n journey.n joviality.s jowl.n joy.s jubilee.n judgement.s judge.n judgment.s judiciary.s jugful.n juggernaut.n juggler.n jug.s jukebox.n julep.n jumble.s jumper.n jump.n junction.n juncture.n jungle.n junior.n juniper.n junket.n junkie.n junta.n jurist.n juror.n jury.n Justice.n justice.s justification.s juvenile.n kaleidoscope.n kalimba.s kangaroo.n kappa.s karat.n katzenklavier.s kayak.n Kazakhi.s kazoo.s kebab.n keel.n keeper.n keepsake.n keg.n kelly.n kennel.n Kenyan.s kerb.n kerbstone.n kerchief.n kernel.n kettledrum.n kettle.n keyboard.n keyhole.n key.n keynote.n keyring.n keystone.n keytar.s keyword.n khalam.s khan.n kickback.n kick.n kickoff.n kiddie.n kid.n kidnapper.n kidnapping.s kidney.n killer.n killing.s killjoy.n kiln.n kilobyte.n kilogram.n kilolitre.n kilometer.n kilometre.n kilo.n kilowatt.n kilt.n kimono.n kindergarten.n kind.n kingdom.n kingfisher.n king.n kingpin.n kink.n kiosk.n kipper.n kirk.n kisanji.s kisser.n kiss.n kitchenette.n kitchen.n kite.n kit.s kitten.n kitty.n kiwi.n kleenex.s kleptomaniac.n knack.n knapsack.n knapweed.n knave.n kneecap.n knee.n knife.n knighthood.s knight.n knob.n knocker.n knock.n knockout.n knoll.n knot.n knotweed.n knuckle.n koala.n kola.n kopeck.n kora.s Korean.s koto.s kouxian.s Kuwaiti.s label.n lab.n laboratory.n labourer.n labour.s laburnum.n labyrinth.n laceration.n lace.s lackey.n lack.s lacquer.s lacuna.n ladder.n laddie.n-m ladle.n lad.n ladybird.n lady.n-f lager.s laggard.n lag.n lagoon.n laird.n lair.n laity.n lake.n lambda.s lamb.s lambskin.s lamellaphone.s lamentation.s lament.n lamplighter.n lamp.n lampoon.n lamppost.n lamprey.n lampshade.n lance.n lancer.n lancet.n landau.n landfall.n landholder.n landing.n landlady.n landlord.n landlubber.n landmark.n landmine.n landowner.n land.s landscape.s landslide.n lane.n language.s lantern.n Laotian.s lapel.n lap.s lapse.n larceny.s larch.s larder.n largo.n lark.n larkspur.n larva.n larynx.n laser.n lashing.n lash.n lass.n lasso.n latchkey.n latch.n latency.s lathe.n lath.n latrine.n lattice.n Latvian.s laugh.n launcher.n launch.n launderette.n laundry.n laureate.n laurel.n lavatory.n lav.n lawbreaker.n lawgiver.n lawmaker.n lawn.n law.s lawsuit.n lawyer.n laxative.n layabout.n layby.n layer.n lay.n layoff.n layover.n leader.n lead.n leaflet.n leaf.n league.n leak.n lean-to.n leap.n learner.n leaseholder.n leasehold.n lease.n leash.n leatherneck.n leave-taking.n lecher.n lectern.n lecture.n lecturer.n lectureship.n ledge.n ledger.n leech.n leek.n leer.n leftist.n left.n legacy.n legend.s legionary.n legion.n legislator.n legislature.n leg.n lemming.n lemon.s lemur.n lender.n length.s lens.n lentil.n leopard.n leper.n leprechaun.n lesbian.n lesion.n lessee.n lesson.n lessor.n letterhead.n letter.n lettuce.s leukemia.s levee.n leveller.n level.n lever.n levitation.s levy.n lexicographer.n lexicon.n liability.s liaison.s liar.n libation.n libel.s liberality.s liberal.n liberation.s liberator.n Liberian.s libertarian.n libertine.n liberty.s libido.s librarian.n library.n librettist.n libretto.n Libyan.s licence.s licensee.n license.n lichee.n lichgate.n lick.n lid.n lie.n lien.n lieutenant.n lifebelt.n lifeboat.s lifebuoy.n lifeguard.n lifeline.n lifer.n life.s lifestyle.s lifetime.n liftoff.n ligament.n ligature.n lighter.n lighthouse.n light.s lightship.n lightweight.n likeness.s liking.n lilac.n lilt.n lily.n limb.n limbo.s limerick.n lime.s limey.n limitation.s limit.n limousine.n limp.n linchpin.n linden.n lineage.s line.n liner.n lineup.n lingerer.n lingo.n linguist.n lining.n linkage.s link.n linkup.n linotype.n lioness.n-f lion.n-m lip.n lipstick.s liqueur.n liquidation.s liquidator.n liquidizer.s liquid.n lira.n lirone.s lisp.n listener.n listing.n list.n litany.n literal.n lithograph.n Lithuanian.s litigant.n litigator.n litre.n litterbin.n litter.s liturgy.s livelihood.s liver.s livery.n living.n lizard.n llama.n load.n loafer.n loaf.n loan.s lobbyist.n lobby.n lobe.n lobsterman.n lobster.s locale.n locality.s localization.s local.n location.n loch.n locker.n locket.n lock.n lockout.n locksmith.n lockup.n locomotive.n locust.n locution.n lodestar.n lodge.n lodger.n loft.n loganberry.n logarithm.n logbook.n logician.n logjam.n log.n logo.n loincloth.n loin.n loiterer.n lollipop.n lolly.n longboat.s longbow.n longing.s look.n lookout.n loom.n loo.n loon.n loonybin.n loony.n loophole.n looter.n lord.n lordship.s lorgnette.n lorry.n loser.n loss.s lotion.s lot.n lottery.n lotus.n loudspeaker.n lounge.n lout.n louvre.n lovebird.n lover.n love.s lowbrow.n lowlander.n low.n loyalist.n loyalty.s lozenge.n lubricant.s lug.n lullaby.n lull.n lumberjack.n lumberyard.n luminary.n lump.n lunatic.n luncheon.s lunch.s lunge.n lung.n lupin.n lurch.n lure.n lush.n lutenist.n lute.s Luxembourian.s luxury.s lycee.n lyceum.n lychgate.n lymphocyte.n lynchpin.n lynx.n lyra.s lyre.s lyricist.n lyric.n macaroon.n macaw.n Macedonian.s machete.n machination.s machine.n machinist.n mackerel.s mackintosh.n mac.n macrocosm.n Madagascan.s madam.n madhouse.n madrigal.n maelstrom.n maestro.n magazine.s maggot.n magician.n magistrate.n magnate.n magnet.n magnification.s magnifier.n magnolia.n magnum.n magpie.n mahogany.s maidenhood.n maiden.n-f maid.n-f maidservant.n-f mailbag.n mailboat.s mailbox.n mailman.n mainland.n mainmast.n main.n mainspring.n mainstay.n mainstream.n maisonnette.n major.n maker.n makeshift.n make-up.s malachite.s malady.n malaise.n malapropism.n Malawian.s Malaysian.s malcontent.n malediction.n malefactor.n male.n malformation.s malfunction.s Malian.s malignancy.s malingerer.n mallard.n mallet.n mall.n mama.n mamba.n mammal.n mamma.n mammoth.n manacle.n management.s manager.n mandarin.s mando-bass.s mandocello.s mandola.s mandolin.s mandrake.n mane.n maneuver.n manger.n mango.s mangrove.n manhole.n maniac.n mania.s manicure.s manicurist.n manifestation.n manifest.n manifesto.n manifold.n manikin.n manipulation.s man.n mannequin.n mannerism.n manner.n manoeuvre.n manoeuvrer.n manor.n mansard.n manservant.n mansion.n mantel.n mantelpiece.n mantis.n mantle.n manual.n manufacturer.n manuscript.n maple.s map.n maracas.s maraschino.s marathon.n marauder.n marble.s marcher.n march.n mare.n-f margin.s marigold.n marimbaphone.s marimba.s marina.n marine.n mariner.n marionette.n markdown.n marker.n market.n marketplace.n marking.n mark.n maroon.n marquee.n marquess.n marquis.n marriage.s marrowbone.n marshal.n marshmallow.s marsh.s marsupial.n martinet.n martini.n martin.n mart.n martyr.n marvel.n Marxist.n marzipan.s mascot.n mash.s mask.n masochist.n mason.n masque.n masquerade.n massacre.n massage.n masseur.n masseuse.n mass.n mastermind.n master.n masterpiece.n masterstroke.n mastery.s masthead.n mastiff.n mastodon.n mast.s matador.n matchbox.n matchmaker.n match.n mate.n materialist.n material.s mathematician.n matinee.n mat.n matriarch.n matriarchy.n matricide.s matrix.n matron.n matter.s mattress.n Mauritanian.s Mauritian.s mausoleum.n maverick.n mavis.n maw.n maxim.n maximum.n mayday.n mayfly.n mayoralty.n mayoress.n-f mayor.n Mayor.n maypole.n maze.n mazurka.n mbira.s meadow.s mead.s meal.n mealtime.s meanie.n meaning.s mean.n means.s measurement.s measure.n meatball.n mechanic.n mechanism.n mechanization.s medalist.n medallion.n medallist.n medal.n meddler.n median.n media.s mediator.n medication.s medicine.s medic.n mediocrity.s meditation.s medium.n medley.n meeting.n meet.n megabyte.n megagram.n megaliter.n megalomaniac.n megameter.n megaphone.n megaton.n megawatt.n melange.n melee.n mellophone.s mellotron.s melodeon.s melodica.s melodrama.s melody.s melon.n meltdown.n member.n membrane.s memento.n memoir.n memo.n memorandum.n memorialist.n memorial.n memory.s menace.s menage.n menagerie.n mendicant.n mend.n menial.n menopause.n mentality.s mention.s mentor.n menu.n mercenary.n merchant.n merger.s meridian.n meringue.s meritocracy.n merit.s mermaid.n-f merry-go-round.n merrymaker.n mesh.s messenger.n mess.s metallophone.s metallurgist.n metal.s metalware.s metalworker.n metalwork.n metaphor.s metatarsal.n meteorite.n meteor.n meteorologist.n meter.s methodology.s method.s methyl.s metier.n metre.n metronome.n metropolis.n mew.n mews.s Mexican.s mezzanine.n mezzo-soprano.s miaou.n miaow.n miasma.n microbe.n microcosm.n microfiche.s microfilm.s microgram.n microliter.n micrometer.n Micronesian.s micron.n microphone.n microscope.n microwatt.n microwave.n middle.n middleweight.n middy.n midge.n midget.n midland.n midriff.n midst.n mien.n migraine.n migrant.n migration.s mikado.n mike.n mileage.n mileometer.n milestone.n milieu.n militant.n militarist.n military.n militia.n milkmaid.n-f milkman.n milkshake.n milksop.n millenarian.n millenium.n millennium.s millepede.n miller.n milligram.n milliliter.n millimeter.n millimetre.n milliner.n millionaire.n millionairess.n millipede.n milliwatt.n mill.n millpond.n millstone.n millwheel.n milometer.n milord.n mimeograph.n mime.s mimic.n mimosa.s minaret.n mincer.n mind.s minefield.n minelayer.n mine.n mineral.n mineralogist.n miner.n minesweeper.n mineworker.n miniature.s miniaturist.n minim.n minimum.n minion.n minister.n Minister.n ministry.n minivan.n mink.s minnow.n minor.n minster.n minstrel.n mint.s minuet.n minus.n minx.n miracle.n mirage.n mirror.n misanthrope.n misapplication.n miscalculation.s miscarriage.s miscellany.n misconception.s miscount.n miscreant.n misdeal.n misdeed.n misdemeanour.n misdoing.n miser.n misfire.n misfit.n misfortune.s misgiving.n mishap.s mishmash.n misinterpretation.s misnomer.n misogynist.n misprint.n mispronunciation.n misquotation.s misreading.n misrepresentation.s missile.n missionary.n missive.n miss.n misspelling.n misstatement.n missy.n mistake.n mistranslation.s mistress.n mistrial.n mist.s misunderstanding.n misuse.s mite.n mitre.n mitten.n mixer.n mix.n mixture.s moan.n moat.s mobile.n mobilization.s mob.n mobster.n moccasin.n mockery.s mock.n modality.n modeler.n modeller.n model.n modem.n mode.n moderate.n moderator.n modernist.n modification.s modifier.n mod.n modulation.s module.n mogul.n molar.n mold.n Moldovan.s molecule.n molehill.n mole.s mollusc.n monarchist.n monarch.n monarchy.s monastery.n moneybox.n moneychanger.n moneylender.n monger.n Mongolian.s mongol.n mongoose.n mongrel.n monitor.n monkey.n monk.n-m monochrome.n monocle.n monogamist.n monogram.n monograph.n monolith.n monologue.n monopoly.n monorail.n monosyllable.n monotone.n monsoon.n monster.n monstrosity.s montage.n monthly.n monument.n mood.n moo.n moonbeam.n moon.n moor.n moose.s moped.n mop.n moralist.n moral.n morass.n moratorium.n morgue.n morning.s morn.n Moroccan.s moron.n morpheme.n morrow.n morsel.n morsing.s mortal.n mortarboard.n mortar.s mortgage.n mortician.n mortuary.n mosaic.n mosque.n mosquito.n motel.n mothball.n motherland.n mother.n-f moth.n motif.n motion.s motivation.s motive.n motorbike.n motorboat.s motorcade.n motorcar.n motorcoach.n motorcycle.n motorcyclist.n motorist.n motor.n motorway.n motto.n moulding.n mould.n mound.n mountaineer.n mountain.n mount.n mourner.n mouse.n mousetrap.n mousse.s moustache.n mouthful.n mouth.n mouthpiece.n movement.n movement.s mover.n movie.n mower.n Mozambican.s muckraker.n muddle.n mudguard.n mudslinger.n muffin.n muffler.n muff.n mugger.n mugging.n mug.n mugwump.n mulatto.n mulberry.n mulch.n mule.n mullah.n multimillionaire.n multinational.n multiple.n multiplexer.n multiplex.s multitude.n mummy.n municipality.n munition.n mural.n murderer.n murder.s murmur.n mu.s muscle.s muse.n musete.s museum.n mushroom.s musical.n musician.n musketeer.n musket.n muskrat.n Muslim.n mussel.n mustache.n mustachio.n mustang.n muster.n mutation.s mute.n mutilation.s mutineer.n mutiny.s mutterer.n mutt.n muzzle.n mynah.n myna.n myriad.n myrtle.s mystery.s mystic.n mystique.n mythologist.n mythology.s nacho.n nadaswaram.s nadir.n nailfile.n nail.n name.n nameplate.n namesake.n Namibian.s nanny.n nanoliter.n nanolitre.n nanometer.n nanometre.n nanosecond.n nanowatt.n nape.n napkin.n nap.n nappy.n narcotic.n narration.s narrative.s narrator.n nasal.n nationalist.n nationality.s nationalization.s national.n nation.n native.n nativity.n naturalist.n natural.n nature.s naught.s Nauruan.s nautilus.n navel.n nave.n navigator.n navy.n nearside.n nebula.n necessity.s neckband.n necklace.n neckline.n neck.n necktie.n necromancer.n necropolis.n nectarine.n needle.n negative.n negligee.n neglige.n negotiation.s negotiator.n neighborhood.n neighbor.n neighbourhood.n neighbour.n neigh.n nemesis.n neologism.n neophyte.n nephew.n-m nephritis.s nerve.s nestling.n nest.n net.s nettle.n network.n neurologist.n neurotic.n neutralization.s neutron.n newborn.n newcomer.n newlywed.n newsagent.n newsboy.n newscaster.n newscast.n newsdealer.n newsflash.n newsletter.n newsmonger.n newspaper.n newsreel.n newsroom.n newssheet.n newsstand.n newsvendor.n newt.n nexus.n ney.s nibble.n Nicaraguan.s nicety.n niche.n nickel.s nick.n nicknack.n nickname.n niece.n-f Nigerian.s Nigerien.s nightcap.n nightclub.n nightdress.n nightgown.n nightie.n nightingale.n nightmare.n nightshirt.n nihilist.n nincompoop.n ninny.n nip.n nipple.n nit.n nitrate.s nitwit.n nobel.n nocturne.n node.n nod.n noggin.n nohkan.s noise.s nomad.n nomenclature.n nomination.n nominee.n nonce.n noncombatant.n nonconformist.n nondescript.n nonentity.n nonevent.n nonsmoker.n nonstarter.n noodle.n nook.n noose.n norm.n northeaster.n northerner.n northwester.n Norwegian.s nosebleed.n nosedive.n nosegay.n nose.n nosering.n nostril.n nostrum.n notable.n notary.n notation.s notch.n notebook.n note.n notice.s nougat.s noun.n novelette.n novelist.n novella.s novel.n novelty.s novice.n nozzle.n nuance.s nub.n nucleotide.n nude.n nudge.n nudist.n nugget.n nuisance.n numberplate.n numeral.n numerator.n numskull.n nuncio.n nun.n-f nunnery.n nursemaid.n-f nurse.n nursery.n nurturer.n nu.s nuthouse.n nutmeg.s nut.n nutritionist.n nutshell.n nylon.s nymph.n nymphomaniac.n nympho.n oaf.n oak.s oar.n oatcake.s oath.n oats oat.s obbligato.n obelisk.n obituary.n objection.n objective.n object.n objector.n oblast.n oblong.n oboe.s oboist.n obscenity.s observation.s observatory.n observer.n obsession.s obstacle.n obstetrician.n obstructionist.n obstruction.s obverse.n ocarina.s occasion.n occupancy.n occupant.n occupation.n occupier.n occurrence.s ocean.s octagon.n octapad.s octave.n octavin.s octet.n octogenarian.n octopus.n oculist.n oddity.n oddment.n ode.n odour.s odyssey.n offence.s offender.n offense.s offensive.n offering.n offertory.n office.n officer.n official.n offing.n offprint.n offshoot.n offspring.s ogre.n ohm.n oilcan.n oilfield.n oilseed.n ointment.s old.n oligarchy.s oligopoly.n olive.s olivine.s Omani.s omega.s omelet.s omelette.s omen.n omicron.s omission.s omnibus.n onion.s onlooker.n onrush.n onset.n onslaught.n opal.s opener.n opening.n opera.s operation.s operative.n operator.n operetta.n ophicleide.s opiate.s opossum.n opponent.n opportunist.n opposite.n oppressor.n optician.n optimist.n optimum.n opus.s oracle.n oral.n orange.s oration.n oratorio.n orator.n oratory.s orbit.n orb.n orchard.n orchestra.n orchestration.s orchid.n ordeal.n ordering.n orderly.n ordinal.n ordinance.n ordination.s ore.s organism.n organist.n organization.s organizer.n organ.s orgasm.n orgy.n oriel.n orientalist.n oriental.n orientation.s orifice.n original.n originator.n origin.s oriole.n ornament.s ornithologist.n orphanage.n orphan.n orthodontist.n orthodoxy.s orthography.s oscillation.s oscillator.n oscillograph.n oscilloscope.n osprey.n osteopath.n ostrich.n otter.s ottoman.n ounce.n ouster.n outbreak.n outburst.n outcast.n outcome.n outcry.s outfielder.n outfield.n outfit.n outfitter.n outflow.n outgrowth.n outhouse.n outing.n outlaw.n outlay.s outlet.n outlier.n outline.n outlook.n outpatient.n outpost.n outpouring.n outrage.s outrigger.n outset.n outside.n outsider.n oval.n ovary.n ovation.n oven.n overall.n overcoat.s overdose.n overdraft.n overexposure.s overflow.n overgrowth.s overhang.n overhaul.n overlap.s overlay.n overlord.n overpass.n overpayment.s overreaction.n overseer.n overshoe.n oversight.s overstatement.s overthrow.n overtone.n overture.n overview.n owl.n owner.n oxide.s oxtail.n ox.n-m oyster.s oystershell.s pacemaker.n pace.n pacesetter.n pachyderm.n pacifist.n package.n packet.n packhorse.n-m pack.n pact.n paddle.n paddock.n padlock.n pad.n padre.n paean.n pagan.n pageant.n page.n pagoda.n pailful.n pail.n painkiller.n pain.s paintbox.n paintbrush.n painter.n painting.n paint.s pair.n paixiao.s Pakistani.s palace.n palaeontologist.n palate.n palatinate.n paleface.n pale.n palendag.s paleontologist.n palette.n palindrome.n pallbearer.n palliative.n pall.n palm.n pal.n palpitation.n pamphleteer.n pamphlet.n panacea.n panama.n Panamanian.s pancake.s pancreas.n panda.n pandemic.n panegyric.n panelist.n panel.n pane.n pang.n panhandle.n panic.s pan.n panoply.n panorama.n pan_pipes pansy.n pantheist.n pantheon.n panther.n pant.n pantograph.n pantomime.s pantry.n papacy.n papa.n-m papaya.s paperback.n paperclip.n papermill.n paper.s paperweight.n papist.n papoose.n papyrus.s parable.n parabola.n parachute.n parachutist.n parade.n paradigm.n paradise.s paradox.n paragon.n paragraph.n Paraguayan.s parakeet.n parallelism.s parallel.n parallelogram.n parameter.n paramour.n paranoiac.n parapet.n paraplegic.n parasite.n parasol.n paratrooper.n parcel.n parchment.s pardon.s parent.n pariah.n parishioner.n parish.n parka.n park.n parlance.n parley.n parliamentarian.n parliament.n parlor.n parlour.n parodist.n parody.s paroxysm.n parricide.s parrot.n par.s parse.n parser.n parsnip.s parsonage.n parson.n participant.n participle.n particle.n particular.n parting.n partisan.n partition.s part.n partner.n partnership.s partridge.s party.n parvenu.n pasha.n passage.s passageway.n passbook.n passenger.n passion.s passive.n pass.n passport.n password.n pastel.n pastern.n paste.s pastiche.n pastille.n pastime.n past.n pastoral.n pastor.n pastry.s pasture.s pasty.n patch.n patella.n patent.n pate.s paté.s path.n pathogen.n pathologist.n pathway.n patient.n patina.n patio.n patisserie.n pat.n patriarch.n patriarchy.n patrician.n patricide.s patrimony.n patriot.n patrol.n patroness.n patron.n patronymic.n pattern.n patty.n paunch.n pauper.n pause.s pavement.n pavilion.n paw.n pawnbroker.n pawn.n pawnshop.n payday.n payee.n payer.n payload.n paymaster.n payment.s payoff.n payout.s payphone.n payroll.n paysheet.n payslip.n peacemaker.n peace.s peach.s peacock.n peak.n peanut.s pearl.s pear.s pea.s peasant.n peasantry.n peashooter.n pebble.n pecan.s peccadillo.n pecker.n peck.n peculiarity.s pedagogue.n pedal.n pedant.n peddler.n pederast.n pedestal.n pedestrian.n pediatrician.n pedicure.s pedigree.s pedometer.n peek.n peeler.n peephole.n peep.n peepshow.n peerage.n peeress.n peer.n pee.s peg.n pekinese.s pelican.n pellet.n pelt.n pelvis.n penalty.s penchant.n pencil.n pendant.n pendulum.n penguin.n peninsula.n penis.n penitentiary.n pen.n pennant.n penny.n pensioner.n pension.n pentagon.n penthouse.n penumbra.n peon.n peony.n people.s peppercorn.n peppermint.s pepper.s perambulator.n percentage.n perch.s percolator.n percussionist.n percussion.s perennial.n perfectionist.n perforation.s performance.s performer.n perfume.s peril.s perimeter.n periodical.n periodicity.n periphery.n periscope.n periwinkle.s perjurer.n perjury.s perk.n perm.n permutation.s peroration.n peroxide.s perpendicular.n perpetrator.n perpetuation.s perquisite.n persecution.s persecutor.n persimmon.s personage.n personality.s persona.n personification.s person.n perspective.s persuasion.s perturbation.n perusal.s Peruvian.s perversion.s perversity.s pervert.n pessimist.n pesticide.s pestilence.s pestle.n pest.n petabyte.n petal.n petard.n petitioner.n petition.n pet.n petticoat.s petunia.n pew.n pfennig.n phalanx.n phallus.n phantasmagoria.n phantasm.n phantasy.n phantom.n pharmacist.n pharmacologist.n pharmacy.n pharynx.n phase.n pheasant.s phenomenon.n phenotype.n philanderer.n philanthropist.n philatelist.n philologist.n philosopher.n phi.s phobia.n phoenix.n phonebooth.n phonecall.n phoneme.n phone.n phonetician.n phoney.n phonograph.n phony.n phosphate.s photocopier.n photocopy.n photoflash.n photographer.n photograph.n photometer.n photo.n photon.n photostat.n phrase.n phrenologist.n phylogeny.s phylum.s physician.n physicist.n physiognomy.s physiologist.n physiotherapist.n physique.s pianist.n pianoforte.s pianola.n piano.s piazza.n pibgorn.s picador.n pica.s piccolo.s pickaxe.n pickerel.s picker.n picket.n pickle.s pick.n pickpocket.n pick-up.n pickup.n picnicker.n picnic.n picogram.n picoliter.n picometer.n picosecond.n picowatt.n pictorial.n picture.n pide.s pidgin.s piece.n pier.n pie.s piety.s pigeon.n piggyback.n piggy.n piglet.n pigment.s pigmy.n pig.n pigsty.n pigtail.n pigweed.n pike.s pikestaff.n pile.n pilgrimage.n pilgrim.n pillage.n pillar.n pillbox.n pill.n pillowcase.n pillow.n pilot.n pimento.s pimple.n pimp.n pinafore.n pincer.n pinch.n pincushion.n pineapple.s pine.s ping.n pinhead.n pin.n pinnacle.n pinpoint.n pinprick.n pint.n pioneer.n pipedream.n pipeful.n pipeline.n piper.n pipe.s pipette.n pip.n pipsqueak.n pique.s piranha.n pirate.n pirouette.n pi.s piss.s pistachio.s pistil.n pistol.n piston.n pitcher.n pitchfork.n pitch.s pitfall.n pithead.n pit.n pittance.n pituitary.n pity.s pivot.n pixie.n pizza.s placard.n placebo.n placeseeker.n plagiarist.n plague.n plaice.s plain.n plaintiff.n plane.n planetarium.n planet.n plank.n planner.n plantain.n plantation.n planter.n plant.n plaque.s plaster.s plateau.n plateful.n plate.n platform.n platitude.n platoon.n platter.n platypus.n plaudit.n playbill.n playboy.n player.n playgoer.n playground.n playhouse.n playmate.n playoff.n playpen.n playroom.n play.s playschool.n plaything.n playwright.n plaza.n plea.n pleasantry.n pleasure.s pleat.n plebeian.n plebiscite.n plectrum.n plenipotentiary.n plenum.n plethora.n plexus.s plight.n plodder.n plop.n plotter.n ploughboy.n plough.n ploughshare.n plow.n ploy.n pluck.s plughole.n plug.n plumber.n plume.n plum.n plump.n plunderer.n plunge.n plunger.n pluperfect.n pluralist.n plurality.s plural.n plus.n plutocracy.s plutocrat.n poacher.n pocketful.n pocket.n podium.n pod.n poem.n poet.n poetess.n-f pogrom.n poinsettia.s pointer.n point.n poison.s poke.n poker.s polarity.s polarization.s poleaxe.n poleax.n polecat.n polemic.n pole.n Pole.n policeman.n policewoman.n policy.s polish.s politburo.n politician.n polity.n polka.n poll.n pollster.n pollutant.n polonaise.n poltergeist.n polygamist.n polyglot.n polygon.n polynomial.n polyp.n polysyllable.n polytechnic.n pomegranate.n pompon.n poncho.n pond.n pontiff.n pontoon.n pony.n ponytail.n poodle.n poof.n pool.n poolroom.n poop.n poorhouse.n pope.n-m popinjay.n poplar.s poppy.n pop.s populace.n popularization.s population.s populist.n porch.n porcupine.n pore.n porker.n pornographer.n porosity.s porpoise.n porringer.n portal.n portcullis.n porterhouse.n porter.n portfolio.n porthole.n portico.n portion.n portmanteau.n portraitist.n portrait.n portrayal.n port.s pose.n poser.n positivist.n posse.n possession.s possum.n postbag.n postbox.n postcard.n postcode.n posterior.n poster.n postgraduate.n postmark.n postmaster.n postponement.s post.s postscript.n posture.s potato.s potbelly.n potboiler.n potency.s potentate.n potentiality.s potential.s pothead.n pothole.n potion.n pot.n potpourri.n potter.n pottery.s potty.n pouch.n poultice.n pounce.n pound.n pout.n powder.s powerboat.s powerhouse.n power.s powwow.n practicality.s practice.s practitioner.n praesidium.n pragmatist.n prairie.n pram.n prance.n prank.n prankster.n prattler.n prawn.s prayer.s preacher.n preamble.n prearrangement.n prebendary.n precaution.n precedent.n precept.n preceptor.n precession.n precinct.n precipice.n precis.s preconception.n precondition.n precursor.n predator.n predecessor.n predetermination.n predicament.n predicate.n prediction.s predictor.n predilection.n predisposition.n prefabrication.n preface.n prefect.n prefecture.n preference.s prefix.n pregnancy.s prejudgement.n prejudice.s prelate.n prelim.n prelude.n premiere.n premier.n premiership.n premise.n premiss.n premium.n preoccupation.s preparation.s preponderance.n preposition.n prep.s prerogative.n prescription.s presence.s presentation.s presentiment.n present.n preservative.n preserve.n preserver.n presidency.n president.n President.n presidium.n pressing.n prestidigitator.n presumption.s pretence.s pretender.n pretense.s pretension.s pretext.n pretzel.n preview.n prevision.s pricelist.n price.s pricetag.n prickle.n prick.n priestess.n priesthood.n priest.n prig.n primacy.s primary.n primate.n Prime.n primer.n prime.s priming.n primitive.n primrose.n princedom.n prince.n-m princess.n-f principality.n principal.s printer.n printing.s printout.n print.s priority.s prior.n priory.n prism.n prisoner.n prison.s privateer.n private.n privation.n privatization.s privilege.s privy.n prize.n probate.s probe.n proboscis.n procedure.s proceeding.n procession.s process.n processor.n proconsulate.n proconsul.n procreation.n proctor.n procurer.n prodigy.n prod.n producer.n production.s product.n profanity.s professional.n profession.n professoriate.n professor.n professorship.n profile.s profiteer.n profit.s profundity.s progenitor.n prognosis.n prognostication.s programme.n programmer.n program.n progression.s progressive.n prohibitionist.n prohibition.s projectile.n projectionist.n projection.n project.n projector.n proletarian.n proletariat.n proliferation.n prologue.n prolongation.s promenade.n prom.n promontory.n promoter.n promotion.n prompter.n prompt.n pro.n prong.n pronouncement.n pronoun.n proofreader.n propagandist.n propagator.n propellant.s propellent.s propeller.n property.s prophecy.s prophet.n prophylactic.n prop.n proponent.n proportion.s proprietor.n proscenium.n proscription.s prosecution.s prosecutor.n prospector.n prospectus.n prostate.n prostitute.n protagonist.n protectionist.n protection.s protectorate.n protector.n protegee.n protege.n protein.s Protestant.n protestation.n protester.n protest.s protocol.s proton.n prototype.n protractor.n protrusion.n protuberance.n proverb.n provider.n province.n provincialism.s provocation.s provost.n prowler.n prowl.n prow.n proxy.s prude.n prune.n psalmist.n psalm.n psalter.n psaltery.s pseud.n pseudonym.n psi.s psyche.n psychiatrist.n psychic.n psychoanalyst.n psychologist.n psychopath.n psychotic.n pterodactyl.n publication.n publicist.n public.n publisher.n pub.n puck.n pudding.s puddle.n pueblo.n puffin.n puff.n pulalu.s pulley.n pull.n pullover.n pulpit.n pulp.s pulsar.n pulsation.s pulse.n puma.n pumpkin.s pump.n punchball.n punchbowl.n punch.s puncture.n pundit.n punishment.s punk.s pun.n punster.n punt.n pupil.n pup.n puppeteer.n puppet.n puppy.n purchaser.n purchase.s puree.n purgatory.s purge.n purification.s purifier.n purist.n puritan.n purpose.s purr.n purseful.n purse.n pursuer.n pursuit.s purveyor.n purview.n pushcart.n pusher.n push.n pushover.n pussycat.n pussy.n putsch.n putt.n puzzle.n pygmy.n pylon.n pyramid.n pyre.n python.n Qatari.s quack.n quad.n quadrangle.n quadrant.n quadrilateral.n quadruped.n quadruplet.n quagmire.n quail.n quake.n qualification.s qualifier.n quality.s qualm.n quandary.n quantity.s quark.n quarrel.n quarry.n quarterback.n quarterfinal.n quarter.n quartet.n quart.n quasar.n quatercentenary.n quatrain.n quatro.s quaver.n quay.n queen.n queer.n query.n quesadilla.n questioner.n questionnaire.n quest.n queue.n quibble.n quiche.s quickie.n quickstep.n quid.s quietist.n quill.n quilt.n quincentenary.n quince.s quintessence.n quintet.n quinticlave.s quintuplet.n quip.n quirk.n quitter.n quiver.n quizmaster.n quiz.n quorum.n quota.n quotation.s quote.n quotient.n rabbi.n rabbit.s rabble.n raccoon.n racecourse.n racehorse.n-m racer.n race.s racist.n racketeer.n racket.s rack.n raconteur.n racoon.n racquet.n radial.n radiation.s radiator.n radical.n radicle.n radiogram.n radioisotope.n radiologist.n radio.s radish.n radius.s raffle.n rafter.n raft.n ragamuffin.n rage.s rag.n ragtag.n raider.n raid.n railcar.n railhead.n railing.n rail.n railroad.n railway.n rainbow.n raincoat.s raindrop.n rainfall.s rainstick.s raise.n raisin.n rake.n rally.n ramble.n rambler.n ramification.n ram.n rampage.n rampart.n ramp.n ramrod.n rancher.n ranch.s rangefinder.n ranger.n range.s rank.s ransom.s rape.s rapeseed.n rapier.n rapist.n rapport.s rapprochement.n rap.s rapscallion.n rapture.s rarebit.s rarity.s rascal.n rasher.n rash.n raspberry.n rasp.n ratchet.s rate.n ratepayer.n ratification.n rating.n ratio.n rationale.n rationalist.n rationalization.s ration.n rat.n rattle.s rattlesnake.n rave.n raven.n ravine.n ravioli.s ray.n razorback.n razorblade.n razor.n reach.s reactionary.n reaction.s reactor.n reader.n readership.n reading.s readjustment.s reagent.n realignment.s realist.n reality.s realm.n realtor.n realty.n ream.n reaper.n reappearance.n reappraisal.n rearguard.n rear.n reassessment.s rebate.n rebec.s rebel.n rebirth.n rebound.n rebuff.n rebuke.n rebuttal.n recall.s recapitulation.s recap.n receipt.n receivable.n receiver.n receivership.n receptacle.n receptionist.n reception.s recessional.n recession.s recess.n recidivist.n recipe.n recipient.n recital.n recitation.s recitative.s reckoning.n recluse.n recognizance.n recoil.n recollection.s recompense.s reconciliation.s reconnaissance.s reconstruction.s recorder.s recording.n record.s recovery.s recreation.s recrimination.s recruiter.n recruitment.n recruit.n rectangle.n rectifier.n rector.n rectory.n rectum.n recurrence.s recycler.n redbreast.n redcap.n redcoat.s redeemer.n redevelopment.s redhead.n rediscovery.s redoubt.n redskin.n reduction.s redundancy.s redwood.s reed.s reefer.n reef.n re-election.s reelection.s reel.n refectory.n referee.n reference.s referendum.n referral.s refill.n refinancing.s refinement.s refiner.n refinery.n reflection.s reflector.n reflexive.n reflex.n reformation.s reformatory.n reformer.n reform.s refraction.s refrain.n refresher.n refreshment.s refrigerant.n refrigerator.n refugee.n refuge.s refund.s refutation.s regard.s regatta.n regency.n regent.n regicide.s regime.n regimen.n regiment.n region.n register.n registrar.n registration.s registry.s regression.s regret.s regularity.s regular.n regulation.s regulator.n rehabilitation.s rehash.n rehearing.n rehearsal.s reign.n reimposition.s reincarnation.s reindeer.s reinforcement.s rein.n reinterpretation.s reissue.n reiteration.s rejection.s reject.n rejoinder.n relapse.n relation.s relationship.n relative.n relaxation.s relay.n release.n relevance.n relic.n religion.s relleno.n remainder.n remake.n remarriage.s remedy.n remembrance.s reminder.n reminiscence.s remission.s remittance.s remnant.n remonstrance.s removal.s remover.n renaissance.n renascence.n rendering.n rendezvous.s rendition.n renegade.n renewal.s renovation.s rental.n rent.s reorganization.s repair.s reparation.s repast.n repayment.s repeal.n repeater.n repeat.n repercussion.n repertoire.n repertory.n repetition.s replacement.s replay.n replica.n reply.n reporter.n repository.n Represenative.n representation.s representative.n reprieve.n reprimand.n reprint.n reprisal.s reproach.s reprobate.n reproduction.s reproof.s reptile.n republican.n Republican.n republic.n repudiation.n repurchase.s reputation.s requiem.n requisition.s rerun.n resale.s rescuer.n rescue.s researcher.n resemblance.s reservation.s reserve.s reservoir.n resettlement.n reshuffle.n residence.s residency.n resident.n residue.n resignation.s resin.s resister.n resistor.n resolution.n resolver.n resonator.n resort.s resource.n respectability.s respect.s respiration.s respirator.n respite.s respondent.n response.n restatement.n restauranteur.n restaurant.n restaurateur.n restoration.s restorative.n restorer.n restraint.s restructuring.s rest.s resume.n resumption.s resurgence.n retailer.n retail.n retainer.n retardation.s retard.n retina.n retinue.n retiree.n retirement.s retort.n retraction.s retread.n retreat.s retrenchment.s retrial.n retriever.n return.s reunion.s reveille.n revelation.s reveller.n revel.s reverberation.s reverend.n reverie.s reversal.s reverse.s reversion.s reviewer.n review.s revisionist.n revision.s revivalist.n revival.s rev.n revocation.s revolt.s revolutionary.n revolution.s revolver.n revue.n reward.s rewrite.n rhapsody.n rheostat.n rheumatic.n rhinoceros.s rhino.n rhododendron.n rhombus.n rho.s rhyme.s rhythm.s ribbon.n rib.n rickshaw.n ricochet.n riddle.n ride.n rider.n ridge.n riff.n rifle.n rift.n rigger.n rightist.n rigidity.s rig.n rim.n ringer.n ringleader.n ringlet.n ringmaster.n ring.n ringside.n rink.n rinse.n rioter.n riot.s rip.n riposte.n ripple.n rise.n riser.n risotto.s rite.n ritual.s rival.n rivalry.s riverbed.n river.n riverside.n rivet.n rivulet.n roach.s roadbed.n roadblock.n roadhouse.n road.n roadside.n roadster.n roadway.n roar.n roaster.n roast.s robber.n robbery.s robe.n robin.n robot.n rockabilly.n rocker.n rockery.n rocket.n rock.s rodent.n rodeo.n rod.n roebuck.n roe.s rogue.n role.n roller.n roll.n romance.s Romanian.s romantic.n romp.n rondeau.n rondo.n roof.n rookery.n rookie.n rook.n roomful.n room.s rooster.n roost.n root.n rope.s rosary.n rosebud.n rose.n roster.n rostrum.n rota.n rotary.n rotation.s rotini.s rotisserie.n rotor.n rotter.n rotunda.n roue.n roughneck.n roughrider.n roundabout.n roundelay.n roundhouse.n round.n roundup.n route.n routine.s rout.n rover.n rowboat.s rowdy.n rower.n row.n royalist.n royalty.s rubberneck.n rubber.s rub.n rubric.n ruby.n rucksack.n ruckus.n rudder.n rudiment.n ruffian.n ruffle.n ruff.n rug.n ruin.s ruler.n ruling.n rumba.n rumble.n rumour.s rump.n runaway.n rundown.n rune.n run.n runner.n runoff.n runt.n run-up.n runway.n rupture.s ruse.n rush.s rusk.n Russian.s rustic.n rustler.n rut.n Rwandan.s ryuteki.s sabbatical.n sable.s saboteur.n sabre.n sachet.n sackbut.s sack.s sac.n sacrament.n sacrifice.s saddlebag.n saddle.n sadist.n safari.s safecracker.n safeguard.n safe.n saga.n sage.s sag.n sahib.n sail.n sailor.n saint.n sake.s salaam.n salad.s salamander.s salary.s saleroom.n sale.s salesman.n saline.s sally.n salmon.s salon.n saloon.n saltworks.s salutation.n salute.n Salvadoran.s salver.n salve.s salvo.n samba.n Samoan.s samovar.n sampan.n sample.n sampler.n samponia.s sanatorium.n sanction.s sanctity.s sanctuary.s sanctum.n sandal.n sandbag.n sandbank.n sandglass.n sandpiper.n sandpit.n sandstorm.n sandwich.s sangria.s sapling.n sapper.n sapphire.s sap.s saraband.n sardine.s sari.n sarong.n sarrusophone.s sash.n satchel.n satellite.n satire.s satirist.n satrap.n satyr.n saucepan.n saucer.n sauce.s sauna.n sausage.s savage.n savannah.n savanna.n savant.n saver.n savings.s saviour.n savoy.s sawhorse.n sawmill.n saw.n sawyer.n saxhorn.s sax.n saxonette.s saxophone.s saxophonist.n scabbard.n scab.n scaffold.n scalawag.n scale.n scallop.n scallywag.n scalpel.n scalp.n scam.n scamp.n scandalmonger.n scandal.s scanner.n scapegoat.s scapula.n scarcity.s scarecrow.s scaremonger.n scare.n scarf.n scarlet.s scar.n scatterbrain.s scatter.n scavenger.n scenario.n scene.n scent.s sceptic.n sceptre.n schedule.n schema.n scheme.n schemer.n scherzo.n schism.n schizophrenic.n schnitzel.s scholar.n scholarship.s schoolbook.n schoolboy.n schoolfellow.n schoolfriend.n schoolgirl.n schoolhouse.n schoolmaster.n schoolmate.n schoolmistress.n schoolroom.n school.s schoolteacher.n schooner.n schottische.n schtik.n schwa.n science.s scientist.n scimitar.n scintilla.n scion.n scold.n scollop.n scone.s scoopful.n scoop.n scooter.n scorcher.n scoreboard.n scorebook.n scorecard.n score.n scorer.n scorpion.n scotch.s Scot.n scoundrel.n scourge.n scoutmaster.n scout.n scowl.n scramble.n scrapbook.n scrape.n scraper.n scrapheap.n scrap.s scratch.n scrawl.n scream.n screen.n screenplay.n screwball.n screwdriver.n screw.n scribble.n scribbler.n scribe.n scrimmage.n script.n scripture.n scriptwriter.n scrivener.n scroll.n scrotum.n scrounger.n scrub.n scruff.n scrunch.n scruple.s scud.s scullery.n sculptor.n sculpture.s scythe.n seabed.n seabird.n seaboard.n seafarer.n seafront.n seagull.n seal.n seam.n seamstress.n seance.n seaplane.n seaport.n searcher.n searchlight.n search.n sea.s seascape.n seashell.n seashore.n seaside.n seasoning.s season.n seat.n seaway.n seaweed.s secessionist.n secession.s sec.n seconder.n secretariat.n secretary.n secretion.s secret.n sectarian.n section.n sect.n sector.n sedan.n sedative.n seducer.n seduction.s seedbed.n seedling.n seed.n seeker.n seer.n seesaw.n segmentation.s segment.n seignior.n seismograph.n seismologist.n seizure.s selection.s selector.n self-examination.s self.n self-sacrifice.s seller.n selloff.n sellout.n semblance.s semester.n semibreve.n semicircle.n semicolon.n semiconductor.n semifinalist.n semifinal.n seminar.n seminary.n semiquaver.n semitone.n semivowel.n senate.n senator.n Senator.n sender.n sendoff.n senior.n senora.n senorita.n sensationalist.n sensation.s sensibility.s sensitivity.s sentence.n sentiment.s sentinel.n sentry.n separation.s separatist.n septet.n septuagenarian.n sepulchre.n sequel.n sequence.s sequin.n sequoia.n Serbian.s Serb.n serenade.n serf.n sergeant.n serial.n series.s sermon.n serpent.n servant.n serve.n server.n service.s serviette.n serving.n session.n setback.n set.s settee.n setter.n setting.n settlement.s settler.n sewer.n sexagenarian.n sexist.n sex.s sextant.n sextet.n sexton.n shackle.n shack.n shade.s shading.s shadow.n shaft.n shah.n Shah.n shakedown.n shake.n shakeout.n shaker.n shakuhachi.s shambles.n shampoo.s shamrock.n shandy.s shank.n shanty.n shantytown.n shape.s shard.n sharecropper.n shareholder.n shareholding.n share.s shark.n sharpener.n sharper.n sharp.n sharpshooter.n shave.n shaver.n shawl.n sheathing.n sheath.n shed.n sheepdog.n sheep.s sheepskin.s sheet.s shehnai.s sheikdom.n sheikhdom.n sheikh.n sheik.n shekere.s shelf.n shellfish.s shell.n shelter.s sheng.s shepherd.n shepherdess.n-f sherbet.s sheriff.n sherry.s shibboleth.n shield.n shift.n shinbone.n shindig.n shingle.s shinguard.n shin.n shinobue.s shipbuilder.n shipload.n shipmate.n shipment.s ship.n shipowner.n shipper.n shipwreck.s shipwright.n shipyard.n shire.n shirker.n shirt.n shirtwaist.n shiver.n shoal.n shocker.n shock.s shoehorn.n shoelace.n shoemaker.n shoe.n shoestring.n shoetree.n shogun.n shooter.n shooting.n shopkeeper.n shoplifter.n shop.n shopper.n shopwindow.n shore.n shortage.s shortcoming.n shortcut.n shortfall.n shortlist.n short.n shortstop.n shotgun.n shot.n shoulder.n shout.n shovelful.n shovel.n shove.n showboat.s showcase.n showdown.n shower.n showgirl.n showing.n show.n showplace.n showroom.n shred.n shrew.n shriek.n shrimp.s shrine.n shrink.n shroud.n shrubbery.s shrub.n shrug.n shtik.n shudder.n shuffle.n shutdown.n shutter.n shuttlecock.n shuttle.n shyster.n sibilant.n sibling.n Sicilian.s sickbay.n sickbed.n sickle.n sickness.s sideboard.n sidecar.n sidelight.n sideline.n side.n sideshow.n sidestep.n sidetrack.n sidewalk.n siding.n siege.s sierra.n siesta.n sieve.n sifter.n sigh.n sighting.n sight.s sightseer.n sigma.s signal.n signatory.n signature.n signer.n signora.n signorina.n signor.n signpost.n siku.s silencer.n silence.s silhouette.n silk.s silkworm.n sill.n silo.n silversmith.n similarity.s simile.s similitude.s simpleton.n simplification.s simulation.s simulator.n sinecure.s sine.n sinew.n singer.n single.n singleton.n singsong.n singularity.n singular.n sinker.n sinking.n sink.n sinner.n sin.s sinus.n siphon.n sip.n siren.n sirloin.s sir.n sirup.s sissy.n-f sister.n-f sitar.s sitcom.n site.n sitter.n sitting.n situation.n sixpence.n size.s skateboarder.n skateboard.n skate.n skater.n skeet.n skeleton.n skeptic.n sketch.n skewer.n skid.n skier.n skiff.n skillet.n skill.s ski.n skinflint.n skinhead.n skin.s skip.n skipper.n skirmish.n skirt.n skit.n skullcap.n skull.n skunk.n skylark.n skylight.n skyline.n skyscraper.n slab.n slack.s slam.n slanderer.n slander.s slant.n slap.n slash.n slate.s slat.n slaughterer.n slaughterhouse.n slave.n slayer.n sledgehammer.n sled.n sleeper.n sleepwalker.n sleeve.n sleigh.n sleight.n sleuth.n slice.n slicker.n slick.n slide.n slight.n slinger.n sling.n slipcover.n slipknot.n slip.n slipper.n slit.n sliver.n slob.n sloe.s slogan.n sloop.n slope.s slop.n sloth.s slot.n Slovakian.s Slovenian.s slowcoach.n slowdown.n sluggard.n slug.n sluicegate.n sluice.n slumber.n slum.n slump.n slur.n slut.n smacker.n smack.n smallholder.n smallholding.n smalt.s smash.n smattering.n smear.n smell.n smelter.n smelt.s smile.n smirk.n smith.n smithy.n smock.n smoker.n smoke.s smokestack.n smorgasbord.n smudge.n smuggler.n snack.n snag.n snail.s snake.n snapdragon.n snap.s snapshot.n snare.s snarl.n snatcher.n snatch.n sneak.n sneer.n sneeze.n snicker.n sniff.n snigger.n sniper.n snip.n snippet.n snob.n snooper.n snooze.n snore.n snorer.n snorkel.n snort.n snout.n snowball.n snowdrift.n snowdrop.n snowfall.n snowflake.n snowplough.n snowstorm.n snub.n snuffbox.n snug.n soapbox.n sob.n sobriquet.n socialist.n socialite.n social.n society.s sociologist.n socket.n sock.n sodomite.n sod.s sofa.n softener.n softie.n soiree.n sojourner.n solace.s soldier.n sole.n solicitation.n solicitor.n solid.n soliloquy.n solitude.s soloist.n solo.n solstice.n solution.n solvent.n Somalian.s sombrero.n somersault.n somnambulist.n sonar.n sonata.n songbird.n songbook.n song.n son.n sonnet.n sonny.n sonority.s soothsayer.n sopapilla.n sophism.n sophist.n sophomore.n sop.n soprano.s sorbet.s sorcerer.n sorceress.n sore.n sorority.n sorrel.s sorter.n sortie.n sort.n soubriquet.n souffle.n soul.s sound.s soundtrack.n soupcon.n soupçon.n soup.s source.n sousaphone.s southeaster.n southerner.n southpaw.n southwester.n souvenir.n sovereign.n soviet.n sower.n sow.n soybean.n spacecraft.s space.s spaceship.n spacesuit.n spadeful.n spade.n spa.n Spaniard.n spaniel.n spanking.n span.n spanner.n spare.n sparkle.n sparkler.n spark.n spar.n sparrow.n spasm.n spastic.n spate.n spatula.n speaker.n speakerphone.n spear.n specialist.n speciality.n specialization.s special.n specialty.n species.s specification.s specimen.n speckle.n speck.n spec.n spectacle.n spectacular.n spectator.n specter.n spectre.n spectroscope.n spectroscopy.s spectrum.n speculator.n speech.s speedboat.s speedometer.n speed.s speedway.n speller.n spelling.s spell.n spender.n spendthrift.n spermicide.s sperm.s sphere.n sphinx.n spice.s spider.n spiel.n spigot.n spike.n spill.n spindle.n spine.n spinet.n spinoff.n spin.s spinster.n-f spiral.n spire.n spirit.s spiritual.n spitfire.n spittoon.n splash.n spleen.s splice.n splinter.n splint.n split.n splotch.n spoil.s spoilsport.n spoke.n spokesman.n spokesperson.n spokeswoman.n spondee.n sponger.n sponge.s sponsor.n sponsorship.s spoof.n spook.n spool.n spoonerism.n spoonful.n spoon.n spore.n sporran.n sport.s spotlight.n spot.n spotter.n spouse.n spout.n sprain.n sprawl.s sprayer.n spray.s spreader.n spread.n spree.n sprig.n springboard.n springbok.n spring.s springtime.s sprinkler.n sprinter.n sprint.n sprocket.n sprout.n spruce.s spud.n spur.n spurt.n sputnik.n spy.n squabble.n squab.n squad.n squadron.n squall.n square.n squatter.n squawk.n squaw.n squeaker.n squeak.n squealer.n squeal.n squeegee.n squeeze.n squeezer.n squib.n squid.n squiggle.n squint.n squire.n squirrel.s squirt.n stableboy.n stablemate.n stable.n stab.n stack.n stadium.n staffer.n staff.s stagecoach.n stage.n stagger.n staging.s stag.n stain.s staircase.n stair.n stairway.n stake.n stalactite.n stalagmite.n stalemate.s stalker.n stalk.n stallion.n stall.n stalwart.n stamen.n stammerer.n stammer.n stampede.n stamp.n stance.n standard.n standby.n stand.n standoff.n standpipe.n standpoint.n standstill.n stanza.n staple.n stapler.n stare.n starfish.s stargazer.n starlet.n starling.n star.n starter.n start.n startup.n state.n stationer.n stationmaster.n station.n statistician.n statistic.n statue.n statuette.n statute.n stave.n stay.n steak.s steamboat.s steamer.n steamroller.n steamship.n steed.n steelmaker.n steelpan.s steelworks.s steelyard.n steeplechase.n steeplechaser.n steeplejack.n steeple.n steer.n stem.n stench.n stencil.n stenographer.n stepbrother.n-m stepdaughter.n-f stepfather.n-m stepladder.n stepmother.n-f step.n stepparent.n steppe.n stepsister.n-f stepson.n-m stereo.n stereoscope.n stereotype.s stern.n sternum.n stethoscope.n stetson.n stevedore.n stewardess.n steward.n stew.s sticker.n stickler.n stick.n stiff.n stigma.n stile.n stiletto.n stillbirth.n still.n stilt.n stimulant.n stinger.n sting.n stingray.n stinker.n stink.n stint.n stipend.n stir.n stirrup.n stitch.n stoat.s stockade.n stockbroker.n stockcar.n stockfish.s stockholder.n stockholding.n stockpile.n stockroom.n stock.s stockyard.n stoic.n stole.n stomach.n stonemason.n stone.s stooge.n stool.n stoop.n stopgap.n stop.n stopover.n stoppage.n stopper.n stopwatch.n storehouse.n store.n storeroom.n storey.n stork.n storm.n story.n storyteller.n stove.n stowaway.n straggler.n strainer.n strain.s straitjacket.n strait.n strand.n stranger.n stranglehold.n straphanger.n strap.n stratagem.n strategist.n strategy.s stratification.s stratosphere.n strawberry.n straw.s stray.n streak.n streamer.n streamlet.n stream.n streetcar.n street.n streetwalker.n strength.s stress.s stretcher.n stretch.s stricture.n stride.n strikebreaker.n strike.n striker.n string.s stripe.n strip.n stripper.n stroboscope.n stroke.n stroller.n stroll.n strongbox.n stronghold.n strophe.n structure.s strudel.s struggle.s strut.n stub.n stucco.s student.n studio.n stud.n study.s stuff.s stumble.n stump.n stunner.n stunt.n stupor.s sturgeon.s stutterer.n stutter.n style.s stylist.n stylization.s stylus.n sty.n subaltern.n subcomitte.n subcommittee.n subcontinent.n subcontract.n subcontractor.n subdivision.s subdomain.n subeditor.n subfamily.n subgroup.n subheading.n subject.n subjugation.s sublease.n sublimate.n sublimation.s submarine.n submission.s sub.n subordinate.n subpoena.n subscriber.n subscription.s subscript.n subsection.n subset.n subsidiary.n subsidy.n substance.s substantive.n substitute.n substitution.s substrate.n subterfuge.s subtitle.n subtlety.s subtraction.s suburb.n subversive.n subway.n succession.s successor.n success.s sucker.n suckling.n sufferer.n suffix.n suffrage.s suffragette.n sugarlump.n suicide.s suitcase.n suite.n suit.n suitor.n sultana.n sultanate.n sultan.n summary.n summation.n summerhouse.n summer.s summit.n summons.n sum.n sunbeam.n sunblind.n sunbonnet.n sunburn.s sundae.n sundial.n sunfish.s sunflower.n sunhat.n sunlamp.n sunrise.s sunroof.n sun.s sunset.s sunshade.n sunspot.n suntan.n supercomputer.n superconductor.n superfamily.n superficiality.s superfluity.s superintendent.n superior.n superlative.n supermarket.n super.n supernumerary.n superpower.n superstar.n superstition.s superstructure.n supervisor.n supper.s supplement.n supplicant.n supplication.s supplier.n supply.s supporter.n support.s suppository.n suppression.s suppressor.n surcharge.n surface.n surfboard.n surfboat.s surfeit.n surge.n surgeon.n surgery.s surname.n surplus.n surprise.s surrealist.n surrender.n surrogate.n surtax.n survey.n surveyor.n survival.s survivor.n susceptibility.s suspect.n suspender.n suture.n suzerain.n swab.n swagger.n swallow.n swamp.s swan.n swap.n swarm.n swashbuckler.n swastika.n swathe.n swath.n swearword.n sweatband.n sweater.n sweat.s sweatshop.n Swede.n sweeper.n sweep.n sweetening.s sweetheart.n sweetie.n swelling.s swell.n swerve.n swig.n swimmer.n swim.n swimsuit.s swindle.n swindler.n swineherd.n swine.s swing.n swipe.n swirl.n switchboard.n switch.n swivel.n swoon.n swoop.n swordfish.s sword.n sycamore.s sycophant.n syllable.n syllabus.n syllogism.n symbolism.s symbolization.s symbol.n sympathizer.n symphony.n symposium.n symptom.n synagogue.n synclavier.s syncopation.s syndicate.n syndrome.n synod.n synonym.n synthesizer.s syphon.n Syrian.s syringe.n syrup.s system.n tabby.n tabernacle.n tablecloth.n tablemat.n table.n tablespoonful.n tablespoon.n tablet.n tabloid.n tab.n taboo.s tabulation.s tacito.n tackle.s tack.s taco.n tactician.n tactic.n tadpole.n tag.s tailgate.n tail.n tailor.n tailpiece.n tailspin.n take-off.n takeoff.s takeover.n taker.n tale.n talent.s talisman.n talker.n talkie.n talk.s tallboy.n tally.n talon.n tamale.s tamarind.s tamboril.s tambourine.s tamburitza.s tangent.n tangerine.s tangle.n tang.n tango.n tankard.n tanker.n tank.n tan.n tanner.n tannery.n tantrum.n Tanzanian.s taper.n tape.s tapestry.s tapeworm.n tap.n taproom.n taproot.n tarantella.n tarantula.n target.n tariff.n tarogato.s tarpaulin.n tar.s tartan.n tart.n tarweed.n taskmaster.n task.n tassel.n taster.n taste.s tatter.n tattler.n tattoo.n taunt.n tau.s tautology.s tavern.n taxicab.n taxidermist.n taximeter.n taxi.n tax.n taxonomy.s taxpayer.n teacake.n teacher.n teaching.s teacup.n teahouse.n teammate.n team.n teamster.n teapot.n tear.n tearoom.n tease.n teaser.n teashop.n teaspoonful.n teaspoon.n teat.n tech.n technicality.n technician.n technique.s technocracy.s technocrat.n technologist.n technology.s teddy.n tee.n teenager.n teen.n teetotaller.n telecast.n telefax.s telegram.n telegrapher.n telegraph.n telephone.n teleprinter.n teleprompter.n telescope.n television.s telex.n teller.n telltale.n telly.n temperament.s temperature.s temper.s tempest.n template.n temple.n temp.n tempo.n temptress.n tenancy.s tenant.n tendency.n tenderfoot.n tender.n tendon.n tendril.n tenement.n tenet.n tenner.n tenoroon.s tenor.s tense.n tentacle.n tent.n tenure.s tepee.n terabyte.n tercentenary.n tercentennial.n terminal.n termination.s terminology.s terminus.n termite.n term.n tern.n terrace.n terra_cotta terrier.n territory.s terrorist.n terror.s testament.n tester.n testicle.n testimonial.n testimony.s test.n tether.n Texan.s textbook.n textile.n text.s texture.s thalamus.n thaw.n theater.s theatregoer.n theatre.s theft.s theist.n theme.n theocracy.s theologian.n theology.s theorem.n theoretician.n theorist.n therapist.n theremin.s thermal.n thermometer.n thermos.n thermostat.n thesaurus.n theta.s thicket.n thickness.s thief.n thighbone.n thigh.n thimbleful.n thimble.n thingmabob.n thingmajig.n thing.n thingumabob.n thingumajig.n thingummy.n thinker.n thistle.n thong.n thorax.n thorn.n thoroughbred.n thoroughfare.n thrall.n thrashing.n thread.s threesome.n threnody.n thresher.n threshold.n thrift.s thriller.n thrill.n throat.s throb.n throe.n throne.n throng.n throttle.s throwaway.n throwback.n thrush.n thruster.n thrust.s thud.n thug.n thumb.n thumbscrew.n thumbtack.n thump.n thunderbolt.n thunderclap.s thunderstorm.n thwart.n thyroid.n tiara.n ticket.n tick.n tic.n tidbit.n tide.s tie.n tier.n tiff.n tiger.n-m tightening.n tightrope.n tigress.n-f tilde.n tile.s tiller.n till.n tilt.n timber.s timbre.s timekeeper.n timepiece.n timer.n timetable.n timing.s timpani.s timpanist.n tinderbox.n tinge.n tingle.n tinker.n tin.s tint.n tip.n tippler.n tirade.n tire.n tissue.s titan.n titbit.n tithe.n title.n tit.n tizzy.n toad.n toadstool.n toaster.n toastmaster.n toastrack.n toast.s tobacconist.n toboggan.n toccata.n toddler.n toehold.n toe.n toenail.n toffee.s toga.n toggle.n toilet.n token.n tolerance.s tollbooth.n tollgate.n tollhouse.n toll.n tomahawk.n tomato.s tomb.n tomboy.n tombstone.n tomcat.n tome.n tom.s tomtom.n tom-tom.s tone.s tonette.s tongue.n tonic.n ton.n tonnage.s tonne.n tonsil.n tonsure.n tool.n toothache.s toothbrush.n tooth.n toothpick.n toot.n topcoat.s topic.n topmast.n top.n topper.n topping.n topsail.n torch.n toreador.n tormentor.n torment.s tornado.n torpedo.n torpor.s torque.s torrent.n torso.n tortilla.n tortoise.n torturer.n torture.s toss.n tostada.n total.n totem.n tot.n toucan.n touchdown.n touch.s touchstone.n toughie.n tough.n toupee.n tourist.n tour.n tournament.n tourney.n tourniquet.n towel.n tower.n town.s township.n towpath.n towrope.n toxicologist.n toxin.s toy.n toyshop.n tracer.n trace.s trackbed.n track.n tract.n tractor.n trademark.n trader.n trade.s traditionalist.n tradition.s trafficker.n tragedy.s tragicomedy.n trailer.n trail.n trainbearer.n trainee.n trainer.n trainload.n train.n trait.n traitor.n traitress.n-f trajectory.n tramline.n tram.n trample.n tramp.n trampoline.n tramway.n trance.n tranquillizer.n transaction.s transcendentalist.n transcription.s transcript.n transept.n transference.s transfer.s transformation.s transformer.n transfusion.s transgression.s transgressor.n transient.n transistor.n transition.s translation.s translator.n transmission.s transmitter.n transmutation.s transom.n transparency.s transplantation.s transplant.n transporter.n transport.s transposition.s transsexual.n transshipment.n transvestite.n trapeze.n trapezoid.n trap.n trapper.n trauma.s travail.s traveller.n travelogue.n traverse.n travesty.n trawler.n tray.n treadle.n treadmill.n tread.n treasurer.n treasure.s treasury.n treatise.n treatment.s treat.n treaty.s treble.n tree.n trek.n trellis.n tremble.n tremolo.n tremor.n trench.n trend.n trespasser.n tres.s trestle.n triad.n trial.n triangle.s tribe.n tribulation.n tribunal.n tribune.n tributary.n tribute.s trice.n trickle.n trick.n trickster.n tricolour.n tricycle.n trident.n triennial.n trifle.s trigger.n trill.n trilogy.n trimmer.n trimming.n trim.s Trinidadian.s trinity.n trinket.n trio.n triplet.n trip.n tripod.n tripper.n triptych.n triumph.s triumvirate.n trivet.n triviality.s trochee.n troglodyte.n troika.n trolley.n troll.n trombone.s trombonist.n tromboon.s trompeta.s trooper.n troop.n trope.n trophy.n tropic.n trot.n trotter.n troubadour.n troublemaker.n troubleshooter.n trough.n troupe.n trouper.n trouser.n trout.s trove.n trowel.n truancy.s truant.n truce.n trucker.n truck.n truelove.n truffle.n trumpeter.n trumpet.s trump.n truncheon.n trunk.n trustee.n trust.s truth.s trychel.s try.n tryst.n tsetse.n tuba.s tubax.s tube.n tuber.n tubful.n tub.n tucker.n tuck.s tuft.n tugboat.s tug.n tulip.n tumble.n tumbler.n tumbleweed.s tummy.n tumor.n tumour.n tumult.s tuna.s tune.n tuner.n tunic.n Tunisian.s tunnel.n turban.n turbine.n turbojet.n turboprop.n turbot.s turbulence.s turd.n turkey.s Turk.n turmoil.s turnaround.s turncoat.s turner.n turning.n turnip.n turnkey.n turn.n turnout.s turnover.n turnpike.n turnstile.n turntable.n turquoise.s turret.n turtledove.n turtle.n tusk.n tussle.n tutorial.n tutor.n tutu.n tuxedo.n TV.s tweed.s tweeter.n tweet.n twerp.n twig.n twinge.n twin.n twirl.n twister.n twist.n twitch.n twit.n twitter.n tycoon.n tyke.n tympanum.n typeface.n type.n typescript.n typesetter.n typewriter.n typhoon.n typist.n typographer.n tyranny.s tyrant.n tyre.n tzarina.n tzar.n udder.n Ugandan.s Ukrainian.s ukulele.s ulcer.n ultimatum.n ululation.n umber.n umbrella.n umlaut.n umpire.n unbeliever.n uncertainty.s uncle.n-m underbelly.n undercarriage.n underclass.n undercurrent.n underdog.n underestimate.n underestimation.s undergarment.n undergrad.n undergraduate.n underground.n underline.n underling.n underpass.n underpayment.s undersecretary.n underside.n understatement.s understudy.n undertaker.n undertaking.n undertone.n undertow.n undervaluation.s underworld.n underwriter.n undesirable.n undoing.n unicorn.n uniform.n unionist.n union.n unit.n universe.n university.n untouchable.n untruth.s upbraiding.n update.n upgrade.n upheaval.s upholsterer.n upland.n uppercut.n upper.n upright.n uprising.n uproar.s upset.n upshot.n upsilon.s upstart.n upsurge.n uptake.s upturn.n urchin.n urinal.n urn.n Uruguayan.s usage.s user.n use.s usher.n usurpation.s usurper.n utensil.n uterus.n utilitarian.n utility.s utmost.n utopia.s utterance.s uttermost.n vacancy.s vacationer.n vacation.s vaccination.s vaccine.s vacillation.s vacuum.n vagabond.n vagary.n vagina.n vagrant.n valediction.n vale.n valence.n valentine.n valet.n valley.n valuation.s value.s valve.n vampire.n vamp.n vandal.n vane.n vanguard.n van.n vantage.s vapour.s variable.n variant.n variation.s variety.s varnish.s varsity.s vasectomy.n vase.n vassal.n vat.n vaulter.n vault.n VCR.n vector.n vegetable.n vegetarian.n vehicle.n veil.n vein.n velocipede.n velocity.s vendetta.n vendor.n veneer.s veneration.s Venezuelan.s ventilator.n vent.n ventricle.n ventriloquist.n venture.n venue.n verandah.n veranda.n verb.n verdict.n verge.n verification.s verity.n vermilion.s vermouth.s vernacular.n verse.s version.n vertebrate.n vertex.s vertical.n vesicle.n vessel.n vestibule.n vestige.n vestment.n vest.n vestry.n veteran.n vet.n veto.n viaduct.n vial.n vibraphone.s vibraslap.s vibration.s vibrator.n vibrato.s vicarage.n vicar.n viceroy.n vice.s vicinity.s vicissitude.n victim.n victor.n victory.s victual.n videocamera.n videocassette.n video.s videotape.n vielle.s viewer.n viewfinder.n viewpoint.n vigilante.n vigil.n vignette.n vihuela.s village.n villager.n villain.n villa.n vindication.s vinegar.s vine.n vineyard.n vintage.s viola.s violation.s violet.n violinist.n violin.s violoncello.s violotta.s viol.s viper.n virginal.n virgin.n virtue.s virtuoso.n virus.s visage.n visa.n viscountcy.n viscountess.n viscount.n visionary.n vision.s visitation.n visit.n visitor.n visor.n vista.n vitamin.n vixen.n vizier.n vocabulary.s vocalist.n vocation.s vocative.n vodka.s vogue.n voice.n void.n volcano.n volleyball.s volley.n voltage.s volt.n volume.s voluntary.n volunteer.n vortex.n voter.n voucher.n vowel.n voyage.n voyager.n voyeur.n vulgarism.n vulgarity.s vulnerability.s vulture.n vulva.n wad.n wafer.n waffle.n wage.n wager.n waggoner.n waggon.n wag.n wagon.n waif.n wail.n waistband.n waistcoat.s waistline.n waist.n waiter.n wait.n waitress.n waiver.n wake.n walker.n walk.n walkout.n walkover.n walk_up walk-up.n walkup.n walkway.n wallaby.n wallet.n wallflower.n wall.n wallop.n walnut.s walrus.n waltz.n wanderer.n wand.n wank.n wanton.n warble.n warbler.n warden.n warder.n ward.n wardrobe.n warehouse.n ware.n warhead.n warhorse.n-m warlord.n warmer.n warmonger.n warpath.n warp.n warrantee.n warrant.n warranty.n warren.n warrior.n war.s warship.n warthog.n wart.n washbasin.n washboard.s washbowl.n washcloth.n washer.n washout.n washroom.n washstand.n washtub.n wasp.n wassail.n wastebasket.n wastebin.n wasteland.n waste.s watchdog.n watcher.n watchmaker.n watch.n watchtower.n watchword.n watercolour.s waterfall.n waterfowl.s waterfront.n watermark.n watermelon.s watermill.n waterproof.n watershed.n waterside.n waterspout.n watertable.n waterway.n waterworks.s watt.n wavelength.n wave.n waxwork.n wayfarer.n waypoint.n wayside.n weakling.n weakness.s weapon.n weasel.n weathercock.n weave.n weaver.n web.n website.n wedding.n wedge.n weedkiller.s weed.s weekday.n weekend.n weekly.n weevil.n weight.s weir.n welcome.n welder.n weld.n wellington.n well.n wellspring.n welsher.n welterweight.n welt.n wench.n westerner.n western.n whacking.n whack.n whale.n wharf.n wheelbarrow.n wheelchair.n wheel.n wheelwright.n whereabouts.s whiff.n whim.n whimper.n whine.n whinny.n whippersnapper.n whippet.n whippoorwill.n whip.s whirligig.n whirlpool.n whirlwind.n whisker.n whiskey.s whisk.n whisky.s whisper.n whistle.s white.s whiting.s whiz.n whodunit.n whole.n wholesaler.n whopper.n whore.n wicket.n wick.s widower.n widow.n width.s wife.n wiggle.n wig.n wigwam.n wildebeest.n willow.s windbag.n windbreaker.n windfall.n windmill.n window.n windowpane.n windowsill.n windpipe.n wind.s windscreen.n windshield.n wineglass.n wine.s wing.n wingspan.n wingspread.n wink.n win.n winner.n winter.s wipe.n wiper.n wireless.s wire.s wiseacre.n wisecrack.n wishbone.n wish.n wisp.n wisteria.s witch.n-f withdrawal.s witness.n witticism.n wizard.n-m wolfhound.n wolf.n womanizer.n-m woman.n wombat.n womb.n wonderland.n wonder.s woodcut.n woodcutter.n woodland.s woodpecker.n woodpile.n wood.s woodshed.n woodwind.n woofer.n woof.n word.n workbench.n workbook.n workday.n worker.n workforce.n workout.n workplace.n workroom.n work.s workshop.n world.n wormhole.n worm.n worry.s worshipper.n wound.n wrap.n wrapper.n wreath.n wrecker.n wreck.n wrench.n wren.n wrestler.n wretch.n wright.n wringer.n wrinkle.n wristband.n wrist.n wristwatch.n writer.n writing.s writ.n wrongdoer.n wrong.n xalam.s xi.s xylophone.s xylorimba.s yacht.n yak.n yam.n yam.s yank.n yardarm.n yard.n yardstick.n yarn.s yawn.n yea.n yearbook.n yearling.n yearning.n yell.n Yemeni.s yen.s yeomanry.n yeti.n yew.s yield.s yob.n yodeller.n yodel.n yoghourt.s yoghurt.s yogi.n yogurt.s yokel.n yoke.n yolk.s youngster.n youth.s Yugoslavian.s Yugoslav.s yuppie.n zealot.n zebra.n zenith.n zephyr.n zeppelin.n zeta.s zip.n zipper.n zither.n zodiac.n zombie.n zone.n zoologist.n zoo.n link-grammar/data/en/words/currency0000644000000000000000000001030112536650432014554 0ustar Abasi.c abasi.c Abazi.c abazi.c Anbazi.c anbazi.c Ackey.c ackey.c Adópengő.c adópengő.c Afghani.c afghani.c Akşa.c akşa.c Angolar.c angolar.c Argentino.c argentino.c Ariary.c ariary.c Austral.c austral.c Auksinas.c auksinas.c Baht.c บาท.c baht.c Balboa.c balboa.c Birr.c birr.c Bolívar.c bolívar.c Boliviano.c boliviano.c Budju.c budju.c Cedi.c cedi.c cent.c Chervonets.c chervonets.c Colón.c colón.c Conventionsthaler.c conventionsthaler.c Córdoba.c córdoba.c Cruzado.c cruzado.c Cruzeiro.c cruzeiro.c Cruzeiro_Real cruzeiro_real Cupon.c cupon.c Dalasi.c dalasi.c Daler.c daler.c Denar.c denar.c Denier.c denier.c Dinar.c دينار.c dinar.c Dinero.c dinero.c Dinheiro.c dinheiro.c Dirham.c درهم.c dirham.c Dobra.c dobra.c Dollar.c dollar.c Đồng.c đồng.c Drachma.c Δραχμή.c drachma.c Dram.c Դրամ.c dram.c ekwele.c Ekwele.c Ekuele.c ekuele.c Escudo.c escudo.c Euro.c Eυρώ.c Евро.c euro.c Fanam.c fanam.c Fiorino.c fiorino.c Florin.c florin.c Forint.c forint.c Franc.c franc.c Franco.c franco.c Frange.c frange.c Korçë.c korçë.c Frank.c frank.c Gazeta.c Γαζετα.c gazeta.c Genevoise.c genevoise.c Gineih.c gineih.c Gourde.c gourde.c Grosz.c grosz.c Guaraní.c guaraní.c Guilder.c guilder.c Gulden.c gulden.c Halfpenny.c halfpenny.c Hryvnia.c Гривня.c hryvnia.c Hwan.c 圜.c 환.c hwan.c Inca.c inca.c Inti.c inti.c Karbovanets.c karbovanets.c Keping.c keping.c Kina.c kina.c Kip.c kip.c Konvertibilna_Marka Конвертибилна_марка konvertibilna_marka Kori.c kori.c Korona.c korona.c Koruna.c koruna.c Koruuni.c koruuni.c Króna.c króna.c Krona.c krona.c Krone.c krone.c øre.c kroner.c Kroner.c Kronenthaler.c kronenthaler.c Kroon.c kroon.c Kuna.c kuna.c Kwacha.c kwacha.c Kwanza.c kwanza.c Kyat.c kyat.c Laari.c laari.c Lari.c ლარი.c lari.c Lats.c lats.c Lek.c lek.c Lempira.c lempira.c Leone.c leone.c Leu.c leu.c Lev.c Лев.c lev.c Libra.c libra.c Lilangeni.c lilangeni.c Lira.c לירה.c ليرة.c lira.c Litas.c litas.c Livre.c livre.c Loti.c loti.c Manat.c manat.c Maneti.c maneti.c Maravedí.c maravedí.c Mark.c mark.c Marka.c marka.c konvertibilna_marka конвертибилна_марка Konvertibilna_Marka Markka.c markka.c Metica.c metica.c Metical.c metical.c Mohar.c mohar.c Mon.c mon.c Mun.c mun.c Nahar.c nahar.c NAIRA.c Naira.c naira.c Nakfa.c nakfa.c Ngultrum.c ngultrum.c Nuevo_Sol nuevo_sol Obol.c obol.c Ostmark.c ostmark.c Ostruble.c ostruble.c Ouguiya.c أوقية.c ouguiya.c Pa'anga.c pa'anga.c Pataca.c pataca.c 澳門圓.c Pengő.c pengő.c Penning.c penning.c Perper.c perper.c Peseta.c peseta.c Peso.c peso.c peso_moneda_nacional nuevo_peso Pence.c pence.c penny.c Pfennig.c pfennig.c Phoenix.c phoenix.c Piastra.c piastra.c Piastre.c piastre.c Piso.c piso.c Pitis.c pitis.c Pound.c pound.c Pula.c pula.c Punt.c punt.c Qiran.c qiran.c Quetzal.c quetzal.c Rai_stones rai_stones Rand.c rand.c Reaal.c reaal.c Real.c real.c Reichsmark.c reichsmark.c Reichsthaler.c reichsthaler.c Renminbi.c 人民币.c 人民幣.c renminbi.c Rentenmark.c rentenmark.c Rial.c ريال.c rial.c Riel.c riel.c Rigsdaler.c rigsdaler.c Riksdaler.c riksdaler.c Rijksdaalder.c rijksdaalder.c Ringgit.c ringgit.c Rixdollar.c rixdollar.c Riyal.c riyal.c Roepiah.c roepiah.c Ruble.c Рубль.c ruble.c Rublis.c rublis.c Rufiyah.c rufiyah.c Rupee.c रुपया.c ரூபாய.c rupee.c Rupiah.c rupiah.c Rupie.c rupie.c Ryō.c ryō.c Schilling.c schilling.c Scudo.c scudo.c Shah.c Шаг.c shah.c Shekel.c שקל.c שקל_חדש shekel.c Shilling.c shilling.c Skender.c skender.c Sol.c sol.c Som.c som.c Сом.c Сўм.c Somalo.c somalo.c Somoni.c Сомонӣ.c somoni.c Speciedaler.c speciedaler.c Speciethaler.c speciethaler.c Srang.c srang.c Sucre.c sucre.c Syli.c syli.c Tael.c liǎng.c tael.c Taka.c taka.c Tala.c tala.c Tallero.c tallero.c Talonas.c talonas.c Tangka.c tangka.c Tenga.c tenga.c Tenge.c Теңге.c tenge.c Thaler.c thaler.c Tical.c tical.c Tögrög.c Tөгрөг.c tögrög.c tөгрөг.c Tolar.c tolar.c Toman.c تومان.c toman.c Vatu.c vatu.c Venezolano.c venezolano.c Vereinsthaler.c vereinsthaler.c Wén.c 文.c wén.c Won.c 원.c 圓.c won.c Yang.c 兩.c wang.c Yen.c 円.c wen.c yen.c Yuan.c wuan.c yuan.c 元.c 圆.c Zaïre.c zaïre.c Złoty.c złoty.c link-grammar/data/en/words/words.v.5.40000644000000000000000000000207412536650433014642 0ustar agonizing.v barging.v bottoming.v bowing.v breezing.v brimming.v caving.v cawing.v cawwing.v clamming.v clowning.v coming.v crapping.v crawling.v creeping.v cropping.v crouching.v cruising.v darting.v diving.v dozing.v drifting.v droning.v drowsing.v fading.v fizzling.v flocking.v flowing foaming.v ganging.v gearing.v goofing.v gushing.v hurrying.v jetting.v jogging.v jutting.v keeling.v kneeling.v knuckling.v limping.v lingering.v listening.v looming.v lunging.v lurching.v lying mellowing.v nestling.v opting.v peeking.v peering.v perking.v petering.v pigging.g pining.v plonking.v plopping.v puffing.v riffling.v rotting.v rucking.v sallying.v scooting.v screaming.v screamin'.v scurrying.v seeping.v shacking.v shining.v shopping.v shriveling.v shrivelling.v shying.v skidding.v slacking.v slaving.v sleeping.v slimming.v slinking.v sloping.v slumping.v soaring.v soldiering.v spurting.v squatting.v stepping.v stooping.v streaming.v strolling.v strutting.v stumbling.v swooping.v teaming.v tensing.v toddling.v tramping.v trickling.v trudging.v veering.v wafting.v zooming.v link-grammar/data/en/words/units.40000644000000000000000000000034412536650432014234 0ustar century.u millenium.u year.u month.u week.u day.u hour.u minute.u Second.u second.u s.u aS.u fS.u pS.u nS.u uS.u μS.u mS.u S.u kS.u millisecond.u microsecond.u nanosecond.u picosecond.u femtosecond.u attosecond.u msec.u secs.u link-grammar/data/en/words/words.v.2.40000644000000000000000000004111512536650433014636 0ustar abdicating.v abiding.v aborting.v abrading.v accelerating.v acclimating.v acclimatizing.v acculturating.v accumulating.v acidifying.v adapting.v adjourning.v adjudicating.v adjusting.v advancing.v advertising.v aerosolizing.v affiliating.v agglutinating.v aggregating.v aging.v agitating.v aglomerating.v ailing.v aligning.v alimenting.v alkalifying.v allying.v altering.v alternating.v amalgamating.v Americanizing.v anastomosing.v anchoring.v anergizing.v ankylosing.v anteverting.v apostrophizing.v appealing.v applauding.v applicating.v applying.v approaching.v approximating.v arbitrating.v arborizing.v arching.v articulating.v arylating.v ascending.v assembling.v assimilating.v assisting.v associating.v attaching.v attending.v auditioning.v auguring.v autoactivating.v autocatalyzing.v autocorrelating.v autodigesting.v autolyzing.v automatizing.v autophosphorylating.v autosensitizing.v autotransfusing.v availing.v awakening.v axenizing.v bagging.v banding.v banking.v bargaining.v bartering.v bathing.va bathing.vb batting.v baulking.v benefiting.v benefitting.v berthing.v bicompartmentalizing.v bidding.v bifurcating.v bioaccumulating.v biotesting.v blabbing.v blackening.v blacklegging.v blackleging.v blanching.v blaspheming.v bleaching.v blending.v blinking.v blistering.v bluffing.v blurring.v boggling.v bonding.v boning.v bootlegging.v bootleging.v boping.v bopping.v bordering.v borrowing.v botanizing.v bottle-feeding.v bowdlerizing.v breastfeeding.v breeding.v brewing.v bridling.v broadcasting.v broadening.v broiling.v bronchodilating.v browning.v bruxing.v budging.v buffeting.v buggering.v bullying.v burglarizing.v burgling.v burnishing.v burrowing.v cabling.v calcifiesing.v calcifying.v calcining.v cambering.v cancerizing.v canvassing.v capitalizing.v capsizing.v carping.v catabolizing.v catenating.v cationizing.v celebrating.v centering.v centring.v chanting.v charring.v chelating.v circling.v circulating.v clanging.v clapping.v clasping.v clavelizing.v cleaving.v clicking.v clinching.v clinking.v clotting.v cloying.v clutching.v coacervating.v coaching.v coagglutinating.v coaggregating.v coagulating.v coamplifying.v coarctating.v coarsening.v coaxing.v codistributing.v coextracting.v cofractionating.v cogitating.v coincubating.v coinjecting.v coinsuring.v collapsing.v collimating.v co-localising.v colocalising.v co-localizing.v colocalizing.v combining.v cometabolizing.v commencing.v commingling.v communicating.v commuting.v comparing.v compensating.v composing.v computing.v concentrating.v conceptualizing.v condensing.v conducting.v confederating.v conferring.v confiding.v congesting.v conjoining.v conjugating.v consolidating.v constipating.v consulting.v contesting.v contrasting.v contributing.v convening.v converting.v copartitioning.v coprecipitating.v copurifying.v coregistering.v correlating.v corroding.v corrugating.v corrupting.v cosedimenting.v costaining.v costaring.v co-starring.v couching.v counter-attacking.v counterattacking.v counterindicating.v countermining.v crashing.v crash-landing.v craving.v creasing.v creosoting.v cribbing.v crinkling.v crisscrossing.v crocheting.v crooning.v cross-checking.v crosschecking.v crosslinking.v cryosectioning.v crystallizing.v cuddling.v cumulating.v curdling.v cursing.v curving.v dabbing.v damping.v dangling.v daping.v dapping.v darkening.v darning.v dating.v de-acidifying.v deacidifying.v de-adapting.v deadapting.v de-aggregating.v deaggregating.v de-alcoholizing.v dealcoholizing.v de-allergizing.v deallergizing.v debarking.v debating.v de-bonding.v debonding.v de-branching.v debranching.v decelerating.v de-cidualizing.v decidualizing.v de-clamping.v declamping.v decomposing.v de-condensing.v decondensing.v de-conditioning.v deconditioning.v de-congesting.v decongesting.v de-conjugating.v deconjugating.v de-constructing.v deconstructing.v decreasing.v de-crepitating.v decrepitating.v de-differentiating.v dedifferentiating.v deepening.v de-epithelializing.v deepithelializing.v de-fibrinogenating.v defibrinogenating.v deflecting.v de-fluorinating.v defluorinating.v de-gloving.v degloving.v de-glycosylating.v deglycosylating.v de-granulating.v degranulating.v de-humidifying.v dehumidifying.v de-iodinating.v deiodinating.v delaying.v delighting.v de-masculinizing.v demasculinizing.v democratizing.v de-morphinizing.v demorphinizing.v de-naturating.v denaturating.v departmentalizing.v de-phasing.v dephasing.v de-polarizing.v depolarizing.v de-polymerizing.v depolymerizing.v de-proteinizing.v deproteinizing.v de-quenching.v dequenching.v derailing.v deriving.v derogating.v de-saturating.v desaturating.v descending.v de-squamating.v desquamating.v de-stabilizing.v destabilizing.v de-synchronizing.v desynchronizing.v detonating.v de-toxifying.v detoxifying.v developing.v de-vitrifying.v devitrifying.v dialyzing.v dichotomizing.v dictating.v differentiating.v diffusing.v digesting.v digitalizing.v digitilizing.v dilating.v dimerizing.v diminishing.v dimming.v dinning.v dipping.v disarming.v disarticulating.v disbanding.v discasing.v discharging.v discoloring.v discontinuing.v disengaging.v disentangling.v disincorporating.v disinflating.v disjoining.v dismounting.v dispensing.v dispersing.v dissimulating.v dissipating.v dissolving.v distending.v distilling.v distinguishing.v disuniting.v dive-bombing.v diversifying.v diverticulizing.v divining.v docking.v dodging.v dogmatizing.v dorsalizing.v dorsiflexing.v double-clicking.v downsizing.v dreading.v dribbling.v drilling.v dripping.v drooping.v dulling.v dynamizing.v dysmyelinating.v echoing.v effluxing.v effusing.v ejaculating.v ejecting.v elaborating.v electrobloting.v electrocoagulating.v electrodialyzing.v electroejaculating.v electrofocusing.v electrofocussing.v electrotyping.v elongating.v embolizing.v embrittling.v embroidering.v emplaning.v encapsidating.v encysting.v ending.v endocytosing.v endothelializing.v enduring.v engaging.v engorging.v enlisting.v enroling.v enrolling.v entering.v entertaining.v entrenching.v enunciating.v epimerizing.v epoxidating.v eroding.v escalating.v escaping.v esterizing.v etching.v etiolating.v euhydrating.v evacuating.v evolving.v exaggerating.v excysting.v exercising.v exfoliating.v exhaling.v exogastrulating.v expanding.v expectorating.v exploding.v exploring.v expounding.v expressing.v extemporizing.v extending.v extrapolating.v extravasating.v exuviating.v famishing.v farrowing.v fastening.v feasting.v federating.v fermenting.v ferrying.v fibrillating.v fiddling.v fielding.v filming.v fissurating.v fistulizing.v fitting.v fixating.v flagging.v flapping.v flashing.v fledging.v fleeing.v flexing.v floccing.v flocculating.v flocing.v flossing.v fluidifying.v fluorinating.v focalizing.v focusing.v focussing.v foliating.v footing.v forbearing.v force-landing.v foreclosing.v forgiving.v forming.v foundering.v foveating.v fracturing.v fraying.v fronting.v frosting.v fructifying.v fudging.v fuelling.v fulgurating.v fumbling.v furling.v fusing.v gagging.v gaining.v gambling.v gaming.v gamming.v ganting.v gargling.v gasifying.v gasping.v gazumping.v gelatinizing.v generalizing.v germinating.v gestating.v gimping.v glancing.v globalizing.v glossing.v glucoronizing.v glucosylating.v gnashing.v gnawing.v governing.v granulating.v grasping.v grating.v grieving.v groaning.v groping.v grounding.v grouping.v growling.v grumbling.v grunting.v hailing.v haploidizing.v hardening.v harmonizing.v hatching.v heaving.v heckling.v hectoring.v hedging.v heightening.v hemagglutinating.v hemming.v hemoagglutinating.v hemocoagulating.v hemolyzing.v heterotransplanting.v hoarding.v hoeing.v honking.v hooting.v howling.v hugging.v humidifying.v humming.v hurting.v hushing.v hustling.v hybridizing.v hydrating.v hydrolyzing.v hyperarticulating.v hypercoagulating.v hyperhydrating.v hyperinflating.v hypermodifying.v hyperphosphorylating.v hyperpolarizing.v hyperproliferating.v hypersensitizing.v hyperventilating.v hypohydrating.v hypomethylating.v hyposecreting.v hypoventilating.v icing.v idling.v igniting.v immunomodulating.v immunoprecipitating.v imploding.v imprecating.v improving.v improvising.v incepting.v inclining.v incorporating.v increasing.v incubating.v indenting.v indulging.v indurating.v industrializing.v infibulating.v infolding.v infringing.v inhaling.v initiating.v inosculating.v insonating.v intensifying.v interbreeding.v interconnecting.v intercorrelating.v interlocking.v intermixing.v interning.v interpenetrating.v interpreting.v interrelating.v interrupting.v intersecting.v intertwining.v interviewing.v intravasating.v intriguing.v intussuscepting.v invaginating.v investigating.v investing.v invigilating.v iodizing.v ionizing.v isografting.v isomerizing.v jabbing.v jaging.v jangling.v jeering.v jigging.v jiggling.v jingling.v jolting.v jostling.v juggling.v keratinizing.v kidding.v kindling.v knitting.v labilizing.v labouring.v lactonizing.v lamenting.v landing.v latching.v lateralizing.v launching.v lecturing.v left-clicking.v lengthening.v lessening.v levitating.v liganding.v liquefying.v liquidating.v litigating.v littering.v lobbying.v lobulating.v localising.v localizing.v locating.v lodging.v luminescing.v lunching.v luteinizing.v lysing.v macerating.v mainlining.v maldigesting.v malrotating.v maneuvering.v manoeuvring.v marbleizing.v marinating.v massing.v masturbating.v mating.v medializing.v mediating.v meeting.v melding.v meliorating.v mending.v merging.v meshing.v metallizing.v metricizing.v micellizing.v microembolizing.v microencapsulating.v milling.v miming.v mining.v misaligning.v misarticulating.v miscalculating.v miscarrying.v miscounting.v misdealing.v misfolding.v misjudging.v mistiming.v misting.v mistunderstanding.v misunderstanding.v moaning.v mobilizing.v modelling.v moderating.v modernizing.g modernizing.v moistening.v mooning.v mottling.v moulding.v moulting.v mounting.v mourning.v mowing.v muddling.v multimerizing.v multiplicating.v multiplying.v mumbling.v munching.v murmuring.v muscularizing.v mutating.v myelinating.v narrowing.v navigating.v nearing.v necrotizing.v negotiating.v nephrectomizing.v nibbling.v nipping.v nitrogenizing.v nucleating.v nuzzling.v obeying.v obsessing.v occluding.v ogling.v opacifying.v operating.v opsonizing.v orbiting.v originating.v ossifying.v outbidding.v outbiding.v outspaning.v outspanning.v overarching.v overbalancing.v overcalling.v overcharging.v overclouding.v overdrawing.v overdressing.v overfeeding.v overfilling.v overfing.v overflowing.v overheating.v over-indulging.v overindulging.v overlapping.v overproducing.v overproliferating.v overreaching.v overreplicating.v oversecreting.v overspending.v overstretching.v overtraining.v overtranscribing.v overtrumping.v overturning.v overworking.v ovipositing.v oxidating.v oxidizing.v pacing.v paddling.v parading.v parking.v parsing.v particularizing.v parting.v passivizing.v pathergizing.v pealing.v pecking.v peculating.v pedaling.v pedalling.v peddling.v pending.v penetrating.v peptonizing.v perching.v performing.v peroxidizing.v petitioning.v petrifying.v phenolizing.v phlebotomizing.v photodegrading.v photodissociating.v photoisomerizing.v photolyzing.v photooxidizing.v photoreactivating.v picketing.v pillaging.v pinocytosing.v pioneering.v pitching.v placering.v plasticizing.v plundering.v poaching.v poising.v polling.v posing.v power-diving.v practising.v preaching.v preactivating.v precontracting.v preincubating.v preplaning.v preplanning.v presurfacing.v pretesting.v pringling.v privatizing.v projecting.v promenading.v pronating.v proofreading.v propagating.v protonating.v prowling.v pseudonormalizing.v puking.v puncturing.v punting.v purling.v pustulating.v puzzling.v quickening.v quietening.v racemizing.v racing.v radiating.v radioing.v rallying.v ramifying.v rancidifying.v ranging.v ranking.v rapping.v rating.v rattling.v raveling.v ravelling.v reactivating.v reacylating.v readapting.v readjusting.v reannealing.v reapplying.v rearing.v rearming.v rearresting.v reassembling.v reawakening.v rebleeding.v rebreathing.v rebreeding.v rebring.v rebuilding.v recalculating.v recanting.v recapitulating.v recapping.v receiving.v recementing.v recharging.v reciprocating.v recolonizing.v recommencing.v recomputing.v reconfirming.v reconnecting.v reconvening.v recovering.v recrossing.v recruiting.v recrystallizing.v recurving.v reddening.v redifferentiating.v redissolving.v redoubling.v reelevating.v reendothelializing.v reentering.v reepithelializing.v reequilibrating.v reeving.v reexpanding.v referring.v refing.v refiting.v refitting.v reflating.v refloating.v refocusing.v refocussing.v re-forming.v reforming.v refreezing.v refueling.v refuelling.v regenerating.v registering.v regrouping.v regrowing.v rehearsing.v rehydrating.v reincorporating.v reincubating.v reinducing.v reinflating.v reinfusing.v reinvestigating.v reinvesting.v reirradiating.v rekindling.v relating.v relaxing.v relocating.v remarrying.v remeasuring.v remineralizing.v remitting.v remobilizing.v remounting.v renegotiating.v reoccluding.v re-opening.v reopening.v reoperating.v reordering.v reorganizing.v reoxidizing.v repacking.v repairing.v rephosphorylating.v repolarizing.v reprising.v reprobing.v reproducing.v reseeding.v resensitizing.v resettling.v resigning.v respirating.v restarting.v restituting.v resuming.v resuscitating.v retailing.v retesting.v rethrombosing.v retiring.v retooling.v retrotransposing.v retruding.v returning.v reunifying.v reuniting.v reventilating.v reversing.v reviving.v revving.v rhyming.v ricocheting.v right-clicking.v rigidifying.v roaming.v roaring.v roasting.v rotating.v rousing.v rowing.v ruffling.v rupturing.v rustling.v sacrificing.v saluting.v saponifying.v scanning.v scattering.v scissoring.v sclerosing.v scoffing.v scolding.v scoring.v scrambling.v scrawling.v scribbling.v scrubbing.v sculling.v sculpturing.v searching.v seizing.v senescing.v separating.v serrating.v severing.v shading.v shaming.v shamming.v shattering.v shelling.v shop-lifting.v shoplifting.v short-circuiting.v shortening.v shoving.v showering.v shrieking.v shrinking.v shuffling.v sifting.v singeing.v sinking.v sinusoidalizing.v sipping.v skeletonizing.v skewing.v slamming.v slanting.v sledging.v slenderizing.v sloshing.v smacking.v smearing.v smoking.v smudging.v snarling.v snipping.v snorting.v snuggling.v socializing.v solidifying.v somatizing.v sowing.v spalting.v spattering.v spawning.v spiralizing.v splashing.v splaying.v splintering.v spoiling.v sponging.v sporting.v spouting.v spreadeagling.v spring-cleaning.v spying.v squashing.v stabilising.v stabilizing.v staining.v stalling.v stammering.v stampeding.v steadying.v steepening.v steeping.v steering.v stewing.v stifling.v stinging.v stinting.v stippling.v stonewalling.v straining.v stratifying.v streaking.v strengthening.v strobing.v strumming.v stumping.v subcontracting.v subdividing.v subducting.v subleasing.v subleting.v subletting.v submerging.v submitting.v substituting.v succeeding.v suffering.v suffocating.v suing.v summating.v superheating.v superinfecting.v superovulating.v supervising.v supinating.v supplicating.v surrendering.v surviving.v swallowing.v swapping.v swaying.v sweating.v swishing.v swiveling.v swivelling.v synchronizing.v synergizing.v tackling.v tanning.v tapping.v tarnishing.v tautomerizing.v telephoning.v terminating.v tetramerizing.v thawing.v thermalizing.v thieving.v thrashing.v threshing.v thrilling.v thrombosing.v thronging.v throttling.v thruming.v thrumming.v thumping.v thundering.v tickling.v tilting.v tinging.v tining.v titivating.v titrating.v toasting.v tooting.v tracing.v trading.v transaminating.v transcomplementing.v transcytosing.v transferring.v transgressing.v translating.v transplanting.v trawling.v treating.v trebling.v triaging.v trimerizing.v trotting.v troubleshooting.v trumpeting.v trumping.v tuberculizing.v tugging.v tuming.v tumming.v twanging.v twirling.v ulcerating.v umpiring.v unbending.v uncoating.v uncoiling.v uncurling.v underbidding.v undercorrecting.v underfeeding.v underprescribing.v underreporting.v underspending.v undressing.v unfastening.v unfolding.v unhitching.v unifying.v unionizing.v uniting.v unknoting.v unloading.v unlocking.v unpacking.v unraveling.v unrolling.v unscrewing.v unstressing.v untwisting.v untying.v unwinding.v unwrapping.v uploading.v urbanizing.v vaporizing.v varicellizing.v varying.v vasodilating.v venturing.v versifying.v verting.v vesicating.v vesiculating.v vesting.v vibrating.v visiting.v vitrifying.v vituperating.v vociferating.v volatilizing.v volleying.v vomiting.v wading.v wagging.v waggling.v wailing.v wakening.v warping.v watering.v waxing.v weakening.v wedding.v welding.v whealing.v wheeling.v whining.v whirling.v whistling.v whitening.v whittling.v whorling.v widening.v wiggling.v withdrawing.v worsening.v worshiping.v worshipping.v wrestling.v wrinkling.v yelling.v yielding.v yodelling.v link-grammar/data/en/words/.cvsignore0000644000000000000000000000002512536650432015001 0ustar Makefile.in Makefile link-grammar/data/en/words/words.v.5.10000644000000000000000000000136612536650433014642 0ustar agonize.v barge.v bottom.v bow.v breeze.v brim.v cave.v caw.v clam.v clown.v crap.v crawl.v creep.v crop.v crouch.v cruise.v dart.v dive.v doze.v drift.v drone.v drowse.v fade.v fizzle.v flock.v flow.v foam.v gang.v gear.v goof.v gush.v hurry.v jet.v jog.v jut.v keel.v kneel.v knuckle.v lie.v limp.v linger.v listen.v loom.v lunge.v lurch.v mellow.v nestle.v opt.v peek.v peer.v perk.v peter.v pig.v pine.v plonk.v plop.v puff.v riffle.v rot.v ruck.v sally.v scoot.v scream.v scurry.v seep.v shack.v shine.v shop.v shrivel.v shy.v skid.v slack.v slave.v sleep.v slim.v slink.v slope.v slump.v soar.v soldier.v spurt.v squat.v step.v stoop.v stream.v stroll.v strut.v stumble.v swoop.v team.v tense.v toddle.v tramp.v trickle.v trudge.v veer.v waft.v zoom.v link-grammar/data/en/words/currency.p0000644000000000000000000000105212536650432015015 0ustar Afghanis.c afghanis.c Angolars.c angolars.c Argentinos.c argentinos.c Australs.c australs.c Bolívars.c bolívars.c cents.c Dollars.c dollars.c Euros.c euros.c Francs.c francs.c Franks.c franks.c Halfpennies.c halfpennies.c Kronenthalers.c kronenthalers.c Leks.c leks.c Marks.c marks.c pennies.c Pesetas.c pesetas.c Pesos.c pesos.c Pounds.c pounds.c Reals.c reals.c Rixdollars.c rixdollars.c Riyals.c riyals.c Rubles.c rubles.c Rupees.c rupees.c Rupiahs.c rupiahs.c Rupies.c rupies.c Schillings.c schillings.c Shekels.c shekels.c Shillings.c shillings.c link-grammar/data/en/words/Makefile.in0000644000000000000000000003720312537603121015050 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = data/en/words DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(wordsdir)" DATA = $(words_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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@ WORDS = \ currency \ currency.p \ entities.given-bisex.sing \ entities.given-female.sing \ entities.given-male.sing \ entities.locations.sing \ entities.national.sing \ entities.organizations.sing \ entities.us-states.sing \ units.1 \ units.1.dot \ units.3 \ units.4 \ units.4.dot \ words.adj.1 \ words.adj.2 \ words.adj.3 \ words.adv.1 \ words-medical.adv.1 \ words.adv.2 \ words.adv.3 \ words.adv.4 \ words.n.1 \ words.n.1.wiki \ words.n.2.s \ words.n.2.s.biolg \ words.n.2.s.wiki \ words.n.2.x \ words.n.2.x.wiki \ words.n.3 \ words.n.t \ words-medical.prep.1 \ words.v.10.1 \ words.v.10.2 \ words.v.10.3 \ words.v.10.4 \ words.v.1.1 \ words.v.1.2 \ words.v.1.3 \ words.v.1.4 \ words.v.1.p \ words.v.2.1 \ words.v.2.2 \ words.v.2.3 \ words.v.2.4 \ words.v.2.5 \ words.v.4.1 \ words-medical.v.4.1 \ words.v.4.2 \ words-medical.v.4.2 \ words.v.4.3 \ words-medical.v.4.3 \ words.v.4.4 \ words-medical.v.4.4 \ words.v.4.5 \ words-medical.v.4.5 \ words.v.5.1 \ words.v.5.2 \ words.v.5.3 \ words.v.5.4 \ words.v.6.1 \ words.v.6.2 \ words.v.6.3 \ words.v.6.4 \ words.v.6.5 \ words.v.8.1 \ words.v.8.2 \ words.v.8.3 \ words.v.8.4 \ words.v.8.5 \ words.y wordsdir = $(pkgdatadir)/en/words words_DATA = $(WORDS) EXTRA_DIST = $(WORDS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/en/words/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign data/en/words/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-wordsDATA: $(words_DATA) @$(NORMAL_INSTALL) @list='$(words_DATA)'; test -n "$(wordsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(wordsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(wordsdir)" || 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)$(wordsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(wordsdir)" || exit $$?; \ done uninstall-wordsDATA: @$(NORMAL_UNINSTALL) @list='$(words_DATA)'; test -n "$(wordsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(wordsdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(wordsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-wordsDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-wordsDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip install-wordsDATA installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-wordsDATA # 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: link-grammar/data/en/words/words.v.5.30000644000000000000000000000225012536650433014635 0ustar agonized.v-d barged.v-d bottomed.v-d bowed.v-d breezed.v-d brimmed.v-d caved.v-d cawed.v-d cawwed.v-d clammed.v-d clowned.v-d crapped.v-d crawled.v-d crept.v-d cropped.v-d crouched.v-d cruised.v-d darted.v-d dived.v-d dove.v-d dozed.v-d drifted.v-d droned.v-d drowsed.v-d faded.v-d fizzled.v-d flocked.v-d flowed.v-d foamed.v-d ganged.v-d geared.v-d goofed.v-d gushed.v-d hurried.v-d jetted.v-d jogged.v-d jutted.v-d keeled.v-d kneeled.v-d knelt.v-d knuckled.v-d lied.v-d limped.v-d lingered.v-d listened.v-d loomed.v-d lunged.v-d lurched.v-d mellowed.v-d nestled.v-d opted.v-d peeked.v-d peered.v-d perked.v-d petered.v-d pigged.v-d pined.v-d plonked.v-d plopped.v-d puffed.v-d riffled.v-d rotted.v-d rucked.v-d sallied.v-d scooted.v-d screamed.v-d scurried.v-d seeped.v-d shacked.v-d shied.v-d shined.v-d shone.v-d shopped.v-d shriveled.v-d shrivelled.v-d skidded.v-d slacked.v-d slaved.v-d slept.v-d slimmed.v-d slinked.v-d sloped.v-d slumped.v-d soared.v-d soldiered.v-d spurted.v-d squatted.v-d stepped.v-d stooped.v-d streamed.v-d strolled.v-d strutted.v-d stumbled.v-d swooped.v-d teamed.v-d tensed.v-d toddled.v-d tramped.v-d trickled.v-d trudged.v-d veered.v-d wafted.v-d zoomed.v-d link-grammar/data/en/words/entities.locations.sing0000644000000000000000000000612012536650432017503 0ustar Africa.l Agreste.l Alabama.l Alberta.l Aleppo.l Antigua.l Arctic.l Arizona.l Arkansas.l Arusha.l Asia.l Aspen.l Assyria.l Atlanta.l Baar.l Balboa.l Baltimore.l Bangkok.l Barbuda.l Barcelona.l Bechuanaland.l Beijing.l Bern.l Berne.l Bombay.l Borneo.l Bosnia.l Bratislava.l Brevital.l Bristol.l Brittany.l Brussels.l Budapest.l Buruli.l Byelarus.l Byzantium.l Cad.l Cape.l Cage.l Cain.l Cairo.l California.l Callisto.l Cambridge.l Canterbury.l Catalonia.l Cephalonia.l Ceylon.l Champagne.l Charon.l Chicago.l Cincinnati.l Colorado.l Columbia.l Como.l Connecticut.l Copenhagen.l Corinth.l Coventry.l Coxsackie.l Creation.l Crouzon.l Curacao.l Dallas.l Delaware.l Derby.l Devonshire.l Dodge.l Doheny.l Dorex.l Dublin.l Eden.l Edinburgh.l Eire.l Eminence.l Erie.l Europa.l Europe.l Fermo.l Fife.l Florida.l Formalin.l Formosa.l Frankfurt.l Funen.l Gaul.l Geneva.l Goa.l Guadalajara.l Guam.l Guiana.l Hamburg.l Hardy.l Harlem.l Hartmann.l Harvard.l Hasselbach.l Haverhill.l Heidelberg.l Helsinki.l Henderson.l Hercules.l Hermes.l Herzegovina.l Holland.l Ibadan.l Illinois.l Indiana.l Interlingua.l Islay.l Johannesburg.l Kampuchea.l Kansas.l Katanga.l Katar.l Kea.l Kentucky.l Kilimanjaro.l Kirghizia.l Kyoto.l Lagos.l Leeds.l Leichtenstein.l Leiden.l Lissauer.l Liverpool.l Locarno.l London.l Louisiana.l Lucerne.l Lucifer.l Lund.l Lusaka.l Macao.l Madoera.l Madrid.l Maghreb.l Maine.l Malmo.l Manchuria.l Manipur.l Manitoba.l Mannheim.l Marabou.l Maryland.l Massachusetts.l Melanesia.l Memphis.l Mesopotamia.l Miami.l Michigan.l Milan.l Milwaukee.l Minneapolis.l Minnesota.l Mississippi.l Missouri.l Moab.l Mohammedanism.l Mom.l Montana.l Monterrey.l Morin.l Moscow.l Mulago.l Munich.l Myanmar.l Nagasaki.l Nairobi.l Nakai.l Nakayama.l Nebraska.l Neptune.l Nevada.l Newcastle.l Newfoundland.l Niagara.l Nottingham.l Nyanza.l Nyasaland.l Oceania.l Oedipus.l Oklahoma.l Olympia.l Ontario.l Opah.l Oregon.l Orion.l Osaka.l Oslo.l Oxford.l Plasmapur.l Parasal.l Patella.l Penhale.l Pennsylvania.l Pentothal.l Persia.l Perth.l Petri.l Pharmacol.l Philadelphia.l Phobos.l Photofrin.l Pick.l Pitter.l Pneumocystis.l Poliklinik.l Polivy.l Polonia.l Polynesia.l Ponta.l Portela.l Porto.l Prague.l Prantal.l Princeton.l Prinzmetal.l Quebec.l Queensland.l Rhodesia.l Rio.l Riyadh.l Rome.l Rothmund.l Rotterdam.l Ruthenia.l Sacramento.l Sanaa.l Sandhoff.l Santiago.l Sapporo.l Sarawak.l Sardinia.l Saskatchewan.l Saskatoon.l Satan.l Saturn.l Scandinavia.l Scotland.l Scrabble.l Scythia.l Sheffield.l Siam.l Siberia.l Sicily.l Sievert.l Sikkim.l Silesia.l Sinai.l Sinkiang.l Siva.l Soho.l Somaliland.l Sora.l Southwest.l Spitsbergen.l Stockholm.l Storz.l Stylonychia.l Suffolk.l Sulawesi.l Sumatra.l Sydney.l Tahiti.l Taipan.l Taipei.l Tanganyika.l Tasmania.l Tennessee.l Terramycin.l Tijuana.l Toledo.l Toronto.l Transcaucasia.l Transvaal.l Transylvania.l Trinidad.l Tripoli.l Triton.l Troms.l Tuscany.l Tuskegee.l Udayana.l Udkoff.l Ulster.l Uppsala.l Uranus.l Vancouver.l Venice.l Venus.l Vermont.l Virginia.l Vojvodina.l Warsaw.l Weber.l Williamsburg.l Wisconsin.l Wyoming.l Zante.l Zanzibar.l Zurich.l link-grammar/data/en/words/units.10000644000000000000000000000275612536650432014242 0ustar km².u mi².u in².u ft².u m².u cm².u mm².u μm².u yds².u micron².u km³.u mi³.u in³.u ft³.u m³.u cm³.u mm³.u μm³.u yds³.u micron³.u mph.u MPH.u mpg.u MPG.u rpm.u RPM.u ppm.u PPM.u pica.u point.u gallon.u gauge.u pound.u inch.u foot.u km.u m.u cm.u mm.u um.u μm.u nm.u mM.u M.u microM.u nM.u kilogram.u gram.u milligram.u microgram.u nanogram.u ng.u μg.u mg.u g.u kg.u aa.u amino-acids.u amino_acids K.u nucleotides.u kilobase.u base-pair.u base_pair amino-acid.u amino_acid nucleotide.u Ampere.u amp.u ampere.u pA.u nA.u μA.u ma.u mA.u A.u kA.u KA.u kilobase_pairs base-pairs.u base_pairs kb.u kilobases.u bp.u kbp.u Mb.u Bel.u bel.u dB.u decibel.u decibels.u dBm.u calorie.u cal.u kcal.u kcal/mol.u Dalton.u dalton.o Dal.u kDal.u kDa.u kD.u KD.u D.u d.u dioptre.u Hertz.u Hz.u kHz.u KHz.u MHz.u Hg.u cmHg.u mmHg.u inHg.u liter.u l.u ml.u mL.u cc.u Lt.u LT.u mho.u millimho.u micromho.u mol.u nmol.u pmol.u molar.u mole.u mumol.u Newton.u N.u kN.u MN.u mN.u nt.u ohm.u kilo-ohm.u kiloohm.u Kiloohm.u kohm.u Kohm.u KOhm.u mega-ohm.u megaohm.u MOhm.u Mohm.u milliohm.u microohm.u micro-ohm.u Ω.u kΩ.u KΩ.u MΩ.u mΩ.u Pascal.u Pa.u kPa.u pH.u Volt.u volt.u pV.u nV.u μV.u mv.u mV.u V.u kV.u KV.u VDC.u VAC.u Watt.u watt.u kW.u KW.u MW.u GW.u PW.u kVA.u s-1.u eV.u keV.u KeV.u MeV.u GeV.u hp.u HP.u BHP.u BTU.u btu.u Btu.u ton.u tonne.u T.u kT.u MT.u byte.u Byte.u kB.u MB.u GB.u TB.u PB.u od.u O.D.u OD.u id.u I.D.u ID.u 〜.u 年.u 月.u 日.u °.u γ.u ε.u θ.u λ/4.u kW·h/m².u mg/l.u link-grammar/data/en/words/words.n.2.x0000644000000000000000000000122012536650433014723 0ustar aircraft.p bacteria.p beano.p bellmen.p buffalo.p businessmen.p cacti.p chairmen.p chairwomen.p children.p chum.p clergymen.p congressmen.p criteria.p data.p deer.p dice.p dressing.p emphases.p enzyme.p feet.p firemen.p fishermen.p flora.p flounder.p foremen.p freshmen.p fungi.p gentlemen.p gentry.p grandchildren.p gunmen.p hyphae.p kin.p larvae.p lobstermen.p mailmen.p milkmen.p media.p men.p mice.p millenia.p nemeses.p papaya.p people.p perch.p personae.p personnel.p phenomena.p policemen.p police.p policewomen.p rebellion.p salesmen.p salmon.p sheep.p shrubbery.p smelt.p spokesmen.p spokeswomen.p teeth.p waterfowl.p women.p zucchini.p zuchini.p link-grammar/data/en/words/words.v.2.50000644000000000000000000004113012536650433014634 0ustar abdicating.g abiding.g aborting.g abrading.g accelerating.g acclimating.g acclimatizing.g acculturating.g accumulating.g acidifying.g adapting.g adjourning.g adjudicating.g adjusting.g advancing.g advertising.g aerosolizing.g affiliating.g agglutinating.g aggregating.g aging.g agitating.g aglomerating.g ailing.g aligning.g alimenting.g alkalifying.g allying.g altering.g alternating.g amalgamating.g Americanizing.g anastomosing.g anchoring.g anergizing.g ankylosing.g anteverting.g apostrophizing.g appealing.g applauding.g applicating.g applying.g approaching.g approximating.g arbitrating.g arborizing.g arching.g articulating.g arylating.g ascending.g assembling.g assimilating.g assisting.g associating.g attaching.g attending.g auditioning.g auguring.g autoactivating.g autocatalyzing.g autocorrelating.g autodigesting.g autolyzing.g automatizing.g autophosphorylating.g autosensitizing.g autotransfusing.g availing.g awakening.g axenizing.g bagging.g banding.g banking.g bargaining.g bartering.g bathing.ga bathing.gb batting.g baulking.g benefiting.g benefitting.g berthing.g bicompartmentalizing.g bidding.g bifurcating.g bioaccumulating.g biotesting.g blabbing.g blackening.g blacklegging.g blackleging.g blanching.g blaspheming.g bleaching.g blending.g blinking.g blistering.g bluffing.g blurring.g boggling.g bonding.g boning.g bootlegging.g bootleging.g boping.g bopping.g bordering.g borrowing.g botanizing.g bottle-feeding.g bowdlerizing.g breastfeeding.g breeding.g brewing.g bridling.g broadcasting.g broadening.g broiling.g bronchodilating.g browning.g bruxing.g budging.g buffeting.g buggering.g bullying.g burglarizing.g burgling.g burnishing.g burrowing.g cabling.g calcifiesing.g calcifying.g calcining.g cambering.g cancerizing.g canvassing.g capitalizing.g capsizing.g carping.g catabolizing.g catenating.g cationizing.g celebrating.g centering.g centring.g chanting.g charring.g chelating.g circling.g circulating.g clanging.g clapping.g clasping.g clavelizing.g cleaving.g clicking.g clinching.g clinking.g clotting.g cloying.g clutching.g coacervating.g coaching.g coagglutinating.g coaggregating.g coagulating.g coamplifying.g coarctating.g coarsening.g coaxing.g codistributing.g coextracting.g cofractionating.g cogitating.g coincubating.g coinjecting.g coinsuring.g collapsing.g collimating.g co-localising.g colocalising.g co-localizing.g colocalizing.g combining.g cometabolizing.g commencing.g commingling.g communicating.g commuting.g comparing.g compensating.g composing.g computing.g concentrating.g conceptualizing.g condensing.g conducting.g confederating.g conferring.g confiding.g congesting.g conjoining.g conjugating.g consolidating.g constipating.g consulting.g contesting.g contrasting.g contributing.g convening.g converting.g copartitioning.g coprecipitating.g copurifying.g coregistering.g correlating.g corroding.g corrugating.g corrupting.g cosedimenting.g costaining.g costaring.g co-starring.g couching.g counter-attacking.g counterattacking.g counterindicating.g countermining.g crashing.g crash-landing.g craving.g creasing.g creosoting.g cribbing.g crinkling.g crisscrossing.g crocheting.g crooning.g cross-checking.g crosschecking.g crosslinking.g cryosectioning.g crystallizing.g cuddling.g cumulating.g curdling.g cursing.g curving.g dabbing.g damping.g dangling.g daping.g dapping.g darkening.g darning.g dating.g de-acidifying.g deacidifying.g de-adapting.g deadapting.g de-aggregating.g deaggregating.g de-alcoholizing.g dealcoholizing.g de-allergizing.g deallergizing.g debarking.g debating.g de-bonding.g debonding.g de-branching.g debranching.g decelerating.g de-cidualizing.g decidualizing.g de-clamping.g declamping.g decomposing.g de-condensing.g decondensing.g de-conditioning.g deconditioning.g de-congesting.g decongesting.g de-conjugating.g deconjugating.g de-constructing.g deconstructing.g decreasing.g de-crepitating.g decrepitating.g de-differentiating.g dedifferentiating.g deepening.g de-epithelializing.g deepithelializing.g de-fibrinogenating.g defibrinogenating.g deflecting.g de-fluorinating.g defluorinating.g de-gloving.g degloving.g de-glycosylating.g deglycosylating.g de-granulating.g degranulating.g de-humidifying.g dehumidifying.g de-iodinating.g deiodinating.g delaying.g delighting.g de-masculinizing.g demasculinizing.g democratizing.g de-morphinizing.g demorphinizing.g de-naturating.g denaturating.g departmentalizing.g de-phasing.g dephasing.g de-polarizing.g depolarizing.g de-polymerizing.g depolymerizing.g de-proteinizing.g deproteinizing.g de-quenching.g dequenching.g derailing.g deriving.g derogating.g de-saturating.g desaturating.g descending.g de-squamating.g desquamating.g de-stabilizing.g destabilizing.g de-synchronizing.g desynchronizing.g detonating.g de-toxifying.g detoxifying.g developing.g de-vitrifying.g devitrifying.g dialyzing.g dichotomizing.g dictating.g differentiating.g diffusing.g digesting.g digitalizing.g digitilizing.g dilating.g dimerizing.g diminishing.g dimming.g dinning.g dipping.g disarming.g disarticulating.g disbanding.g discasing.g discharging.g discoloring.g discontinuing.g disengaging.g disentangling.g disincorporating.g disinflating.g disintegrating.g disjoining.g dismounting.g dispensing.g dispersing.g dissimulating.g dissipating.g dissolving.g distending.g distilling.g distinguishing.g disuniting.g dive-bombing.g diversifying.g diverticulizing.g divining.g docking.g dodging.g dogmatizing.g dorsalizing.g dorsiflexing.g double-clicking.g downsizing.g dreading.g dribbling.g drilling.g dripping.g drooping.g dulling.g dynamizing.g dysmyelinating.g echoing.g effluxing.g effusing.g ejaculating.g ejecting.g elaborating.g electrobloting.g electrocoagulating.g electrodialyzing.g electroejaculating.g electrofocusing.g electrofocussing.g electrotyping.g elongating.g embolizing.g embrittling.g embroidering.g emplaning.g encapsidating.g encysting.g ending.g endocytosing.g endothelializing.g enduring.g engaging.g engorging.g enlisting.g enroling.g enrolling.g entering.g entertaining.g entrenching.g enunciating.g epimerizing.g epoxidating.g eroding.g escalating.g escaping.g esterizing.g etching.g etiolating.g euhydrating.g evacuating.g evolving.g exaggerating.g excysting.g exercising.g exfoliating.g exhaling.g exogastrulating.g expanding.g expectorating.g exploding.g exploring.g expounding.g expressing.g extemporizing.g extending.g extrapolating.g extravasating.g exuviating.g famishing.g farrowing.g fastening.g feasting.g federating.g fermenting.g ferrying.g fibrillating.g fiddling.g fielding.g filming.g fissurating.g fistulizing.g fitting.g fixating.g flagging.g flapping.g flashing.g fledging.g fleeing.g flexing.g floccing.g flocculating.g flocing.g flossing.g fluidifying.g fluorinating.g focalizing.g focusing.g focussing.g foliating.g footing.g forbearing.g force-landing.g foreclosing.g forgiving.g forming.g foundering.g foveating.g fracturing.g fraying.g fronting.g frosting.g fructifying.g fudging.g fuelling.g fulgurating.g fumbling.g furling.g fusing.g gagging.g gaining.g gambling.g gaming.g gamming.g ganting.g gargling.g gasifying.g gasping.g gazumping.g gelatinizing.g generalizing.g germinating.g gestating.g gimping.g glancing.g globalizing.g glossing.g glucoronizing.g glucosylating.g gnashing.g gnawing.g governing.g granulating.g grasping.g grating.g grieving.g groaning.g groping.g grounding.g grouping.g growling.g grumbling.g grunting.g hailing.g haploidizing.g hardening.g harmonizing.g hatching.g heaving.g heckling.g hectoring.g hedging.g heightening.g hemagglutinating.g hemming.g hemoagglutinating.g hemocoagulating.g hemolyzing.g heterotransplanting.g hoarding.g hoeing.g honking.g hooting.g howling.g hugging.g humidifying.g humming.g hurting.g hushing.g hustling.g hybridizing.g hydrating.g hydrolyzing.g hyperarticulating.g hypercoagulating.g hyperhydrating.g hyperinflating.g hypermodifying.g hyperphosphorylating.g hyperpolarizing.g hyperproliferating.g hypersensitizing.g hyperventilating.g hypohydrating.g hypomethylating.g hyposecreting.g hypoventilating.g icing.g idling.g igniting.g immunomodulating.g immunoprecipitating.g imploding.g imprecating.g improving.g improvising.g incepting.g inclining.g incorporating.g increasing.g incubating.g indenting.g indulging.g indurating.g industrializing.g infibulating.g infolding.g infringing.g inhaling.g initiating.g inosculating.g insonating.g intensifying.g interbreeding.g interconnecting.g intercorrelating.g interlocking.g intermixing.g interning.g interpenetrating.g interpreting.g interrelating.g interrupting.g intersecting.g intertwining.g interviewing.g intravasating.g intriguing.g intussuscepting.g invaginating.g investigating.g investing.g invigilating.g iodizing.g ionizing.g isografting.g isomerizing.g jabbing.g jaging.g jangling.g jeering.g jigging.g jiggling.g jingling.g jolting.g jostling.g juggling.g keratinizing.g kidding.g kindling.g knitting.g labilizing.g laboring.g labouring.g lactonizing.g lamenting.g landing.g latching.g lateralizing.g launching.g lecturing.g left-clicking.g lengthening.g lessening.g levitating.g liganding.g liquefying.g liquidating.g litigating.g littering.g lobbying.g lobulating.g localising.g localizing.g locating.g lodging.g logging.g luminescing.g lunching.g luteinizing.g lysing.g macerating.g mainlining.g maldigesting.g malrotating.g maneuvering.g manoeuvring.g marbleizing.g marinating.g massing.g masturbating.g mating.g medializing.g mediating.g meeting.g melding.g meliorating.g mending.g merging.g meshing.g metallizing.g metricizing.g micellizing.g microembolizing.g microencapsulating.g milling.g miming.g mining.g misaligning.g misarticulating.g miscalculating.g miscarrying.g miscounting.g misdealing.g misfolding.g misjudging.g mistiming.g misting.g misunderstanding.g moaning.g mobilizing.g modelling.g moderating.g moistening.g mooning.g mottling.g moulding.g moulting.g mounting.g mourning.g mowing.g muddling.g multimerizing.g multiplicating.g multiplying.g mumbling.g munching.g murmuring.g muscularizing.g mutating.g myelinating.g narrowing.g navigating.g nearing.g necrotizing.g negotiating.g nephrectomizing.g nibbling.g nipping.g nitrogenizing.g nucleating.g nuzzling.g obeying.g obsessing.g occluding.g ogling.g opacifying.g operating.g opsonizing.g orbiting.g originating.g ossifying.g outbidding.g outbiding.g outspaning.g outspanning.g overarching.g overbalancing.g overcalling.g overcharging.g overclouding.g overdrawing.g overdressing.g overfeeding.g overfilling.g overfing.g overflowing.g overheating.g over-indulging.g overindulging.g overlapping.g overproducing.g overproliferating.g overreaching.g overreplicating.g oversecreting.g overspending.g overstretching.g overtraining.g overtranscribing.g overtrumping.g overturning.g overworking.g ovipositing.g oxidating.g oxidizing.g pacing.g paddling.g parading.g parking.g parsing.g particularizing.g parting.g passivizing.g pathergizing.g pealing.g pecking.g peculating.g pedaling.g pedalling.g peddling.g pending.g penetrating.g peptonizing.g perching.g performing.g peroxidizing.g petitioning.g petrifying.g phenolizing.g phlebotomizing.g photodegrading.g photodissociating.g photoisomerizing.g photolyzing.g photooxidizing.g photoreactivating.g picketing.g pillaging.g pinocytosing.g pioneering.g pitching.g placering.g plasticizing.g plundering.g poaching.g poising.g polling.g posing.g power-diving.g practising.g preaching.g preactivating.g precontracting.g preincubating.g preplaning.g preplanning.g presurfacing.g pretesting.g pringling.g privatizing.g projecting.g promenading.g pronating.g proofreading.g propagating.g protonating.g prowling.g pseudonormalizing.g puking.g puncturing.g punting.g purling.g pustulating.g puzzling.g quickening.g quietening.g racemizing.g racing.g radiating.g radioing.g rallying.g ramifying.g rancidifying.g ranging.g ranking.g rapping.g rating.g rattling.g raveling.g ravelling.g reactivating.g reacylating.g readapting.g readjusting.g reannealing.g reapplying.g rearing.g rearming.g rearresting.g reassembling.g reawakening.g rebleeding.g rebreathing.g rebreeding.g rebring.g rebuilding.g recalculating.g recanting.g recapitulating.g recapping.g receiving.g recementing.g recharging.g reciprocating.g recolonizing.g recommencing.g recomputing.g reconfirming.g reconnecting.g reconvening.g recovering.g recrossing.g recruiting.g recrystallizing.g recurving.g reddening.g redifferentiating.g redissolving.g redoubling.g reelevating.g reendothelializing.g reentering.g reepithelializing.g reequilibrating.g reeving.g reexpanding.g referring.g refing.g refiting.g refitting.g reflating.g refloating.g refocusing.g refocussing.g re-forming.g reforming.g refreezing.g refueling.g refuelling.g regenerating.g registering.g regrouping.g regrowing.g rehearsing.g rehydrating.g reincorporating.g reincubating.g reinducing.g reinflating.g reinfusing.g reinvestigating.g reinvesting.g reirradiating.g rekindling.g relating.g relaxing.g relocating.g remarrying.g remeasuring.g remineralizing.g remitting.g remobilizing.g remounting.g renegotiating.g reoccluding.g re-opening.g reopening.g reoperating.g reordering.g reorganizing.g reoxidizing.g repacking.g repairing.g rephosphorylating.g repolarizing.g reprising.g reprobing.g reproducing.g reseeding.g resensitizing.g resettling.g resigning.g respirating.g restarting.g restituting.g resuming.g resuscitating.g retailing.g retesting.g rethrombosing.g retiring.g retooling.g retrotransposing.g retruding.g returning.g reunifying.g reuniting.g reventilating.g reversing.g reviving.g revving.g rhyming.g ricocheting.g right-clicking.g rigidifying.g roaming.g roaring.g roasting.g rotating.g rousing.g rowing.g ruffling.g rupturing.g rustling.g sacrificing.g saluting.g saponifying.g scanning.g scattering.g scissoring.g sclerosing.g scoffing.g scolding.g scoring.g scrambling.g scrawling.g scribbling.g scrubbing.g sculling.g sculpturing.g searching.g seizing.g senescing.g separating.g serrating.g severing.g shading.g shaming.g shamming.g shattering.g shelling.g shop-lifting.g shoplifting.g short-circuiting.g shortening.g shoving.g showering.g shrieking.g shrinking.g shuffling.g sifting.g singeing.g sinking.g sinusoidalizing.g sipping.g skeletonizing.g skewing.g slamming.g slanting.g sledging.g slenderizing.g sloshing.g smacking.g smearing.g smoking.g smudging.g snarling.g snipping.g snorting.g snuggling.g socializing.g solidifying.g somatizing.g sowing.g spalting.g spattering.g spawning.g spiralizing.g splashing.g splaying.g splintering.g spoiling.g sponging.g sporting.g spouting.g spreadeagling.g spring-cleaning.g spying.g squashing.g stabilising.g stabilizing.g staining.g stalling.g stammering.g stampeding.g steadying.g steepening.g steeping.g steering.g stewing.g stifling.g stinging.g stinting.g stippling.g stonewalling.g straining.g stratifying.g streaking.g strengthening.g strobing.g strumming.g stumping.g subcontracting.g subdividing.g subducting.g subleasing.g subleting.g subletting.g submerging.g submitting.g substituting.g succeeding.g suffering.g suffocating.g suing.g summating.g superheating.g superinfecting.g superovulating.g supervising.g supinating.g supplicating.g surrendering.g surviving.g swallowing.g swapping.g swarming.g swaying.g sweating.g swishing.g swiveling.g swivelling.g synchronizing.g synergizing.g tackling.g tanning.g tapping.g tarnishing.g tautomerizing.g telephoning.g tending.g terminating.g tetramerizing.g thawing.g thermalizing.g thieving.g thrashing.g threshing.g thrilling.g thrombosing.g thronging.g throttling.g thruming.g thrumming.g thumping.g thundering.g tickling.g tilting.g tinging.g tining.g titivating.g titrating.g toasting.g tooting.g tracing.g trading.g transaminating.g transcomplementing.g transcytosing.g transferring.g transgressing.g translating.g transplanting.g trawling.g treating.g trebling.g triaging.g trimerizing.g trotting.g troubleshooting.g trumpeting.g trumping.g tuberculizing.g tugging.g tuming.g tumming.g twanging.g twirling.g ulcerating.g umpiring.g unbending.g uncoating.g uncoiling.g uncurling.g underbidding.g undercorrecting.g underfeeding.g underprescribing.g underreporting.g underspending.g undressing.g unfastening.g unfolding.g unhitching.g unifying.g unionizing.g uniting.g unknoting.g unloading.g unlocking.g unpacking.g unraveling.g unrolling.g unscrewing.g unstressing.g untwisting.g untying.g unwinding.g unwrapping.g uploading.g urbanizing.g vaporizing.g varicellizing.g varying.g vasodilating.g venturing.g versifying.g verting.g vesicating.g vesiculating.g vesting.g vibrating.g visiting.g vitrifying.g vituperating.g vociferating.g volatilizing.g volleying.g vomiting.g wading.g wagging.g waggling.g wailing.g wakening.g warping.g watering.g waxing.g weakening.g wedding.g welding.g whealing.g wheeling.g whining.g whirling.g whistling.g whitening.g whittling.g whorling.g widening.g wiggling.g withdrawing.g worsening.g worshiping.g worshipping.g wrestling.g wrinkling.g yelling.g yielding.g yodelling.g link-grammar/data/en/words/words.adv.30000644000000000000000000000457512536650432015012 0ustar academically.e actuarially.e administratively.e aesthetically.e aetiopathogenetically.e agriculturally.e agricuturally.e algebraically.e allegorically.e anatomically.e archeologically.e architecturally.e arithmetically.e artistically.e assumedly.e astronomically.e athletically.e atypically.e behaviorally.e biblically.e biochemically.e biologically.e biotically.e bipedally.e carnally.e chemically.e clandestinely.e climatically.e cognitively.e collegiately.e colonially.e computationally.e conceptually.e contractually.e cryogenically.e cryptographically.e cytochemically.e ecclesiastically.e ecologically.e economically.e educationally.e electorally.e empirically.e environmentally.e equidistantly.e esthetically.e ethically.e ethnically.e ethnoculturally.e factually.e federally.e financially.e finitely.e genealogically.e generically.e genetically.e geographically.e geologically.e geometrically.e governmentally.e grammatically.e gynaecologically.e harmonically.e heretofore:.e histochemically.e historically.e hydraulically.e immunophenotypically.e infinitesimally.e institutionally.e journalistically.e judicially.e lastingly.e legendarily.e linguistically.e logically.e logistically.e maddeningly.e materially.e mathematically.e medically.e medicinally.e metaphysically.e meteorologically.e methodologically.e morally.e morbidly.e mystically.e nonspecifically.e nutritionally.e opportunistically.e optically.e organizationally.e overridingly.e pathogenetically.e perceptually.e perpendicularly.e pharmacologically.e phenomenologically.e philosophically.e phonetically.e phonologically.e photographically.e pictorially.e pinnately.e politically.e pragmatically.e priestly.e princely.e probabilistically.e prognostically.e pseudomorphically.e pseudonymously.e psionically.e psychically.e psychologically.e publically.e putatively.e quadratically.e questionably.e racially.e recreationally.e recursively.e revolutionally.e rhythmically.e ritually.e scientifically.e semantically.e sexually.e socially.e societally.e sociologically.e sonically.e spatially.e spherically.e spirally.e statistically.e statutorily.e steganographically.e stereotypically.e structurally.e stylistically.e supernaturally.e syllabically.e synonymously.e synoptically.e syntactically.e tangentially.e taxonomically.e technologically.e telepathically.e terrestrially.e theologically.e theoretically.e therapeutically.e topographically.e wirelessly.e link-grammar/data/en/words/words.v.1.10000644000000000000000000002406312536650433014635 0ustar abate.v abound.v about-face.v abscond.v abstain.v accede.v account.v accrue.v ache.v acquiesce.v adenize.v adhere.v adjoin.v ad-lib.v alight.v allude.v amble.v ambulate.v amount.v anteflect.v apologize.v apostatize.v appertain.v aquaplane.v arise.v arrive.v assent.v astringe.v atone.v atrophy.v attitudinize.v autoagglutinate.v autodegrade.v autooxidise.v auto-oxidize.v autooxidize.v autoproliferate.v autotomize.v autoxidize.v baa.v babble.v baby-sit.v babysit.v backbite.v backfire.v backpedal.v backslide.v backspace.v bacteriolyze.v balk.v balloon.v bam.v banquet.v banter.v bant.v barf.v bark.v barnstorm.v bask.v bawl.v bay.v beep.v beetle.v behave.v belch.v bellyache.v belong.v bicker.v billow.v biodegrade.v bitch.v blabber.v blather.v blaze.v bleat.v bleep.v blench.v blether.v bloat.v bloom.v blossom.v blubber.v blunder.v blush.v bode.v boom.v brake.v brawl.v bray.v bristle.v brood.v browse.v bubble.v bud.v bullshit.v bunk.v burble.v burgeon.v burp.v bustle.v cab.v cackle.v calve.v campaign.v canaliculize.v canter.v caper.v capillarize.v capitulate.v careen.v carol.v carouse.v cascade.v castle.v cater.v caterwaul.v cavil.v cavort.v chafe.v chatter.v cheep.v chemosensitise.v chime.v chirp.v chirrup.v chortle.v chromatofocus.v chuckle.v chug.v chum.v clack.v clamber.v clamor.v clamour.v clank.v clash.v clatter.v clerk.v climax.v cling.v cluck.v clunk.v cluster.v coalesce.v coast.v cocirculate.v coevolve.v coexist.v cohabit.v cohere.v coincide.v collaborate.v collateralize.v collide.v collude.v comigrate.v commentate.v commiserate.v commune.v comodulate.v compete.v comply.v compromise.v confabulate.v confab.v conflict.v conform.v congeal.v congregate.v connive.v consort.v conspire.v convalesce.v converge.v converse.v co-operate.v cooperate.v coossify.v coo.v cope.v copulate.v correspond.v coruscate.v counterphase.v covary.v cower.v crackle.v crash-dive.v creak.v crepitate.v crest.v cringe.v croak.v cross-dress.v crossdress.v crossmatch.v crow.v crusade.v culminate.v curtsey.v curtsy.v cycle.v cyclize.v cytoadhere.v cytodifferentiate.v dabble.v dally.v dawdle.v dawn.v day-dream.v daydream.v decamp.v decay.v decease.v declutch.v decompensate.v decrement.v decussate.v deetiolate.v defasciculate.v default.v defecate.v defect.v deflagrate.v degenerate.v dehisce.v delaminate.v deliberate.v delve.v demur.v depart.v depend.v deplane.v deplasmolyze.v depreciate.v deputize.v desist.v despair.v deswell.v deteriorate.v detract.v detrain.v deviate.v devolve.v diet.v differ.v digitate.v digress.v dilly-dally.v disagree.v disappear.v discourse.v discriminate.v disembark.v disintegrate.v disrobe.v dissemble.v dissent.v dissertate.v dither.v divagate.v diverge.v dodder.v domineer.v doodle.v dote.v double-park.v dovetail.v downshift.v downslant.v downslope.v dow.v drawl.v drizzle.v drool.v duel.v dwell.v dwindle.v eavesdrop.v ebb.v economize.v eddy.v editorialize.v effervesce.v effloresce.v elapse.v electioneer.v elope.v emanate.v embark.v emerge.v emigrate.v emote.v empathize.v encamp.v encroach.v enquire.v ensue.v equivocate.v err.v eruct.v erupt.v evaporate.v eventuate.v excel.v exflagellate.v exist.v exit.v exosmose.v expatiate.v experiment.v expire.v explant.v expostulate.v exult.v faint.v falter.v fare.v fart.v fast.v fawn.v feint.v fester.v festinate.v fibrose.v fib.v fidget.v filibuster.v fizz.v flail.v flake.v flame.v flicker.v flinch.v flirt.v flit.v flop.v flounder.v flourish.v flower.v fluctuate.v fluoresce.v flutter.v fly-fish.v foot-slog.v forage.v foregather.v forgather.v fornicate.v fossilize.v foxhunt.v fragment.v fraternize.v freelance.v free-wheel.v freewheel.v fret.v frivol.v frolic.v froth.v frown.v fulminate.v fume.v function.v fundhold.v fungate.v fuss.v gallivant.v galumph.v gambol.v gape.v garden.v gastrulate.v gawk.v gawp.v gaze.v gelate.v gel.v genuflect.v gesticulate.v gesture.v gibber.v gibe.v giggle.v glare.v gleam.v glide.v glimmer.v glint.v glisten.v glister.v glitch.v glitter.v gloat.v globe-trot.v globetrot.v glory.v glower.v glow.v goggle.v golf.v gormandize.v gossip.v graduate.v grapple.v gravitate.v gray.v graze.v grey.v grimace.v grin.v groove.v grouch.v grouse.v grovel.v guffaw.v gurgle.v gust.v gybe.v gyrate.v haggle.v hale.v hallucinate.v hanker.v hark.v harp.v haw.v hearken.v heel.v herniate.v heterodimerize.v heteromultimerize.v hew.v hibernate.v hiccough.v hiccup.v hinge.v hiss.v hitchhike.v hobnob.v holler.v honeymoon.v hover.v huddle.v huff.v hunger.v hurtle.v hydroplane.v hyperaggregate.v hyperdefecate.v hyperfilter.v hyperluteinize.v hypermutate.v hypertrophy.v hyporesonate.v hyporespond.v ice-skate.v immigrate.v immunoreact.v impend.v impinge.v inch.v infarct.v innovate.v interact.v intercede.v intercommunicate.v interdigitate.v interfere.v intermarry.v intermingle.v intervene.v introspect.v intrude.v intumesce.v inveigh.v involute.v itch.v jabber.v jack-knife.v jaunt.v jaw.v jay-walk.v jaywalk.v jell.v jest.v jibe.v jitter.v jive.v jockey.v joke.v journey.v joust.v kemp.v kowtow.v lacrimate.v lactate.v lag.v languish.v lapse.v lase.v laugh.v leaf.v leer.v legislate.v liaise.v lin.v lip-read.v lisp.v live.v loaf.v locomote.v loiter.v loll.v long.v lope.v lounge.v lour.v lown.v lumber.v lurk.v lust.v luxuriate.v major.v malfunction.v malignize.v malinger.v maraud.v marvel.v masquerade.v materialize.v matriculate.v maturate.v mature.v maunder.v meander.v meddle.v meditate.v menstruate.v meow.v metamorphose.v metastasize.v mew.v miaou.v miaow.v micturate.v migrate.v militate.v mingle.v minister.v misbehave.v misfire.v molt.v monkey.v mooch.v moo.v mope.v moralize.v mosey.v motion.v motor.v moulder.v muck-rake.v mushroom.v mutiny.v name-drop.v nap.v natter.v neck.v necrose.v neigh.v nest.v network.v niggle.v nosedive.v nosh.v object.v occur.v officiate.v orate.v oscillate.v oscitate.v osmoregulate.v osmose.v osseointegrate.v outgo.v overact.v overbid.v overcompensate.v over-eat.v overeat.v overlie.v overreact.v oversleep.v overwinter.v ovulate.v pale.v pall.v palpebrate.v palpitate.v pander.v panhandle.v panic.v pant.v parachute.v parley.v partake.v participate.v patter.v pause.v peak.v pearl.v peep.v pellate.v perambulate.v percolate.v perish.v persevere.v persist.v perspire.v pertain.v philander.v philosophize.v picnic.v piddle.v pimp.v ping.v pirouette.v pivot.v plane.v play-act.v plod.v plummet.v politick.v polka.v pollock.v pom.v pontificate.v pore.v posture.v potter.v pounce.v pout.v powwow.v prance.v prate.v prattle.v preachify.v predominate.v pre-exist.v preponderate.v preregister.v preside.v prevail.v prevaricate.v prey.v primp.v procrastinate.v procreate.v profiteer.v profit.v progress.v prolapse.v proliferate.v propagandize.v proselytize.v prosper.v protrude.v pub-crawl.v pule.v pullulate.v pulsate.v pulse.v pun.v pupariate.v pupate.v purr.v pussyfoot.v putrefy.v putter.v quack.v quake.v quarrel.v quarry.v quaver.v quest.v queue.v quibble.v quip.v quiver.v racket.v raft.v rage.v rail.v rain.v ramble.v rampage.v rankle.v rant.v rasp.v rat.v rave.v react.v reappear.v rebel.v rebound.v recede.v recline.v recoil.v reconnoitre.v recriminate.v recrudesce.v recuperate.v recur.v redecussate.v redound.v re-echo.v re-emerge.v reemerge.v refect.v refixate.v reflow.v refrain.v regress.v reign.v re-infarct.v reinfarct.v re-intervene.v reintervene.v rejoice.v relapse.v relent.v rely.v reminisce.v remonstrate.v renarrow.v rendezvous.v renege.v re-occur.v reoccur.v repetatur.v repine.v reside.v resonate.v resort.v resound.v respire.v restenose.v rest.v result.v resurface.v retaliate.v retch.v retreat.v retrench.v retrograde.v retrogress.v revel.v reverberate.v revert.v revolt.v revolve.v rhapsodize.v riot.v ripen.v riposte.v ripple.v rocket.v romance.v romp.v room.v roost.v rootle.v rough-house.v rove.v rubber-neck.v rubberneck.v rumble.v ruminate.v rummage.v rust.v sag.v salivate.v saunter.v scamper.v scar_cicatrize scavenge.v scheme.v scintillate.v scowl.v scram.v screech.v scrimp.v scrimshank.v scroll.v scrounge.v scuba.v scuffle.v secede.v seesaw.v seethe.v sermonize.v seroconvert.v serorevert.v shadow-box.v shilly-shally.v shillyshally.v shimmer.v shit.v shiver.v shrimp.v shudder.v side-slip.v side.v sidle.v sight-see.v simmer.v simper.v sin.v sizzle.v skate.v skedaddle.v skimp.v skirmish.v skulk.v skylark.v sky-rocket.v skyrocket.v slacken.v slalom.v slaver.v sleet.v slither.v slobber.v slog.v slouch.v slumber.v slum.v slush.v smart.v smile.v smirk.v smolder.v smoulder.v snack.v snake.v sneer.v sneeze.v snicker.v sniffle.v snigger.v snipe.v snitch.v snivel.v snoop.v snooze.v snore.v snowball.v snowshoe.v snow.v snuffle.v sob.v softland.v sojourn.v soliloquize.v somersault.v sough.v sour.v sparkle.v spar.v specialise.v specialize.v speciate.v speechify.v spermiate.v sphacelate.v splurge.v splutter.v sprawl.v sprint.v sputter.v squabble.v squall.v squawk.v squeak.v squeal.v squint.v squirm.v stagnate.v stem.v stone-wall.v straggle.v stray.v stride.v stridulate.v strive.v struggle.v stutter.v subscribe.v subside.v subsist.v subspecialize.v sub.v succumb.v sulk.v summer.v sunbathe.v supercoil.v supervene.v suppurate.v sup.v surface.v surge.v swagger.v swarm.v swelter.v swerve.v swirl.v swoon.v sympathize.v tamper.v tap-dance.v tapdance.v tarry.v tattle.v taxi.v teem.v teeter.v teethe.v temporize.v tergiversate.v testate.v thrive.v throb.v thud.v tingle.v tinker.v tipple.v tiptoe.v titter.v tittle-tattle.v toady.v toboggan.v toil.v toll.v ton.v tootle.v totter.v touch-type.v tower.v toy.v traipse.v transmigrate.v transpire.v travel.v trek.v tremble.v trespass.v trifle.v trifurcate.v triumph.v trundle.v tunnel.v tussle.v tweet.v twinkle.v twitch.v twitter.v ululate.v underact.v undulate.v uplink.v urinate.v urticate.v vacation.v vacillate.v vacuolate.v vamoose.v vamp.v vanish.v vault.v vegetate.v venodilate.v verbigerate.v verge.v vie.v volvulate.v vouch.v voyage.v waddle.v waffle.v wallow.v waltz.v wander.v wane.v wank.v warble.v water-ski.v waterski.v waver.v weep.v welsh.v welter.v wheeze.v whelp.v whimper.v whinny.v whirr.v whir.v wilt.v wince.v wink.v wiretap.v wisecrack.v wither.v wobble.v womanize.v wool-gather.v woolgather.v wrangle.v wriggle.v writhe.v yacht.v yak.v yammer.v yang.v yap.v yawn.v yaw.v yearn.v yelp.v yen.v yip.v yowl.v zag.v zig.v zig-zag.v zigzag.v link-grammar/data/en/words/words.v.4.30000644000000000000000000010132012536650433014632 0ustar abandoned.v-d abased.v-d abbreviated.v-d abducted.v-d abetted.v-d abhorred.v-d abolished.v-d abridged.v-d abrogated.v-d absorbed.v-d abstracted.v-d abused.v-d abutted.v-d accented.v-d accentuated.v-d accessed.v-d acclaimed.v-d accommodated.v-d accompanied.v-d accomplished.v-d accosted.v-d accredited.v-d accreted.v-d accustomed.v-d acerbated.v-d achieved.v-d acquainted.v-d acquired.v-d activated.v-d addicted.v-d addled.v-d addressed.v-d adjudged.v-d administered.v-d admired.v-d admonished.v-d adored.v-d adorned.v-d adulterated.v-d adumbrated.v-d aerated.v-d affected.v-d affixed.v-d afflicted.v-d aggrandized.v-d aggravated.v-d alienated.v-d allayed.v-d alleviated.v-d allocated.v-d allotted.v-d amassed.v-d ambushed.v-d ameliorated.v-d amended.v-d amortized.v-d amplified.v-d amputated.v-d anaesthetized.v-d anathematized.v-d anesthetized.v-d angered.v-d anglicized.v-d animated.v-d annealed.v-d annexed.v-d annihilated.v-d annointed.v-d annotated.v-d annulled.v-d anointed.v-d antagonized.v-d antedated.v-d anthologized.v-d anthropomorphized.v-d aped.v-d appalled.v-d appeased.v-d appended.v-d apportioned.v-d appraised.v-d apprehended.v-d apprenticed.v-d apprised.v-d appropriated.v-d armed.v-d aroused.v-d arraigned.v-d arrayed.v-d arrested.v-d arrogated.v-d ascribed.v-d asphalted.v-d asphyxiated.v-d aspirated.v-d assailed.v-d assassinated.v-d assaulted.v-d assayed.v-d assuaged.v-d atomized.v-d attacked.v-d attained.v-d attainted.v-d attenuated.v-d attired.v-d attracted.v-d attributed.v-d attuned.v-d audited.v-d augmented.v-d authenticated.v-d autographed.v-d automated.v-d avenged.v-d averred.v-d averted.v-d awaited.v-d awed.v-d axed.v-d backdated.v-d badgered.v-d baffled.v-d baited.v-d baked.v-d balanced.v-d baled.v-d bamboozled.v-d bandaged.v-d banished.v-d bankrupted.v-d banned.v-d baptized.v-d barbarized.v-d barbecued.v-d bared.v-d barrelled.v-d barricaded.v-d based.v-d bashed.v-d basted.v-d battered.v-d battled.v-d beaked.v-d beaned.v-d beatified.v-d beautified.v-d bedevilled.v-d befitted.v-d befouled.v-d befriended.v-d beggared.v-d beguiled.v-d beheaded.v-d beheld.v-d bejeweled.v-d belaboured.v-d belied.v-d belittled.v-d belted.v-d bemoaned.v-d benched.v-d bequeathed.v-d berated.v-d bereaved.v-d beseeched.v-d besieged.v-d besmirched.v-d bested.v-d bestirred.v-d bestowed.v-d bestrewed.v-d bestrode.v-d betokened.v-d betrayed.v-d bevelled.v-d bewailed.v-d bewildered.v-d bewitched.v-d biased.v-d bided.v-d biffed.v-d bilked.v-d billed.v-d billeted.v-d birched.v-d bisected.v-d blackballed.v-d blacklisted.v-d blackmailed.v-d bladed.v-d blamed.v-d blanketed.v-d blasted.v-d blazoned.v-d blemished.v-d blessed.v-d blighted.v-d blinded.v-d blindfolded.v-d blitzed.v-d blockaded.v-d blow-dried.v-d bludgeoned.v-d blue-pencilled.v-d blunted.v-d bolded.v-d bolstered.v-d bombarded.v-d bombed.v-d bookended.v-d boosted.v-d bossed.v-d botched.v-d boycotted.v-d braced.v-d bracketed.v-d braided.v-d brainwashed.v-d braised.v-d branded.v-d brandished.v-d braved.v-d breached.v-d breaded.v-d bribed.v-d bricked.v-d bridged.v-d briefed.v-d brined.v-d broached.v-d brocaded.v-d brokered.v-d bronzed.v-d brooked.v-d brutalized.v-d budgeted.v-d buffed.v-d bugged.v-d bulldozed.v-d bunged.v-d bungled.v-d buoyed.v-d burdened.v-d buried.v-d burlesqued.v-d bused.v-d busied.v-d butchered.v-d buttonholed.v-d buttressed.v-d by-passed.v-d bypassed.v-d cajoled.v-d calibrated.v-d camouflaged.v-d caned.v-d cannibalized.v-d canonised.v-d canonized.v-d caped.v-d capped.v-d captivated.v-d captured.v-d carbonized.v-d carbureted.v-d carded.v-d caressed.v-d caricatured.v-d carjacked.v-d carpeted.v-d cased.v-d castigated.v-d castrated.v-d catalogued.v-d catapulted.v-d categorized.v-d ceded.v-d cemented.v-d censored.v-d censured.v-d centralised.v-d centralized.v-d chagrined.v-d chained.v-d chaired.v-d championed.v-d channelled.v-d chaperoned.v-d charmed.v-d charted.v-d chartered.v-d chastened.v-d chastised.v-d cheapened.v-d checkmated.v-d cherished.v-d chided.v-d chiselled.v-d chlorinated.v-d chorded.v-d christened.v-d chromed.v-d chronicled.v-d circularized.v-d circumcised.v-d circumnavigated.v-d circumscribed.v-d circumvented.v-d cited.v-d civilized.v-d claded.v-d clamped.v-d classified.v-d clawed.v-d cleansed.v-d clenched.v-d clipped.v-d cloaked.v-d clobbered.v-d cloistered.v-d cloned.v-d closeted.v-d clothed.v-d clubbed.v-d coated.v-d co-authored.v-d coauthored.v-d cobbled.v-d cocked.v-d coddled.v-d coded.v-d codenamed.v-d codified.v-d coerced.v-d cofounded.v-d coined.v-d cold-shouldered.v-d collared.v-d collated.v-d collected.v-d collectivized.v-d collocated.v-d colocated.v-d colonized.v-d combated.v-d combatted.v-d comforted.v-d commandeered.v-d commemorated.v-d commended.v-d commercialized.v-d compacted.v-d compartmentalized.v-d compiled.v-d complemented.v-d completed.v-d complicated.v-d complimented.v-d composted.v-d compounded.v-d comprehended.v-d compressed.v-d comprised.v-d computerized.v-d concealed.v-d concerned.v-d conciliated.v-d concocted.v-d conditioned.v-d condoned.v-d configured.v-d confined.v-d confiscated.v-d conflated.v-d confounded.v-d confronted.v-d confused.v-d confuted.v-d congaed.v-d congratulated.v-d conjured.v-d conked.v-d conned.v-d connoted.v-d conquered.v-d conscripted.v-d consecrated.v-d conserved.v-d consigned.v-d consoled.v-d constituted.v-d constrained.v-d constricted.v-d constructed.v-d construed.v-d consumed.v-d consummated.v-d contacted.v-d contained.v-d contaminated.v-d contented.v-d contorted.v-d contoured.v-d contradicted.v-d contravened.v-d contrived.v-d controlled.v-d convected.v-d conventionalized.v-d conveyed.v-d convoked.v-d convoyed.v-d convulsed.v-d cooped.v-d co-opted.v-d coordinated.v-d copied.v-d co-produced.v-d copyrighted.v-d corded.v-d cordoned.v-d cored.v-d corked.v-d cornered.v-d corralled.v-d corrected.v-d corroborated.v-d countenanced.v-d counteracted.v-d counterbalanced.v-d counterfeited.v-d countermanded.v-d countersigned.v-d countersued.v-d coupled.v-d courted.v-d court-martialed.v-d coveted.v-d coxed.v-d cradled.v-d cramped.v-d craned.v-d crayoned.v-d creamed.v-d created.v-d credited.v-d cremated.v-d crimped.v-d crippled.v-d criticized.v-d crossbred.v-d cross-examined.v-d cross-fertilized.v-d cross-indexed.v-d cross-questioned.v-d crowned.v-d crucified.v-d crushed.v-d cubed.v-d cudgeled.v-d cuffed.v-d culled.v-d cultivated.v-d cupped.v-d curbed.v-d cured.v-d curried.v-d curtailed.v-d cushioned.v-d damaged.v-d damned.v-d dampened.v-d dandled.v-d daubed.v-d daunted.v-d dazed.v-d dazzled.v-d deadened.v-d deafened.v-d debarred.v-d debased.v-d debauched.v-d debilitated.v-d debited.v-d debriefed.v-d debugged.v-d debunked.v-d decanted.v-d decapitated.v-d decarbonized.v-d deceived.v-d decentralized.v-d decertified.v-d decimalized.v-d decimated.v-d deciphered.v-d decked.v-d declaimed.v-d declassified.v-d decoded.v-d decolonized.v-d decompressed.v-d deconsecrated.v-d decontaminated.v-d decorated.v-d decried.v-d decrypted.v-d dedicated.v-d deducted.v-d deeded.v-d deepthroated.v-d de-escalated.v-d defaced.v-d defamed.v-d defeated.v-d defended.v-d deferred.v-d defied.v-d defiled.v-d defined.v-d deflated.v-d deflowered.v-d defoliated.v-d deforested.v-d deformed.v-d defragmented.v-d defrauded.v-d defrayed.v-d defrocked.v-d defrosted.v-d defunded.v-d defused.v-d degraded.v-d dehumanized.v-d dehydrated.v-d de-iced.v-d deified.v-d delegated.v-d deleted.v-d delimited.v-d delineated.v-d delisted.v-d deluded.v-d deluged.v-d demagnetized.v-d demarcated.v-d demeaned.v-d demerged.v-d demilitarized.v-d demisted.v-d demobilized.v-d demolished.v-d demonized.v-d demoralized.v-d demoted.v-d demutualised.v-d denationalized.v-d denigrated.v-d denominated.v-d denoted.v-d denounced.v-d dented.v-d denuded.v-d deodorized.v-d depleted.v-d deplored.v-d deployed.v-d depopulated.v-d deported.v-d deposed.v-d deposited.v-d deprecated.v-d deprogrammed.v-d deranged.v-d derided.v-d desalinated.v-d desalinized.v-d desecrated.v-d desegregated.v-d desensitized.v-d deserted.v-d desiccated.v-d despatched.v-d despised.v-d despoiled.v-d destroyed.v-d detached.v-d detained.v-d detected.v-d deterred.v-d detested.v-d dethroned.v-d detuned.v-d devaluated.v-d devalued.v-d devastated.v-d devised.v-d devoted.v-d devoured.v-d dewatered.v-d diagnosed.v-d diced.v-d diddled.v-d diffracted.v-d dignified.v-d diluted.v-d directed.v-d disabled.v-d disaffiliated.v-d disallowed.v-d disappointed.v-d disarranged.v-d disassembled.v-d disassociated.v-d disavowed.v-d disbursed.v-d discarded.v-d disciplined.v-d disclaimed.v-d discomfited.v-d disconcerted.v-d disconnected.v-d discontented.v-d discounted.v-d discouraged.v-d discredited.v-d disdained.v-d disembarrassed.v-d disembowelled.v-d disenchanted.v-d disenfranchised.v-d disestablished.v-d disfavoured.v-d disfigured.v-d disfranchised.v-d disgorged.v-d disgraced.v-d disguised.v-d disheartened.v-d dishonoured.v-d disillusioned.v-d disinfected.v-d disinherited.v-d disinterred.v-d dislocated.v-d dislodged.v-d dismantled.v-d dismembered.v-d dismissed.v-d disobeyed.v-d disorientated.v-d disoriented.v-d disowned.v-d disparaged.v-d dispatched.v-d dispelled.v-d displaced.v-d displayed.v-d displeased.v-d dispossessed.v-d disproved.v-d disqualified.v-d disregarded.v-d disrupted.v-d dissected.v-d dissed.v-d disseminated.v-d dissociated.v-d dissuaded.v-d distanced.v-d distorted.v-d distracted.v-d distributed.v-d distrusted.v-d disturbed.v-d ditched.v-d diverted.v-d divested.v-d divorced.v-d divulged.v-d dizzied.v-d doctored.v-d doffed.v-d domesticated.v-d dominated.v-d donated.v-d donned.v-d doomed.v-d doped.v-d dotted.v-d double-checked.v-d double-crossed.v-d doused.v-d downed.v-d downgraded.v-d downloaded.v-d downplayed.v-d dragooned.v-d dramatized.v-d draped.v-d drenched.v-d drip-dried.v-d drubbed.v-d drugged.v-d dry-cleaned.v-d ducted.v-d dumbfounded.v-d dunked.v-d duped.v-d duplicated.v-d dusted.v-d dwarfed.v-d dyed.v-d dynamited.v-d earmarked.v-d earned.v-d eclipsed.v-d edified.v-d edited.v-d effaced.v-d effected.v-d elbowed.v-d electrified.v-d electrocuted.v-d electrolyzed.v-d elevated.v-d elicited.v-d elided.v-d eliminated.v-d elucidated.v-d eluded.v-d emancipated.v-d emasculated.v-d embalmed.v-d embargoed.v-d embedded.v-d embellished.v-d embezzled.v-d embittered.v-d emblazoned.v-d embodied.v-d emboldened.v-d embossed.v-d embraced.v-d embroiled.v-d emended.v-d emitted.v-d empanelled.v-d empowered.v-d emulated.v-d emulsified.v-d enacted.v-d enamelled.v-d encased.v-d enchanted.v-d encircled.v-d enclosed.v-d encoded.v-d encompassed.v-d encountered.v-d encrypted.v-d encumbered.v-d endangered.v-d endeared.v-d endorsed.v-d endowed.v-d enervated.v-d enfeoffed.v-d enfolded.v-d enforced.v-d enfranchised.v-d engendered.v-d engineered.v-d engraved.v-d engrossed.v-d engulfed.v-d enhanced.v-d enjoined.v-d enlarged.v-d enlightened.v-d enlivened.v-d enmeshed.v-d ennobled.v-d enraged.v-d enriched.v-d ensconced.v-d enshrined.v-d enshrouded.v-d enslaved.v-d ensnared.v-d ensouled.v-d entangled.v-d enthralled.v-d enthroned.v-d enthused.v-d entombed.v-d entrained.v-d entranced.v-d entrapped.v-d entreated.v-d entrusted.v-d entwined.v-d enumerated.v-d enveloped.v-d envied.v-d epitomized.v-d equalized.v-d equalled.v-d equated.v-d equipped.v-d eradicated.v-d eradicates.v-d erased.v-d erected.v-d eschewed.v-d escorted.v-d espied.v-d espoused.v-d esteemed.v-d eulogized.v-d evaded.v-d evicted.v-d evinced.v-d eviscerated.v-d evoked.v-d exacerbated.v-d exalted.v-d exasperated.v-d excavated.v-d exceeded.v-d excepted.v-d exchanged.v-d excised.v-d excluded.v-d excommunicated.v-d excoriated.v-d excreted.v-d exculpated.v-d excused.v-d executed.v-d exemplified.v-d exempted.v-d exerted.v-d exhausted.v-d exhibited.v-d exhilarated.v-d exhumed.v-d exiled.v-d exorcized.v-d expedited.v-d expelled.v-d expended.v-d experienced.v-d expiated.v-d explicated.v-d exploited.v-d exposed.v-d expropriated.v-d expunged.v-d expurgated.v-d extenuated.v-d exterminated.v-d externalized.v-d extinguished.v-d extirpated.v-d extolled.v-d extorted.v-d extracted.v-d extradited.v-d extricated.v-d exuded.v-d eyed.v-d fabricated.v-d facelifted.v-d faceted.v-d facilitated.v-d fagged.v-d faked.v-d falsified.v-d familiarized.v-d fancied.v-d fascinated.v-d fashioned.v-d fated.v-d fathomed.v-d fatigued.v-d faulted.v-d favorited.v-d favoured.v-d fazed.v-d feathered.v-d featured.v-d feigned.v-d felled.v-d fenced.v-d ferreted.v-d fertilized.v-d festooned.v-d feted.v-d fettered.v-d fianchettoed.v-d filleted.v-d finalized.v-d financed.v-d fine-tuned.v-d fingered.v-d firebombed.v-d flagellated.v-d flanked.v-d flattered.v-d flaunted.v-d flavoured.v-d flayed.v-d fleeced.v-d flicked.v-d flogged.v-d floodlit.v-d floored.v-d flouted.v-d fluffed.v-d flummoxed.v-d fluoridated.v-d flurried.v-d flustered.v-d foiled.v-d foisted.v-d fomented.v-d fonded.v-d fondled.v-d fooled.v-d force-fed.v-d forded.v-d forecasted.v-d foreordained.v-d foreshadowed.v-d foreshortened.v-d forestalled.v-d foretold.v-d forfeited.v-d forged.v-d formalized.v-d formulated.v-d fortified.v-d forwarded.v-d fostered.v-d founded.v-d framed.v-d franked.v-d frazzled.v-d freed.v-d frequented.v-d frescoed.v-d fricasseed.v-d fried.v-d frightened.v-d frisked.v-d frittered.v-d frogmarched.v-d frustrated.v-d fulfilled.v-d fumigated.v-d funded.v-d funnelled.v-d furbished.v-d furnished.v-d furrowed.v-d furthered.v-d gaged.v-d gainsaid.v-d galled.v-d galvanized.v-d gaoled.v-d garbed.v-d garbled.v-d garnered.v-d garnished.v-d garrisoned.v-d gashed.v-d gatecrashed.v-d gauged.v-d generated.v-d genericized.v-d gerrymandered.v-d ghettoized.v-d gilded.v-d ginned.v-d girded.v-d glaciated.v-d gladdened.v-d glamorized.v-d gleaned.v-d glimpsed.v-d glorified.v-d glutted.v-d goaded.v-d gored.v-d gorged.v-d grabbed.v-d graced.v-d graded.v-d grafted.v-d gratified.v-d gravelled.v-d greased.v-d greenlighted.v-d greeted.v-d grilled.v-d gripped.v-d gritted.v-d groined.v-d groomed.v-d grossed.v-d grudged.v-d guarded.v-d guided.v-d guillotined.v-d gummed.v-d gunned.v-d gutted.v-d guzzled.v-d gypped.v-d hallowed.v-d halted.v-d halved.v-d hampered.v-d hamstrung.v-d handcrafted.v-d handcuffed.v-d handicapped.v-d handled.v-d harangued.v-d harassed.v-d harbored.v-d harboured.v-d harmed.v-d harnessed.v-d harpooned.v-d harried.v-d harrowed.v-d harvested.v-d hassled.v-d haunted.v-d hawked.v-d hazarded.v-d hazed.v-d headquartered.v-d heaped.v-d hearted.v-d heartened.v-d heeded.v-d helmed.v-d heralded.v-d highjacked.v-d highlighted.v-d hijacked.v-d hindered.v-d hoaxed.v-d hobbled.v-d hocked.v-d hogged.v-d hollowed.v-d homesteaded.v-d homogenized.v-d honed.v-d honored.v-d honoured.v-d hooded.v-d hoodwinked.v-d horrified.v-d horsewhipped.v-d hosed.v-d hospitalized.v-d hosted.v-d hotfooted.v-d hounded.v-d housed.v-d hulled.v-d humbled.v-d humbugged.v-d humiliated.v-d humoured.v-d humped.v-d hunched.v-d hurled.v-d husked.v-d hyphenated.v-d hypnotized.v-d idealized.v-d identified.v-d idolized.v-d ignored.v-d ill-treated.v-d illuminated.v-d illumined.v-d illustrated.v-d imaged.v-d imbibed.v-d imbued.v-d imitated.v-d immersed.v-d immobilized.v-d immolated.v-d immortalized.v-d immunized.v-d impacted.v-d impaired.v-d impaled.v-d impanelled.v-d imparted.v-d impeached.v-d impeded.v-d imperilled.v-d impersonated.v-d implanted.v-d implemented.v-d implicated.v-d imported.v-d imposed.v-d impounded.v-d impoverished.v-d impregnated.v-d impressed.v-d imprinted.v-d imprisoned.v-d impugned.v-d imputed.v-d inactivated.v-d inaugurated.v-d incapacitated.v-d incarcerated.v-d incarnated.v-d incensed.v-d incinerated.v-d included.v-d inconvenienced.v-d incriminated.v-d inculcated.v-d incurred.v-d indemnified.v-d indentured.v-d indexed.v-d indicted.v-d individuated.v-d indoctrinated.v-d inducted.v-d infatuated.v-d infected.v-d infested.v-d infilled.v-d infiltrated.v-d inflamed.v-d inflated.v-d inflected.v-d inflicted.v-d influenced.v-d infuriated.v-d infused.v-d ingested.v-d ingratiated.v-d inhabited.v-d inherited.v-d inhibited.v-d initialled.v-d injected.v-d injured.v-d inked.v-d inoculated.v-d inscribed.v-d inseminated.v-d inserted.v-d inspected.v-d installed.v-d instated.v-d instigated.v-d instilled.v-d instituted.v-d institutionalized.v-d insulated.v-d insulted.v-d insured.v-d integrated.v-d intercepted.v-d interchanged.v-d interdicted.v-d interested.v-d interjected.v-d interleaved.v-d internalized.v-d internationalized.v-d interoperated.v-d interpolated.v-d interred.v-d interrogated.v-d interspersed.v-d intimidated.v-d intoned.v-d intoxicated.v-d introduced.v-d intuited.v-d inundated.v-d invaded.v-d invalidated.v-d invalided.v-d inveigled.v-d invented.v-d inverted.v-d invigorated.v-d invoked.v-d irked.v-d irradiated.v-d irrigated.v-d isolated.v-d italicized.v-d itemized.v-d iterated.v-d jailed.v-d jarred.v-d jeopardized.v-d jettisoned.v-d jilted.v-d jinxed.v-d jollied.v-d jugged.v-d juxtaposed.v-d kenned.v-d kidnapped.v-d kissed.v-d kneaded.v-d knifed.v-d knighted.v-d laced.v-d lacerated.v-d lacked.v-d lacquered.v-d lambasted.v-d laminated.v-d lampooned.v-d lanced.v-d landscaped.v-d lassoed.v-d lauded.v-d laundered.v-d lavished.v-d leached.v-d leapfrogged.v-d leased.v-d leavened.v-d legalized.v-d legitimatized.v-d lenited.v-d leveraged.v-d levered.v-d levied.v-d libelled.v-d liberalized.v-d liberated.v-d licenced.v-d likened.v-d limited.v-d lionized.v-d liquidized.v-d listed.v-d loaned.v-d loathed.v-d lobbed.v-d lofted.v-d looted.v-d lubricated.v-d lugged.v-d lulled.v-d lumped.v-d lured.v-d lynched.v-d maddened.v-d magnetized.v-d magnified.v-d maimed.v-d maligned.v-d maltreated.v-d manacled.v-d mandated.v-d mangled.v-d manhandled.v-d manicured.v-d manifested.v-d manipulated.v-d manned.v-d manufactured.v-d marginalised.v-d marginalized.v-d marketed.v-d marooned.v-d marred.v-d marshalled.v-d martyred.v-d mashed.v-d masked.v-d massaged.v-d mass-produced.v-d mastered.v-d masterminded.v-d masticated.v-d mauled.v-d maxed.v-d maximized.v-d measured.v-d mechanized.v-d medicated.v-d memorialized.v-d memorized.v-d menaced.v-d merited.v-d mesmerized.v-d microfilmed.v-d miffed.v-d milked.v-d mimeographed.v-d mimicked.v-d minced.v-d miniaturized.v-d minimized.v-d minted.v-d mired.v-d mirrored.v-d misapplied.v-d misapprehended.v-d misappropriated.v-d misconceived.v-d misconstrued.v-d misdated.v-d misdirected.v-d misgoverned.v-d misguided.v-d mishandled.v-d misheard.v-d misinformed.v-d misinterpreted.v-d mislaid.v-d misled.v-d mismanaged.v-d misnamed.v-d misplaced.v-d mispronounced.v-d misquoted.v-d misrepresented.v-d misspelled.v-d misspent.v-d misstated.v-d mistranslated.v-d mistreated.v-d mistrusted.v-d misused.v-d mitigated.v-d mobbed.v-d mocked.v-d modeled.v-d modified.v-d modulated.v-d molded.v-d molested.v-d mollified.v-d mollycoddled.v-d monitored.v-d monopolized.v-d montaged.v-d moored.v-d mooted.v-d morphed.v-d mortared.v-d mortgaged.v-d mortified.v-d mothballed.v-d mothproofed.v-d motorized.v-d muddied.v-d muffed.v-d muffled.v-d mugged.v-d mulched.v-d multiplexed.v-d murdered.v-d mustered.v-d muted.v-d mutilated.v-d muzzled.v-d myspaced.v-d mystified.v-d nabbed.v-d nagged.v-d namespaced.v-d narrated.v-d nationalized.v-d naturalized.v-d needled.v-d negated.v-d netted.v-d nettled.v-d neutered.v-d neutralized.v-d nicked.v-d nicknamed.v-d nixed.v-d noogied.v-d normalized.v-d normed.v-d notarized.v-d notated.v-d nourished.v-d novelised.v-d novelized.v-d nudged.v-d nullified.v-d numbed.v-d numbered.v-d nursed.v-d nurtured.v-d obfuscated.v-d obligated.v-d obliterated.v-d obscured.v-d obstructed.v-d obtained.v-d obviated.v-d occasioned.v-d occupied.v-d offended.v-d offloaded.v-d oiled.v-d okayed.v-d omened.v-d omitted.v-d oppressed.v-d orchestrated.v-d ordained.v-d organized.v-d orientated.v-d oriented.v-d ornamented.v-d ostracized.v-d ousted.v-d outbalanced.v-d outclassed.v-d outdistanced.v-d outfitted.v-d outflanked.v-d outfought.v-d outfoxed.v-d outlasted.v-d outlawed.v-d outlined.v-d outlived.v-d outmanoeuvred.v-d outnumbered.v-d outplayed.v-d outraged.v-d outranked.v-d outran.v-d outrighted.v-d outscored.v-d outshone.v-d outsmarted.v-d outsourced.v-d outstayed.v-d outvoted.v-d outweighed.v-d outwitted.v-d overawed.v-d overbore.v-d overburdened.v-d overcooked.v-d overcrowded.v-d overdubed.v-d overemphasized.v-d overestimated.v-d overexerted.v-d overexposed.v-d overgrazed.v-d overhauled.v-d overheard.v-d overleaped.v-d overloaded.v-d overlooked.v-d overpaid.v-d overplayed.v-d overpopulated.v-d overpowered.v-d overpraised.v-d overprinted.v-d overrated.v-d overruled.v-d overshadowed.v-d overshot.v-d oversimplified.v-d overstated.v-d overstayed.v-d overstepped.v-d overstocked.v-d overstrained.v-d oversubscribed.v-d overtaxed.v-d overvalued.v-d overwhelmed.v-d overwroted.v-d owned.v-d oxygenated.v-d pacified.v-d packaged.v-d padded.v-d padlocked.v-d paged.v-d pained.v-d palatalized.v-d pampered.v-d papered.v-d parallelized.v-d parallelled.v-d paralysed.v-d paralyzed.v-d parametrized.v-d paraphrased.v-d parched.v-d pardoned.v-d pared.v-d parodied.v-d paroled.v-d parried.v-d partitioned.v-d partnered.v-d pasted.v-d pasteurized.v-d patented.v-d patrolled.v-d patronized.v-d patted.v-d patterned.v-d pauperized.v-d pawed.v-d pawned.v-d pedestrianized.v-d pegged.v-d pelted.v-d penalized.v-d pencilled.v-d peppered.v-d perfected.v-d perforated.v-d perfumed.v-d perfused.v-d perjured.v-d permeated.v-d permed.v-d permuted.v-d perpetrated.v-d perpetuated.v-d perplexed.v-d persecuted.v-d personalized.v-d personified.v-d perturbed.v-d perused.v-d pervaded.v-d perverted.v-d pestered.v-d petted.v-d photocopied.v-d photographed.v-d photosensitized.v-d photostatted.v-d phrased.v-d pickled.v-d pictured.v-d pierced.v-d pigeonholed.v-d pigmented.v-d pilfered.v-d piloted.v-d pinched.v-d pinpointed.v-d piped.v-d pipped.v-d piqued.v-d pirated.v-d pitchforked.v-d pitied.v-d pitted.v-d placated.v-d placed.v-d plagiarized.v-d plagued.v-d planted.v-d plastered.v-d pleased.v-d plied.v-d plumbed.v-d pluralized.v-d pocketed.v-d podcasted.v-d poisoned.v-d polarized.v-d policed.v-d polished.v-d politicized.v-d pollinated.v-d polluted.v-d pondered.v-d pooh-poohed.v-d pooled.v-d popularized.v-d populated.v-d portaged.v-d ported.v-d portended.v-d positioned.v-d possessed.v-d postdated.v-d posted.v-d postmarked.v-d postponed.v-d powdered.v-d praised.v-d prearranged.v-d preceded.v-d precipitated.v-d precluded.v-d preconceived.v-d predestined.v-d predetermined.v-d predicated.v-d predisposed.v-d pre-empted.v-d preempted.v-d preened.v-d prefabricated.v-d prefaced.v-d prefigured.v-d preformed.v-d preheated.v-d prejudged.v-d prejudiced.v-d premeditated.v-d premised.v-d preoccupied.v-d preordained.v-d prepaid.v-d prerecorded.v-d prerendered.v-d presaged.v-d prescribed.v-d presented.v-d preserved.v-d presorted.v-d pressurized.v-d prestressed.v-d prettified.v-d prevented.v-d priced.v-d prided.v-d primed.v-d printed.v-d privileged.v-d prized.v-d probed.v-d processed.v-d proctored.v-d procured.v-d prodded.v-d produced.v-d proffered.v-d profiled.v-d prognosticated.v-d prohibited.v-d prolonged.v-d promoted.v-d promulgated.v-d pronounced.v-d pronounces.v-d proofed.v-d propelled.v-d proportioned.v-d propositioned.v-d propounded.v-d proscribed.v-d prosecuted.v-d prostituted.v-d prostrated.v-d protected.v-d pruned.v-d psychoanalysed.v-d psychoanalyzed.v-d publicized.v-d published.v-d pulverized.v-d pummelled.v-d punctuated.v-d punished.v-d purchased.v-d pureed.v-d purified.v-d purloined.v-d pursed.v-d pursued.v-d purveyed.v-d quaffed.v-d quantified.v-d quarantined.v-d quarterbacked.v-d quartered.v-d quashed.v-d quelled.v-d quenched.v-d queried.v-d quilted.v-d quoted.v-d radicalized.v-d raffled.v-d raided.v-d railroaded.v-d rammed.v-d ramped.v-d ransacked.v-d ransomed.v-d raped.v-d ratified.v-d rationalized.v-d rationed.v-d ravaged.v-d ravished.v-d razed.v-d reacquainted.v-d re-addressed.v-d readmitted.v-d reaped.v-d reappointed.v-d rearranged.v-d reassessed.v-d reauthorized.v-d rebadged.v-d rebooted.v-d rebranded.v-d rebroadcasted.v-d rebuffed.v-d rebuked.v-d rebutted.v-d recaptured.v-d recessed.v-d rechristened.v-d recited.v-d reclaimed.v-d recolored.v-d recommitted.v-d recompensed.v-d reconciled.v-d reconditioned.v-d reconquered.v-d reconsecrated.v-d reconsidered.v-d reconstructed.v-d reconvicted.v-d recouped.v-d recreated.v-d rectified.v-d recused.v-d recuted.v-d recycled.v-d redecorated.v-d redeemed.v-d redefined.v-d redeployed.v-d redesignated.v-d redesigned.v-d redeveloped.v-d rediscovered.v-d redistributed.v-d redrafted.v-d redrawed.v-d redressed.v-d redrew.v-d redshirted.v-d reduced.v-d reduplicated.v-d re-educated.v-d reemployed.v-d reenacted.v-d reequiped.v-d re-established.v-d reestablished.v-d refashioned.v-d refilled.v-d refinanced.v-d refined.v-d reflexed.v-d reformulated.v-d refracted.v-d refreshed.v-d refrigerated.v-d refunded.v-d refurbished.v-d refurnished.v-d refuted.v-d regained.v-d regaled.v-d regimented.v-d regraded.v-d regularized.v-d regulated.v-d regurgitated.v-d rehabilitated.v-d rehashed.v-d rehired.v-d rehoused.v-d reignited.v-d reimagined.v-d reimbursed.v-d reinforced.v-d reinstalled.v-d reinstated.v-d reinsured.v-d reintegrated.v-d reinterpreted.v-d reinvented.v-d reinvigorated.v-d reissued.v-d rejected.v-d rejoined.v-d rejuvenated.v-d relaunched.v-d relayed.v-d released.v-d relegated.v-d relieved.v-d relinquished.v-d relished.v-d relisted.v-d relived.v-d reloaded.v-d remanded.v-d remastered.v-d rematched.v-d remedied.v-d remilitarized.v-d remixed.v-d remodelled.v-d remolded.v-d remoulded.v-d removed.v-d remunerated.v-d renewed.v-d renominated.v-d renounced.v-d renovated.v-d renumbered.v-d reoccupied.v-d reorientated.v-d reoriented.v-d repackaged.v-d repainted.v-d repatriated.v-d repealed.v-d repelled.v-d rephotographed.v-d rephrased.v-d replaced.v-d replanted.v-d replastered.v-d replayed.v-d replenished.v-d replicated.v-d reprehended.v-d represented.v-d repressed.v-d reprieved.v-d reprimanded.v-d reprinted.v-d reproached.v-d reproofed.v-d reproved.v-d repudiated.v-d repulsed.v-d repurchased.vv-d repurposed.v-d reputed.v-d requisitioned.v-d rereleased.v-d rerolled.v-d rerouted.v-d rescheduled.v-d rescinded.v-d rescued.v-d researched.v-d reseated.v-d resembled.v-d resented.v-d reserved.v-d reshaped.v-d reshuffled.v-d resited.v-d resold.v-d resoled.v-d respected.v-d restated.v-d restocked.v-d restored.v-d restrained.v-d restricted.v-d restructured.v-d restyled.v-d resubmited.v-d resurrected.v-d retained.v-d retarded.v-d reted.v-d rethought.v-d retitled.v-d retold.v-d retouched.v-d retraced.v-d retracted.v-d retransmitted.v-d retried.v-d retrieved.v-d retryed.v-d revalued.v-d revamped.v-d revered.v-d reveted.v-d reviewed.v-d reviled.v-d revised.v-d revisited.v-d revitalized.v-d revoked.v-d revolutionized.v-d rewarded.v-d rewatered.v-d rewired.v-d reworded.v-d ribbed.v-d riddled.v-d ridiculed.v-d rifled.v-d righted.v-d rimmed.v-d rivaled.v-d rivalled.v-d riveted.v-d romanized.v-d romanticized.v-d roped.v-d routed.v-d rubberized.v-d rubber-stamped.v-d rued.v-d ruined.v-d rumpled.v-d rusticated.v-d sabotaged.v-d sacked.v-d saddened.v-d saddled.v-d safeguarded.v-d salted.v-d salvaged.v-d sampled.v-d sanctified.v-d sanctioned.v-d sandblasted.v-d sanded.v-d sandpapered.v-d sandwiched.v-d sapped.v-d satiated.v-d satirised.v-d satirized.v-d satisfied.v-d saturated.v-d sauteed.v-d savaged.v-d savoured.v-d scalded.v-d scalped.v-d scandalized.v-d scanted.v-d scarpered.v-d scarred.v-d scented.v-d scheduled.v-d schooled.v-d scooped.v-d scorched.v-d scorned.v-d scotched.v-d scoured.v-d scrapped.v-d scrunched.v-d scrutinized.v-d sculpted.v-d scuttled.v-d seared.v-d seasoned.v-d seated.v-d seconded.v-d secreted.v-d secularized.v-d secured.v-d sedated.v-d seduced.v-d seeded.v-d segregated.v-d selected.v-d sensationalized.v-d sensitized.v-d sentimentalized.v-d sequestered.v-d serenaded.v-d serialized.v-d serviced.v-d shackled.v-d shadowed.v-d shampooed.v-d shapeshifted.v-d shared.v-d sharpened.v-d sheared.v-d sheathed.v-d sheltered.v-d shelved.v-d shepherded.v-d shielded.v-d shingled.v-d shirked.v-d shocked.v-d shooed.v-d short-changed.v-d shortlisted.v-d shouldered.v-d shovelled.v-d showcased.v-d shredded.v-d shrouded.v-d shucked.v-d shunned.v-d shunted.v-d shuttered.v-d sicked.v-d sickened.v-d sidelined.v-d sidestepped.v-d sidetracked.v-d sieved.v-d sighted.v-d signposted.v-d silenced.v-d silhouetted.v-d simplified.v-d simulated.v-d simulcasted.v-d siphoned.v-d sired.v-d skewered.v-d skinned.v-d skippered.v-d skirted.v-d slaked.v-d slandered.v-d slapped.v-d slashed.v-d slated.v-d slaughtered.v-d sleeved.v-d sliced.v-d slighted.v-d slotted.v-d slugged.v-d slung.v-d slurred.v-d smelted.v-d smothered.v-d snagged.v-d snared.v-d snubbed.v-d socked.v-d sodomized.v-d soft-pedalled.v-d soiled.v-d soldered.v-d solicited.v-d solved.v-d soothed.v-d soundproofed.v-d souped.v-d sourced.v-d soused.v-d spaded.v-d spanked.v-d spanned.v-d spared.v-d spayed.v-d speared.v-d spearheaded.v-d specified.v-d spewed.v-d spiked.v-d spin-dried.v-d spirited.v-d spited.v-d sponsored.v-d spoonfed.v-d spotlighted.v-d spotted.v-d sprained.v-d sprayed.v-d sprinkled.v-d spurned.v-d squandered.v-d squelched.v-d squired.v-d stabbed.v-d staffed.v-d staged.v-d stalemated.v-d standardized.v-d stapled.v-d starched.v-d startled.v-d stashed.v-d stationed.v-d staunched.v-d steamrollered.v-d steeled.v-d stereotyped.v-d sterilized.v-d stiffed.v-d stigmatized.v-d stilled.v-d stimulated.v-d stitched.v-d stockaded.v-d stoked.v-d stomached.v-d stoned.v-d stored.v-d storyboarded.v-d stowed.v-d straddled.v-d strafed.v-d straitened.v-d strangled.v-d strapped.v-d streamlined.v-d strewed.v-d stroked.v-d structured.v-d stubbed.v-d stuccoed.v-d studded.v-d stunned.v-d stunted.v-d styled.v-d stylized.v-d stymied.v-d subdued.v-d subedited.v-d subjected.v-d subjugated.v-d sublimated.v-d subordinated.v-d subpoenaed.v-d subserved.v-d subsidized.v-d substantiated.v-d subsumed.v-d subtended.v-d subtracted.v-d subverted.v-d succoured.v-d suckled.v-d suffused.v-d suicided.v-d suited.v-d sullied.v-d summarized.v-d summoned.v-d sundered.v-d sunned.v-d superimposed.v-d superseded.v-d supplanted.v-d supplemented.v-d supplied.v-d supported.v-d suppressed.v-d surmounted.v-d surnamed.v-d surpassed.v-d surrounded.v-d surveyed.v-d suspended.v-d sustained.v-d swamped.v-d swathed.v-d swatted.v-d sweetened.v-d swigged.v-d swindled.v-d swiped.v-d symbolized.v-d syncopated.v-d syndicated.v-d synthesized.v-d syphoned.v-d systematized.v-d tabled.v-d tabulated.v-d tailed.v-d tailored.v-d tainted.v-d tamed.v-d tamped.v-d tantalized.v-d targeted.v-d tarred.v-d tattooed.v-d taunted.v-d taxed.v-d teased.v-d telecasted.v-d teleported.v-d telescoped.v-d televised.v-d tendered.v-d terraced.v-d terrified.v-d terrorized.v-d tessellated.v-d tethered.v-d thanked.v-d thatched.v-d thirsted.v-d threaded.v-d thumbed.v-d thwarted.v-d ticketed.v-d tiered.v-d tiled.v-d tilled.v-d timed.v-d timelined.v-d tinted.v-d titillated.v-d toed.v-d tolerated.v-d torched.v-d tormented.v-d torpedoed.v-d tortured.v-d toted.v-d toured.v-d tousled.v-d touted.v-d towed.v-d towelled.v-d trademarked.v-d trampled.v-d tranquilized.v-d tranquillized.v-d transacted.v-d transcended.v-d transcoded.v-d transcribed.v-d transfixed.v-d transformed.v-d transfused.v-d transgendered.v-d transistorized.v-d transitioned.v-d transmitted.v-d transmuted.v-d transported.v-d transposed.v-d transshipped.v-d trapped.v-d trashed.v-d traversed.v-d treasured.v-d tricked.v-d triggered.v-d trivialized.v-d troubled.v-d trounced.v-d truncated.v-d turbocharged.v-d tutored.v-d tweaked.v-d twiddled.v-d typified.v-d tyrannized.v-d unaffiliated.v-d unbalanced.v-d unbanned.v-d unblocked.v-d unbolted.v-d unbuckled.v-d unburdened.v-d unbuttoned.v-d unclothed.v-d uncluttered.v-d uncorked.v-d uncoupled.v-d uncovered.v-d uncrossed.v-d undercharged.v-d underestimated.v-d underexposed.v-d underfunded.v-d underlay.v-d underlined.v-d undermined.v-d underpaid.v-d underpinned.v-d underquoted.v-d underrated.v-d underrepresented.v-d underscored.v-d underserved.v-d undershot.v-d undersigned.v-d undersold.v-d understated.v-d understocked.v-d understudied.v-d undervalued.v-d unearthed.v-d unencumbered.v-d unfettered.v-d unfrocked.v-d unfurled.v-d unhanded.v-d unhinged.v-d unhooked.v-d uninstalled.v-d unlearned.v-d unleashed.v-d unloosed.v-d unmasked.v-d unnerved.v-d unplugged.v-d unrecorded.v-d unsaddled.v-d unscrambled.v-d unsettled.v-d unsheathed.v-d unveiled.v-d unzipped.v-d upbraided.v-d updated.v-d upgraded.v-d upheld.v-d upholstered.v-d uplifted.v-d uprighted.v-d uprooted.v-d upstaged.v-d ushered.v-d usurped.v-d utilized.v-d uttered.v-d vacated.v-d vaccinated.v-d valeted.v-d validated.v-d valued.v-d vanquished.v-d varnished.v-d veiled.v-d vended.v-d venerated.v-d vented.v-d ventilated.v-d verbalized.v-d vetoed.v-d vetted.v-d vexed.v-d victimized.v-d videotaped.v-d vilified.v-d vindicated.v-d violated.v-d visaed.v-d visualized.v-d vitiated.v-d vivisected.v-d vocalized.v-d voiced.v-d voided.v-d vouchsafed.v-d vulgarized.v-d waged.v-d waived.v-d walled.v-d walloped.v-d wangled.v-d warded.v-d warehoused.v-d warranted.v-d wasted.v-d waterproofed.v-d waylaid.v-d weaned.v-d weaponized.v-d weathered.v-d wedged.v-d weighted.v-d welcomed.v-d wended.v-d westernized.v-d wetted.v-d whacked.v-d wheedled.v-d whetted.v-d whiled.v-d whitewashed.v-d wielded.v-d wikied.v-d winged.v-d winnowed.v-d withheld.v-d withstood.v-d witnessed.v-d wolfed.v-d wooed.v-d worded.v-d wormed.v-d wounded.v-d wreaked.v-d wrecked.v-d wrenched.v-d wrested.v-d wronged.v-d zapped.v-d zoned.v-d link-grammar/data/en/words/words.v.8.10000644000000000000000000000155212536650433014642 0ustar auction.v bandy.v bar.v batten.v block.v blot.v blurt.v board.v book.v bottle.v bundle.v butter.v cage.v carry.v cart.v chalk.v chase.v chuck.v clutter.v cover.v crank.v dam.v dish.v divide.v dole.v dredge.v dump.v egg.v eke.v export.v factor.v fax.v fix.v fling.v fob.v gouge.v ham.v hash.v hoist.v jack.v jazz.v jot.v kick.v ladle.v lay.v lift.v link.v load.v lock.v lop.v mail.v map.v mark.v mete.v mull.v muss.v nail.v palm.v patch.v pave pen.v phase.v phone.v pick.v piece.v pin.v plug.v prick.v prop.v punch.v push.v rack.v rein.v rig.v rile.v rinse.v roughen.v rough.v save.v scale.v scare.v screen.v shake.v shore.v single.v size.v skim.v skittle.v smuggle.v sop.v sort.v spice.v stack.v stake.v stave.v string.v stuff.v suss.v sweep.v tack.v tape.v tear.v throw.v tide.v tie.v top.v total.v touch.v toughen.v track.v wad.v wash.v wave.v wear.v wring.v yank.v zip.v link-grammar/data/en/words/words.v.8.30000644000000000000000000000245712536650433014651 0ustar auctioned.v-d bandied.v-d barred.v-d battened.v-d blocked.v-d blotted.v-d blurted.v-d boarded.v-d booked.v-d bottled.v-d bundled.v-d buttered.v-d caged.v-d carried.v-d carted.v-d chalked.v-d chased.v-d chucked.v-d cluttered.v-d covered.v-d cranked.v-d dammed.v-d dished.v-d divided.v-d doled.v-d dredged.v-d dumped.v-d egged.v-d eked.v-d exported.v-d factored.v-d faxed.v-d fixed.v-d flinged.v-d flung.v-d fobbed.v-d gouged.v-d hammed.v-d hashed.v-d hoisted.v-d jacked.v-d jazzed.v-d jotted.v-d kicked.v-d ladled.v-d laid.v-d lifted.v-d linked.v-d loaded.v-d locked lopped.v-d mailed.v-d mapped.v-d marked.v-d meted.v-d mulled.v-d mussed.v-d nailed.v-d palmed.v-d patched.v-d paved.v-d penned.v-d phased.v-d phoned.v-d picked.v-d pieced.v-d pinned.v-d plugged.v-d pricked.v-d propped.v-d punched.v-d pushed.v-d racked.v-d reined.v-d rigged.v-d riled.v-d rinsed.v-d roughed.v-d roughened.v-d saved.v-d scaled.v-d scared.v-d screened.v-d shook.v-d shored.v-d singled.v-d sized.v-d skimmed.v-d skittled.v-d smuggled.v-d sopped.v-d sorted spiced.v-d stacked.v-d staked.v-d staved.v-d stringed.v-d strung.v-d stuffed.v-d sussed.v-d swept.v-d tacked.v-d taped.v-d throwed.v-d tided.v-d tied.v-d topped.v-d totaled.v-d totalled.v-d touched.v-d toughened.v-d tracked.v-d wadded.v-d washed.v-d waved.v-d wrung.v-d yanked.v-d zipped.v-d link-grammar/data/en/words/words.n.2.s0000644000000000000000000040250112536650433014725 0ustar Afghans.n Africans.n Albanians.n Alberians.n Algerians.n Americans.n Andorrans.n Angentinians.n Angolans.n Antiguans.n Arabs.n Armenians.n Aserbaijanis.n Asians.n Attorneys.n Australians.n Austrians.n Bahamians.n Bangladeshis.n Barbadians.n Belarusians.n Belgians.n Belizians.n Bhutanians.n Bolivians.n Bosnians.n Brazilians.n Britons.n Bruneians.n Buddhists.n Bulgarians.n Burundians.n CDs.n Cambodians.n Cameroonians.n Canadians.n Catholics.n Chileans.n Christians.n Colombians.n Communists.n Corsicans.n Croatians.n Croats.n Cubans.n Cypriotes.n Czechs.n Danes.n Democrats.n Djiboutians.n Dominicans.n Ecuadorians.n Egyptians.n Eritreans.n Estonians.n Ethiopians.n Europeans.n Fijians.n Filipinos.n Finns.n Gabonians.n Gambians.n Georgians.n Germans.n Ghanaians.n Governors.n Greeks.n Grenadans.n Guatemalans.n Guineans.n Haitians.n Hindus.n Hondurans.n Hungarians.n Indians.n Indonesians.n Iranians.n Iraqis.n Israelis.n Italians.n Ivorians.n Jamaicans.n Jews.n Jordanians.n Justices.n Kazakhis.n Kenyans.n Koreans.n Kuwaitis.n Laotians.n Latvians.n Liberians.n Libyans.n Lithuanians.n Luxembourians.n Macedonians.n Madagascans.n Malawians.n Malaysians.n Malians.n Marxists.n Mauritanians.n Mauritians.n Mayors.n Mexicans.n Micronesians.n Ministers.n Moldovans.n Mongolians.n Moroccans.n Mozambicans.n Muslims.n Namibians.n Nauruans.n Nicaraguans.n Nigerians.n Nigeriens.n Norwegians.n Omanis.n Pakistanis.n Panamanians.n Paraguayans.n Peruvians.n Poles.n Presidents.n Protestants.n Qataris.n Represenatives.n Republicans.n Romanians.n Russians.n Rwandans.n Salvadorans.n Samoans.n Scots.n Secretarys.n Senators.n Serbians.n Sicilians.n Slovakians.n Slovenians.n Somalians.n Spaniards.n Swedes.n Syrians.n TVs.n Tanzanians.n Texans.n Trinidadians.n Tunisians.n Turks.n Ugandans.n Ukrainians.n Uruguayans.n VCRs.n Venezuelans.n Yemenis.n Yugoslavians.n Yugoslavs.n abacuses.n abbes.n abbesses.n abbeys.n abbots.n abbreviations.n abdomens.n abductions.n aberrations.n ablauts.n abnormalities.n abodes.n abolitionists.n abominations.n aboriginals.n aborigines.n abortionists.n abortions.n abrasions.n abrasives.n abridgements.n abridgments.n abscesses.n absences.n absentees.n absorbents.n abstentions.n abstractions.n abstracts.n absurdities.n abuses.n abutments.n abysses.n acacias.n academicians.n academics.n academies.n accelerandos.n accelerators.n accents.n accessories.n accidents.n accolades.n accommodations.n accompaniments.n accompanists.n accomplices.n accomplishments.n accordances.n accordions.n accords.n accountants.n accounts.n accretions.n accumulations.n accusatives.n accusers.n aces.n acetates.n aches.n achievements.n acids.n acolytes.n acorns.n acoustics.n acquaintances.n acquaintanceships.n acquiescences.n acquisitions.n acquittals.n acres.n acrobats.n acronyms.n acropolises.n acrostics.n actions.n activists.n activities.n actors.n actresses.n acts.n actualities.n actuaries.n adages.n adagios.n adaptations.n adapters.n adaptors.n adders.n addictions.n addicts.n additions.n additives.n addressees.n addresses.n adherences.n adherents.n adhesions.n adhesives.n adjectives.n adjournments.n adjudicators.n adjuncts.n adjusters.n adjustments.n adjutants.n administrations.n administrators.n admirals.n admiralties.n admissions.n admixtures.n admonitions.n adolescents.n adoptions.n adornments.n ads.n adulterers.n adulteresses.n adulteries.n adulthoods.n adults.n advancers.n advances.n advantages.n advents.n adventurers.n adventures.n adverbs.n adversaries.n adversities.n advertisements.n advertisers.n adverts.n advisers.n advisors.n advocates.n aegises.n aerations.n aerials.n aerodromes.n aeronauts.n aeroplanes.n aerosols.n aesthetes.n affairs.n affectations.n affections.n affidavits.n affiliates.n affiliations.n affinities.n affirmations.n affirmatives.n affixes.n afflictions.n affluents.n affronts.n aftereffects.n afternoons.n afterthoughts.n agencies.n agendas.n agents.n ages.n agglomerations.n aggrandizements.n aggravations.n aggregates.n aggregations.n aggressions.n aggressors.n agidigbos.n agitations.n agitators.n agnostics.n agonies.n agoras.n agreements.n agronomists.n aides.n aids.n ailments.n aims.n airbeds.n airbrakes.n aircrafts.n aircrews.n airfields.n airflows.n airings.n airliners.n airlines.n airplanes.n airports.n airs.n airships.n airstrips.n airwaves.n airways.n aisles.n alarmists.n alarms.n albatrosses.n albinos.n albums.n alchemists.n alcoholics.n alcoves.n alerts.n ales.n algorithms.n aliases.n alibis.n aliens.n alignments.n alkalis.n allegories.n allegrettos.n allegros.n allergens.n allergies.n alleviations.n alleys.n alleyways.n alliances.n allies.n alligators.n allocations.n allotments.n allowances.n alloys.n allures.n allusions.n almanacs.n almonds.n alphabets.n alphas.n alphorns.n alsatians.n altars.n alterations.n altercations.n alternates.n alternations.n alternatives.n altimeters.n altitudes.n altos.n altruists.n alveolars.n amalgamations.n amalgams.n amateurs.n ambassadors.n ambiguities.n ambits.n ambulances.n ambushes.n amendments.n amenities.n amnesties.n amoebas.n amortizations.n amours.n amperes.n amphetamines.n amphibians.n amphitheatres.n amphoras.n amplifications.n amplifiers.n amps.n amputations.n amulets.n amusements.n anachronisms.n anacondas.n anaesthetics.n anaesthetists.n anagrams.n analgesics.n analogies.n analogs.n analogues.n analyses.n analysts.n anapaests.n anarchists.n anatomists.n ancestors.n ancestries.n anchorages.n anchorites.n anchors.n anchovies.n andantes.n anecdotes.n aneroids.n anesthetics.n anesthetists.n angels.n anglers.n angles.n anglicisms.n angoras.n animals.n animosities.n anises.n ankles.n anklets.n annexes.n anniversaries.n annotations.n announcers.n annoyances.n annuals.n annuities.n annunciations.n anodes.n anointments.n anomalies.n anoraks.n antagonisms.n antagonists.n antecedents.n antechambers.n antelopes.n anterooms.n antes.n anthems.n anthologies.n anthropoids.n anthropologists.n antibiotics.n antibodies.n anticlimaxes.n antics.n antidotes.n antipathies.n antiquarians.n antiquaries.n antiques.n antiquities.n antiseptics.n antitoxins.n antlers.n antonyms.n ants.n anuses.n anvils.n anxieties.n aortas.n apaches.n apartments.n aperitifs.n apertures.n apes.n apexes.n aphorisms.n aphrodisiacs.n apiaries.n apocalypses.n apogees.n apologies.n apologists.n apostates.n apostles.n apostrophes.n apothecaries.n apparatuses.n apparitions.n appeals.n appearances.n appellants.n appellations.n appendages.n appendectomies.n appendixes.n appetites.n appetizers.n apples.n appliances.n applicants.n applications.n applicators.n appointees.n appointments.n appraisals.n appraisers.n appreciations.n apprehensions.n apprentices.n apprenticeships.n approaches.n appropriations.n approvals.n approximations.n apricots.n aprons.n apses.n aptitudes.n aqualungs.n aquaplanes.n aquariums.n aqueducts.n arabesques.n arachnids.n arbiters.n arbitragers.n arbitrations.n arbitrators.n arbours.n arcades.n archaeologists.n archaisms.n archangels.n archbishoprics.n archbishops.n archdeaconries.n archdeacons.n archdioceses.n archdukes.n archers.n arches.n archetypes.n archipelagos.n architects.n archivists.n archlutes.n archways.n arcs.n areas.n arenas.n ares.n arias.n aristocracies.n aristocrats.n arithmeticians.n arks.n armadas.n armadillos.n armaments.n armatures.n armbands.n armchairs.n armfuls.n armies.n armistices.n armlets.n armouries.n armpits.n arms.n aromas.n arpeggiones.n arpeggios.n arraignments.n arrangements.n arrays.n arrears.n arresters.n arrests.n arrivals.n arrowheads.n arrows.n arseholes.n arsenals.n arses.n artefacts.n arteries.n artichokes.n articles.n articulations.n artifacts.n artifices.n artisans.n artistes.n artists.n arts.n artworks.n ascendants.n ascendents.n ascensions.n ascents.n ascetics.n ascriptions.n ashes.n ashtrays.n asides.n aspects.n aspens.n aspersions.n aspirants.n aspirates.n aspirations.n aspirins.n asps.n assailants.n assassinations.n assassins.n assaults.n assays.n assemblages.n assemblies.n assents.n asses.n assessments.n assessors.n assets.n assholes.n assignments.n assistants.n associates.n associations.n assortments.n asterisks.n asteroids.n astrodomes.n astrologers.n astronauts.n astronomers.n asylums.n asymptotes.n atheists.n athletes.n atlases.n atmospheres.n atolls.n atomizers.n atoms.n atrocities.n attaches.n attachments.n attackers.n attacks.n attainments.n attendants.n attics.n attitudes.n attorneys.n attractions.n attributes.n attributions.n aubergines.n auctioneers.n auctions.n audiences.n auditions.n auditoriums.n auditors.n audits.n augmentations.n auguries.n aunties.n aunts.n auras.n aureoles.n auricles.n auroras.n autarchies.n authoritarians.n authorities.n authorizations.n authors.n autobahns.n autobiographies.n autocracies.n autocrats.n autographs.n automatics.n automatons.n automats.n automobiles.n autopsies.n autos.n autostradas.n autumns.n auxiliaries.n avalanches.n avatars.n avengers.n avenues.n averages.n aversions.n aviaries.n aviators.n avocados.n avocations.n avowals.n awards.n awls.n awnings.n axes.n axioms.n axles.n azaleas.n azimuths.n babels.n babes.n babies.n baboons.n babysitters.n baccalaureates.n bacchanals.n bachelors.n backaches.n backbenchers.n backbenches.n backbiters.n backboards.n backbones.n backdoors.n backdrops.n backers.n backgrounds.n backings.n backlashes.n backlogs.n backrooms.n backs.n backscratchers.n backseats.n backsides.n backstrokes.n backups.n backwaters.n bacteriologists.n badgers.n badges.n badlands.n baffles.n bagatelles.n bagels.n bagpipes.n bags.n baileys.n bailiffs.n bailouts.n bails.n baits.n bakeries.n bakers.n balalaikas.n balances.n balconies.n bales.n balks.n ballades.n ballads.n ballbearings.n ballcocks.n ballerinas.n ballets.n balloonists.n balloons.n ballots.n ballpens.n ballpoints.n ballrooms.n balls.n balustrades.n bambinos.n banalities.n bananas.n bandages.n bandannas.n bandits.n bandleaders.n bandmasters.n bandoneóns.n bands.n bandstands.n banduras.n bandwagons.n bangers.n bangles.n bangs.n banisters.n banjos.n bankers.n banknotes.n bankrolls.n bankruptcies.n banks.n banners.n bannisters.n banquets.n bans.n banshees.n baptisms.n barbarians.n barbarisms.n barbarities.n barbecues.n barbels.n barbers.n barbicans.n barbiturates.n barbs.n barcaroles.n barcarolles.n bards.n bargains.n bargepoles.n barges.n baritones.n barkers.n barmaids.n barnacles.n barns.n barnstormers.n barnyards.n barometers.n baronages.n baronesses.n baronetcies.n baronets.n baronies.n barons.n barracks.n barracudas.n barrages.n barrels.n barricades.n barriers.n barristers.n barrows.n bars.n bartenders.n barytons.n bas-reliefs.n baseballs.n baseboards.n basements.n bases.n bashes.n basilicas.n basilisks.n basins.n basketballs.n baskets.n basses.n bassinets.n bassoons.n bassos.n bastards.n bastions.n batches.n bathers.n bathrobes.n bathrooms.n baths.n bathtubs.n batons.n bats.n battalions.n battens.n batteries.n batters.n battledores.n battlefields.n battlegrounds.n battles.n battleships.n baubles.n bawus.n bayans.n bayonets.n bayous.n bays.n bazaars.n bazookas.n beachcombers.n beaches.n beachheads.n beacons.n beadles.n beads.n beagles.n beakers.n beaks.n beams.n beanfeasts.n beanos.n beans.n beanstalks.n beards.n bearers.n bearings.n bears.n bearskins.n beasts.n beaters.n beatings.n beatniks.n beats.n beauticians.n beauties.n beavers.n becks.n bedbugs.n bedfellows.n bedpans.n bedposts.n bedrocks.n bedrolls.n bedrooms.n beds.n bedsides.n bedsits.n bedsitters.n bedsores.n bedspreads.n bedsteads.n bedtimes.n beeches.n beefeaters.n beefsteaks.n beehives.n beepers.n beeps.n beers.n bees.n beetles.n beetroots.n beets.n beggars.n beginners.n beginnings.n begonias.n behaviors.n behaviourists.n behinds.n beholders.n beings.n belches.n belfries.n believers.n bellboys.n belles.n bellhops.n bellies.n belligerents.n bells.n bellwethers.n bellyaches.n bellyflops.n bellyfuls.n bellylaughs.n belts.n benches.n benchmarks.n bends.n benedictions.n benefactions.n benefactors.n benefactresses.n beneficiaries.n benefits.n bequests.n bereavements.n berets.n berries.n berths.n beryls.n bestiaries.n bestowals.n betas.n betrayals.n betrayers.n betrothals.n betrotheds.n bets.n bettors.n bevels.n beverages.n bevies.n biases.n bibliographers.n bibliographies.n bibliophiles.n bibs.n bicentenaries.n bicentennials.n biceps.p bicycles.n bidders.n bidets.n bids.n biennials.n biffs.n bifurcations.n bigamists.n bigots.n bigwigs.n bikes.n bikinis.n bilabials.n bilinguals.n billboards.n billets.n billfolds.n billies billings.n billionaires.n billionths.n billows.n binaries.n binderies.n binders.n binds.n bings.n bins.n biochemicals.n biographers.n biographies.n biologists.n bioscopes.n bipeds.n biplanes.n birches.n birdcages.n birds.n birdwatchers.n biros.n birthdays.n birthmarks.n birthplaces.n birthrates.n birthrights.n births.n biscuits.n bisexuals.n bishoprics.n bishops.n bison.p bistros.n bites.n bits.n bitches.n bivouacs.n blabbermouths.n blackamoors.n blackberries.n blackbirds.n blackboards.n blackcurrants.n blackguards.n blackheads.n blacklists.n blackmailers.n blackouts.n blacks.n blacksmiths.n bladders.n blades.n blancmanges.n blandishments.n blankets.n blanks.n blasphemers.n blasphemies.n blasts.n blazers.n blazes.n bleats.n bleeps.n blemishes.n blends.n blessings.n blighters.n blights.n blimps.n blindfolds.n blinks.n blips.n blisters.n blitzes.n blitzkriegs.n blizzards.n blobs.n blockades.n blockages.n blockbusters.n blockheads.n blockhouses.n blocks.n blocs.n blokes.n blondes.n blonds.n bloodhounds.n bloodsheds.n bloodstains.n bloodsuckers.n bloomers.n blooms.n blossoms.n blotches.n blots.n blotters.n blouses.n blowers.n blowflies.n blowholes.n blowlamps.n blowouts.n blowpipes.n blows.n blowtorches.n bludgeons.n bluebells.n bluebottles.n blueprints.n blues.n bluestockings.n bluffers.n bluffs.n blunderbusses.n blunderers.n blunders.n blurbs.n blurs.n blushes.n boarders.n boardings.n boardrooms.n boards.n boardwalks.n boars.n boas.n boasters.n boasts.n boaters.n boathouses.n boats.n boatswains.n bobbies.n bobsleds.n bobsleighs.n bobtails.n bodegas.n bodices.n bodies.n bodyguards.n bogeys.n bogies.n bogs.n bohemians.n boilers.n boils.n boleros.n bollocks.n bolsters.n bolts.n bombardes.n bombardiers.n bombers.n bombings.n bombs.n bombshells.n bonanzas.n bonbons.n bondholders.n bonds.n boners.n bones.n boneshakers.n bonfires.n bongos.n bonnets.n bonuses.n boobies.n boobs.n boogies.n bookcases.n bookclubs.n bookies.n bookkeepers.n booklets.n bookmakers.n bookmarkers.n bookmarks.n bookmobiles.n books.n booksellers.n bookshops.n bookstalls.n bookworms.n boomerangs.n boomers.n booms.n boons.n boors.n boos.n boosters.n boosts.n booths.n bootlaces.n bootleggers.n boots.n boozers.n borderlands.n borderlines.n borders.n bordonuas.n bores.n boroughs.n borrowers.n borrowings.n borzois.n bosoms.n bosses.n bosuns.n botanists.n bottlenecks.n bottles.n bottoms.n boudoirs.n boughs.n boulders.n boulevards.n bounces.n boundaries.n bounders.n bounds.n bounties.n bouquets.n bourbons.n bourgeoisies.n bournes.n bourses.n boutiques.n bouts.n bouzoukis.n bowels.n bowers.n bowlers.n bowls.n bows.n boxers.n boxes.n boxfuls.n boycotts.n boyfriends.n boys.n bracelets.n braces.n brackets.n braggarts.n braids.n brains.n brainstorms.n brainwaves.n brakes.n brambles.n branches.n brandies.n brands.n bras.n brasseries.n brasses.n brassieres.n brats.n braves.n brawlers.n brawls.n brays.n braziers.n breaches.n breadbaskets.n breadcrumbs.n breadlines.n breadths.n breadwinners.n breakages.n breakaways.n breakdowns.n breakers.n breakfasts.n breaks.n breakthroughs.n breakups.n breakwaters.n breasts.n breathalysers.n breathers.n breaths.n breeches.n breeders.n breeds.n breezes.n breves.n breviaries.n breweries.n brewers.n brews.n briars.n bribes.n brickbats.n brickkilns.n bricklayers.n bricks.n bridals.n bridegrooms.n brides.n bridesmaids.n bridgeheads.n bridges.n bridles.n briefcases.n briefers.n briefs.n brigades.n brigands.n brigs.n brims.n brinks.n brioches.n briquets.n briquettes.n bristles.n broadcasters.n broadcasts.n broads.n broadsheets.n broadsides.n brocades.n brochures.n brogues.n broilers.n brokerages.n brokers.n brollies.n bromides.n broncos.n bronzes.n brooches.n broods.n brooks.n brooms.n broomsticks.n brothels.n brotherhoods.n brothers.n brouhahas.n brownies.n brownstones.n brows.n browses.n bruins.n bruisers.n bruises.n brunches.n brunettes.n brunts.n brushes.n brushworks.n brutalities.n brutes.n bubbles.n buccaneers.n bucketfuls.n buckets.n bucklers.n buckles.n bucks.n buddies.n budgerigars.n budgets.n budgies.n buds.n buffaloes.n buffers.n buffets.n buffoons.n buffs.n bugaboos.n bugbears.n buggers.n buggies.n buglers.n bugles.n bugs.n builders.n buildings.n bulbs.n bulges.n bulldogs.n bulldozers.n bulletins.n bullets.n bullfighters.n bullfights.n bullfinches.n bullfrogs.n bullies.n bullocks.n bullrings.n bullroarers.n bulls.n bulwarks.n bumblebees.n bumpers.n bumpkins.n bumps.n bums.n bunches.n bundles.n bungalows.n bunglers.n bungs.n bunions.n bunkers.n bunks.n bunnies.n buns.n buoys.n burdens.n bureaucracies.n bureaucrats.n bureaus.n burettes.n burgesses.n burghers.n burghs.n burglaries.n burglars.n burgomasters.n burgs.n burials.n burlesques.n burners.n burns.n burps.n burritos.n burros.n burrows.n burrs.n bursaries.n bursars.n bursts.n burthens.n buses.n bushels.n bushes.n businesses.n buskers.n busters.n bustles.n busts.n busybodies.n butchers.n butlers.n buttercups.n butterflies.n butteries.n buttocks.n buttonholes.n buttonhooks.n buttons.n buttresses.n butts.n buyers.n buyouts.n buzzards.n buzzers.n buzzes.n by-products.n byes.n bygones.n bylaws.n bypasses.n byproducts.n byroads.n bystanders.n bytes.n byways.n bywords.n C-bands.n cabals.n cabarets.n cabbages.n cabbies.n cabers.n cabinets.n cabins.n cablegrams.n cables.n caboodles.n cabooses.n cabs.n cabstands.n caches.n cackles.n cacophonies.n cactuses.n cadavers.n caddies.n cadences.n cadenzas.n cadets.n cadres.n cads.n caesuras.n cafes.n cafeterias.n caftans.n cages.n cairns.n cakes.n calamities.n calculations.n calculators.n caldrons.n calendars.n calfs.n calibrations.n calibres.n califs.n caliphates.n caliphs.n callers.n callings.n calliopes.n calls.n calories.n calumnies.n calves.n calypsos.n camels.n cameos.n cameras.n campaigners.n campers.n camps.n campuses.n canals.n canapes.n canards.n canaries.n cancans.n cancellations.n cancers.n candidacies.n candidates.n candies.n candles.n candlesticks.n canes.n canisters.n canneries.n cannibals.n cannons.n canoes.n canons.n canopies.n cans.n cantaloupes.n cantatas.n canteens.n canters.n canticles.n cantilevers.n cantons.n cantors.n cantos.n canvases.n canvasses.n canyons.n capabilities.n capers.n capes.n capillaries.n capitalists.n capitals.n capons.n cappuccinos.n caprices.n caps.n capsules.n captains.n captions.n captives.n captors.n captures.n carafes.n caramels.n carats.n caravans.n caravansaries.n caravanserais.n caraways.n carbides.n carbines.n carbohydrates.n carbons.n carbuncles.n carburettors.n carcasses.n cardigans.n cardinals.n cardmembers.n cards.n careerists.n careers.n cares.n caresses.n caretakers.n carets.n cargoes.n caribou.p caricatures.n caricaturists.n carillons.n carloads.n carmines.n carnations.n carnivals.n carnivores.n carols.n carousels.n carp.p carpenters.n carpetbaggers.n carpets.n carports.n carriages.n carriageways.n carriers.n carrots.n cars.n cartels.n carters.n carthorses.n cartilages.n cartloads.n cartographers.n cartons.n cartoonists.n cartoons.n cartridges.n carts.n cartwheels.n carvers.n cascades.n casebooks.n casements.n cases.n cashews.n cashiers.n casinos.n caskets.n casseroles.n cassettes.n castaways.n castes.n castings.n castles.n castors.n castrations.n castratos.n casts.n casualties.n cataclysms.n catalogs.n catalogues.n catalysts.n catamarans.n catapults.n cataracts.n catastrophes.n catcalls.n catchers.n catches.n catchments.n catchwords.n catechisms.n categories.n caterers.n caterpillars.n catfish.p cathedrals.n cathodes.n catkins.n cats.n catsups.n catwalks.n caucuses.n cauldrons.n cauliflowers.n causes.n causeways.n cautions.n cavalcades.n cavaliers.n cavalries.n caveats.n caverns.n caves.n cavities.n ceasefires.n cedars.n cedillas.n ceilings.n celebrants.n celebrations.n celebrities.n celestas.n cellars.n cellists.n cellos.n cells.n cemeteries.n censors.n censorships.n censures.n censuses.n centaurs.n centenarians.n centenaries.n centennials.n centerpieces.n centers.n centiliters.n centilitres.n centimes.n centimeters.n centimetres.n centipedes.n centiseconds.n centiwatts.n centrepieces.n centres.n centrexes.n centrifuges.n centurions.n cereals.n ceremonials.n ceremonies.n certainties.n certificates.n certifications.n cervixes.n cesspits.n cesspools.n chaffinches.n chains.n chairs.n chaises.n chalets.n chalices.n chalkpits.n chalks.n challengers.n challenges.n chalumeaus.n chamberlains.n chambermaids.n chamberpots.n chambers.n chameleons.n chamoises.n champagnes.n champions.n championships.n champs.n chancelleries.n chancellors.n chancels.n chanceries.n chandeliers.n chandlers.n changelings.n changeovers.n changes.n channels.n chants.n chapels.n chaperons.n chaplains.n chaps.n chapterhouses.n chapters.n charabancs.n characters.n charades.n chargers.n charges.n charioteers.n chariots.n charities.n charladies.n charlatans.n charmers.n charms.n charters.n charts.n chasers.n chases.n chasms.n chassis.p chasubles.n chats.n chatterboxes.n chauffeurs.n chauvinists.n cheats.n checkbooks.n checkers.n checklists.n checkmates.n checkouts.n checkpoints.n checkrooms.n checks.n checkups.n cheekbones.n cheeks.n cheeps.n cheerleaders.n cheers.n cheesecakes.n cheesecloths.n cheetahs.n chefs.n chemicals.n chemises.n chemists.n chequebooks.n cheques.n cherries.n cherubs.n chessboards.n chesterfields.n chestnuts.n chests.n chews.n chickens.n chickpeas.n chicks.n chiefs.n chieftains.n childhoods.n chile_poblanos chile_rellenos chile_verdes chiles.n chiles_poblanos chiles_rellenos chiles_verdes chills.n chimeras.n chimes.n chimneypots.n chimneys.n chimneysweepers.n chimneysweeps.n chimpanzees.n chimps.n chinchillas.n chinks.n chins.n chipmunks.n chips.n chiropodists.n chiropractors.n chirps.n chirrups.n chisels.n chitarras.n chits.n chives.n chocolates.n chocs.n choices.n choirboys.n choirs.n chokers.n chokes.n choppers.n chops.n chopsticks.n chorales.n chords.n choreographers.n chores.n choristers.n chortles.n choruses.n chows.n christenings.n chromosomes.n chroniclers.n chronicles.n chronologies.n chronometers.n chrysalises.n chrysanthemums.n chuckles.n chucks.n chugs.n chumps.n chums.n chunks.n churches.n churchgoers.n churchwardens.n churchyards.n churns.n chutes.n cicadas.n ciders.n cigarettes.n cigars.n cimbaloms.n cinctures.n cinders.n cinemas.n ciphers.n circles.n circuits.n circulars.n circulations.n circumferences.n circumflexes.n circumlocutions.n circumstances.n circuses.n cissies.n cisterns.n citadels.n citations.n cities.n citizens.n citrons.n citterns.n civilians.n civilities.n civilizations.n claimants.n clairvoyants.n clambakes.n clamours.n clamps.n clams.n clangs.n clanks.n clans.n clapboards.n clapperboards.n clappers.n claps.n clarets.n clarinetists.n clarinets.n clarinettists.n clarions.n clashes.n clasps.n classes.n classicists.n classics.n classifications.n classmates.n classrooms.n clauses.n clavichords.n clavicles.n clavinets.n claws.n cleaners.n cleansers.n cleanups.n clearances.n clearings.n cleats.n cleavages.n cleavers.n clefs.n clefts.n clerestories.n clergies.n clerics.n clerks.n cliches.n clicks.n clienteles.n clients.n cliffs.n climates.n climaxes.n climbers.n climes.n clinchers.n clinches.n clinics.n clinks.n clippers.n clips.n cliques.n clitorises.n cloakrooms.n cloaks.n clocks.n clodhoppers.n clods.n clogs.n cloisters.n clones.n closets.n clothes.n clotheshorses.n clotheslines.n clothiers.n cloths.n clots.n cloudbursts.n clouds.n cloves.n clowns.n clubbers.n clubhouses.n clubs.n clucks.n clues.n clumps.n clunks.n clusters.n clutches.n clutters.n co-operatives.n co-ops.n coaches.n coalfields.n coalitions.n coalmines.n coalpits.n coals.n coasters.n coastguards.n coastlines.n coasts.n coatings.n coats.n cobblers.n cobbles.n cobblestones.n cobras.n cobs.n cobwebs.n cochleas.n cockatoos.n cockerels.n cockers.n cockhorses.n cockleshells.n cockneys.n cockpits.n cockroaches.n cocks.n cockscombs.n cocktails.n coconuts.n cocoons.n cocos.n codas.n codes.n codfish.p codgers.n codifications.n codpieces.n cods.n coefficients.n coffees.n coffers.n coffins.n cognates.n cogs.n cogwheels.n cohorts.n coiffeurs.n coiffures.n coifs.n coils.n coinages.n coincidences.n coins.n cokes.n colas.n colds.n collaborationists.n collaborators.n collages.n collapses.n collarbones.n collars.n colleagues.n collections.n collectors.n colleges.n collieries.n colliers.n collies.n collisions.n colloquialisms.n colloquies.n colonels.n colonialists.n colonials.n colonies.n colonists.n colonizers.n colonnades.n colons.n colors.n colours.n colts.n columbines.n columnists.n columns.n comas.n combatants.n combinations.n combines.n combs.n comebacks.n comedians.n comediennes.n comedies.n comedowns.n comers.n comets.n comforters.n comforts.n comics.n commandants.n commanders.n commandments.n commandos.n commands.n commas.n commencements.n commendations.n commentaries.n commentators.n commercials.n commissariats.n commissaries.n commissars.n commissionaires.n commissioners.n commissions.n committees.n commodes.n commodities.n commodores.n commonplaces.n commonwealths.n commotions.n communes.n communicants.n communications.n communions.n communiques.n communists.n communities.n commutations.n commuters.n compacts.n companies.n companions.n comparatives.n compares.n comparisons.n compartments.n compasses.n compatriots.n compendiums.n compensations.n competitions.n competitors.n compilations.n compilers.n complainants.n complements.n complexes.n complexions.n complexities.n complications.n compliments.n components.n comportments.n composers.n composites.n compositions.n compotes.n compounds.n compressors.n compromises.n comptrollers.n computations.n computers.n comrades.n comradeships.n concatenations.n concavities.n conceits.n concentrates.n concentrations.n conceptions.n concertinas.n concertos.n concerts.n concessionaires.n concessions.n conches.n conchs.n concierges.n conclaves.n concoctions.n concordances.n concordats.n concords.n concourses.n concubines.n concurrences.n concussions.n condemnations.n condensations.n condiments.n conditioners.n condolences.n condominiums.n condors.n conductivities.n conductors.n conductresses.n conduits.n cones.n coneys.n confabs.n confabulations.n confectioners.n confections.n confederacies.n confederates.n confederations.n conferences.n confessionals.n confessions.n confessors.n confidantes.n confidants.n configurations.n confirmations.n conflagrations.n conflicts.n confluences.n conformations.n conformists.n confreres.n confrontations.n confutations.n congas.n conglomerates.n conglomerations.n congratulations.n congregations.n congresses.n conifers.n conjectures.n conjugates.n conjugations.n conjunctions.n conjunctives.n conjurers.n conjurors.n conkers.n conks.n connections.n connectives.n connectors.n connexions.n connoisseurs.n connotations.n conquerors.n conquests.n conquistadors.n cons.n consciences.n conscripts.n consecrations.n consequences.n conservancies.n conservatives.n conservatoires.n conservatories.n considerations.n consistencies.n consolations.n consoles.n consolidations.n consommes.n consonants.n consorts.n conspectuses.n conspiracies.n conspirators.n constables.n constabularies.n constants.n constellations.n constituencies.n constituents.n constitutionalists.n constitutions.n constraints.n constrictions.n constructions.n constructors.n constructs.n consulates.n consuls.n consulships.n consultants.n consultations.n consumers.n consummations.n consumptives.n contacts.n contagions.n containers.n contaminants.n contemporaries.n contenders.n contents.n contestants.n contests.n contexts.n continents.n contingencies.n contingents.n continuations.n contortionists.n contortions.n contours.n contrabasses.n contrabassoons.n contraceptives.n contractions.n contractors.n contracts.n contradictions.n contraltos.n contraptions.n contraries.n contrasts.n contraventions.n contretemps.p contributions.n contributors.n contrivances.n controllers.n controls.n controversies.n contusions.n conundrums.n conurbations.n convalescents.n conveniences.n conventions.n convents.n conversationalists.n conversations.n conversions.n converters.n convertibles.n converts.n conveyances.n conveyers.n conveyors.n convicts.n convocations.n convolutions.n convoys.n convulsions.n cookbooks.n cookers.n cookies.n cooks.n coolants.n coolers.n coolies.n coons.n coopers.n coops.n coordinates.n coordinators.n coos.n coots.n copartners.n copartnerships.n copes.n copies.n coppersmiths.n cops.n copses.n copulas.n copycats.n copyists.n copywriters.n coquettes.n corals.n cordials.n cordons.n cords.n coreligionists.n cores.n corgis.n corkers.n corks.n corkscrews.n cormorants.n corncobs.n corneas.n corners.n cornerstones.n cornets.n cornetts.n cornflakes.n cornflowers.n cornices.n cornucopias.n corollaries.n corollas.n coronaries.n coronas.n coronations.n coroners.n coronets.n corporals.n corporates.n corporations.n corps.p corpses.n corpuscles.n corrals.n corrections.n correctives.n correlations.n correlatives.n correspondences.n correspondents.n corridors.n corrosives.n corsages.n corsets.n cortexes.n coruscations.n corvettes.n cosies.n cosines.n cosmeticians.n cosmetics.n cosmonauts.n cosmopolitans.n costs.n costumes.n costumiers.n coteries.n cotillions.n cots.n cottages.n cottontails.n couches.n couchettes.n cougars.n coughs.n councillors.n councils.n counsellors.n counselors.n counsels.n countdowns.n countenances.n counterattacks.n counterbalances.n counterblasts.n counterclaims.n counterfeiters.n counterfeits.n counterfoils.n counteroffers.n counterparts.n counterplots.n counterpoints.n counterproposals.n counters.n countertenors.n countesses.n counties.n countries.n counts.n coupes.n couples.n couplets.n couplings.n coupons.n coups.n couriers.n courses.n courtesans.n courtesies.n courtiers.n courtrooms.n courts.n courtships.n courtyards.n cousins.n covenants.n coverings.n coverlets.n covers.n coverts.n coves.n cowards.n cowbells.n cowboys.n cowcatchers.n cowhands.n cowherds.n cowhides.n cows.n cowslips.n coxcombs.n coxes.n coxswains.n coyotes.n crabs.n crackdowns.n crackers.n crackpots.n cracks.n cradles.n crafts.n cramps.n cranberries.n cranes.n craniums.n cranks.n crankshafts.n crannies.n craps.n crashes.n craters.n crates.n cravats.n cravens.n cravings.n crawfishes.n crayfishes.n crayons.n crazes.n creaks.n creameries.n creams.n creases.n creations.n creators.n creatures.n creches.n creditors.n credits.n credos.n creeds.n creeks.n creepers.n creeps.n cremations.n crematoriums.n crescendos.n crescents.n crests.n cretins.n crevasses.n crevices.n crews.n cribs.n cricketers.n crickets.n cricks.n criers.n cries.n crimes.n criminals.n crimsons.n crinkles.n crinolines.n cripples.n crises.n crisps.n criterions.n criticisms.n critics.n critiques.n croaks.n crocks.n crocodiles.n crocuses.n croissants.n cromornes.n crones.n cronies.n crooks.n crooners.n croppers.n crops.n crossbars.n crossbeams.n crossbows.n crossbreeds.n crosschecks.n crosscurrents.n crosscuts.n crosses.n crossings.n crosswalks.n crosswords.n crotches.n crotchets.n crouches.n crowbars.n crowds.n crowns.n crows.n crucibles.n crucifixes.n crucifixions.n crudes.n cruelties.n cruisers.n cruises.n crumbs.n crumhorns.n crumpets.n crunches.n cruppers.n crusaders.n crusades.n crushes.n crustaceans.n crusts.n crutches.n cruxes.n crwths.n crybabies.n cryptograms.n crypts.n crystallizations.n crystallophones.n crystals.n cuatros.n cubbyholes.n cubes.n cubicles.n cubists.n cubs.n cuckolds.n cuckoos.n cucumbers.n cuddles.n cudgels.n cues.n cuffs.n cullenders.n culminations.n culprits.n cults.n cultures.n cummerbunds.n cunts.n cupboards.n cupfuls.n cupolas.n cuprophones.n cups.n curates.n curators.n curbs.n curds.n cure-alls.n cures.n curfews.n curios.n curiosities.n curlers.n curls.n curmudgeons.n currants.n currencies.n currents.n curriculums.n curries.n curs.n curses.n curtailments.n curtains.n curtseys.n curtsies.n curves.n cushions.n cuspidors.n cusps.n cusses.n custards.n custodians.n customers.n customs.n cutbacks.n cuticles.n cutlasses.n cutlets.n cuts.n cutters.n cuttings.n cuttlefishes.n cycles.n cyclists.n cyclones.n cyclopaedias.n cyclostyles.n cyclotrons.n cygnets.n cylinders.n cymbals.n cymbalums.n cynics.n cyphers.n cypresses.n cysts.n czarinas.n czars.n dabblers.n dabs.n dachas.n dachshunds.n dactyls.n daddies.n dads.n daemons.n daffodils.n daggers.n dagos.n daguerreotypes.n dahlias.n dailies.n dainties.n dairies.n dairymaids.n daises.n daisies.n dales.n dalmatians.n damages.n dames.n dams.n damselflies damsels.n dancers.n dances.n dandelions.n dandies.n daredevils.n dares.n darkrooms.n darlings.n darns.n darts.n dashboards.n dashes.n datelines.n dates.n daughters.n dauphins.n davenports.n dawdlers.n dawns.n daybooks.n dayboys.n daydreams.n daygirls.n daytimes.n deaconesses.n deacons.n deadlines.n deadlocks.n dealers.n dealings.n deals.n deaneries.n deans.n deathbeds.n deathblows.n deaths.n deathtraps.n debacles.n debaters.n debates.n debauchees.n debaucheries.n debentures.n debits.n debtors.n debts.n debutantes.n debuts.n decanters.n deceits.n deceptions.n decibels.n deciliters.n decilitres.n decimeters.n decimetres.n deciseconds.n deciwatts.n deckers.n decks.n declarations.n declensions.n declines.n declivities.n decoders.n decorations.n decorators.n decoys.n decreases.n decrees.n dedications.n deductions.n deeds.n deerskins.n deerstalkers.n defaulters.n defeatists.n defeats.n defections.n defectors.n defects.n defences.n defendants.n defenders.n defenses.n deficiencies.n deficits.n definitions.n defoliants.n deformities.n defrosters.n degenerates.n degradations.n degrees.n deities.n delays.n delegates.n delegations.n deletions.n deliberations.n delicacies.n delicatessens.n delights.n delineations.n delinquents.n deliverances.n deliveries.n dells.n deltas.n deluges.n delusions.n demagogues.n demands.n demarches.n demeanours.n demerits.n demigods.n demises.n democracies.n democrats.n demolitions.n demoniacs.n demons.n demonstrations.n demonstrators.n demos.n demotions.n denials.n denizens.n denominations.n denominators.n denouements.n dens.n densities.n dentists.n dents.n dentures.n denunciations.n deodorants.n departments.n departures.n dependants.n dependencies.n dependents.n depictions.n deportations.n deportees.n depositions.n depositories.n depositors.n deposits.n depots.n depravities.n depressions.n depressives.n deprivations.n depths.n deputies.n derailments.n derbies.n derivations.n derivatives.n dermatologists.n derricks.n dervishes.n descants.n descendants.n descents.n descriptions.n deserters.n desertions.n deserts.n designations.n designers.n designs.n desks.n despatches.n desperadoes.n despotisms.n despots.n desserts.n dessertspoonfuls.n dessertspoons.n destinations.n destinies.n destroyers.n detachments.n details.n detainees.n detectives.n detectors.n detentions.n detergents.n deteriorations.n determinants.n determinations.n determiners.n deterrents.n dethronements.n detonations.n detonators.n detours.n detractors.n deuces.n devaluations.n developers.n developments.n deviants.n deviations.n devices.n devils.n devotees.n devotions.n dholaks.n dhows.n diabetics.n diacritics.n diagnoses.n diagonals.n diagrams.n dialecticians.n dialectics.n dialects.n dialogues.n dials.n diameters.n diamonds.n diapers.n diaphragms.n diaries.n diarists.n diatribes.n dichotomies.n dickeys.n dickybirds.n dictates.n dictations.n dictators.n dictatorships.n dictionaries.n dictums.n didgeridoos.n diesels.n dieticians.n diets.n differences.n differentials.n differentiations.n difficulties.n diffractions.n digestions.n digests.n diggers.n digits.n dignitaries.n digressions.n digs.n dikes.n dilemmas.n dilettantes.n dilutions.n dimensions.n dimes.n diminuendos.n diminutions.n diminutives.n dimples.n dinars.n diners.n dinghies.n dinners.n dinosaurs.n dints.n diocesans.n dioceses.n dioxides.n diphthongs.n diplomas.n diplomatists.n diplomats.n dippers.n dips.n dipsticks.n diptychs.n directions.n directives.n directorates.n directories.n directors.n directorships.n dirges.n dirigibles.n dirndls.n disabilities.n disadvantages.n disagreements.n disappearances.n disappointments.n disassembblies disasters.n disbursements.n discards.n discharges.n disciples.n disciplinarians.n disciplines.n disclaimers.n discomforts.n discontinuities.n discords.n discos.n discotheques.n discounts.n discouragements.n discourses.n discourtesies.n discoverers.n discrepancies.n discs.n discuses.n discussions.n diseases.n disfigurements.n disguises.n dishcloths.n dishes.n dishfuls.n dishwashers.n disillusionments.n disincentives.n disinclinations.n disinfectants.n disks.n dislocations.n disloyalties.n dismemberments.n dismissals.n disorders.n disparagements.n disparities.n dispatches.n dispensaries.n dispensations.n dispensers.n dispersals.n dispersions.n displacements.n displays.n dispositions.n disproofs.n disputants.n disputations.n disputes.n disquisitions.n disruptions.n dissections.n dissemblers.n dissensions.n dissenters.n dissents.n dissertations.n disservices.n dissidents.n dissimilarities.n dissolutions.n dissonances.n distances.n distastes.n distensions.n distillations.n distilleries.n distillers.n distinctions.n distortions.n distractions.n distributions.n distributors.n districts.n disturbances.n ditches.n ditties.n divans.n divergences.n divers.n diversions.n dives.n divestitures.n dividends.n divinations.n diviners.n divines.n divinities.n divisions.n divisors.n divorcees.n djembes.n dockets.n docks.n dockyards.n doctorates.n doctors.n doctrinaires.n doctrines.n documents.n dodderers.n dodgers.n dodges.n dodos.n doers.n doges.n dogfish.p doggies.n doghouses.n dogmas.n dogs.n dogsbodies.n dogwoods.n doilies.n dollhouses.n dollies.n dollops.n dolls.n dolmens.n dolphins.n dolts.n domains.n domes.n domiciles.n dominions.n dominos.n donations.n donkeys.n donors.n dons.n donuts.n doodlebugs.n dooms.n doorbells.n doorcases.n doorframes.n doorhandles.n doorkeepers.n doorknobs.n doorknockers.n doormats.n doornails.n doorposts.n doors.n doorsteps.n doorstoppers.n doorways.n dopes.n dories.n dormers.n dormitories.n dosages.n doses.n dossiers.n dots.n doubles.n doublets.n doubloons.n douches.n doughnuts.n doulophones.n dovecotes.n doves.n dovetails.n dowagers.n dowels.n dowers.n downbeats.n downgrades.n downpours.n downturns.n dowries.n doyens.n doylies.n dozes.n drachmas.n draftees.n draftings.n drafts.n dragnets.n dragonflies.n dragons.n dragoons.n drags.n drainpipes.n drains.n drakes.n dramas.n dramatists.n dramatizations.n draperies.n drapers.n drapes.n draughts.n drawbridges.n drawers.n drawing-rooms.n drawings.n drawls.n draws.n dreadnoughts.n dreamers.n dreamlands.n dreams.n dreamworlds.n dressers.n dresses.n dressings.n dressmakers.n driers.n drifters.n drifts.n drills.n drinkers.n drinks.n drips.n drivers.n drives.n driveways.n dromedaries.n drones.n dropoffs.n dropouts.n droppings.n drops.n droughts.n droves.n drudges.n druggists.n drugs.n drugstores.n druids.n drummers.n drums.n drumsticks.n drunkards.n drunks.n dryers.n ducats.n duchesses.n duchies.n duckies.n duckings.n ducklings.n ducks.n ducts.n dudes.n duds.n duelists.n duellists.n duels.n duets.n duffers.n dugouts.n dukedoms.n dukes.n dulcians.n dulcimers.n dullards.n dulzainas.n dumbbells.n dumbwaiters.n dumdums.n dummies.n dumplings.n dumps.n dunces.n dunderheads.n dunes.n dungeons.n dunghills.n dupes.n duplicates.n duplications.n duplicators.n durations.n dustbins.n dustcarts.n dusters.n dustpans.n dutars.n duties.n duvets.n dwarfs.n dwellers.n dwellings.n dyers.n dyes.n dykes.n dynamics.n dynamos.n dynasties.n dyspeptics.n eagles.n earaches.n eardrops.n eardrums.n earfuls.n earldoms.n earls.n earmarks.n earnings.n earphones.n earpieces.n earrings.n ears.n earthquakes.n earthworms.n easels.n eaters.n eavesdroppers.n ebbs.n ebbtides.n eccentricities.n eccentrics.n ecclesiastics.n echelons.n echoes.n eclairs.n eclipses.n ecologists.n economies.n economists.n ecosystems.n ecstasies.n eddies.n edges.n edgings.n edicts.n edifices.n editions.n editorials.n editors.n educators.n eels.n effects.n efficiencies.n effigies.n effluents.n effronteries.n effusions.n egalitarians.n eggheads.n eggplants.n eggs.n eggshells.n egoists.n egos.n egotists.n egotrips.n egrets.n eiderdowns.n ejaculations.n ejections.n elaborations.n elbows.n elders.n elections.n electorates.n electors.n electricians.n electrocardiograms.n electrocardiographs.n electrocutions.n electrodes.n electrolytes.n electromagnets.n electrons.n elegies.n elements.n elephants.n elevations.n elevators.n eliminations.n elisions.n elites.n elitists.n elixirs.n elks.n ellipses.n elms.n elocutionists.n elongations.n emanations.n embankments.n embargoes.n embarkations.n embarrassments.n embassies.n embellishments.n embers.n emblems.n embodiments.n embraces.n embryos.n emendations.n emeralds.n emergencies.n emigrants.n emigres.n eminences.n emirates.n emirs.n emissaries.n emissions.n emotions.n emperors.n empires.n empiricists.n employees.n employers.n emporiums.n empresses.n emulsions.n emus.n enactments.n encampments.n enchantments.n enchantresses.n enchiladas.n enchiladas_rancheros enchiladas_verdes enclaves.n enclosures.n encomiums.n encounters.n encouragements.n encroachments.n encumbrances.n encyclicals.n encyclopædias.n encyclopaedias.n encyclopedias.n endeavours.n endemics.n endings.n endives.n endorsements.n endowments.n ends.n enemas.n enemies.n energies.n enforcers.n engagements.n engineers.n engines.n engravers.n engravings.n enigmas.n enjoyments.n enlargements.n enlistments.n enormities.n enquirers.n enquiries.n ensembles.n ensigns.n enslavements.n entanglements.n ententes.n enterprises.n entertainers.n enthronements.n enthusiasts.n enticements.n entities.n entitlements.n entomologists.n entractes.n entrances.n entrants.n entrees.n entrepots.n entrepreneurs.n entries.n envelopes.n envelopments.n environmentalists.n environments.n envois.n envoys.n enzymes.n eons.n epaulets.n epaulettes.n epicentres.n epics.n epicureans.n epicures.n epidemics.n epidemiologists.n epiglottises.n epigrams.n epileptics.n epilogues.n episcopalians.n episodes.n epistles.n epitaphs.n epithets.n epitomes.n epochs.n equalizers.n equals.n equations.n equators.n equestrians.n equinoxes.n equities.n equivalences.n equivalents.n equivocations.n eradications.n eras.n erasers.n erasures.n erections.n errands.n errors.n eruptions.n escalations.n escalators.n escapades.n escapees.n escapements.n escapes.n escapists.n escapologists.n escorts.n escritoires.n escutcheons.n esophaguses.n esplanades.n espressos.n essayists.n essays.n essences.n essentials.n establishments.n estates.n esthetes.n esthetics.n estimates.n estrangements.n estuaries.n etchings.n eternities.n ethics.p ethnographers.n ethnologists.n ethyls.n etymologies.n etymologists.n eucalyptuses.n eulogies.n eulogists.n eunuchs.n euphemisms.n euphoniums.n evacuations.n evacuees.n evaders.n evaluations.n evangelists.n evaporations.n evenings.n events.n eventualities.n evergreens.n eves.n evictions.n evils.n evolutions.n ewes.n exacerbations.n exaggerations.n examinations.n examiners.n examples.n exams.n excavations.n excavators.n exceptions.n excerpts.n excesses.n exchanges.n exchequers.n excitements.n exclamations.n excommunications.n excrescences.n excretions.n excursions.n executants.n executioners.n executions.n executives.n executors.n exemplifications.n exemptions.n exercises.n exertions.n exhausts.n exhibitioners.n exhibitionists.n exhibitions.n exhibitors.n exhibits.n exhortations.n exigencies.n exiles.n existences.n existentialists.n exits.n exoduses.n exonerations.n expanses.n expansions.n expatriates.n expectancies.n expectorants.n expedients.n expeditions.n expenditures.n expenses.n experiences.n experimenters.n experiments.n experts.n expletives.n exploits.n explorations.n explorers.n explosions.n explosives.n exponents.n exporters.n exports.n expos.n exposes.n expositions.n exposures.n expresses.n expressionists.n expressions.n expressways.n expulsions.n extensions.n exteriors.n extinguishers.n extracts.n extraditions.n extras.n extravagances.n extravaganzas.n extremes.n extremists.n extremities.n extroverts.n eyeballs.n eyebrows.n eyefuls.n eyeglasses.n eyelashes.n eyelets.n eyelids.n eyepieces.n eyes.n eyesores.n eyewitnesses.n fables.n fabrications.n fabrics.n facades.n faces.n facets.n facials.n facilitators.n facilities.n facsimiles.n factions.n factories.n factors.n factotums.n faculties.n fads.n faeries.n faggots.n faglongs.n fags.n failings.n fairgrounds.n fairies.n fairs.n fairways.n fairylands.n fairytales.n faiths.n fajitas.n fakes.n fakirs.n falcons.n falsehoods.n falsettos.n falsifications.n falsities.n familiarities.n families.n famines.n fanaticisms.n fanatics.n fanciers.n fancies.n fandangos.n fanfares.n fangs.n fanlights.n fannies.n fans.n fantasias.n fantasies.n farces.n fares.n farewells.n farmers.n farmhands.n farmhouses.n farms.n farmsteads.n farmyards.n farthings.n farts.n fascinations.n fascists.n fashions.n fasteners.n fasts.n fatalists.n fatalities.n fates.n fatheads.n fatherlands.n fathers.n fathoms.n fatigues.n fats.n faucets.n faults.n fauns.n favors.n favourites.n favours.n fawns.n faxes.n feasts.n featherbeds.n feathers.n featherweights.n feats.n features.n federalists.n federations.n feeders.n feelers.n fees.n fegerengs.n feints.n felicities.n fellows.n fellowships.n felonies.n felons.n females.n feminists.n femtoliters.n femtolitres.n femtometers.n femtometres.n femtoseconds.n femtowatts.n femurs.n fencers.n fences.n fenders.n fens.n ferments.n ferns.n ferrets.n ferries.n ferryboats.n fertilizers.n festivals.n festivities.n fetes.n fetishes.n fetuses.n feuds.n fevers.n fezes.n fiancees.n fiances.n fiascos.n fiats.n fibbers.n fibres.n fibs.n fictions.n fiddlers.n fiddles.n fiddlesticks.n fiefs.n fielders.n fields.n fiends.n fiestas.n fifes.n fighters.n fights.n figments.n figs.n figureheads.n figures.n filaments.n filberts.n files.n filibusters.n filings.n fillets.n fillies.n fillings.n films.n filters.n finales.n finalists.n finals.n finances.n financiers.n finches.n finders.n finds.n fines.n finesses.n finger-posts.n fingerboards.n fingermarks.n fingernails.n fingerprints.n fingers.n fingertips.n finishes.n fins.n fiords.n firearms.n fireballs.n firebirds.n firebombs.n fireboxes.n firebrands.n firebugs.n firecrackers.n fireflies.n firelights.n fireplaces.n fires.n firesides.n fireworks.n firmaments.n firms.n firs.n firstborns.n firsts.n fish.p fishbones.n fishcakes.n fisheries.n fishers.n fishes.n fishmongers.n fissures.n fists.n fistulas.n fits.n fitters.n fittings.n fivers.n fixations.n fixatives.n fixers.n fixes.n fixtures.n fjords.n flageolets.n flagpoles.n flags.n flagships.n flagstaffs.n flairs.n flakes.n flames.n flamethrowers.n flamingos.n flanges.n flanks.n flannels.n flans.n flapjacks.n flappers.n flaps.n flares.n flashbacks.n flashbulbs.n flashes.n flashlights.n flashpoints.n flasks.n flatfish.p flats.n flatterers.n flatteries.n flautas.n flautists.n flavors.n flavourings.n flavours.n flaws.n fleas.n flecks.n fledgelings.n fledglings.n fleets.n flexes.n flickers.n flicks.n fliers.n flies.n flights.n flings.n flints.n flippers.n flips.n flirtations.n flirts.n floatations.n floats.n flocks.n floodgates.n floods.n floorboards.n floors.n floozies.n flops.n florins.n florists.n flotations.n flotillas.n flounders.n flourishes.n flowerbeds.n flowerpots.n flowers.n flows.n fluctuations.n flues.n flugelhorns.n fluidities.n fluids.n flukes.n flunkeys.n flunkies.n fluorescences.n fluorides.n flurries.n flushes.n flutes.n flutists.n flutters.n fluxes.n flycatchers.n flyers.n flyovers.n flytraps.n flyweights.n flywheels.n foals.n foams.n focuses.n foes.n fogeys.n foghorns.n fogs.n foibles.n foils.n folders.n folds.n folgerphones.n folios.n folks.n folksongs.n folktales.n follies.n followers.n followings.n fonts.n foods.n foodstuffs.n fools.n footballers.n footballs.n footboards.n footbridges.n footers.n footfalls.n footfaults.n footholds.n footmarks.n footnotes.n footpaths.n footprints.n footsteps.n footstools.n forays.n forces.n fords.n forearms.n forebodings.n forecasters.n forecastles.n forecasts.n foreclosures.n forecourts.n forefathers.n forefingers.n forefronts.n foregrounds.n foreheads.n foreigners.n forelegs.n forelocks.n foremasts.n forenames.n forerunners.n foreskins.n foresters.n forests.n foretastes.n forewords.n forfeits.n forgeries.n forgers.n forges.n formalisms.n formalities.n formations.n formats.n forms.n formulas.n formulations.n fortepianos.n fortes.n fortifications.n fortnights.n fortresses.n forts.n fortunes.n forums.n forwards.n fossilizations.n fossils.n fouls.n foundations.n founders.n foundlings.n foundries.n fountains.n founts.n foursomes.n fowlers.n fowls.n foxes.n foxgloves.n foxholes.n foxhounds.n foxhunts.n foxtrots.n foyers.n fractions.n fractures.n fragmentations.n fragments.n fragrances.n frames.n frameworks.n franchises.n frankfurters.n fraternities.n fratricides.n frauds.n frays.n frazzles.n freaks.n freckles.n freebooters.n freedoms.n freeholders.n freeholds.n freeways.n freezers.n freezes.n freighters.n frequencies.n frescos.n frets.n friars.n fricassees.n fricatives.n fridges.n friends.n friendships.n fries.n friers.n friezes.n frigates.n frights.n frills.n fringes.n frissons.n fritters.n frivolities.n frocks.n frogs.n frolics.n frontages.n frontiers.n frontispieces.n fronts.n frosts.n frowns.n fruitcakes.n fruits.n frustrations.n fryers.n fuchsias.n fuckers.n fuels.n fugitives.n fuglungs.n fugues.n fuhrers.n fulcrums.n fullbacks.n fullers.n fumbles.n fumes.n functionalists.n functionaries.n functions.n fundamentalists.n fundamentals.n funds.n funerals.n fungicides.n funguses.n funks.n funnels.n furies.n furlongs.n furloughs.n furnaces.n furriers.n furrows.n furs.n fuselages.n fuses.n fusiliers.n fusillades.n fusions.n fusses.n fusspots.n futilities.n futures.n futurists.n gables.n gadflies.n gadgets.n gaffers.n gaffes.n gaffs.n gages.n gaggles.n gags.n gains.n gaits.n galas.n galaxies.n gales.n gallantries.n gallants.n galleons.n galleries.n galleys.n gallicisms.n gallons.n gallops.n galls.n gallstones.n galoshes.n gals.n gambits.n gamblers.n gambles.n gambols.n gamekeepers.n games.n gammas.n gammons.n gamuts.n ganders.n ganglions.n gangplanks.n gangs.n gangsters.n gantries.n gaolbirds.n gaolbreaks.n gaolers.n gaols.n gaps.n garages.n gardeners.n gardenias.n gardens.n gargles.n gargoyles.n garlands.n garments.n garnets.n garnishes.n garottes.n garrets.n garrisons.n garrottes.n garters.n gasbags.n gases.n gashes.n gaskets.n gaslights.n gasmasks.n gasometers.n gasps.n gasworks.p gateaus.n gatecrashers.n gatehouses.n gateposts.n gates.n gateways.n gatherers.n gatherings.n gaudies.n gauges.n gauntlets.n gavels.n gavottes.n gays.n gazelles.n gazes.n gazetteers.n gazettes.n gearboxes.n gears.n gearshifts.n geckos.n geezers.n geishas.n geldings.n gels.n gems.n gemshorns.n gendarmeries.n gendarmes.n genders.n genealogies.n genealogists.n generalissimos.n generalities.n generalizations.n generals.n generations.n generators.n genes.n geneticists.n genies.n geniuses.n genres.n gentiles.n gents.n geographers.n geologists.n geraniums.n geriatricians.n germicides.n germs.n gerunds.n gesticulations.n gestures.n getaways.n geysers.n gherkins.n ghettos.n ghosts.n ghouls.n giantesses.n giants.n gibbets.n gibbons.n gibes.n gifts.n gigabytes.n gigawatts.n giggles.n gigolos.n gigs.n gilders.n gills.n gimmicks.n gins.n gipsies.n giraffes.n girders.n girdles.n girlfriends.n girlies girls.n gists.n giveaways.n gizzards.n glaciers.n glades.n gladiators.n glances.n glands.n glares.n glasschords.n glasses.n glassfuls.n glasshouses.n glassworks.p glazes.n gleams.n glees.n glens.n gliders.n glides.n glimmers.n glimpses.n glints.n glissades.n glitches.n globes.n globetrotters.n globules.n glockenspiels.n glooms.n glories.n glossaries.n glosses.n glottises.n gloves.n glues.n gluts.n gluttons.n gnats.n gnomes.n gnus.n goalies.n goalkeepers.n goals.n goatees.n goatherds.n goats.n goatskins.n goblets.n goblins.n gobs.n goddaughters.n goddesses.n godfathers.n godmothers.n godparents.n gods.n godsends.n godsons.n goitres.n goldfinches.n goldfish.p goldmines.n goldsmiths.n golfers.n golliwogs.n gondolas.n gondoliers.n goners.n gongs.n goodies.n goods.n goofs.n goons.n gooseberries.n gophers.n gorges.n gorillas.n goslings.n gospels.n gossips.n goulashes.n gourds.n gourmands.n gourmets.n governesses.n governments.n governors.n gowns.n grabs.n graces.n gradations.n grades.n gradients.n graduates.n graduations.n grafts.n grails.n grains.n grammarians.n grammars.n gramophones.n grams.n granaries.n granddads.n granddaughters.n grandfathers.n grandmas.n grandmothers.n grandparents.n grandpas.n grandsons.n grandstands.n granges.n grannies.n grants.n granules.n grapefruits.n grapes.n grapevines.n graphics.n graphs.n grasps.n grasses.n grasshoppers.n graters.n grates.n gratifications.n gratuities.n graves.n gravestones.n graveyards.n greatcoats.n greenbacks.n greengages.n greengroceries.n greengrocers.n greenhorns.n greenhouses.n greenwoods.n greetings.n gremlins.n grenades.n grenadiers.n greybeards.n greyhounds.n griddles.n gridirons.n grids.n grievances.n griffins.n grilles.n grills.n grimaces.n grinders.n grinds.n grindstones.n grins.n grips.n grizzlies.n groans.n groceries.n grocers.n groins.n grooms.n grooves.n grotesques.n grottos.n grouches.n groundings.n grounds.n groupies.n groups.n grouse.p groves.n growers.n growls.n growths.n grubs.n grudges.n grumblers.n grumbles.n grunts.n guarantees.n guaranties.n guarantors.n guardians.n guardianships.n guardrails.n guardrooms.n guards.n guerillas.n guerrillas.n guesses.n guesthouses.n guestrooms.n guests.n guffaws.n guidebooks.n guidelines.n guides.n guilders.n guildhalls.n guilds.n guillotines.n guineas.n guises.n guitarists.n guitarróns.n guitars.n guitjos.n gulches.n gulfs.n gullets.n gullies.n gulls.n gulps.n gums.n gumshoes.n gunboats.n gunners.n gunrunners.n guns.n gunshots.n gunsmiths.n gurus.n gushers.n gusts.n guts.n gutters.n guttersnipes.n gutturals.n guvnors.n guys.n guzzlers.n gymnasiums.n gymnasts.n gyms.n gynaecologists.n gynecologists.n gyps.n gyrations.n gyros.n gyroscopes.n haberdashers.n habitations.n habitats.n habits.n hacks.n hacksaws.n haddock.p haemophiliacs.n haemorrhages.n haggises.n hags.n hails.n hailstones.n hairbrushes.n haircuts.n hairdos.n hairdressers.n hairlines.n hairnets.n hairpieces.n hairpins.n hairs.n hairstyles.n hairstylists.n halberdiers.n halberds.n half-breeds.n half-hours.n halfbacks.n halfwits.n halibut.p halliards.n hallmarks.n halls.n hallucinations.n hallways.n halos.n halters.n halts.n halyards.n hamburgers.n hamlets.n hammers.n hammocks.n hampers.n hams.n hamsters.n hamstrings.n handbags.n handbills.n handbooks.n handbrakes.n handcarts.n handclaps.n handcuffs.n handfuls.n handicaps.n handicrafts.n handkerchiefs.n handlebars.n handlers.n handles.n handmaids.n handouts.n handrails.n hands.n handsaws.n handshakes.n handstands.n hangars.n hangers.n hangings.n hangnails.n hangovers.n hankerings.n hankies.n hansoms.n happenings.n harbingers.n harbors.n harbours.n hardbacks.n hardcovers.n hardliners.n hardships.n harelips.n harems.n hares.n harlequins.n harlots.n harmonicas.n harmonicos.n harmonics.n harmonies.n harmoniums.n harmonizations.n harnesses.n harpers.n harpists.n harpoons.n harps.n harpsichordists.n harpsichords.n harrows.n harts.n harvesters.n harvests.n hassles.n hatbands.n hatches.n hatchets.n hatchways.n hatfuls.n hatpins.n hatreds.n hats.n hatters.n haunches.n haunts.n havens.n haversacks.n hawkers.n hawks.n hayforks.n haymakers.n haystacks.n hazards.n hazels.n hazes.n headaches.n headbands.n headdresses.n headers.n headings.n headlamps.n headlights.n headlines.n headmasters.n headmistresses.n headquarters.p headrests.n heads.n headsets.n headwinds.n healers.n heaps.n hearers.n hearings.n hearses.n heartaches.n heartbeats.n hearthrugs.n hearths.n hearts.n heaters.n heathens.n heathers.n heaths.n heatwaves.n heavens.n heaves.n heavyweights.n heckelphones.n hecklers.n hectares.n hedgehogs.n hedgerows.n hedges.n hedonists.n heels.n heifers.n heights.n heiresses.n heirlooms.n heirs.n heists.n helicopters.n heliographs.n heliotropes.n heliports.n hellcats.n hells.n helmets.n helms.n helpers.n helpings.n helpmates.n hemispheres.n hemlines.n hemophiliacs.n hemorrhages.n hems.n hencoops.n henhouses.n hens.n heptagons.n heralds.n herbalists.n herbs.n herds.n heresies.n heretics.n heritages.n hermaphrodites.n hermitages.n hermits.n hernias.n heroes.n heroines.n herons.n herrings.n hertz.p hesitations.n heterosexuals.n hexagons.n hexameters.n heydays.n hiatuses.n hiccoughs.n hiccups.n hickories.n hicks.n hideaways.n hides.n hidings.n hierarchies.n hieroglyphs.n highballs.n highfliers.n highflyers.n highlands.n highlights.n highnesses.n highroads.n highs.n highways.n hijackers.n hijacks.n hikers.n hikes.n hillbillies hillocks.n hills.n hillsides.n hilts.n hindrances.n hinds.n hinges.n hinterlands.n hints.n hippies.n hippodromes.n hippopotamuses.n hippos.n hips.n hisses.n histograms.n historians.n histories.n hitches.n hitchhikers.n hits.n hitters.n hives.n hoarders.n hoards.n hoaxes.n hobbies.n hobbyhorses.n hobgoblins.n hobnails.n hobos.n hocchikus.n hodgepodges.n hoes.n hogs.n holders.n holdings.n holdups.n holes.n holidays.n hollows.n hollyhocks.n holocausts.n holographs.n holsters.n homecomings.n homelands.n homeopaths.n homeowners.n homes.n homesteads.n hometowns.n homicides.n homilies.n homonyms.n homophones.n homos.n homosexuals.n hones.n honeybees.n honeycombs.n honeymoons.n honks.n honorariums.n honorifics.n honors.n honours.n hoodlums.n hoods.n hoofs.n hookers.n hooks.n hooligans.n hoops.n hooters.n hoots.n hopefuls.n hoppers.n hops.n hordes.n horizons.n hormones.n hornets.n hornpipes.n horns.n horoscopes.n horrors.n horseflies.n horseraces.n horseradishes.n horses.n horseshoes.n horsewhips.n horticulturists.n hosepipes.n hoses.n hosiers.n hospices.n hospitalizations.n hospitals.n hostages.n hostelries.n hostels.n hostesses.n hostilities.n hosts.n hotbeds.n hotdogs.n hoteliers.n hotels.n hotheads.n hothouses.n hotplates.n hounds.n hourglasses.n houseboats.n housebreakers.n housedogs.n houseflies.n housefuls.n householders.n households.n housekeepers.n housemaids.n housemasters.n houses.n housetops.n housewares.n housewives.n hovels.n hovercraft.p howitzers.n howlers.n howls.n hubbies.n hubbubs.n hubs.n huckleberries.n hucksters.n huddles.n hues.n huffs.n hugs.n hulas.n hulks.n hullabaloos.n hulls.n humanists.n humanitarians.n humans.n humdingers.n humiliations.n hummingbirds.n hummocks.n humorists.n humourists.n humours.n humpbacks.n humps.n hums.n hunchbacks.n hunks.n hunters.n hunts.n hurdles.n hurdy_gurdys hurls.n hurricanes.n husbands.n hushes.n huskies.n husks.n hussars.n hussies.n hustlers.n huts.n hyacinths.n hyaenas.n hybrids.n hydrants.n hydras.n hydraulophones.n hydrocarbons.n hydrofoils.n hydroplanes.n hyenas.n hymens.n hymnals.n hymns.n hyperbolas.n hyperboles.n hypermarkets.n hyphens.n hypnotists.n hypochondriacs.n hypocrites.n hypodermics.n hypotenuses.n iambs.n ibises.n icebergs.n iceboxes.n icebreakers.n icecaps.n icecubes.n icehouses.n icepacks.n icepicks.n icerinks.n icicles.n iconoclasts.n icons.n idealists.n idealizations.n ideals.n identities.n ideologies.n ideologues.n idiolects.n idioms.n idiosyncrasies.n idiots.n idols.n idylls.n igloos.n ignoramuses.n iguanas.n illegalities.n illnesses.n ills.n illuminations.n illusions.n illustrations.n illustrators.n images.n imaginations.n imams.n imbalances.n imbeciles.n imbroglios.n imitations.n imitators.n immensities.n immersions.n immigrants.n immolations.n immortals.n impacts.n impalements.n impasses.n impeachments.n impediments.n imperfections.n imperialists.n impersonations.n impersonators.n impertinences.n implementations.n implements.n implosions.n imponderables.n importations.n importers.n imports.n impositions.n impossibilities.n impostors.n impresarios.n impressionists.n imprimaturs.n imprints.n improbabilities.n impromptus.n improprieties.n improvements.n improvisations.n imps.n impulses.n impurities.n imputations.n inaccuracies.n inadequacies.n inanities.n inaugurals.n inaugurations.n incantations.n incarnations.n inceptions.n inches.n incidences.n incidents.n incinerators.n incisions.n incisors.n incitements.n incivilities.n inclinations.n inclines.n incomes.n incongruities.n inconsistencies.n inconveniences.n increases.n increments.n incubations.n incubators.n incumbencies.n incumbents.n incurables.n incursions.n indemnities.n indentations.n indentures.n independents.n indexes.n indicators.n indictments.n indignities.n indiscretions.n individualists.n individualities.n individuals.n inducements.n inductions.n indulgences.n industrialists.n industrials.n industries.n inefficiencies.n inequalities.n inequities.n infancies.n infantries.n infants.n infatuations.n infections.n inferences.n inferiors.n infernos.n infestations.n infidelities.n infidels.n infinitives.n infinitudes.n infirmaries.n infirmities.n inflammations.n inflections.n inflictions.n inflows.n influences.n influxes.n informalities.n informants.n informers.n infractions.n infringements.n infusions.n ingenues.n ingots.n ingredients.n inhabitants.n inheritances.n inheritors.n inhibitions.n inhibitors.n iniquities.n initials.n initiates.n initiatives.n injections.n injunctions.n injuries.n injustices.n inks.n inkstands.n inkwells.n inlays.n inlets.n inmates.n innings.n innkeepers.n innovations.n innovators.n inns.n innuendoes.n inoculations.n inputs.n inquests.n inquirers.n inquiries.n inquisitions.n inquisitors.n inroads.n inscriptions.n insects.n insertions.n inserts.n insets.n insiders.n insides.n insights.n insinuations.n insoles.n insolvencies.n insomniacs.n inspections.n inspectors.n inspirations.n installations.n installments.n instalments.n instances.n insteps.n instigators.n instincts.n institutes.n institutions.n instructions.n instructors.n instrumentalists.n instruments.n insubordinations.n insulators.n insults.n insurances.n insurers.n insurgents.n insurrections.n intakes.n integers.n integuments.n intellects.n intellectuals.n intelligentsias.n intensifications.n intensities.n intentions.n interactions.n interceptions.n interceptors.n intercessions.n interchanges.n intercoms.n interconnections.n interdependences.n interests.n interfaces.n interiors.n interjections.n interlocutors.n interlopers.n interludes.n intermarriages.n intermediaries.n intermediates.n interments.n intermezzos.n intermissions.n intermixtures.n internationales.n internationalists.n internes.n interns.n interpolations.n interpositions.n interpretations.n interpreters.n interregnums.n interrelations.n interrelationships.n interrogations.n interrogatives.n interrogators.n interrupters.n interruptions.n intersections.n interstices.n intervals.n interventions.n interviewers.n interviews.n intestines.n intimacies.n intimates.n intimations.n intoxicants.n intricacies.n intrigues.n introductions.n introverts.n intruders.n intrusions.n intuitions.n invaders.n invalidations.n invalids.n invasions.n inventions.n inventories.n inventors.n inversions.n invertebrates.n investigations.n investigators.n investments.n investors.n invitations.n invocations.n invoices.n involutions.n involvements.n ionospheres.n ions.n iotas.n irises.n ironies.n ironmongers.n irons.n ironworks.n ironworks.p irregularities.n irrelevances.n irrelevancies.n irritants.n irruptions.n islanders.n islands.n isles.n isolationists.n isotopes.n issuers.n isthmuses.n itches.n items.n iterations.n itineraries.n jabberers.n jabs.n jackals.n jackasses.n jackboots.n jackdaws.n jackets.n jackpots.n jacks.n jades.n jaguars.n jailers.n jailors.n jails.n jalopies.n jamborees.n jambs.n jamjars.n jampots.n jams.n janitors.n jarfuls.n jars.n jaunts.n javelins.n jawbones.n jawbreakers.n jaws.n jays.n jaywalkers.n jeeps.n jeers.n jellies.n jellyfish.p jennies.n jeremiads.n jerks.n jerries.n jerseys.n jesters.n jests.n jets.n jetties.n jewellers.n jewels.n jibes.n jibs.n jiffies.n jiggers.n jigs.n jigsaws.n jihads.n jimmies.n jingles.n jinxes.n jitterbugs.n jitters.n jobbers.n jobs.n jockeys.n joggers.n jogs.n joiners.n joins.n joints.n joists.n jokers.n jokes.n jollities.n jolts.n joules.n journalists.n journals.n journeys.n jovialities.n jowls.n joys.n jubilees.n judgements.n judges.n judgments.n judiciaries.n jugfuls.n juggernauts.n jugglers.n jugs.n juices.n jukeboxes.n juleps.n jumbles.n jumpers.n jumps.n junctions.n junctures.n jungles.n juniors.n junipers.n junkets.n junkies.n juntas.n juries.n jurists.n jurors.n justices.n justifications.n juveniles.n kaleidoscopes.n kalimbas.n kangaroos.n karats.n katzenklaviers.n kayaks.n kazoos.n kebabs.n keels.n keepers.n keepsakes.n kegs.n kellies kennels.n kerbs.n kerbstones.n kerchiefs.n kernels.n kettledrums.n kettles.n keyboards.n keyholes.n keynotes.n keyrings.n keys.n keystones.n keytars.n keywords.n khalams.n khans.n kickbacks.n kickoffs.n kicks.n kiddies.n kidnappers.n kidnappings.n kidneys.n kids.n killers.n killings.n killjoys.n kilns.n kilobytes.n kilograms.n kiloliters.n kilolitres.n kilometres.n kilos.n kiloseconds.n kilowatts.n kilts.n kimonos.n kindergartens.n kinds.n kingdoms.n kingfishers.n kingpins.n kings.n kinks.n kiosks.n kippers.n kirks.n kisanjis.n kissers.n kisses.n kitchenettes.n kitchens.n kites.n kits.n kittens.n kitties.n kiwis.n kleenexes.n kleptomaniacs.n knacks.n knapsacks.n knaves.n kneecaps.n knees.n knighthoods.n knights.n knives.n knobs.n knockers.n knockouts.n knocks.n knolls.n knots.n knuckles.n koalas.n kolas.n kopecks.n koras.n kotos.n kouxians.n labels.n laboratories.n labourers.n labours.n labs.n laburnums.n labyrinths.n lacerations.n laces.n lackeys.n lacquers.n lacunas.n ladders.n laddies.n ladies.n ladles.n lads.n ladybirds.n lagers.n laggards.n lagoons.n lags.n lairds.n lairs.n laities.n lakes.n lambs.n lambskins.n lamellaphones.n lamentations.n laments.n lamplighters.n lampoons.n lampposts.n lampreys.n lamps.n lampshades.n lancers.n lances.n lancets.n landaus.n landfalls.n landholders.n landings.n landladies.n landlords.n landlubbers.n landmarks.n landmines.n landowners.n lands.n landscapes.n landslides.n lanes.n languages.n lanterns.n lapels.n laps.n lapses.n larcenies.n larches.n larders.n largos.n larks.n larkspurs.n larynxes.n lasers.n lashes.n lashings.n lasses.n lassos.n latches.n latchkeys.n lathes.n laths.n latitudes.n latrines.n lattices.n laughs.n launchers.n launches.n launderettes.n laundries.n laureates.n laurels.n lavatories.n lavs.n lawbreakers.n lawgivers.n lawmakers.n lawns.n laws.n lawsuits.n lawyers.n laxatives.n layabouts.n laybys.n layers.n layoffs.n layovers.n leaders.n leads.n leaflets.n leagues.n leaks.n lean-tos.n leaps.n learners.n leaseholders.n leaseholds.n leases.n leashes.n leathernecks.n leave-takings.n leaves.n lechers.n lecterns.n lecturers.n lectures.n lectureships.n ledgers.n ledges.n leeches.n leeks.n leers.n leftists.n legacies.n legends.n legionaries.n legions.n legislators.n legislatures.n legs.n lemmings.n lemons.n lemurs.n lenders.n lengths.n lenses.n lentils.n leopards.n lepers.n leprechauns.n lesbians.n lesions.n lessees.n lessons.n lessors.n letterheads.n letters.n lettuces.n levees.n levellers.n levels.n levers.n levies.n levitations.n lexicographers.n lexicons.n liabilities.n liaisons.n liars.n libations.n libels.n liberalities.n liberals.n liberations.n liberators.n libertarians.n liberties.n libertines.n libidos.n librarians.n libraries.n librettists.n librettos.n licences.n licensees.n licenses.n lichees.n lichgates.n licks.n lids.n liens.n lies.n lieutenants.n lifebelts.n lifeboats.n lifebuoys.n lifeguards.n lifelines.n lifers.n lifetimes.n liftoffs.n ligaments.n ligatures.n lighters.n lighthouses.n lights.n lightships.n lightweights.n likenesses.n likings.n lilacs.n lilies.n lilts.n limbos.n limbs.n limericks.n limes.n limeys.n limitations.n limits.n limousines.n limps.n linchpins.n lindens.n lineages.n liners.n lines.n lineups.n lingerers.n lingoes.n linguists.n linings.n linkages.n links.n linkups.n linotypes.n lionesses.n lions.n lips.n lipsticks.n liqueurs.n liquidations.n liquidators.n liquidizers.n liquids.n liras.n lirones.n lisps.n listeners.n listings.n lists.n litanies.n literals.n lithographs.n litigants.n litigators.n litres.n litterbins.n litters.n liturgies.n livelihoods.n liveries.n livers.n lives.n livings.n lizards.n llamas.n loads.n loafers.n loans.n loaves.n lobbies.n lobbyists.n lobes.n lobsters.n locales.n localities.n localizations.n locals.n locations.n lochs.n lockers.n lockets.n lockouts.n locks.n locksmiths.n lockups.n locomotives.n locusts.n locutions.n lodestars.n lodgers.n lodges.n lofts.n loganberries.n logarithms.n logbooks.n logicians.n logjams.n logos.n logs.n loincloths.n loins.n loiterers.n lollies.n lollipops.n longboats.n longbows.n longings.n lookouts.n looks.n looms.n loonies.n loons.n loonybins.n loopholes.n loos.n looters.n lords.n lordships.n lorgnettes.n lorries.n losers.n losses.n lotions.n lots.n lotteries.n lotuses.n loudspeakers.n lounges.n louts.n louvres.n lovebirds.n lovers.n lowbrows.n lowlanders.n lows.n loyalists.n loyalties.n lozenges.n lubricants.n lugs.n lullabies.n lulls.n lumberjacks.n lumberyards.n luminaries.n lumps.n lunatics.n luncheons.n lunches.n lunges.n lungs.n lupins.n lurches.n lures.n lushes.n lutenists.n lutes.n luxuries.n lycees.n lyceums.n lychgates.n lymphocytes.n lynchpins.n lynxes.n lyras.n lyres.n lyricists.n lyrics.n macaroons.n macaws.n machetes.n machinations.n machines.n machinists.n mackerel.p mackintoshes.n macrocosms.n macs.n madams.n madhouses.n madrigals.n maelstroms.n maestros.n magazines.n maggots.n magicians.n magistrates.n magnates.n magnets.n magnifications.n magnifiers.n magnolias.n magnums.n magpies.n mahoganies.n maidenhoods.n maidens.n maids.n maidservants.n mailbags.n mailboats.n mailboxes.n mainlands.n mainmasts.n mains.n mainsprings.n mainstays.n maisonnettes.n majorities.n majors.n make-ups.n makers.n makeshifts.n makings.n maladies.n malaises.n malapropisms.n malcontents.n maledictions.n malefactors.n males.n malformations.n malfunctions.n malignancies.n malingerers.n mallards.n mallets.n malls.n mamas.n mambas.n mammals.n mammas.n mammoths.n manacles.n managements.n managers.n mandarins.n mandatories.n mando-basses.n mandocellos.n mandolas.n mandolins.n mandrakes.n manes.n maneuvers.n mangers.n mangos.n mangroves.n manholes.n maniacs.n manias.n manicures.n manicurists.n manifestations.n manifestos.n manifests.n manifolds.n manikins.n manipulations.n mannequins.n mannerisms.n manners.n manoeuvrers.n manoeuvres.n manors.n mansards.n manservants.n mansions.n mantelpieces.n mantels.n mantises.n mantles.n manuals.n manufacturers.n manuscripts.n maples.n maps.n maracass.n maraschinos.n marathons.n marauders.n marbles.n marchers.n marches.n mares.n margins.n marigolds.n marimbaphones.n marimbas.n marinas.n mariners.n marines.n marionettes.n markdowns.n markers.n marketplaces.n markets.n markings.n marks.n maroons.n marquees.n marquesses.n marquises.n marriages.n marrowbones.n marshals.n marshes.n marshmallows.n marsupials.n martinets.n martinis.n martins.n marts.n martyrs.n marvels.n marzipans.n mascots.n mashes.n masks.n masochists.n masons.n masquerades.n masques.n massacres.n massages.n masses.n masseurs.n masseuses.n masterminds.n masterpieces.n masters.n masterstrokes.n mastheads.n mastiffs.n mastodons.n masts.n matadors.n matchboxes.n matches.n matchmakers.n materialists.n materials.n mates.n mathematicians.n matinees.n matriarchies.n matriarchs.n matricides.n matrixes.n matrons.n mats.n matters.n mattresses.n mausoleums.n mavericks.n mavises.n maws.n maxims.n maximums.n maydays.n mayflies.n mayoralties.n mayoresses.n mayors.n maypoles.n mazes.n mazurkas.n mbiras.n meadows.n meads.n meals.n mealtimes.n meanies.n meanings.n means.n measurements.n measures.n meatballs.n meats.n mechanics.n mechanisms.n mechanizations.n medalists.n medallions.n medallists.n medals.n meddlers.n medians.n mediators.n medications.n medicines.n medics.n mediocrities.n meditations.n mediums.n medleys.n meetings.n meets.n megabytes.n megalomaniacs.n megaphones.n megatons.n megawatts.n melanges.n melees.n mellophones.n mellotrons.n melodeons.n melodicas.n melodies.n melodramas.n melons.n meltdowns.n members.n membranes.n mementos.n memoirs.n memorandums.n memorials.n memories.n memos.n menaces.n menageries.n menages.n mendicants.n mends.n menials.n menopauses.n mentalities.n mentions.n mentors.n menus.n mercenaries.n merchants.n mergers.n meridians.n meringues.n meritocracies.n merits.n mermaids.n merry-go-rounds.n merrymakers.n meshes.n messengers.n messes.n metallophones.n metallurgists.n metals.n metalworkers.n metalworks.n metaphors.n metatarsals.n meteorites.n meteorologists.n meteors.n meters.n methodologies.n methods.n methyls.n metiers.n metres.n metronomes.n metropolises.n mews.n mews.p mezzanines.n mezzo-sopranos.n miaous.n miaows.n miasmas.n microbes.n microcosms.n microfiches.n microfilms.n microliters.n microlitres.n micrometers.n micrometres.n microns.n microphones.n microscopes.n microseconds.n microwatts.n microwaves.n middies.n middles.n middleweights.n midges.n midgets.n midlands.n midriffs.n miens.n migraines.n migrants.n migrations.n mikados.n mikes.n mileages.n mileometers.n miles.n milestones.n milieus.n militants.n militarists.n militias.n milkmaids.n milkshakes.n milksops.n millenarians.n milleniums.n millepedes.n millers.n milligrams.n milliliters.n millilitres.n millimeters.n millimetres.n milliners.n millionaires.n millionairesses.n millipedes.n milliseconds.n milliwatts.n millponds.n mills.n millstones.n millwheels.n milometers.n milords.n mimeographs.n mimes.n mimics.n mimosas.n minarets.n mincers.n minds.n minefields.n minelayers.n mineralogists.n minerals.n miners.n mines.n minesweepers.n mineworkers.n miniatures.n miniaturists.n minims.n minimums.n minions.n ministers.n ministries.n minivans.n minks.n minnows.n minorities.n minors.n minsters.n minstrels.n mints.n minuets.n minuses.n minxes.n miracles.n mirages.n mirrors.n misanthropes.n misapplications.n miscalculations.n miscarriages.n miscellanies.n misconceptions.n miscounts.n miscreants.n misdeals.n misdeeds.n misdemeanours.n misdoings.n misers.n misfires.n misfits.n misfortunes.n misgivings.n mishaps.n mishmashes.n misinterpretations.n misnomers.n misogynists.n misprints.n mispronunciations.n misquotations.n misreadings.n misrepresentations.n misses.n missies.n missiles.n missionaries.n missives.n misspellings.n misstatements.n mistakes.n mistranslations.n mistresses.n mistrials.n mists.n misunderstandings.n misuses.n mites.n mitres.n mittens.n mixers.n mixes.n mixtures.n moans.n moats.n mobiles.n mobilizations.n mobs.n mobsters.n moccasins.n mockeries.n mocks.n modalities.n modelers.n modellers.n models.n modems.n moderates.n moderators.n modernists.n modes.n modifications.n modifiers.n mods.n modulations.n modules.n moguls.n molars.n molds.n molecules.n molehills.n moles.n molluscs.n monarchies.n monarchists.n monarchs.n monasteries.n moneyboxes.n moneychangers.n moneylenders.n mongers.n mongols.n mongooses.n mongrels.n monitors.n monkeys.n monks.n monochromes.n monocles.n monogamists.n monograms.n monographs.n monoliths.n monologues.n monopolies.n monorails.n monosyllables.n monotones.n monsoons.n monsters.n monstrosities.n montages.n monthlies.n monuments.n moods.n moonbeams.n moons.n moors.n moos.n moose.p mopeds.n mops.n moralists.n morals.n morasses.n moratoriums.n morgues.n morns.n morons.n morphemes.n morrows.n morsels.n morsings.n mortals.n mortarboards.n mortars.n mortgages.n morticians.n mortuaries.n mosaics.n mosques.n mosquitoes.n motels.n mothballs.n motherlands.n mothers.n moths.n motifs.n motions.n motivations.n motives.n motorbikes.n motorboats.n motorcades.n motorcars.n motorcoaches.n motorcycles.n motorcyclists.n motorists.n motors.n motorways.n mottos.n mouldings.n moulds.n mounds.n mountaineers.n mountains.n mounts.n mourners.n mousetraps.n mousses.n moustaches.n mouthfuls.n mouthpieces.n mouths.n movements.n movers.n movies.n mowers.n muckrakers.n muddles.n mudguards.n mudslingers.n muffins.n mufflers.n muffs.n muggers.n muggings.n mugs.n mugwumps.n mulattos.n mulberries.n mulches.n mules.n mullahs.n multimillionaires.n multinationals.n multiples.n multiplexers.n multitudes.n mummies.n municipalities.n munitions.n murals.n murderers.n murders.n murmurs.n muscles.n muses.n musetes.n museums.n mushrooms.n musicals.n musicians.n musketeers.n muskets.n muskrats.n mussels.n mustachios.n mustangs.n musters.n mutations.n mutes.n mutilations.n mutineers.n mutinies.n mutterers.n mutts.n muzzles.n mynahs.n mynas.n myriads.n mysteries.n mystics.n mystiques.n mythologies.n mythologists.n nachos.n nadaswarams.n nadirs.n nailfiles.n nails.n nameplates.n names.n namesakes.n nannies.n nanoliters.n nanolitres.n nanometers.n nanometres.n nanoseconds.n nanowatts.n napes.n napkins.n nappies.n naps.n narcotics.n narrations.n narratives.n narrators.n nasals.n nationalists.n nationalities.n nationalizations.n nationals.n nations.n natives.n nativities.n naturalists.n naturals.n natures.n naughts.n nautiluses.n navels.n naves.n navies.n navigators.n nearsides.n nebulas.n necessities.n neckbands.n necklaces.n necklines.n necks.n neckties.n necromancers.n necropolises.n nectarines.n needles.n negatives.n negligees.n negliges.n negotiations.n negotiators.n neighborhoods.n neighbors.n neighbourhoods.n neighbours.n neighs.n neologisms.n neophytes.n nephews.n nerves.n nestlings.n nests.n nets.n nettles.n networks.n neurologists.n neurotics.n neutralizations.n neutrons.n newcomers.n newlyweds.n newsagents.n newsboys.n newscasters.n newscasts.n newsdealers.n newsflashes.n newsletters.n newsmongers.n newspapers.n newsreels.n newsrooms.n newssheets.n newsstands.n newsvendors.n newts.n nexuses.n neys.n nibbles.n niceties.n niches.n nickels.n nicknacks.n nicknames.n nicks.n nieces.n nightcaps.n nightclubs.n nightdresses.n nightgowns.n nighties.n nightingales.n nightmares.n nightshirts.n nihilists.n nincompoops.n ninnies.n nipples.n nips.n nitrates.n nits.n nitwits.n nobles.n nocturnes.n nodes.n nods.n noggins.n nohkans.n noises.n nomads.n nomenclatures.n nominations.n nominees.n nonces.n noncombatants.n nonconformists.n nondescripts.n nonentities.n nonevents.n nonsmokers.n nonstarters.n noodles.n nooks.n nooses.n norms.n northeasters.n northerners.n northwesters.n nosebleeds.n nosedives.n nosegays.n noserings.n noses.n nostrils.n nostrums.n notables.n notaries.n notations.n notches.n notebooks.n notes.n notices.n nougats.n nouns.n novelettes.n novelists.n novels.n novelties.n novices.n nozzles.n nuances.n nubs.n nucleotides.n nudes.n nudges.n nudists.n nuggets.n nuisances.n numberplates.n numbers.n numerals.n numerators.n numskulls.n nuncios.n nunneries.n nuns.n nursemaids.n nurseries.n nurses.n nurturers.n nuthouses.n nutmegs.n nutritionists.n nuts.n nutshells.n nylons.n nymphomaniacs.n nymphos.n nymphs.n oafs.n oaks.n oars.n oatcakes.n oaths.n obbligatos.n obelisks.n obituaries.n objections.n objectives.n objectors.n objects.n oblongs.n oboes.n oboists.n obscenities.n observances.n observations.n observatories.n observers.n obsessions.n obstacles.n obstetricians.n obstructionists.n obstructions.n obverses.n ocarinas.n occasions.n occupancies.n occupants.n occupations.n occupiers.n occurrences.n oceans.n octagons.n octapads.n octaves.n octavins.n octets.n octogenarians.n octopuses.n oculists.n oddities.n oddments.n odds.n odes.n odours.n odysseys.n offences.n offenders.n offenses.n offensives.n offerings.n offertories.n officers.n offices.n officials.n offprints.n offshoots.n offspring.p ogres.n ohms.n oilcans.n oilfields.n ointments.n olds.n oligarchies.n oligopolies.n olives.n omegas.n omelets.n omelettes.n omens.n omissions.n omnibuses.n onions.n onlookers.n onrushes.n onsets.n onslaughts.n opals.n openers.n openings.n operas.n operations.n operatives.n operators.n operettas.n ophicleides.n opiates.n opossums.n opponents.n opportunists.n opposites.n oppressors.n opticians.n optimists.n optimums.n oracles.n orals.n oranges.n orations.n oratories.n oratorios.n orators.n orbits.n orbs.n orchards.n orchestras.n orchids.n ordeals.n orderings.n orderlies.n ordinals.n ordinances.n ordinations.n ores.n organisms.n organists.n organizations.n organizers.n organs.n orgasms.n orgies.n oriels.n orientalists.n orientals.n orifices.n originals.n originators.n origins.n orioles.n ornaments.n ornithologists.n orphanages.n orphans.n orthodontists.n orthodoxies.n orthographies.n oscillations.n oscillators.n oscillographs.n oscilloscopes.n ospreys.n osteopaths.n ostriches.n otters.n ottomans.n ounces.n ousters.n outbreaks.n outbursts.n outcasts.n outcomes.n outcries.n outfielders.n outfields.n outfits.n outfitters.n outflows.n outgrowths.n outhouses.n outings.n outlaws.n outlays.n outlets.n outliers.n outlines.n outlooks.n outpatients.n outposts.n outpourings.n outrages.n outriggers.n outsets.n outsiders.n outsides.n outskirts.n ovals.n ovaries.n ovations.n ovens.n overalls.n overcoats.n overdoses.n overdrafts.n overexposures.n overflows.n overgrowths.n overhangs.n overhauls.n overlaps.n overlays.n overlords.n overpasses.n overpayments.n overreactions.n overseers.n overshoes.n oversights.n overstatements.n overthrows.n overtones.n overtures.n overviews.n owls.n owners.n oxides.n oxtails.n oysters.n pacemakers.n paces.n pacesetters.n pachyderms.n pacifists.n packages.n packets.n packhorses.n packs.n pacts.n paddles.n paddocks.n padlocks.n padres.n pads.n paeans.n pagans.n pageants.n pages.n pagodas.n pailfuls.n pails.n painkillers.n pains.n paintboxes.n paintbrushes.n painters.n paintings.n paints.n pairs.n paixiaos.n pajamas.n palaces.n palaeontologists.n palates.n palatinates.n palefaces.n palendags.n paleontologists.n pales.n palettes.n palindromes.n pallbearers.n palliatives.n palls.n palms.n palpitations.n pals.n pamphleteers.n pamphlets.n pan_pipes panaceas.n panamas.n pancakes.n pancreases.n pandas.n pandemics.n panegyrics.n panelists.n panels.n panes.n pangs.n panhandles.n panoplies.n panoramas.n pans.n pansies.n pantheists.n pantheons.n panthers.n pantographs.n pantomimes.n pantries.n pants.n papacies.n papas.n papayas.n paperbacks.n paperclips.n papermills.n papers.n paperweights.n papists.n papooses.n papyruses.n parables.n parabolas.n parachutes.n parachutists.n parades.n paradigms.n paradises.n paradoxes.n paragons.n paragraphs.n parakeets.n parallelisms.n parallelograms.n parallels.n parameters.n paramours.n paranoiacs.n parapets.n paraplegics.n parasites.n parasols.n paratroopers.n parcels.n parchments.n pardons.n parents.n pariahs.n parishes.n parishioners.n parkas.n parks.n parlances.n parleys.n parliamentarians.n parliaments.n parlors.n parlours.n parodies.n parodists.n paroxysms.n parricides.n parrots.n pars.n parses.n parsers.n parsnips.n parsonages.n parsons.n participants.n participles.n particles.n particulars.n parties.n partings.n partisans.n partitions.n partners.n partnerships.n partridges.n parts.n parvenus.n pashas.n passages.n passageways.n passbooks.n passengers.n passes.n passions.n passives.n passports.n passwords.n pastels.n pasterns.n pastes.n pastiches.n pasties.n pastilles.n pastimes.n pastorals.n pastors.n pastries.n pasts.n pastures.n patches.n patellas.n patents.n pates.n pathogens.n pathologists.n paths.n pathways.n patients.n patinas.n patios.n patisseries.n patriarchies.n patriarchs.n patricians.n patricides.n patrimonies.n patriots.n patrols.n patronesses.n patrons.n patronymics.n pats.n patterns.n patties.n paunches.n paupers.n pauses.n pavements.n pavilions.n pawnbrokers.n pawns.n pawnshops.n paws.n paydays.n payees.n payers.n payloads.n paymasters.n payments.n payoffs.n payouts.n payphones.n payrolls.n paysheets.n payslips.n peacemakers.n peaches.n peacocks.n peaks.n peanuts.n pearls.n pears.n peas.n peasantries.n peasants.n peashooters.n pebbles.n pecans.n peccadillos.n peckers.n pecks.n peculiarities.n pedagogues.n pedals.n pedants.n peddlers.n pederasts.n pedestals.n pedestrians.n pediatricians.n pedicures.n pedigrees.n pedometers.n peeks.n peelers.n peepholes.n peeps.n peepshows.n peerages.n peeresses.n peers.n pees.n pegs.n pekinese.p pelicans.n pellets.n pelts.n pelvises.n penalties.n penchants.n pencils.n pendants.n pendulums.n penguins.n peninsulas.n penises.n penitentiaries.n pennants.n pens.n pensioners.n pensions.n pentagons.n penthouses.n penumbras.n peonies.n peons.n peoples.n peppercorns.n peppermints.n peppers.n perambulators.n percentages.n perches.n percolators.n percussionists.n percussions.n perennials.n perfectionists.n perforations.n performances.n performers.n perfumes.n perils.n perimeters.n periodicals.n periodicities.n peripheries.n periscopes.n perjurers.n perjuries.n perks.n perms.n permutations.n perorations.n peroxides.n perpendiculars.n perpetrators.n perpetuations.n perquisites.n persecutions.n persecutors.n personages.n personalities.n personas.n personifications.n persons.n perspectives.n persuasions.n perturbations.n perusals.n perversions.n perversities.n perverts.n pessimists.n pesticides.n pestilences.n pestles.n pests.n petabytes.n petals.n petards.n petitioners.n petitions.n pets.n petticoats.n petunias.n pews.n pfennigs.n phalanxes.n phalluses.n phantasies.n phantasmagorias.n phantasms.n phantoms.n pharmaceuticals.n pharmacies.n pharmacists.n pharmacologists.n pharynxes.n phases.n pheasants.n philanderers.n philanthropists.n philatelists.n philologists.n philosophers.n phobias.n phoenixes.n phonebooths.n phonecalls.n phonemes.n phones.n phoneticians.n phoneys.n phonies.n phonographs.n phosphates.n photocopiers.n photocopies.n photoflashes.n photographers.n photographs.n photometers.n photons.n photos.n photostats.n phrases.n phrenologists.n physicians.n physicists.n physiognomies.n physiologists.n physiotherapists.n physiques.n pianists.n pianofortes.n pianolas.n pianos.n piazzas.n pibgorns.n pica.p picadors.n piccolos.n pick-ups.n pickaxes.n pickerel.p pickers.n pickets.n pickles.n pickpockets.n picks.n pickups.n picnickers.n picnics.n picoliters.n picolitres.n picometers.n picometres.n picoseconds.n picowatts.n pictorials.n pictures.n pidgins.n pieces.n piers.n pies.n pieties.n pigeons.n piggies.n piggybacks.n piglets.n pigments.n pigmies.n pigs.n pigsties.n pigtails.n pike.p pikestaffs.n piles.n pilgrimages.n pilgrims.n pillages.n pillars.n pillboxes.n pillowcases.n pillows.n pills.n pilots.n pimentos.n pimples.n pimps.n pinafores.n pincers.n pinches.n pincushions.n pineapples.n pines.n pings.n pinheads.n pinks.n pinnacles.n pinpoints.n pinpricks.n pins.n pints.n pioneers.n pipedreams.n pipefuls.n pipelines.n pipers.n pipes.n pipettes.n pips.n pipsqueaks.n piques.n piranhas.n pirates.n pirouettes.n pisses.n pistachios.n pistils.n pistols.n pistons.n pitchers.n pitches.n pitchforks.n pitfalls.n pitheads.n pities.n pits.n pittances.n pituitaries.n pivots.n pixies.n pizzas.n placards.n placebos.n placements.n placeseekers.n plagiarists.n plagues.n plaice.p plains.n plaintiffs.n planes.n planetariums.n planets.n planks.n planners.n plantains.n plantations.n planters.n plants.n plaques.n plasters.n plastics.n plateaus.n platefuls.n plates.n platforms.n platitudes.n platoons.n platters.n platypuses.n plaudits.n playbills.n playboys.n players.n playgoers.n playgrounds.n playhouses.n playmates.n playoffs.n playpens.n playrooms.n plays.n playschools.n playthings.n playwrights.n plazas.n pleas.n pleasantries.n pleasures.n pleats.n plebeians.n plebiscites.n plectrums.n plenipotentiaries.n plenums.n plethoras.n plexus.p pliers.n plights.n plodders.n plops.n plotters.n ploughboys.n ploughs.n ploughshares.n plows.n ploys.n plucks.n plugholes.n plugs.n plumbers.n plumbs.n plumes.n plumps.n plums.n plunderers.n plungers.n plunges.n pluperfects.n pluralists.n pluralities.n plurals.n pluses.n plutocracies.n plutocrats.n poachers.n pocketfuls.n pockets.n podiums.n pods.n poems.n poets.n pogroms.n poinsettias.n pointers.n points.n poisons.n pokers.n pokes.n polarities.n polarizations.n poleaxes.n polecats.n polemics.n poles.n policies.n polishes.n politburos.n politicians.n politics.p polities.n polkas.n polls.n pollsters.n pollutants.n polonaises.n poltergeists.n polygamists.n polyglots.n polygons.n polynomials.n polyps.n polysyllables.n polytechnics.n pomegranates.n pompons.n ponchos.n ponds.n ponies.n pontiffs.n pontoons.n ponytails.n poodles.n poofs.n poolrooms.n pools.n poops.n poorhouses.n popes.n popinjays.n poplars.n poppies.n pops.n populaces.n popularizations.n populations.n populists.n porches.n porcupines.n pores.n porkers.n pornographers.n porosities.n porpoises.n porringers.n portals.n portcullises.n porterhouses.n porters.n portfolios.n portholes.n porticos.n portions.n portmanteaus.n portraitists.n portraits.n portrayals.n ports.n posers.n poses.n positivists.n posses.n possessions.n possums.n postbags.n postboxes.n postcards.n postcodes.n posteriors.n posters.n postgraduates.n postmarks.n postmasters.n postponements.n posts.n postscripts.n postulates.n postures.n potatoes.n potbellies.n potboilers.n potencies.n potentates.n potentialities.n potentials.n potheads.n potholes.n potions.n potpourris.n pots.n potteries.n potters.n potties.n pouches.n poultices.n pounces.n pounds.n pouts.n powders.n powerboats.n powerhouses.n powers.n powwows.n practicalities.n practices.n practitioners.n praesidiums.n pragmatists.n prairies.n praises.n prams.n prances.n pranks.n pranksters.n prattlers.n prawns.n prayers.n preachers.n preambles.n prearrangements.n prebendaries.n precautions.n precedents.n preceptors.n precepts.n precessions.n precincts.n precipices.n precis.p preconceptions.n preconditions.n precursors.n predators.n predecessors.n predeterminations.n predicaments.n predicates.n predictions.n predictors.n predilections.n predispositions.n prefabrications.n prefaces.n prefects.n prefectures.n preferences.n prefixes.n pregnancies.n prejudgements.n prejudices.n prelates.n preliminaries.n prelims.n preludes.n premieres.n premiers.n premierships.n premises.n premisses.n premiums.n preoccupations.n preparations.n preponderances.n prepositions.n preps.n prerogatives.n prescriptions.n presences.n presentations.n presentiments.n presents.n preservatives.n preservers.n preserves.n presidencies.n presidents.n presidiums.n presses.n pressings.n prestidigitators.n presumptions.n pretences.n pretenders.n pretenses.n pretensions.n pretexts.n pretzels.n previews.n previsions.n pricelists.n prices.n pricetags.n prickles.n pricks.n priestesses.n priesthoods.n priests.n prigs.n primacies.n primaries.n primates.n primers.n primes.n primings.n primitives.n primroses.n princedoms.n princes.n princesses.n principalities.n principals.n printers.n printings.n printouts.n prints.n priories.n priorities.n priors.n prisms.n prisoners.n prisons.n privateers.n privates.n privations.n privatizations.n privies.n privileges.n prizes.n probates.n probes.n problems.n proboscises.n procedures.n proceedings.n proceeds.n processes.n processions.n processors.n proconsulates.n proconsuls.n procreations.n proctors.n procurers.n prodigies.n prods.n producers.n productions.n products.n profanities.n professionals.n professions.n professoriates.n professors.n professorships.n profiles.n profiteers.n profits.n profundities.n progenitors.n prognoses.n prognostications.n programmers.n programmes.n programs.n progressions.n progressives.n prohibitionists.n prohibitions.n projectiles.n projectionists.n projections.n projectors.n projects.n proletarians.n proletariats.n proliferations.n prologues.n prolongations.n promenades.n promontories.n promoters.n promotions.n prompters.n prompts.n proms.n prongs.n pronouncements.n pronouns.n proofreaders.n propagandists.n propagators.n propellants.n propellents.n propellers.n properties.n prophecies.n prophets.n prophylactics.n proponents.n proportions.n proprietors.n props.n pros.n prosceniums.n proscriptions.n prosecutions.n prosecutors.n prospectors.n prospectuses.n prostates.n prostitutes.n protagonists.n protectionists.n protections.n protectorates.n protectors.n protegees.n proteges.n proteins.n protestations.n protesters.n protests.n protocols.n protons.n prototypes.n protractors.n protrusions.n protuberances.n proverbs.n providers.n provinces.n provincialisms.n provocations.n provosts.n prowlers.n prowls.n prows.n proxies.n prudes.n prunes.n psalmists.n psalms.n psalteries.n psalters.n psalterys.n pseudonyms.n pseuds.n psyches.n psychiatrists.n psychics.n psychoanalysts.n psychologists.n psychopaths.n psychotics.n pterodactyls.n publications.n publicists.n publishers.n pubs.n pucks.n puddings.n puddles.n pueblos.n puffins.n puffs.n pulalus.n pulleys.n pullovers.n pulpits.n pulps.n pulsars.n pulsations.n pulses.n pumas.n pumpkins.n pumps.n punchballs.n punchbowls.n punches.n punctures.n pundits.n punishments.n punks.n puns.n punsters.n punts.n pupils.n puppeteers.n puppets.n puppies.n pups.n purchasers.n purchases.n purees.n purgatories.n purges.n purifications.n purifiers.n purists.n puritans.n purposes.n purrs.n purses.n pursefuls.n pursuers.n pursuits.n purveyors.n purviews.n pushcarts.n pushers.n pushes.n pushovers.n pussies.n pussycats.n putsches.n putts.n puzzles.n pygmies.n pylons.n pyramids.n pyres.n pythons.n quacks.n quadrangles.n quadrants.n quadrilaterals.n quadrupeds.n quadruplets.n quads.n quagmires.n quails.n quakes.n qualifications.n qualifiers.n qualities.n qualms.n quandaries.n quantities.n quarantines.n quarks.n quarrels.n quarries.n quarterbacks.n quarterfinals.n quarterlies.n quarters.n quartets.n quarts.n quasars.n quatercentenaries.n quatrains.n quatros.n quavers.n quays.n queens.n queers.n queries.n quesadillas.n questioners.n questionnaires.n quests.n queues.n quibbles.n quiches.n quickies.n quicksteps.n quid.p quietists.n quills.n quilts.n quincentenaries.n quinces.n quintessences.n quintets.n quinticlaves.n quintuplets.n quips.n quirks.n quitters.n quivers.n quizes.n quizmasters.n quorums.n quotas.n quotations.n quotes.n quotients.n rabbis.n rabbits.n rabbles.n raccoons.n racecourses.n racehorses.n racers.n races.n racists.n racketeers.n rackets.n racks.n raconteurs.n racoons.n racquets.n radials.n radiations.n radiators.n radicals.n radicles.n radiograms.n radioisotopes.n radiologists.n radios.n radishes.n raffles.n rafters.n rafts.n ragamuffins.n rags.n ragtags.n raiders.n raids.n railcars.n railheads.n railings.n railroads.n rails.n railways.n rainbows.n raincoats.n raindrops.n rainfalls.n rainsticks.n raises.n raisins.n rakes.n rallies.n ramblers.n rambles.n ramifications.n rampages.n ramparts.n ramps.n ramrods.n rams.n ranchers.n ranches.n rangefinders.n rangers.n ranges.n ranks.n ransoms.n rapes.n rapids.n rapiers.n rapists.n rapports.n rapprochements.n raps.n rapscallions.n raptures.n rarebits.n rarities.n rascals.n rashers.n rashes.n raspberries.n rasps.n ratchets.n ratepayers.n rates.n ratifications.n ratings.n rationales.n rationalists.n rationalizations.n rations.n ratios.n rats.n rattles.n rattlesnakes.n ravens.n raves.n ravines.n rays.n razorbacks.n razorblades.n razors.n re-elections.n reaches.n reactionaries.n reactions.n reactors.n readers.n readerships.n readings.n readjustments.n reagents.n realignments.n realists.n realities.n realms.n realties.n realtors.n reams.n reapers.n reappearances.n reappraisals.n rearguards.n rears.n reassessments.n rebates.n rebecs.n rebellions.n rebels.n rebirths.n rebounds.n rebuffs.n rebukes.n rebuttals.n recalls.n recapitulations.n recaps.n receipts.n receivables.n receivers.n receiverships.n receptacles.n receptionists.n receptions.n recesses.n recessionals.n recessions.n recidivists.n recipes.n recipients.n recitals.n recitations.n recitatives.n reckonings.n recluses.n recognizances.n recoils.n recollections.n recompenses.n reconciliations.n reconnaissances.n reconstructions.n recorders.n recordings.n records.n recoveries.n recreations.n recriminations.n recruiters.n recruitments.n recruits.n rectangles.n rectifiers.n rectories.n rectors.n rectums.n recurrences.n recyclers.n redbreasts.n redcaps.n redcoats.n redeemers.n redevelopments.n redheads.n rediscoveries.n redoubts.n redskins.n reductions.n redundancies.n redwoods.n reeds.n reefers.n reefs.n reels.n refectories.n referees.n references.n referendums.n referrals.n refills.n refinements.n refineries.n refiners.n reflections.n reflectors.n reflexes.n reflexives.n reformations.n reformatories.n reformers.n reforms.n refractions.n refrains.n refreshers.n refreshments.n refrigerants.n refrigerators.n refugees.n refuges.n refunds.n refutations.n regards.n regattas.n regencies.n regents.n regicides.n regimens.n regiments.n regimes.n regions.n registers.n registrars.n registrations.n registries.n regressions.n regrets.n regularities.n regulars.n regulations.n regulators.n rehabilitations.n rehashes.n rehearings.n rehearsals.n reigns.n reimbursements.n reimpositions.n reincarnations.n reindeer.p reinforcements.n reins.n reinterpretations.n reissues.n reiterations.n rejections.n rejects.n rejoinders.n relapses.n relations.n relationships.n relatives.n relaxations.n relays.n releases.n relics.n religions.n rellenos.n remainders.n remains.n remakes.n remarriages.n remedies.n remembrances.n reminders.n reminiscences.n remissions.n remittances.n remnants.n remonstrances.n removals.n removers.n renaissances.n renascences.n renderings.n rendezvous.p renditions.n renegades.n renewals.n renovations.n rentals.n rents.n reorganizations.n repairs.n reparations.n repasts.n repayments.n repeals.n repeaters.n repeats.n repercussions.n repertoires.n repertories.n repetitions.n replacements.n replays.n replicas.n replies.n reporters.n repositories.n representations.n representatives.n reprieves.n reprimands.n reprints.n reprisals.n reproaches.n reprobates.n reproductions.n reproofs.n reptiles.n republicans.n republics.n repudiations.n repurchases.n reputations.n requiems.n requisitions.n reruns.n resales.n rescuers.n rescues.n researchers.n researches.n resemblances.n reservations.n reserves.n reservoirs.n resettlements.n reshuffles.n residences.n residencies.n residents.n residues.n resignations.n resins.n resisters.n resistors.n resolutions.n resonators.n resorts.n resources.n respectabilities.n respects.n respirations.n respirators.n respites.n respondents.n responses.n restatements.n restauranteurs.n restaurants.n restaurateurs.n restorations.n restoratives.n restorers.n restraints.n restructurings.n rests.n results.n resumes.n resumptions.n resurgences.n retailers.n retails.n retainers.n retardations.n retards.n retinas.n retinues.n retirees.n retirements.n retorts.n retractions.n retreads.n retreats.n retrenchments.n retrials.n retrievers.n returns.n reunions.n reveilles.n revelations.n revellers.n revels.n revenues.n reverberations.n reverends.n reveries.n reversals.n reverses.n reversions.n reviewers.n reviews.n revisionists.n revisions.n revivalists.n revivals.n revocations.n revolts.n revolutionaries.n revolutions.n revolvers.n revs.n revues.n rewards.n rewrites.n rhapsodies.n rheostats.n rheumatics.n rhinoceros.p rhinos.n rhododendrons.n rhombuses.n rhymes.n rhythms.n ribbons.n ribs.n rickshaws.n ricochets.n riddles.n riders.n rides.n ridges.n riffs.n rifles.n rifts.n riggers.n rightists.n rigidities.n rigs.n rims.n ringers.n ringleaders.n ringlets.n ringmasters.n rings.n ringsides.n rinks.n rinses.n rioters.n riots.n ripostes.n ripples.n rips.n risers.n risottos.n rites.n rituals.n rivalries.n rivals.n riverbeds.n rivers.n riversides.n rivets.n rivulets.n roach.p roadbeds.n roadblocks.n roadhouses.n roads.n roadsides.n roadsters.n roadways.n roars.n roasters.n roasts.n robberies.n robbers.n robes.n robins.n robots.n rockeries.n rockers.n rockets.n rocks.n rodents.n rodeos.n rods.n roe.p roebucks.n rogues.n roles.n rollers.n rolls.n romances.n romantics.n romps.n rondeaus.n rondos.n roofs.n rookeries.n rookies.n rooks.n roomfuls.n rooms.n roosters.n roosts.n roots.n ropes.n rosaries.n rosebuds.n roses.n rosters.n rostrums.n rotaries.n rotas.n rotations.n rotisseries.n rotors.n rotters.n rotundas.n roues.n roughnecks.n roughriders.n roundabouts.n roundelays.n roundhouses.n rounds.n roundups.n routes.n routines.n routs.n rovers.n rowboats.n rowdies.n rowers.n rows.n royalists.n royalties.n rubbernecks.n rubbers.n rubies.n rubrics.n rubs.n rucksacks.n ruckuss.n rudders.n rudiments.n ruffians.n ruffles.n ruffs.n rugs.n ruins.n rulers.n rulings.n rumbas.n rumbles.n rumours.n rumps.n run-ups.n runaways.n rundowns.n runes.n rungs.n runners.n runoffs.n runs.n runts.n runways.n ruptures.n ruses.n rushes.n rusks.n rustics.n rustlers.n ruts.n ryutekis.n sabbaticals.n sables.n saboteurs.n sabres.n sachets.n sackbuts.n sacks.n sacraments.n sacrifices.n sacs.n saddlebags.n saddles.n sadists.n safaris.n safecrackers.n safeguards.n safes.n sagas.n sages.n sags.n sahibs.n sailors.n sails.n saints.n sakes.n salaams.n salads.n salamanders.n salaries.n salerooms.n sales.n salines.n sallies.n salons.n saloons.n salts.n saltworks.p salutations.n salutes.n salvers.n salves.n salvos.n sambas.n samovars.n sampans.n samplers.n samples.n samponias.n sanatoriums.n sanctions.n sanctities.n sanctuaries.n sanctums.n sandals.n sandbags.n sandbanks.n sandglasses.n sandpipers.n sandpits.n sands.n sandstorms.n sandwiches.n saplings.n sappers.n sapphires.n saps.n sarabands.n sardines.n saris.n sarongs.n sashes.n satchels.n satellites.n satires.n satirists.n satisfactions.n satraps.n satyrs.n saucepans.n saucers.n sauces.n saunas.n sausages.n savages.n savannahs.n savannas.n savants.n savers.n savings.p saviours.n savoys.n sawhorses.n sawmills.n saws.n sawyers.n saxes.n saxhorns.n saxonettes.n saxophones.n saxophonists.n scabbards.n scabs.n scaffolds.n scalawags.n scales.n scallops.n scallywags.n scalpels.n scalps.n scamps.n scams.n scandalmongers.n scandals.n scanners.n scapegoats.n scapulas.n scarcities.n scarecrows.n scaremongers.n scares.n scarfs.n scarlets.n scars.n scatterbrains.n scatters.n scavengers.n scenarios.n scenes.n scents.n sceptics.n sceptres.n schedules.n schemas.n schemers.n schemes.n scherzos.n schisms.n schizophrenics.n schnitzels.n scholars.n scholarships.n schoolbooks.n schoolboys.n schoolfellows.n schoolfriends.n schoolgirls.n schoolhouses.n schoolmasters.n schoolmates.n schoolmistresses.n schoolrooms.n schools.n schoolteachers.n schooners.n schottisches.n schwas.n sciences.n scientists.n scimitars.n scintillas.n scions.n scolds.n scollops.n scones.n scoopfuls.n scoops.n scooters.n scorchers.n scoreboards.n scorebooks.n scorecards.n scorers.n scores.n scorpions.n scotches.n scoundrels.n scourges.n scoutmasters.n scouts.n scowls.n scrambles.n scrapbooks.n scrapers.n scrapes.n scrapheaps.n scraps.n scratches.n scrawls.n screams.n screenplays.n screens.n screwballs.n screwdrivers.n screws.n scribblers.n scribbles.n scribes.n scrimmages.n scripts.n scriptures.n scriptwriters.n scriveners.n scrolls.n scrotums.n scroungers.n scrubs.n scruffs.n scrunches.n scruples.n scuds.n sculleries.n sculptors.n sculptures.n scythes.n seabeds.n seabirds.n seaboards.n seafarers.n seafronts.n seagulls.n seals.n seams.n seamstresses.n seances.n seaplanes.n seaports.n searchers.n searches.n searchlights.n seas.n seascapes.n seashells.n seashores.n seasides.n seasonings.n seasons.n seats.n seaways.n seaweeds.n secessionists.n secessions.n seconders.n secretariats.n secretaries.n secretions.n secrets.n secs.n sectarians.n sections.n sectors.n sects.n securities.n sedans.n sedatives.n seducers.n seductions.n seedbeds.n seedlings.n seeds.n seekers.n seers.n seesaws.n segmentations.n segments.n seigniors.n seismographs.n seismologists.n seizures.n selections.n selectors.n self-examinations.n self-sacrifices.n sellers.n selloffs.n sellouts.n semblances.n semesters.n semibreves.n semicircles.n semicolons.n semiconductors.n semifinalists.n semifinals.n seminaries.n seminars.n semiquavers.n semitones.n semivowels.n senates.n senators.n senders.n sendoffs.n seniors.n senoras.n senoritas.n sensationalists.n sensations.n sensibilities.n sensitivities.n sentences.n sentiments.n sentinels.n sentries.n separations.n separatists.n septets.n septuagenarians.n sepulchres.n sequels.n sequences.n sequins.n sequoias.n serenades.n serfs.n sergeants.n serials.n series.p sermons.n serpents.n servants.n servers.n serves.n services.n serviettes.n servings.n sessions.n setbacks.n sets.n settees.n setters.n settings.n settlements.n settlers.n sewers.n sexagenarians.n sexes.n sexists.n sextants.n sextets.n sextons.n shackles.n shacks.n shades.n shadings.n shadows.n shafts.n shahs.n shakes.n shakedowns.n shakeouts.n shakers.n shakuhachis.n shampoos.n shamrocks.n shandies.n shanks.n shanties.n shantytowns.n shapes.n shards.n sharecroppers.n shareholders.n shareholdings.n shares.n sharks.n sharpeners.n sharpers.n sharps.n sharpshooters.n shavers.n shaves.n shawls.n sheathings.n sheaths.n sheds.n sheepdogs.n sheepskins.n sheets.n shehnais.n sheikdoms.n sheikhdoms.n sheikhs.n sheiks.n shekeres.n shellfish.p shells.n shelters.n shengs.n shepherds.n sherbets.n sheriffs.n sherries.n shibboleths.n shields.n shifts.n shimmers.n shinbones.n shindigs.n shingles.n shinguards.n shinobues.n shins.n shipbuilders.n shiploads.n shipmates.n shipments.n shipowners.n shippers.n ships.n shipwrecks.n shipwrights.n shipyards.n shires.n shirkers.n shirts.n shirtwaists.n shivers.n shoals.n shockers.n shocks.n shoehorns.n shoelaces.n shoemakers.n shoes.n shoestrings.n shoetrees.n shoguns.n shooters.n shootings.n shopkeepers.n shoplifters.n shoppers.n shops.n shopwindows.n shores.n shortages.n shortcomings.n shortcuts.n shortfalls.n shortlists.n shorts.n shortstops.n shotguns.n shots.n shoulders.n shouts.n shovelfuls.n shovels.n shoves.n showboats.n showcases.n showdowns.n showers.n showgirls.n showings.n showplaces.n showrooms.n shows.n shreds.n shrews.n shrieks.n shrimps.n shrines.n shrinks.n shrouds.n shrubberies.n shrubs.n shrugs.n shudders.n shuffles.n shutdowns.n shutters.n shuttlecocks.n shuttles.n shysters.n sibilants.n siblings.n sickbays.n sickbeds.n sickles.n sicknesses.n sideboards.n sidecars.n sidelights.n sidelines.n sides.n sideshows.n sidesteps.n sidetracks.n sidewalks.n sidings.n sieges.n sierras.n siestas.n sieves.n sifters.n sighs.n sightings.n sights.n sightseers.n signals.n signatories.n signatures.n signers.n signoras.n signorinas.n signors.n signposts.n sikus.n silencers.n silences.n silhouettes.n silks.n silkworms.n sills.n silos.n silversmiths.n similarities.n similes.n similitudes.n simpletons.n simplifications.n simulations.n simulators.n sinecures.n sines.n sinews.n singers.n singles.n singletons.n singsongs.n singularities.n singulars.n sinkers.n sinkings.n sinks.n sinners.n sins.n sinuses.n siphons.n sips.n sirens.n sirloins.n sirs.n sirups.n sissies.n sisters.n sitars.n sites.n sitters.n sittings.n situations.n sixpences.n sizes.n skateboarders.n skateboards.n skaters.n skates.n skeets.n skeletons.n skeptics.n sketches.n skewers.n skids.n skiers.n skies.n skiffs.n skillets.n skills.n skinflints.n skinheads.n skins.n skippers.n skips.n skirmishes.n skirts.n skis.n skits.n skullcaps.n skulls.n skunks.n skylarks.n skylights.n skylines.n skyscrapers.n slabs.n slacks.n slams.n slanderers.n slanders.n slants.n slaps.n slashes.n slates.n slats.n slaughterers.n slaughterhouses.n slaves.n slayers.n sledgehammers.n sleds.n sleepers.n sleepwalkers.n sleeves.n sleighs.n sleights.n sleuths.n slices.n slickers.n slicks.n slides.n slights.n slingers.n slings.n slipcovers.n slipknots.n slippers.n slips.n slits.n slivers.n slobs.n sloes.n slogans.n sloops.n slopes.n slops.n sloths.n slots.n slowcoaches.n slowdowns.n sluggards.n slugs.n sluicegates.n sluices.n slumbers.n slumps.n slums.n slurs.n sluts.n smackers.n smacks.n smallholders.n smallholdings.n smashes.n smatterings.n smears.n smells.n smelts.n smiles.n smirks.n smithies.n smiths.n smocks.n smokers.n smokestacks.n smorgasbords.n smudges.n smugglers.n snacks.n snags.n snails.n snakes.n snapdragons.n snaps.n snapshots.n snares.n snarls.n snatchers.n snatches.n sneaks.n sneers.n sneezes.n snickers.n sniffs.n sniggers.n snipers.n snippers.n snippets.n snips.n snobs.n snoopers.n snoozes.n snorers.n snores.n snorkels.n snorts.n snouts.n snowballs.n snowdrifts.n snowdrops.n snowfalls.n snowflakes.n snowploughs.n snowstorms.n snubs.n snuffboxes.n snugs.n soapboxes.n sobriquets.n sobs.n socialists.n socialites.n socials.n societies.n sociologists.n sockets.n socks.n sodomites.n sods.n sofas.n softeners.n softies.n soirees.n sojourners.n solaces.n soldiers.n soles.n solicitors.n solids.n soliloquies.n solitudes.n soloists.n solos.n solstices.n solutions.n solvents.n sombreros.n somersaults.n somnambulists.n sonars.n sonatas.n songbirds.n songbooks.n songs.n sonnets.n sonnies.n sonorities.n sons.n soothsayers.n sopapillas.n sophisms.n sophists.n sophomores.n sopranos.n sops.n sorbets.n sorcerers.n sorceresses.n sores.n sororities.n sorrels.n sorrows.n sorters.n sorties.n sorts.n soubriquets.n souffles.n souls.n sounds.n soundtracks.n soupcons.n soups.n sources.n sousaphones.n southeasters.n southerners.n southpaws.n southwesters.n souvenirs.n sovereigns.n soviets.n sowers.n sows.n soybeans.n spacecraft.p spaces.n spaceships.n spacesuits.n spadefuls.n spades.n spaniels.n spankings.n spanners.n spans.n spares.n sparklers.n sparkles.n sparks.n sparrows.n spars.n spas.n spasms.n spastics.n spates.n spatulas.n speakerphones.n speakers.n spears.n specialists.n specialities.n specializations.n specials.n specialties.n species.p specifications.n specifics.n specimens.n speckles.n specks.n specs.n spectacles.n spectaculars.n spectators.n specters.n spectres.n spectroscopes.n spectrums.n speculators.n speeches.n speedboats.n speedometers.n speeds.n speedways.n spellers.n spellings.n spells.n spenders.n spendthrifts.n spermicides.n sperms.n spheres.n sphinxes.n spices.n spiders.n spiels.n spies.n spigots.n spikes.n spills.n spindles.n spines.n spinets.n spinoffs.n spins.n spinsters.n spirals.n spires.n spirits.n spirituals.n spitfires.n spittoons.n splashes.n spleens.n splices.n splinters.n splints.n splits.n splotches.n spoils.n spoilsports.n spokes.n spokespersons.n spondees.n spongers.n sponges.n sponsors.n sponsorships.n spoofs.n spooks.n spools.n spoonerisms.n spoonfuls.n spoons.n spores.n sporrans.n sports.n spotlights.n spots.n spotters.n spouses.n spouts.n sprains.n sprawls.n sprayers.n sprays.n spreaders.n spreads.n sprees.n sprigs.n springboards.n springboks.n springs.n springtimes.n sprinklers.n sprinters.n sprints.n sprockets.n sprouts.n spruces.n spuds.n spurs.n spurts.n sputniks.n squabbles.n squabs.n squadrons.n squads.n squalls.n squares.n squatters.n squawks.n squaws.n squeakers.n squeaks.n squealers.n squeals.n squeegees.n squeezers.n squeezes.n squibs.n squids.n squiggles.n squints.n squires.n squirrels.n squirts.n stabilizations.n stableboys.n stablemates.n stables.n stabs.n stacks.n stadiums.n staffers.n staffs.n stagecoaches.n stages.n staggers.n stagings.n stags.n stains.n staircases.n stairs.n stairways.n stakes.n stalactites.n stalagmites.n stalemates.n stalkers.n stalks.n stallions.n stalls.n stalwarts.n stamens.n stammerers.n stammers.n stampedes.n stamps.n stances.n standards.n standbys.n standoffs.n standpipes.n standpoints.n stands.n standstills.n stanzas.n staplers.n staples.n stares.n starfish.p stargazers.n starlets.n starlings.n stars.n starters.n starts.n startups.n states.n stationers.n stationmasters.n stations.n statisticians.n statistics.n statues.n statuettes.n statutes.n staves.n stays.n steaks.n steamboats.n steamers.n steamrollers.n steamships.n steeds.n steelmakers.n steelpans.n steelworks.p steelyards.n steeplechasers.n steeplechases.n steeplejacks.n steeples.n steers.n stems.n stenches.n stencils.n stenographers.n stepbrothers.n stepdaughters.n stepfathers.n stepladders.n stepmothers.n stepparents.n steppes.n steps.n stepsisters.n stepsons.n stereos.n stereoscopes.n stereotypes.n sterns.n sternums.n stethoscopes.n stetsons.n stevedores.n stewardesses.n stewards.n stews.n stickers.n sticklers.n sticks.n sties.n stiffs.n stigmas.n stiles.n stilettos.n stillbirths.n stills.n stilts.n stimulants.n stingers.n stingrays.n stings.n stinkers.n stinks.n stints.n stipends.n stirrups.n stirs.n stitches.n stoats.n stockades.n stockbrokers.n stockcars.n stockfish.p stockholders.n stockholdings.n stocking.n stockings.n stockpiles.n stockrooms.n stocks.n stockyards.n stoics.n stomachs.n stonemasons.n stones.n stooges.n stools.n stoops.n stopgaps.n stopovers.n stoppages.n stoppers.n stops.n stopwatches.n storehouses.n storerooms.n stores.n storeys.n stories.n storks.n storms.n storytellers.n stoves.n stowaways.n stragglers.n strainers.n strains.n straitjackets.n straits.n strands.n strangers.n strangleholds.n straphangers.n straps.n stratagems.n strategies.n strategists.n stratifications.n stratospheres.n strawberries.n straws.n strays.n streaks.n streamers.n streamlets.n streams.n streetcars.n streets.n streetwalkers.n strengths.n stresses.n stretchers.n stretches.n strictures.n strides.n strikebreakers.n strikers.n strikes.n strings.n stripes.n strippers.n strips.n stroboscopes.n strokes.n strollers.n strolls.n strongboxes.n strongholds.n strophes.n structures.n strudels.n struggles.n struts.n stubs.n stuccos.n students.n studies.n studios.n studs.n stuffs.n stumbles.n stumps.n stunners.n stunts.n stupors.n sturgeons.n stutterers.n stutters.n styles.n stylists.n stylizations.n styluses.n subalterns.n subcommittees.n subcontinents.n subcontractors.n subcontracts.n subdivisions.n subeditors.n subfamilies subgroups.n subheadings.n subjects.n subjugations.n subleases.n sublimates.n sublimations.n submarines.n submissions.n subordinates.n subpoenas.n subs.n subscribers.n subscriptions.n subscripts.n subsections.n subsets.n subsidiaries.n subsidies.n substances.n substantives.n substitutes.n substitutions.n substrates.n subterfuges.n subtitles.n subtleties.n subtractions.n suburbs.n subversives.n subways.n successes.n successors.n suckers.n sucklings.n sufferers.n suffixes.n suffrages.n suffragettes.n sugarlumps.n suicides.n suitcases.n suites.n suitors.n suits.n sultanas.n sultanates.n sultans.n summaries.n summations.n summerhouses.n summers.n summits.n summonses.n sums.n sunbeams.n sunblinds.n sunbonnets.n sunburns.n sundaes.n sundials.n sunfish.p sunflowers.n sunglasses.n sunhats.n sunlamps.n sunrises.n sunroofs.n suns.n sunsets.n sunshades.n sunspots.n suntans.n supercomputers.n superconductors.n superfamilies superficialities.n superfluities.n superintendents.n superiors.n superlatives.n supermarkets.n supernumeraries.n superpowers.n supers.n superstars.n superstitions.n superstructures.n supervisors.n suppers.n supplements.n supplicants.n supplications.n suppliers.n supplies.n supporters.n supports.n suppositories.n suppressions.n suppressors.n surcharges.n surfaces.n surfboards.n surfboats.n surfeits.n surgeons.n surgeries.n surges.n surnames.n surpluses.n surprises.n surrealists.n surrenders.n surrogates.n surtaxes.n surveyors.n surveys.n survivals.n survivors.n susceptibilities.n suspects.n suspenders.n sutures.n suzerains.n swabs.n swaggers.n swallows.n swamps.n swans.n swaps.n swarms.n swashbucklers.n swastikas.n swathes.n swaths.n swearwords.n sweatbands.n sweaters.n sweats.n sweatshops.n sweepers.n sweeps.n sweetenings.n sweethearts.n sweeties.n swells.n swerves.n swigs.n swimmers.n swimsuits.n swindlers.n swindles.n swine.p swineherds.n swings.n swipes.n swirls.n switchboards.n switches.n swivels.n swoons.n swoops.n swordfish.p swords.n sycamores.n sycophants.n syllables.n syllabuses.n syllogisms.n symbolisms.n symbolizations.n symbols.n sympathies.n sympathizers.n symphonies.n symposiums.n symptoms.n synagogues.n synclaviers.n syncopations.n syndicates.n syndromes.n synods.n synonyms.n synthesizers.n syphons.n syringes.n syrups.n systems.n tabbies.n tabernacles.n tablecloths.n tablemats.n tables.n tablespoonfuls.n tablespoons.n tablets.n tabloids.n taboos.n tabs.n tabulations.n tacitos.n tackles.n tacks.n tacos.n tacticians.n tactics.n tadpoles.n taffies.n tags.n tailgates.n tailors.n tailpieces.n tails.n tailspins.n take-offs.n takeoffs.n takeovers.n takers.n talents.n tales.n talismans.n talkers.n talkies.n talks.n tallboys.n tallies.n talons.n tamales.n tamarinds.n tamborils.n tambourines.n tamburitzas.n tangents.n tangerines.n tangles.n tangos.n tangs.n tankards.n tankers.n tanks.n tanneries.n tanners.n tans.n tantrums.n tapers.n tapes.n tapestries.n tapeworms.n taprooms.n taproots.n taps.n tarantellas.n tarantulas.n targets.n tariffs.n tarogatos.n tarpaulins.n tars.n tartans.n tarts.n taskmasters.n tasks.n tassels.n tasters.n tastes.n tatters.n tattlers.n tattoos.n taunts.n tautologies.n taverns.n taxes.n taxicabs.n taxidermists.n taximeters.n taxis.n taxonomies.n taxpayers.n teacakes.n teachers.n teachings.n teacups.n teahouses.n teammates.n teams.n teamsters.n teapots.n tearooms.n tears.n teasers.n teases.n teashops.n teaspoonfuls.n teaspoons.n teats.n technicalities.n technicians.n techniques.n technocracies.n technocrats.n technologies.n technologists.n techs.n teddies.n teenagers.n tees.n teetotallers.n telecasts.n telefaxes.n telegrams.n telegraphers.n telegraphs.n telephones.n teleprinters.n teleprompters.n telescopes.n televisions.n telexes.n tellers.n tellies.n telltales.n temperaments.n temperatures.n tempers.n tempests.n templates.n temples.n tempos.n temps.n temptresses.n tenancies.n tenants.n tendencies.n tenderfoots.n tenders.n tendons.n tendrils.n tenements.n tenets.n tenners.n tenoroons.n tenors.n tenses.n tensions.n tentacles.n tents.n tenures.n tepees.n tercentenaries.n tercentennials.n terabytes.n terminals.n terminations.n terminologies.n terminuses.n termites.n terms.n terns.n terraces.n terriers.n territories.n terrorists.n terrors.n testaments.n testers.n testicles.n testimonials.n testimonies.n tests.n tethers.n textbooks.n textiles.n texts.n textures.n thalamuses.n thanks.n thaws.n theaters.n theatregoers.n theatres.n thefts.n theists.n themes.n theocracies.n theologians.n theologies.n theorems.n theoreticians.n theorists.n therapists.n theremins.n thermals.n thermometers.n thermoses.n thermostats.n thesauruses.n thickets.n thicknesses.n thieves.n thighbones.n thighs.n thimblefuls.n thimbles.n thingmabobs.n thingmajigs.n things.n thingumabobs.n thingumajigs.n thingummies.n thinkers.n thistles.n thongs.n thoraxes.n thorns.n thoroughbreds.n thoroughfares.n thralls.n thrashings.n threads.n threesomes.n threnodies.n threshers.n thresholds.n thrifts.n thrillers.n thrills.n throats.n throbs.n throes.n thrones.n throngs.n throttles.n throwaways.n throwbacks.n thrushes.n thrusters.n thrusts.n thuds.n thugs.n thumbs.n thumbscrews.n thumbtacks.n thumps.n thunderbolts.n thunderclaps.n thunderstorms.n thwarts.n thyroids.n tiaras.n tickets.n ticks.n tics.n tidbits.n tides.n tiers.n ties.n tiffs.n tigers.n tightropes.n tildes.n tiles.n tillers.n tills.n tilts.n timbers.n timbres.n timekeepers.n timepieces.n timers.n timetables.n timings.n timpanis.n timpanists.n tinderboxes.n tinges.n tingles.n tinkers.n tins.n tints.n tipplers.n tips.n tirades.n tires.n tissues.n titans.n titbits.n tithes.n titles.n tits.n tizzies.n toads.n toadstools.n toasters.n toastmasters.n toastracks.n toasts.n tobacconists.n toboggans.n toccatas.n toddlers.n toeholds.n toenails.n toes.n toffees.n togas.n toggles.n toilets.n tokens.n tolerances.n tollbooths.n tollgates.n tollhouses.n tolls.n tomahawks.n tomatoes.n tomboys.n tombs.n tombstones.n tomcats.n tomes.n toms.n tom-toms.n tomtoms.n tones.n tonettes.n tongues.n tonics.n tonnages.n tonnes.n tons.n tonsils.n tonsures.n tools.n toothaches.n toothbrushes.n toothpicks.n toots.n topcoats.n topics.n topmasts.n toppers.n toppings.n tops.n topsails.n torches.n toreadors.n tormentors.n torments.n tornadoes.n torpedoes.n torpors.n torques.n torrents.n torsos.n tortillas.n tortoises.n torturers.n tortures.n tosses.n tostadas.n totals.n totems.n tots.n toucans.n touchdowns.n touches.n touchstones.n toughies.n toughs.n toupees.n tourists.n tournaments.n tourneys.n tourniquets.n tours.n towels.n towers.n towns.n townships.n towpaths.n towropes.n toxicologists.n toxins.n toys.n toyshops.n tracers.n traces.n tracks.n tractors.n tracts.n trademarks.n traders.n trades.n traditions.n traffickers.n tragedies.n tragicomedies.n trailers.n trails.n trainbearers.n trainees.n trainers.n trainloads.n trains.n traitors.n traits.n trajectories.n tramlines.n tramples.n trampolines.n tramps.n trams.n tramways.n trances.n tranquillizers.n transactions.n transcendentalists.n transcriptions.n transcripts.n transepts.n transferences.n transfers.n transformations.n transformers.n transfusions.n transgressions.n transgressors.n transients.n transistors.n transitions.n translations.n translators.n transmissions.n transmitters.n transmutations.n transoms.n transparencies.n transplantations.n transplants.n transporters.n transports.n transpositions.n transsexuals.n transshipments.n transvestites.n trapezes.n trapezoids.n trappers.n traps.n traumas.n travails.n travellers.n travelogues.n travels.n traverses.n travesties.n trawlers.n trays.n treadles.n treadmills.n treads.n treasurers.n treasures.n treasuries.n treaties.n treatises.n treatments.n treats.n trebles.n trees.n treks.n trellises.n trembles.n tremolos.n tremors.n trenches.n trends.n trespassers.n trestles.n triads.n trials.n triangles.n tribes.n tribulations.n tribunals.n tribunes.n tributaries.n tributes.n trices.n trickles.n tricks.n tricksters.n tricolours.n tricycles.n tridents.n triennials.n tries.n trifles.n triggers.n trills.n trilogies.n trimmers.n trimmings.n trims.n trinities.n trinkets.n trios.n triplets.n tripods.n trippers.n trips.n triptychs.n triumphs.n triumvirates.n trivets.n trivialities.n trochees.n troglodytes.n troikas.n trolleys.n trolls.n trombones.n trombonists.n tromboons.n trompetas.n troopers.n troops.n tropes.n trophies.n tropics.n trots.n trotters.n troubadours.n troublemakers.n troubles.n troubleshooters.n troughs.n troupers.n troupes.n trousers.n trout.p troves.n trowels.n truancies.n truants.n truces.n truckers.n trucks.n trueloves.n truffles.n trumpeters.n trumpets.n trumps.n truncheons.n trunks.n trustees.n trusts.n truths.n trychels.n trysts.n tsetses.n tubas.n tubaxes.n tubers.n tubes.n tubfuls.n tubs.n tuckers.n tucks.n tufts.n tugboats.n tugs.n tulips.n tumblers.n tumbles.n tumbleweeds.n tummies.n tumors.n tumours.n tumults.n tuna.p tuners.n tunes.n tunics.n tunnels.n turbans.n turbines.n turbojets.n turboprops.n turbot.p turbulences.n turds.n turfs.n turkeys.n turmoils.n turnarounds.n turncoats.n turners.n turnings.n turnips.n turnkeys.n turnouts.n turnovers.n turnpikes.n turns.n turnstiles.n turntables.n turquoises.n turrets.n turtledoves.n turtles.n tusks.n tussles.n tutorials.n tutors.n tutus.n tuxedos.n tweeds.n tweeters.n tweets.n twelfths.n twentieths.n twerps.n twigs.n twinges.n twins.n twirls.n twisters.n twists.n twitches.n twits.n twitters.n tycoons.n tykes.n tympanums.n typefaces.n types.n typescripts.n typesetters.n typewriters.n typhoons.n typists.n typographers.n tyrannies.n tyrants.n tyres.n tzarinas.n tzars.n udders.n ukuleles.n ulcers.n ultimatums.n ululations.n umbers.n umbrellas.n umlauts.n umpires.n unbelievers.n uncertainties.n uncles.n underbellies.n undercarriages.n underclasses.n undercurrents.n underdogs.n underestimates.n underestimations.n undergarments.n undergrads.n undergraduates.n undergrounds.n underlines.n underlings.n underpasses.n underpayments.n undersecretaries.n undersides.n understatements.n understudies.n undertakers.n undertakings.n undertones.n undertows.n undervaluations.n underworlds.n underwriters.n undesirables.n undoings.n unicorns.n uniforms.n unionists.n unions.n units.n universes.n universities.n untouchables.n untruths.n upbraidings.n updates.n upgrades.n upheavals.n upholsterers.n uplands.n uppercuts.n uppers.n uprights.n uprisings.n uproars.n upsets.n upshots.n upstarts.n upsurges.n uptakes.n upturns.n urchins.n urinals.n urns.n usages.n users.n uses.n ushers.n usurpations.n usurpers.n utensils.n uteruses.n utilitarians.n utilities.n utmosts.n utopias.n utterances.n uttermosts.n vacancies.n vacationers.n vacations.n vaccinations.n vaccines.n vacillations.n vacuums.n vagabonds.n vagaries.n vaginas.n vagrants.n valedictions.n valences.n valentines.n vales.n valets.n valleys.n valuables.n valuations.n values.n valves.n vampires.n vamps.n vandals.n vanes.n vanguards.n vanities.n vans.n vantages.n vapours.n variables.n variants.n variations.n varieties.n varnishes.n vasectomies.n vases.n vassals.n vats.n vaulters.n vaults.n vectors.n vegetables.n vegetarians.n vehicles.n veils.n veins.n velocipedes.n velocities.n vendettas.n vendors.n veneers.n venerations.n ventilators.n ventricles.n ventriloquists.n vents.n ventures.n venues.n verandahs.n verandas.n verbs.n verdicts.n verges.n verifications.n verities.n vermilions.n vermouths.n vernaculars.n verses.n versions.n vertebrates.n verticals.n vesicles.n vessels.n vestibules.n vestiges.n vestments.n vestries.n vests.n veterans.n vetoes.n vetos.n vets.n viaducts.n vials.n vibraphones.n vibraslaps.n vibrations.n vibrators.n vibratos.n vicarages.n vicars.n viceroys.n vices.n vicinities.n vicissitudes.n victims.n victories.n victors.n victuals.n videocameras.n videocassettes.n videos.n videotapes.n vielles.n viewers.n viewfinders.n viewpoints.n vigilantes.n vigils.n vignettes.n vihuelas.n villagers.n villages.n villains.n villas.n vindications.n vinegars.n vines.n vineyards.n vintages.n violas.n violations.n violets.n violinists.n violins.n violoncellos.n violottas.n viols.n vipers.n virginals.n virgins.n virtues.n virtuosos.n viruses.n visages.n visas.n viscountcies.n viscountesses.n viscounts.n visionaries.n visions.n visitations.n visitors.n visits.n visors.n vistas.n vitamins.n vixens.n viziers.n vocabularies.n vocalists.n vocations.n vocatives.n vodkas.n vogues.n voices.n voids.n volcanos.n volleyballs.n volleys.n voltages.n volts.n volumes.n voluntaries.n volunteers.n vortexes.n voters.n vouchers.n vowels.n voyagers.n voyages.n voyeurs.n vulgarisms.n vulgarities.n vulnerabilities.n vultures.n vulvas.n wads.n wafers.n waffles.n wagers.n wages.n waggoners.n waggons.n wagons.n wags.n waifs.n wails.n waistbands.n waistcoats.n waistlines.n waists.n waiters.n waitresses.n waits.n waivers.n wakes.n walkers.n walkouts.n walkovers.n walks.n walkways.n wallabies.n wallets.n wallflowers.n wallops.n walls.n walnuts.n walruses.n waltzes.n wanderers.n wands.n wanks.n wantons.n warblers.n warbles.n wardens.n warders.n wardrobes.n wards.n warehouses.n wares.n warheads.n warhorses.n warlords.n warmers.n warmongers.n warpaths.n warps.n warrantees.n warranties.n warrants.n warrens.n warriors.n wars.n warships.n warthogs.n warts.n washbasins.n washboards.n washbowls.n washcloths.n washers.n washouts.n washrooms.n washstands.n washtubs.n wasps.n wassails.n wastebaskets.n wastebins.n wastelands.n wastes.n watchdogs.n watchers.n watches.n watchmakers.n watchtowers.n watchwords.n watercolours.n waterfalls.n waterfowls.n waterfronts.n watermarks.n watermelons.n watermills.n waterproofs.n waters.n watersheds.n watersides.n waterspouts.n watertables.n waterways.n waterworks.p watts.n wavelengths.n waves.n waxworks.n wayfarers.n waypoints.n waysides.n weaklings.n weaknesses.n weapons.n weasels.n weathercocks.n weavers.n weaves.n webs.n websites.n weddings.n wedges.n weedkillers.n weeds.n weekdays.n weekends.n weeklies.n weevils.n weights.n weirs.n welcomes.n welders.n welds.n wellingtons.n wells.n wellsprings.n welshers.n welterweights.n welts.n wenches.n westerners.n westerns.n whackings.n whacks.n whales.n wharfs.n wheelbarrows.n wheelchairs.n wheels.n wheelwrights.n whiffs.n whimpers.n whims.n whines.n whinnies.n whippersnappers.n whippets.n whippoorwills.n whips.n whirligigs.n whirlpools.n whirlwinds.n whiskers.n whiskeys.n whiskies.n whisks.n whispers.n whistles.n whites.n whiting.p whizzes.n whodunits.n wholes.n wholesalers.n whoppers.n whores.n wickets.n wicks.n widowers.n widows.n widths.n wiggles.n wigs.n wigwams.n wildebeests.n willows.n wills.n windbags.n windbreakers.n windfalls.n windmills.n windowpanes.n windows.n windowsills.n windpipes.n winds.n windscreens.n windshields.n wineglasses.n wines.n wings.n wingspans.n wingspreads.n winks.n winners.n wins.n winters.n wipers.n wipes.n wirelesses.n wires.n wiseacres.n wisecracks.n wishbones.n wishes.n wisps.n witches.n withdrawals.n witnesses.n wits.n witticisms.n wives.n wizards.n wolfhounds.n wolves.n womanizers.n wombats.n wombs.n wonderlands.n wonders.n woodcuts.n woodcutters.n woodlands.n woodpeckers.n woodpiles.n woods.n woodsheds.n woodwinds.n woofers.n woofs.n words.n workbenches.n workbooks.n workdays.n workers.n workforces.n workings.n workouts.n workplaces.n workrooms.n works.n workshops.n worlds.n wormholes.n worms.n worries.n worshippers.n wounds.n wrappers.n wraps.n wreaths.n wreckers.n wrecks.n wrenches.n wrens.n wrestlers.n wretches.n wrights.n wringers.n wrinkles.n wristbands.n wrists.n wristwatches.n writers.n writings.n writs.n wrongdoers.n wrongs.n xalams.n xylophones.n xylorimbas.n yachts.n yaks.n yams.n yanks.n yardarms.n yards.n yardsticks.n yarns.n yawns.n yearbooks.n yearlings.n yearnings.n yeas.n yells.n yeomanries.n yetis.n yews.n yields.n yobs.n yodellers.n yodels.n yoghourts.n yoghurts.n yogis.n yogurts.n yokels.n yokes.n yolks.n youngsters.n youths.n yuppies.n zealots.n zebras.n zeniths.n zephyrs.n zeppelins.n zeros.n zippers.n zips.n zithers.n zodiacs.n zombies.n zones.n zoologists.n zoos.n zuchinis.n link-grammar/data/en/words/words.v.1.40000644000000000000000000003110712536650433014635 0ustar abating.v about-facing.v absconding.v acceding.v accounting.v accruing.v aching.v acquiescing.v adenizing.v adhering.v adjoining.v ad-libbing.v alighting.v alluding.v ambling.v ambulating.v amounting.v anteflecting.v apologizing.v apostatizing.v appertaining.v aquaplaning.v arising.v arriving.v assenting.v astringing.v atoning.v atrophying.v attitudinizing.v autoagglutinating.v autodegrading.v autooxidising.v auto-oxidizing.v autooxidizing.v autoproliferating.v autotomizing.v autoxidizing.v babbling.v babysitting.v backbiting.v backfiring.v backpedalling.v backsliding.v backspacing.v bacteriolyzing.v balking.v ballooning.v bamming.v banqueting.v bantering.v banting.v barfing.v barking.v basking.v bawling.v baying.v beeping.v beetling.v behaving.v belching.v bellyaching.v belonging.v billowing.v biodegrading.v bitching.v blabbering.v blazing.v bleating.v bleeping.v blenching.v blethering.v bloating.v blooming.v blossoming.v blubbering.v blundering.v blushing.v boding.v booming.v braking.v braying.v bristling.v brooding.v browsing.v bubbling.v budding.v bullshitting.v bunking.v burbling.v burping.v bustling.v cabbing.v cackling.v calving.v campaigning.v canaliculizing.v cantering.v capering.v capillarizing.v capitulating.v careening.v caroling.v carolling.v carousing.v cascading.v castling.v catering.v caviling.v cavilling.v cavorting.v chafing.v chattering.v chemosensitising.v chiming.v chirping.v chirruping.v chortling.v chromatofocusing.v chromatofocussing.v chuckling.v chugging.v chumming.v clacking.v clamoring.v clamouring.v clanking.v clashing.v clattering.v clerking.v climaxing.v clinging.v clucking.v clunking.v clustering.v coalescing.v coasting.v cocirculating.v coevolving.v cohabiting.v cohering.v coinciding.v collaborating.v collateralizing.v colliding.v colluding.v comigrating.v commentating.v commiserating.v communing.v comodulating.v competing.v complying.v compromising.v confabbing.v confabulating.v conflicting.v conforming.v congealing.v congregating.v conniving.v conspiring.v convalescing.v converging.v conversing.v cooing.v co-operating.v cooperating.v co-ossifying.v coossifying.v coping.v copulating.v corresponding.v coruscating.v counterphasing.v covariing.v covarying.v cowering.v crackling.v crash-diving.v crepitating.v cresting.v cringing.v croaking.v cross-dressing.v crossdressing.v crossmatching.v crowing.v crusading.v culminating.v curtseying.v curtsying.v cycling.v cyclizing.v cytoadhering.v cytodifferentiating.v dabbling.v dallying.v dawdling.v dawning.v day-dreaming.v daydreaming.v decamping.v decaying.v deceasing.v declutching.v decompensating.v decrementing.v decussating.v de-etiolating.v deetiolating.v defasciculating.v defaulting.v defecating.v defecting.v deflagrating.v degenerating.v dehiscing.v delaminating.v deliberating.v delving.v demurring.v departing.v depending.v deplaning.v deplasmolyzing.v depreciating.v deputizing.v desisting.v despairing.v deswelling.v deteriorating.v detracting.v detraining.v deviating.v devolving.v dieting.v differing.v digitating.v digressing.v dilly-dallying.v disagreing.v disappearing.v discoursing.v discriminating.v disembarking.v disintegrating.v disrobing.v dissembling.v dissenting.v dissertating.v divagating.v diverging.v doddering.v doodling.v doting.v double-parking.v dovetailing.v dowing.v downshifting.v downslanting.v downsloping.v drawling.v drizzling.v drooling.v dueling.v duelling.v dwelling.v dwindling.v eavesdropping.v economizing.v eddying.v editorializing.v effervescing.v efflorescing.v elapsing.v electioneering.v eloping.v emanating.v embarking.v emerging.v emigrating.v emoting.v empathizing.v encamping.v encroaching.v enquiring.v ensuing.v equivocating.v erring.v eructing.v erupting.v evaporating.v eventuating.v excelling.v exflagellating.v existing.v exiting.v exosmosing.v expatiating.v experimenting.v expiring.v explanting.v expostulating.v fainting.v faltering.v faring.v fasting.v fawning.v feinting.v festinating.v fibbing.v fibrosing.v fidgeting.v filibustering.v fizzing.v flailing.v flaking.v flaming.v flickering.v flinching.v flirting.v flitting.v flopping.v flourishing.v flowering.v fluctuating.v fluorescing.v fluttering.v fly-fishing.v foot-slogging.v foot-sloging.v foraging.v foregathering.v forgathering.v fornicating.v fossilizing.v fragmenting.v fraternizing.v freelancing.v free-wheeling.v freewheeling.v fretting.v frivoling.v frolicing.v frowning.v fulminating.v fuming.v functioning.v fundholding.v fungating.v fussing.v gallivanting.v gamboling.v gambolling.v gaping.v gardening.v gastrulating.v gawking.v gawping.v gazing.v gelating.v gelling.v gesticulating.v gesturing.v gibbering.v gibing.v giggling.v glaring.v gleaming.v gliding.v glimmering.v glinting.v glistening.v glistering.v glitching.v glittering.v gloating.v globe-troting.v globetroting.v globe-trotting.v globetrotting.v glorying.v glowing.v goggling.v golfing.v gormandizing.v gossiping.v gossipping.v graduating.v grappling.v gravitating.v graying.v grazing.v greying.v grimacing.v grinning.v grooving.v grouching.v grousing.v groveling.v grovelling.v guffawing.v gurgling.v gusting.v gybing.v gyrating.v haggling.v haleing.v hallucinating.v harking.v harping.v hearkening.v heeling.v herniating.v heterodimerizing.v heteromultimerizing.v hewing.v hibernating.v hiccuping.v hiccupping.v hinging.v hissing.v hitchhiking.v hobnobbing.v hollering.v honeymooning.v hovering.v huddling.v huffing.v hungering.v hurtling.v hydroplaning.v hyperaggregating.v hyperdefecating.v hyperfiltering.v hyperluteinizing.v hypermutating.v hypertrophying.v hyporesonating.v hyporesponding.v ice-skating.v immigrating.v immunoreacting.v impended.v impending.v impinging.v inching.v infarcting.v innovating.v interacting.v interceding.v intercommunicating.v interdigitating.v interfering.v intermarrying.v intermingling.v intervening.v intruding.v intumescing.v inveighing.v involuting.v itching.v jabbering.v jack-knifing.v jawing.v jay-walking.v jaywalking.v jelling.v jesting.v jibing.v jittering.v jiving.v jockeying.v joking.v journeying.v kemping.v lacrimating.v lactating.v lagging.v languishing.v lapsing.v lasing.v laughing.v leafing.v leering.v legislating.v liaising.v lisping.v living.v loafing.v locomoting.v loitering.v lolling.v longing.v loping.v lounging.v lowning.v lumbering.v lusting.v luxuriating.v majoring.v malignizing.v malingering.v marauding.v marveling.v marvelling.v masquerading.v materializing.v matriculating.v maturating.v maturing.v maundering.v meandering.v meddling.v meditating.v menstruating.v meowing.v metamorphosing.v metastasizing.v miaouing.v micturating.v migrating.v militating.v mingling.v ministering.v misbehaving.v misfiring.v molting.v monkeying.v mooching.v mooing.v moping.v moralizing.v moseying.v motioning.v motoring.v mouldering.v muck-raking.v mushrooming.v mutinying.v name-dropping.v napping.v nattering.v necking.v necrosing.v neighing.v nesting.v networking.v niggling.v nosediving.v noshing.v objecting.v occuring.v occurring.v officiating.v orating.v oscillating.v oscitating.v osmoregulating.v osmosing.v osseointegrating.v outgoing.v overacting.v overbidding.v overcompensating.v overeating.v overlying.v overreacting.v oversleeping.v overwintering.v ovulating.v paling.v palling.v palpebrating.v palpitating.v pandering.v panhandling.v panicking.v panting.v parachuting.v parleying.v partaking.v participating.v pattering.v pausing.v peaking.v pearling.v peeping.v pellating.v perambulating.v percolating.v perishing.v persevering.v persisting.v perspiring.v pertaining.v philandering.v philosophizing.v picnicking.v piddling.v pimping.v pinging.v pirouetting.v pivoting.v planing.v play-acting.v plodding.v plummetting.v politicking.v polkaing.v pollocking.v poming.v pomming.v pontificating.v poring.v posturing.v pottering.v pouncing.v pouting.v powwowing.v prancing.v prating.v prattling.v preachifiing.v preachifying.v predominating.v pre-existing.v preponderating.v preregistering.v presiding.v prevailing.v prevaricating.v preying.v primping.v procrastinating.v procreating.v profiteering.v profiting.v progressing.v prolapsing.v proliferating.v propagandizing.v proselytizing.v prospering.v protruding.v pub-crawling.v puling.v pullulating.v pulsating.v pulsing.v punning.v pupariating.v pupating.v purring.v pussyfooting.v putrefying.v puttering.v quacking.v quaking.v quarrelling.v quarrying.v quavering.v questing.v queueing.v quibbling.v quipping.v quivering.v racketing.v rafting.v raging.v railing.v raining.v rambling.v rampaging.v rankling.v ranting.v rasping.v ratting.v raving.v reacting.v reappearing.v rebelling.v rebounding.v receding.v reclining.v recoiling.v reconnoitring.v reconverting.v recriminating.v recrudescing.v recuperating.v recurring.v redecussating.v redounding.v re-echoing.v re-emerging.v reemerging.v refecting.v refixating.v reflowing.v refraining.v regressing.v reigning.v re-infarcting.v reinfarcting.v re-intervening.v reintervening.v rejoicing.v relapsing.v relenting.v relying.v reminiscing.v remonstrating.v renarrowing.v rendezvousing.v reneging.v re-occuring.v reoccuring.v repetaturing.v repining.v residing.v resonating.v resorting.v resounding.v respiring.v restenosing.v resting.v resulting.v resurfacing.v retaliating.v retching.v retreating.v retrenching.v retrograding.v retrogressing.v reveling.v revelling.v reverberating.v reverting.v revolting.v revolving.v rhapsodizing.v rioting.v ripening.v riposting.v rippling.v rocketing.v romancing.v romping.v rooming.v roosting.v rootling.v rough-housing.v roving.v rubber-necking.v rubbernecking.v rumbling.v ruminating.v rummaging.v rusting.v sagging.v salivating.v sauntering.v scampering.v scar_cicatrizing scavenging.v scheming.v scintillating.v scowling.v scramming.v screeching.v scrimping.v scrimshanking.v scrolling.v scrounging.v scubaing.v scuffling.v seceding.v seesawing.v seething.v sermonizing.v seroconverting.v seroreverting.v shadow-boxing.v shilly-shalliing.v shilly-shallying.v shillyshallying.v shimmering.v shitting.v shivering.v shrimping.v shuddering.v side-sliping.v side-slipping.v siding.v sidling.v simmering.v simpering.v sinning.v sizzling.v skating.v skedaddling.v skimping.v skirmishing.v skulking.v skylarking.v sky-rocketing.v skyrocketing.v slackening.v slaloming.v slalomming.v slavering.v sleeting.v slithering.v slobbering.v slogging.v slouching.v slumbering.v slumming.v slushing.v smarting.v smiling.v smirking.v smoldering.v smouldering.v snacking.v snaking.v sneering.v sneezing.v snickering.v sniffling.v sniggering.v sniping.v snitching.v sniveling.v snivelling.v snooping.v snoozing.v snoring.v snowballing.v snowboarding.v snowing.v snowshoing.v snuffling.v sobbing.v softlanding.v sojourning.v soliloquizing.v somersaulting.v soughing.v souring.v sparkling.v sparring.v specialising.v specializing.v speciating.v speechifying.v spermiating.v sphacelating.v splurging.v spluttering.v sprawling.v sprinting.v sputtering.v squabbling.v squalling.v squawking.v squeaking.v squealing.v squinting.v squirming.v stagnating.v stemming.v stone-walling.v straggling.v straying.v striding.v stridulating.v striving.v struggling.v stuttering.v subbing.v subscribing.v subsiding.v subsisting.v subspecializing.v succumbing.v sulking.v summering.v sunbathing.v supercoiling.v supervening.v supping.v suppurating.v surfacing.v surging.v swaggering.v swarming.v sweltering.v swerving.v swirling.v swooning.v sympathizing.v tampering.v tap-dancing.v tapdancing.v tarrying.v tattling.v taxiing.v teeming.v teetering.v teething.v temporizing.v tergiversating.v testating.v thriving.v throbbing.v thudding.v tingling.v tinkering.v tippling.v tiptoeing.v tittering.v tittle-tattling.v toadying.v tobogganing.v toiling.v tolling.v tootling.v tottering.v touch-typing.v towering.v toying.v traipsing.v transmigrating.v transpiring.v traveling.v travelling.v trekking.v trembling.v trespassing.v trifling.v trifurcating.v triumphing.v trundling.v tunneling.v tunnelling.v tussling.v tweeting.v twinkling.v twitching.v twittering.v ululating.v underacting.v undulating.v uplinking.v urinating.v urticating.v vacationing.v vacillating.v vacuolating.v vamoosing.v vamping.v vanishing.v vaulting.v vegetating.v venodilating.v verbigerating.v verging.v volvulating.v vouching.v voyaging.v vying.v waddling.v waffling.v wallowing.v waltzing.v wandering.v waning.v wanking.v warbling.v water-skiing.v waterskiing.v wavering.v weeping.v welshing.v weltering.v wheezing.v whelping.v whimpering.v whinnying.v whirring.v wilting.v wincing.v winking.v wiretapping.v wisecracking.v withering.v wobbling.v womanizing.v wool-gathering.v woolgathering.v wrangling.v wriggling.v writhing.v yachting.v yaking.v yammering.v yanging.v yapping.v yawing.v yawning.v yearning.v yelping.v yenning.v yiping.v yowling.v zagging.v zaging.v zigging.v ziging.v zig-zagging.v zigzagging.v link-grammar/data/en/words/words-medical.v.4.40000644000000000000000000012444012536650432016236 0ustar abashing.v abjuring.v ablating.v abnegating.v abominating.v abounding.v abscessing.v abscising.v absenting.v abstaining.v acccoutering.v accessioning.v acclimatising.v accoupling.v accoutring.v acetifying.v acetonating.v acetonizing.v acetylating.v acetylising.v acetylizing.v achromatising.v achromatizing.v acidulating.v acing.v actualising.v actualizing.v actuating.v acylating.v adducting.v adenosine_diphosphate-ribosylating adjuring.v administrating.v admixing.v ADP-ribosylating.v adrenalectomizing.v adsorbing.v adulating.v advantaging.v afforesting.v affronting.v afterloading.v agglomerating.v aggrieving.v agonising.v airbrushing.v alcoholising.v alcoholizing.v aliasing.v alining.v aliquoting.v alkalinising.v alkalinizing.v alkalising.v alkalizing.v alkylating.v allelotyping.v allergizing.v allografting.v alloimmunising.v alloimmunizing.v allotransplanting.v alloying.v alluring.v alphabetising.v alphabetizing.v aluminating.v Americanising.v amidating.v aminating.v aminoacylating.v ammoniating.v amortising.v anaesthetising.v anatomizing.v anergising.v anesthetising.v anglicising.v animadverting.v annualising.v annualizing.v annunciating.v anodising.v anodizing.v anonymising.v anonymizing.v anoxiating.v antagonising.v anteriorising.v anteriorizing.v antiaggregating.v anticoagulating.v antigenising.v antigenizing.v anting.v antirepressing.v antisepticising.v antisepticizing.v apeasing.v apodizing.v apologising.v apostatising.v appaling.v appareling.v apparelling.v apporting.v apposing.v apprizing.v arborising.v archiving.v arcing.v arcking.v aromatising.v aromatizing.v arsonating.v arterializing.v articling.v asexualizing.v asperging.v aspersing.v asseverating.v asterisking.v atomising.v attitudinising.v audiotaping.v auscultating.v authoring.v autocatalysing.v autoclaving.v autogenerating.v autoimmunising.v autoimmunizing.v autoinducing.v autoinducting.v autoinjecting.v autolising.v automatising.v auto-oxidising.v autoperfusing.v autopsying.v autoradiographing.v autoregulating.v autosensitising.v autotransplanting.v auxotyping.v avalanching.v avianising.v avianizing.v avowing.v avulsing.v awaking.v aweing.v axotomising.v axotomizing.v azotizing.v baaing.v babying.v baby-siting.v baby-sitting.v backcrossing.v backdroping.v backdropping.v backlabeling.v backlabelling.v backscattering.v baing.v ballasting.v balling.v balloting.v bandpass_filtering baptising.v barbering.v barbing.v bariumizing.v barnstorming.v barracking.v barraging.v barreling.v bastardizing.v bayoneting.v beaching.v beading.v bearding.v beavering.v bedaubing.v bedding.v bedecking.v bedeviling.v behooving.v behoving.v beleaguering.v belling.v bench_pressing beneficing.v benzoylating.v bereving.v besetting.v besmearing.v betrothing.v bettering.v beveling.v biassing.v bibbing.v bickering.v bicompartmentalising.v binging.v bioactivating.v bioassaying.v bioconverting.v bioengineering.v biomagnifying.v bio-monitoring.v biomonitoring.v biopsying.v bioreducing.v bioremediating.v biosynthesising.v biosynthesizing.v biotinylating.v biotransforming.v biotyping.v bisintercalating.v bivouacking.v blacking.v blancoing.v blanking.v blathering.v blobbing.v blooding.v bloodying.v blueing.v bluing.v blustering.v boating.v bobsleding.v boobing.v boomeranging.v boostering.v bootstraping.v bootstrapping.v bottlenecking.v braining.v brain-washing.v brawling.v brazing.v breakfasting.v breast-feeding.v breasting.v breveting.v brevetting.v broadsiding.v brodding.v bromating.v brominating.v bromizing.v bruiting.v brutalising.v bucketing.v buffering.v bulbectomizing.v bulking.v bulling.v bunkering.v burgeoning.v burking.v burring.v bursting.v busing.v bussing.v caching.v caking.v calendering.v calipering.v calking.v callipering.v calumniating.v canalizing.v cancelling.v cancerising.v candying.v cankering.v canning.v cannulating.v cannulizing.v canopying.v cantilevering.v canting.v capacitating.v capillarising.v capitalising.v capitating.v caponising.v caponizing.v captaining.v carbamoylating.v carbamylating.v carbolating.v carbolising.v carbolizing.v carbonating.v carbonising.v carboxylating.v cardiectomizing.v careering.v cartooning.v cashiering.v catabolising.v catalase_testing catalising.v catalizing.v cataloging.v catalysing.v catalyzing.v categorising.v catheterising.v catheterizing.v caulking.v causticizing.v cauterising.v cauterizing.v cavitating.v C-banding.v cementifying.v centrifugalising.v centrifugalizing.v centrifugating.v centrifuging.v cering.v certificating.v chaffing.v chamfering.v champing.v chancing.v channeling.v chaping.v chapping.v characterising.v charbroiling.v checkering.v cheeking.v chemoattracting.v chemo-preventing.v chemopreventing.v chemo-sensitising.v chemo-sensitizing.v chemosensitizing.v chequering.v chickening.v chining.v chinking.v chiseling.v chloring.v chloroforming.v chloroformising.v chloroformizing.v chocking.v cholecystectomising.v cholecystectomizing.v chorusing.v chromating.v chromatizing.v chromatographing.v chromicizing.v chunking.v chuting.v cicatrising.v cicatrizing.v ciphering.v circularising.v circumducting.v civilising.v classing.v clear-cutting.v clearcutting.v clewing.v clocking.v clouting.v cluing.v clysterizing.v coactivating.v coadministering.v co-agglutinating.v co-applying.v coapplying.v coapting.v coarticulating.v co-assembling.v coassembling.v cocainising.v cocainizing.v co-calibrating.v cocalibrating.v co-chromatographing.v cochromatographing.v co-circulating.v co-clustering.v coclustering.v co-colonizing.v cocolonizing.v cocooning.v co-crystallizing.v cocrystallizing.v co-cultivating.v cocultivating.v coculturing.v co-developing.v co-electroporating.v coelectroporating.v coeluting.v co-encapsidating.v coencapsidating.v coencapsulating.v co-enriching.v coenriching.v co-existing.v coexisting.v co-exposing.v coexposing.v coexpressing.v co-extracting.v cografting.v cogwheeling.v co-hybridising.v cohybridising.v co-hybridizing.v cohybridizing.v coimmobilising.v coimmobilizing.v coinfecting.v coinfusing.v co-ingesting.v coingesting.v co-inheriting.v coinheriting.v co-inoculating.v coinoculating.v coking.v collateralising.v collectivising.v colliquating.v colonising.v colonoscoping.v colorising.v colorizing.v colourizing.v co-managing.v comanaging.v comedicating.v cometabolising.v commercialising.v compartmentalising.v compartmenting.v compassing.v compeering.v complexing.v comporting.v computerising.v concatenating.v conceptualising.v concording.v concreting.v concussing.v conding.v condoling.v conducing.v conglomerating.v conglutinating.v coning.v consorting.v consternating.v constitutionalizing.v contradistinguishing.v contraindicating.v controverting.v contunding.v contusing.v convoluting.v co-ordinating.v co-oxidising.v cooxidising.v co-oxidizing.v cooxidizing.v co-partitioning.v co-perfusing.v coperfusing.v copolymerising.v copolymerizing.v coppering.v coproducing.v co-promoting.v copromoting.v corbeling.v corbelling.v co-rearing.v corearing.v co-registering.v co-regulating.v coregulating.v co-releasing.v coreleasing.v corkscrewing.v cornifying.v corning.v corraling.v co-secreting.v cosecreting.v cosegregating.v cosensitising.v cosensitizing.v coshing.v cosolubilising.v cosolubilizing.v co-sponsoring.v cosponsoring.v cosseting.v costarring.v co-stimulating.v costimulating.v co-storing.v costoring.v co-synthesising.v cosynthesising.v co-synthesizing.v cosynthesizing.v cotranscribing.v cotransfecting.v co-transfering.v cotransfering.v co-transferring.v cotransferring.v cotransforming.v cotransmitting.v co-transporting.v cotransporting.v co-treating.v cotreating.v coulorising.v counselling.v counterpoising.v counterregulating.v countersinking.v counterstaining.v counter-transporting.v countertransporting.v countervailing.v coursing.v court-martialling.v covenanting.v cowing.v cozening.v crabbing.v crafting.v craping.v cratering.v crating.v crazing.v creaking.v creping.v crewing.v cricking.v criminalising.v criminalizing.v crimsoning.v crisping.v criss-crossing.v cristallising.v cristallizing.v criticising.v critiquing.v crocking.v crooking.v cross-clamping.v crossclamping.v cross_fertilizing cross-linking.v cross-matching.v cross-protecting.v crossprotecting.v cross-reacting.v crossreacting.v cross-referencing.v crossreferencing.v crusting.v cryo-fixing.v cryofixing.v cryo-preserving.v cryopreserving.v cryoprotecting.v cryo_sectioning cryo-sectioning.v cryotreating.v crystallising.v cuckooing.v cudgelling.v cueing.v cuing.v culturing.v cumbering.v cunding.v curarising.v curarizing.v curating.v cureting.v curetting.v curtaining.v cussing.v customising.v customizing.v cyanylating.v cyclising.v cyphering.v cyto-adhering.v cytoreducing.v cytospinning.v cytostaining.v dansylating.v dappling.v deacetylating.v deactivating.v deacylating.v de-adenylating.v deadenylating.v deafferentating.v deafferenting.v deallergising.v deamidating.v deamidizing.v deaminating.v debouching.v debriding.v debulking.v debuting.v decalcifying.v decannulating.v decapsulating.v decarboxylating.v decatenating.v decentralising.v decerebrating.v decerebrizing.v dechlorinating.v decidualising.v decocting.v decolonising.v decolorising.v decolorizing.v decolourising.v decolourizing.v decomplementizing.v decontroling.v decontrolling.v deconvoluting.v decoronating.v decorticating.v decoupling.v decoying.v decreeing.v deemanating.v de-energising.v deenergising.v de-energizing.v deenergizing.v de-epicardializing.v de-epithelialising.v deepithelialising.v deethylating.v defaecating.v defaunating.v defeminising.v defeminizing.v defenestrating.v defibrillating.v defibrinating.v deflorating.v defocusing.v defocussing.v deformylating.v defunctionalising.v defunctionalizing.v degalactosylating.v degasing.v degassing.v degaussing.v degenitalizing.v deglycerating.v degreasing.v dehaematising.v dehalogenating.v dehematizing.v dehemoglobinizing.v dehorning.v dehulling.v dehumanising.v dehydrochlorinating.v dehydrogenating.v dehydrogenising.v dehydrogenizing.v dehydroxylating.v dehypnotising.v dehypnotizing.v deinducing.v deinstitutionalizing.v deionising.v deionizing.v dejecting.v de-leading.v deleading.v delimitating.v delipidating.v delocalising.v delocalizing.v delousing.v demagnetising.v demarking.v demasculinising.v demedullating.v demembranating.v demetalising.v demetalizing.v demethylating.v demilitarising.v demineralising.v demineralizing.v demobilising.v democratising.v demodulating.v demonetising.v demonetizing.v demoralising.v demustardizing.v demyelinating.v demystifying.v denationalising.v denaturing.v denervating.v denitrating.v denitrifying.v deodorising.v deoxidising.v deoxidizing.v deoxygenating.v depancreatizing.v deparaffinising.v deparaffinizing.v departmentalising.v depersonalizing.v dephosphorylating.v depigmenting.v depilating.v depolarising.v depoliticising.v depoliticizing.v depolymerising.v depotentiating.v depraving.v depressurising.v depressurizing.v deprojecting.v deprotecting.v deproteinating.v deprotonating.v depurating.v deputing.v deputising.v deregulating.v derepressing.v deresinating.v derivatising.v derivatizing.v derivitising.v derivitizing.v deroofing.v derotating.v derricking.v desalinising.v desalting.v desamidating.v desamidizing.v descaling.v desensitising.v desexualising.v desexualizing.v desheathing.v desialylating.v desolating.v desolvating.v desorbing.v despeciating.v destabilising.v destablising.v destablizing.v destaining.v desulfating.v desulfurating.v desulphating.v desulphurating.v desynchronising.v detailing.v dethyroidizing.v detouring.v detoxicating.v deuterating.v deuteriating.v devascularizing.v deviling.v devilling.v devitalising.v devitalizing.v deworming.v dextrinating.v dextrinizing.v diacetylating.v diacylating.v diagraming.v diagramming.v dialkylating.v dialoging.v dialoguing.v dialysing.v diapausing.v diapering.v diazotizing.v dibbling.v dickering.v dideuterating.v diesterifying.v difluorinating.v digitalising.v digitilising.v digitising.v digitizing.v dihalogenating.v dihydrogenating.v dihydroxylating.v diiodinating.v diking.v dilatating.v dimerising.v dimethylating.v dimiting.v dimitting.v dimpling.v diphosphorylating.v dirtying.v disacidifying.v disadvantaging.v disaggregating.v disagreeing.v disambiguating.v disarraying.v disbelieving.v disbudding.v disbuding.v disburdening.v discoing.v discolouring.v discommoding.v discomposing.v disconfirming.v discountenancing.v discretising.v discretizing.v disembodying.v disemboweling.v disencumbering.v disfavoring.v dishabituating.v disheveling.v dishevelling.v dishonoring.v disimmunizing.v disinhibiting.v disinserting.v disjointing.v dismutating.v disoccluding.v disordering.v disorganising.v disorganizing.v dispensarising.v dispensarizing.v dispiriting.v disproportionating.v disquieting.v disregulating.v dissatisfying.v dissimilating.v distempering.v distraining.v divulsing.v docketing.v dogging.v dolling.v dollying.v domiciling.v doming.v dorsalising.v dorsiducting.v dosing.v dossing.v douching.v doweling.v dowelling.v downmodulating.v downregulating.v downstaging.v dowsing.v dramatising.v drating.v dratting.v driveling.v drivelling.v drudging.v dumfounding.v duning.v dunning.v duplexing.v dyking.v dysregulating.v earing.v earthing.v ebbing.v echolocating.v economising.v ecphorising.v ecphorizing.v ectropionising.v ectropionizing.v editorialising.v educing.v edulcorating.v effectuating.v effing.v egesting.v ekphorizing.v elating.v electroblotting.v electro-cauterising.v electrocauterising.v electro-cauterizing.v electrocauterizing.v electrodialysing.v electroeluting.v electro-injecting.v electroinjecting.v electroinserting.v electrophoresing.v electrophoring.v electroplating.v electroporating.v electrotransfering.v electrotransferring.v electroverting.v eluting.v elutriating.v emaciating.v embolising.v embrocating.v emedullating.v empaneling.v empathising.v emphasising.v emplacing.v emulsioning.v enameling.v enamoring.v enamouring.v encapsulating.v enchaining.v encoring.v encrusting.v endarterectomising.v endarterectomizing.v endoscoping.v endothelialising.v enduing.v energising.v energizing.v enfeebling.v engrafting.v engrailing.v enkindling.v enlacing.v enplaning.v enrapturing.v ensheathing.v ensilaging.v ensiling.v enterectomising.v enterectomizing.v enthraling.v entropionizing.v envelopping.v envenoming.v environing.v enwraping.v enwrapping.v epilating.v epimerising.v epithelialising.v epithelializing.v epithelising.v epithelizing.v epitomising.v epoxidising.v epoxidizing.v equaling.v equalising.v equilibrating.v eroticising.v eroticizing.v erotising.v erotizing.v essaying.v esterifying.v estranging.v estrogenising.v estrogenizing.v etherising.v etherizing.v ethylating.v euthanatising.v euthanatizing.v euthanising.v euthanizing.v evaginating.v everting.v evidencing.v exacting.v exanimating.v excerpting.v exchange-transfusing.v excogitating.v execrating.v exenterating.v exorcising.v expatriating.v exsanguinating.v exsecting.v exsomatizing.v exteriorising.v exteriorizing.v externalising.v extruding.v extubating.v exulting.v eyeing.v factorising.v factorizing.v faggoting.v fagoting.v familiarising.v fantasising.v faradising.v faradizing.v farnesylating.v farting.v fathering.v feather-beding.v fecundating.v federalising.v federalizing.v feeing.v felicitating.v feminising.v feminizing.v fenestrating.v fertilising.v festering.v feuing.v fevering.v fictionalising.v fictionalizing.v field_testing field-testing.v filching.v filtrating.v finalising.v fingerprinting.v fire-proofing.v fireproofing.v fissuring.v fistulising.v flabbergasting.v flanging.v flawing.v flecking.v fleshing.v flexibilising.v flexibilizing.v flouncing.v floundering.v flouring.v fluidizing.v fluoresceinating.v fluoridising.v fluoridizing.v fluoroscoping.v fluting.v foaling.v focalising.v fogging.v foging.v footling.v footnoting.v footprinting.v footsloging.v foraying.v forbidding.v forbiding.v forboding.v forebidding.v forebiding.v foreboding.v foredooming.v foregrounding.v foreknowing.v foresting.v foretasting.v formalinising.v formalinizing.v formalising.v formatting.v formylating.v fossilising.v fowling.v foxhunting.v foxing.v fractionating.v franchising.v fraternising.v freckling.v free_grafting free-grafting.v freeze_drying freeze-drying.v freeze-fracturing.v freighting.v fringing.v frivolling.v frolicking.v frothing.v fruiting.v fuddling.v functionalising.v functionalizing.v funking.v funneling.v furcating.v furring.v gabbing.v gabbling.v gadding.v galactosylating.v galavanting.v galivanting.v galumphing.v galvanising.v ganglionectomising.v ganglionectomizing.v gangrening.v gapping.v garaging.v garlanding.v garoting.v garotting.v garroting.v garrotting.v gasing.v gassing.v gastrectomising.v gastrectomizing.v gating.v gavaging.v gazeting.v gazetting.v gelatinising.v gelding.v generalising.v gening.v genning.v genotyping.v gentling.v genuflecting.v geocoding.v geranylgeranylating.v ghosting.v gingering.v girdling.v glacing.v glamorising.v glissading.v globalising.v glomectomising.v glomectomizing.v gloming.v glomming.v gloving.v glowering.v glucoronising.v glucuronidating.v glueing.v gluing.v glycating.v glycerolating.v glycerolizing.v glycosylating.v gonadectomizing.v goosing.v gormandising.v gowning.v graining.v grandfathering.v grandparenting.v graphing.v grassing.v graveling.v greening.v griming.v grizzling.v grommeting.v grubbing.v grubing.v guesting.v gulling.v gusseting.v guttering.v guying.v habilitating.v habituating.v haemagglutinating.v haemoagglutinating.v haemocoagulating.v haemodialysing.v haemodialyzing.v haemodiluting.v haemolysing.v haemolyzing.v haemoperfusing.v haemorrhaging.v hallmarking.v halogenating.v handpicking.v haploidising.v happing.v haptenating.v harmonising.v hasping.v headlining.v hemicastrating.v hemi-deleting.v hemisecting.v hemispherectomising.v hemispherectomizing.v hemodialysing.v hemodialyzing.v hemodiluting.v hemolysing.v hemoperfusing.v hemorrhaging.v heparinising.v heparinizing.v hepatectomising.v hepatectomizing.v heterodimerising.v hexing.v hiccoughing.v hieing.v high-jacking.v hirudinizing.v histoculturing.v hoboing.v holidaying.v holing.v homing.v homodimerising.v homodimerizing.v homogenising.v homografting.v honeycombing.v hooping.v horning.v horsing.v hospitalising.v hoting.v hotting.v hoving.v hoxing.v humanising.v humanizing.v humoring.v hurdling.v husbanding.v hyalinising.v hyalinizing.v hybridising.v hydrogenating.v hydrogenizing.v hydrolising.v hydrolizing.v hydrolysing.v hydroxylating.v hying.v hymning.v hyperacetylating.v hyperactivating.v hypercontracting.v hyperdefaecating.v hyperexpressing.v hyperextending.v hyperfiltrating.v hyperfractionating.v hyperimmunising.v hyperimmunizing.v hyper-inducing.v hyperinducing.v hyperinnervating.v hyperluteinising.v hyper-methylating.v hypermethylating.v hypernucleating.v hyperpolarising.v hyperproducing.v hypersensitising.v hyperstimulating.v hypertransfusing.v hypnoidizing.v hypnotising.v hypomineralising.v hypomineralizing.v hypo-phosphorylating.v hypophosphorylating.v hypophysectomising.v hypophysectomizing.v hyposensitizing.v hypothecating.v hysterectomising.v hysterectomizing.v idealising.v idolising.v imbedding.v imbeding.v immobilising.v immortalising.v immunising.v immunoabsorbing.v immunoadsorbing.v immuno_assaying immuno-assaying.v immunoassaying.v immunobloting.v immunoblotting.v immunocompromising.v immunodepleting.v immunodepressing.v immunoenhancing.v immunoexpressing.v immunoinhibiting.v immunoisolating.v immunolabeling.v immunolabelling.v immunolocalising.v immunolocalizing.v immunoneutralising.v immunoneutralizing.v immunophenotyping.v immunopurifying.v immunoradioassaying.v immunoregulating.v immunoscreening.v immunoselecting.v immunostaining.v immunostimulating.v immunosuppressing.v immuno-targeting.v immunotargeting.v immunotitrating.v immunotyping.v immuring.v impaneling.v imperiling.v impersonalising.v impersonalizing.v importuning.v incising.v inclosing.v incommoding.v incrementing.v inculpating.v individualising.v individualizing.v indorsing.v induing.v industrialising.v inebriating.v influxing.v ingling.v ingrafting.v ingraining.v inhuming.v initialing.v initialising.v initializing.v inlayinging.v inlaying.v innervating.v inputing.v inputting.v inseting.v insetting.v insolubilising.v insolubilizing.v insonifying.v instancing.v institutionalising.v instrumenting.v insufflating.v intellectualising.v intellectualizing.v intercalating.v interconverting.v interfacing.v interiorising.v interiorizing.v interlacing.v interlarding.v interleafing.v interlinking.v internalising.v internationalising.v interpellating.v interposing.v interspacing.v intrenching.v introjecting.v introspecting.v introverting.v intrusting.v intubating.v inuring.v inventorying.v invoicing.v iodinating.v iodising.v ionising.v iontophoresing.v iridectomizing.v irritating.v isoimmunising.v isoimmunizing.v isomerising.v italicising.v itemising.v jacketing.v jack_knifing jackknifing.v jagging.v jaunting.v jecorizing.v jejunectomising.v jejunectomizing.v jeopardising.v jointing.v juicing.v junking.v karyotyping.v keening.v kenneling.v kennelling.v kenting.v keratinising.v keying.v kidnaping.v kinking.v kneeing.v KO'ing.v KO’ing.v labilising.v labyrinthectomising.v labyrinthectomizing.v lacrymating.v lactonising.v laddering.v lambing.v laminectomising.v laminectomizing.v laming.v lamming.v laparotomising.v laparotomizing.v lapinising.v lapinizing.v larding.v lariating.v larking.v laryngectomising.v laryngectomizing.v lasering.v lassooing.v lateralising.v lathering.v lathing.v lavaging.v layering.v leafleting.v leafletting.v leaguing.v leap-frogging.v leap-froging.v leapfroging.v leashing.v leeching.v leeping.v legalising.v legitimating.v legitimatising.v legitimising.v legitimizing.v lentectomizing.v lesioning.v lettering.v libeling.v liberalising.v ligating.v lilting.v liming.v limning.v linearizing.v linging.v linning.v lipectomising.v lipectomizing.v lipidating.v liping.v liposuctioning.v lipoxygenating.v lipping.v lip-reading.v liquifying.v lithographing.v lithotomizing.v lobectomising.v lobectomizing.v lobotomising.v lobotomizing.v loosing.v lording.v Lording.v louping.v louring.v lowing.v lubrifying.v lucking.v lurking.v luteinising.v luxating.v lymphadenectomising.v lymphadenectomizing.v lyophilising.v lyophilizing.v lypophilising.v lypophilizing.v lysogenising.v lysogenizing.v macadamising.v macadamizing.v machining.v macroencapsulating.v magnetising.v mainstreaming.v malaxating.v malfunctioning.v malignising.v malpositioning.v malting.v mantling.v manumiting.v manumitting.v manuring.v marathoning.v Marathoning.v marathonning.v Marathonning.v marbling.v marginating.v marinading.v marshaling.v marsupializing.v masculinising.v masculinizing.v massacring.v mastectomising.v mastectomizing.v master-minding.v materialising.v matting.v maximising.v mazing.v mechanising.v medialising.v medicalising.v medicalizing.v medisecting.v medullectomising.v medullectomizing.v melanising.v melanizing.v mentoring.v mercerising.v mercerizing.v merchandising.v mercurating.v mercurializing.v mercuriating.v mesmerising.v metabolising.v metabolizing.v metaling.v metalling.v metastasising.v metering.v methylating.v metricising.v metring.v mewing.v micellising.v microagglutinating.v microaggregating.v microbiopsying.v microcannulating.v microcatheterising.v microcatheterizing.v microcomputerising.v microcomputerizing.v microdetermining.v microdiluting.v microdissecting.v microembolising.v microfilling.v microfiltering.v microinjecting.v micromanipulating.v micromilling.v micromodifying.v micronising.v micronizing.v microperfusing.v microprocessing.v microsequencing.v microtitrating.v microtoming.v microwaving.v middling.v mildewing.v militarising.v militarizing.v mimetising.v mimetizing.v mineralising.v mineralizing.v miniaturising.v minifying.v minimising.v minuting.v misadvising.v misattributing.v miscalling.v miscasting.v misclassifying.v miscoding.v misconducting.v misdiagnosing.v mis-folding.v misidentifying.v misincorporating.v mislabeling.v mislabelling.v mislocalising.v mislocalizing.v mismatching.v mispairing.v misperceiving.v misprinting.v misrecognising.v misrecognizing.v misregulating.v misrepairing.v misrouting.v misruling.v misspecifying.v mis-tuning.v mistuning.v mitering.v mitring.v mobilising.v modernising.v moireing.v moisturising.v moisturizing.v moldering.v monophosphorylating.v monopolising.v moonlighting.v moralising.v morcellating.v morphinizing.v morsing.v Morsing.v morticing.v mortising.v mothering.v moth-proofing.v motorcycling.v motorising.v muckraking.v mulcting.v multimerising.v mummifying.v mummying.v mumping.v muscling.v muscularising.v mutagenizing.v myectomizing.v myristoylating.v narcotizing.v narking.v nasalising.v nasalizing.v nationalising.v naturalising.v nauseating.v nebulising.v nebulizing.v necropsying.v necrotising.v negativing.v neighboring.v neighbouring.v nephrectomising.v neping.v nepping.v nerving.v nesslerising.v nesslerizing.v neuromodulating.v neurostimulating.v neutralising.v niching.v nickeling.v nickelling.v niming.v nimming.v Nissl_staining Nissl-staining.v nitrating.v nitrosating.v nitrosylating.v nobbling.v nonplusing.v nonplussing.v noosing.v normalising.v nosing.v notching.v objectifying.v objurgating.v oblating.v obtruding.v obtunding.v obturating.v oestrogenising.v oestrogenizing.v ointing.v O.K.ing.v OKing.v oligomerising.v oligomerizing.v oophorectomising.v oophorectomizing.v operationalising.v operationalizing.v oppugning.v opsonifying.v opsonising.v optimising.v optimizing.v orchidectomising.v orchidectomizing.v ordinating.v organising.v orphaning.v osmicating.v osteotomising.v osteotomizing.v ostracising.v outbraving.v out-competing.v outcompeting.v outdating.v outfacing.v out-Heroding.v outlaying.v outmaneuvering.v outmarching.v outmatching.v out-pacing.v outpacing.v outperforming.v outpointing.v outputing.v outputting.v outranging.v outriding.v outrivaling.v outrivalling.v outsailing.v outspreading.v outstriping.v outstripping.v outvying.v outwearing.v ovariectomising.v ovariectomizing.v over-associating.v overassociating.v over-burdening.v over-capitalising.v overcapitalising.v over-capitalizing.v overcapitalizing.v over-charging.v over-consuming.v overconsuming.v over-cooking.v overcorrecting.v overcroping.v overcropping.v over-crowding.v over-detecting.v overdetecting.v overdiagnosing.v overdosing.v over-eating.v over-elongating.v overelongating.v overemphasising.v over-emphasizing.v over-estimating.v over-exerting.v over-exposing.v overexpressing.v over-feeding.v over-hanging.v overhanging.v over-heating.v over-inserting.v overinserting.v overlaying.v over-learning.v overlearning.v overleeping.v overmastering.v over-praising.v over-predicting.v overpredicting.v over-producing.v over-proliferating.v over-refering.v overrefering.v over-reporting.v overreporting.v over-representing.v overrepresenting.v oversaturating.v over-secreting.v oversewing.v over-simplifying.v over-staging.v overstaging.v overstaining.v overstimulating.v over-straining.v over-stretching.v over-synthesising.v oversynthesising.v over-synthesizing.v oversynthesizing.v overthrowing.v over-transcribing.v overtreating.v overusing.v over-valuing.v overventilating.v overviewing.v over_weighting overweighting.v over-wraping.v overwraping.v over-wrapping.v overwrapping.v oxidising.v oxygenising.v oxygenizing.v ozonising.v ozonizing.v palisading.v palliating.v palpating.v palping.v pancreatectomizing.v paneling.v panelling.v paragraphing.v paralleling.v parameterising.v parameterizing.v parasitising.v parasitizing.v parasoling.v parathyroidectomizing.v parboiling.v parceling.v parcelling.v parroting.v particularising.v pasteurising.v pasturing.v patronising.v peaning.v peening.v pelleting.v pelletising.v pelletizing.v penalising.v penciling.v pensioning.v peopling.v pepsinating.v pepsinising.v pepsinizing.v peptonising.v percussing.v perifusing.v peritomizing.v peritonealizing.v peritonizing.v permeabilizing.v permeablising.v peroxidising.v personalising.v pestling.v phagocytising.v phagocytizing.v phagocytosing.v phalangizing.v phenocopying.v phenolating.v phenotyping.v philosophising.v phlebotomising.v phlorhizinising.v phlorhizinizing.v phloridzinising.v phloridzinizing.v phosphonylating.v phosphorylating.v photoactivating.v photobleaching.v photodamaging.v photodecomposing.v photoinactivating.v photoinducing.v photoisomerising.v photolabeling.v photolabelling.v photolysing.v photo-oxidising.v photooxidising.v photo-oxidizing.v photopolymerising.v photopolymerizing.v photoprotecting.v photoreducing.v photoregulating.v photoreversing.v photosensitising.v photostating.v photostimulating.v physicking.v piggybacking.v pilling.v pillowing.v pinding.v pinealectomising.v pinealectomizing.v pinioning.v pinking.v pin-pointing.v pipetting.v pithing.v plagiarising.v plaiting.v planimetering.v planking.v plasmolysing.v plasmolyzing.v plateauing.v platinating.v plating.v pleaing.v pleating.v plicating.v pluming.v plummeting.v plumping.v plunking.v pneumonectomising.v pneumonectomizing.v podding.v poding.v polarising.v pole-axing.v poleaxing.v politicising.v politzerizing.v pollacking.v pollarding.v polyadenalating.v polyadenylating.v polyglutamylating.v polymerising.v polymerizing.v pomading.v pommeling.v pommelling.v poniarding.v popularising.v portacaval_shunting portioning.v postfixing.v potentiating.v potting.v poulticing.v powering.v prawning.v preabsorbing.v preadmiting.v preadmitting.v precepting.v precising.v precoating.v preconditioning.v precooking.v precooling.v preculturing.v predating.v predeceasing.v predefining.v predestinating.v pre-digesting.v predigesting.v pre-embedding.v preembedding.v pre-embeding.v preembeding.v pre-establishing.v preestablishing.v preexisting.v pre-exposing.v preexposing.v prefeeding.v prefixing.v preimmunizing.v preinducing.v preinfecting.v pre-irradiating.v preirradiating.v prelabeling.v prelabelling.v preloading.v preluding.v premedicating.v premiering.v premissing.v premixing.v preping.v prepossessing.v prepping.v preprinting.v preprocessing.v preprograming.v preprogramming.v preprotecting.v prereducing.v prescreening.v preselecting.v presensitizing.v pre-seting.v preseting.v pre-setting.v presetting.v presoaking.v prespawning.v prespecifying.v pressurising.v prestimulating.v pre-surfacing.v pretraining.v pretreating.v previewing.v prewarming.v prewashing.v prickling.v prioritising.v prioritizing.v prising.v privatising.v probating.v profaning.v professionalizing.v prognosing.v prolating.v pronging.v propagandising.v prophesying.v propitiating.v prorating.v proroguing.v proselytising.v prospecting.v prostatectomising.v prostatectomizing.v proteolysing.v proteolyzing.v protracting.v provisioning.v pseudonormalising.v psyching.v psycho-analysing.v psycho-analyzing.v ptyalizing.v publicising.v puddling.v pulping.v pulverising.v puping.v pupping.v purposing.v purpurating.v puttying.v pyridoxylating.v quadding.v quading.v quadrisecting.v quadruplicating.v quailing.v quantising.v quantitating.v quantizing.v quarking.v quarreling.v quartisecting.v quaternizing.v queening.v Queening.v queuing.v quizzing.v rabbiting.v rabbitting.v radiographing.v radioimmunoassaying.v radiolabeling.v radiolabelling.v radiolocalising.v radiolocalizing.v radiosensitising.v radiosensitizing.v ragging.v ranching.v randomising.v randomizing.v rappeling.v rappelling.v rarefying.v rasing.v rationalising.v raying.v razoring.v reabsorbing.v reaccumulating.v reacquiring.v re-adapting.v readding.v readdressing.v readministering.v readying.v re-afforesting.v reafforesting.v reaggregating.v realigning.v realising.v reallocating.v reaming.v re-amplifying.v reamplifying.v reamputating.v reanalysing.v reanalyzing.v re-animating.v reanimating.v reappraising.v re-approximating.v reapproximating.v re-arterialising.v rearterialising.v re-arterializing.v rearterializing.v reasserting.v reassigning.v reassociating.v reassorting.v reattaching.v rebasing.v rebinding.v rebling.v recalcifying.v recalibrating.v recanalizing.v recategorising.v recategorizing.v recatheterising.v recatheterizing.v receipting.v recemising.v recertifying.v rechallenging.v rechromatographing.v recirculating.v reclassifying.v recloning.v recoding.v recognising.v recolonising.v recombining.v recompressing.v reconceptualizing.v reconfiguring.v reconnoitering.v reconstituting.v recontaminating.v recontouring.v re-converting.v re-counting.v re-covering.v recultivating.v reculturing.v redacting.v rededicating.v redescribing.v redetecting.v redetermining.v redevelopping.v reding.v redirecting.v redissecting.v reeducating.v re-elevating.v reemphasizing.v re-endothelialising.v reendothelialising.v re-endothelializing.v re-engineering.v reengineering.v re-entering.v re-epithelialising.v reepithelialising.v re-epithelializing.v re-equilibrating.v re-esterifying.v reesterifying.v reevaluating.v re-examining.v reexamining.v re-excising.v reexcising.v re-exploring.v reexploring.v reexposing.v reexpressing.v re-extracting.v reextracting.v refacing.v refeeding.v refereeing.v refereing.v referencing.v refering.v reffing.v refinishing.v refluxing.v refolding.v reforesting.v reformating.v reformatting.v reframing.v regionalising.v regionalizing.v regrafting.v regularising.v rehearing.v reheating.v rehospitalising.v rehospitalizing.v reimmunizing.v re-implanting.v reimplanting.v reincarcerating.v reincarnating.v re-inflating.v reinitiating.v reinjecting.v reinjuring.v reinnervating.v reinoculating.v reinserting.v reinstituting.v re-internalising.v reinternalising.v re-internalizing.v reinternalizing.v re-interviewing.v reinterviewing.v reintroducing.v reintubating.v re-inventing.v re-irradiating.v reisolating.v rejigging.v rejiging.v re-joining.v relabeling.v relabelling.v relaparoscopying.v relearning.v relining.v relipidating.v relocalising.v relocalizing.v remaindering.v remaking.v remaping.v remapping.v remediating.v remilitarising.v remobilising.v remodeling.v remyelinating.v renaturing.v reneguing.v re-obliterating.v reobliterating.v re-occluding.v re-occurring.v reoccurring.v reorganising.v reoxidising.v reoxygenating.v repartitioning.v repatterning.v reperforating.v reperfusing.v reperitonealising.v reperitonealizing.v replating.v repointing.v repolarising.v repopulating.v reposing.v repositing.v repositioning.v repoting.v repotting.v repriming.v reprobating.v reprocessing.v reprograming.v reprogramming.v republishing.v repurifying.v requiting.v rerunning.v resampling.v rescaning.v rescanning.v re-scoering.v rescoering.v re-scoring.v rescoring.v rescreening.v resealing.v resecting.v resensitising.v resequencing.v residualising.v residualizing.v re-slicing.v reslicing.v resocialising.v resocializing.v resolubilizing.v resorbing.v respelling.v restaging.v restaining.v re-stenosing.v restimulating.v restretching.v restudying.v resulfating.v resulphating.v resurveying.v resuspending.v resuturing.v resynthesising.v resynthesizing.v retraining.v retransforming.v retransfusing.v retransplanting.v retraumatizing.v retreading.v re-treating.v retroceding.v retrofiting.v retrofitting.v retrotranscribing.v retyping.v reusing.v reutilising.v reutilizing.v revaccinating.v revalidating.v revascularising.v revascularizing.v reveiling.v revendicating.v revenging.v revitalising.v revivifying.v revolutionalising.v revolutionalizing.v revolutionising.v rewarming.v reworking.v rexing.v rhapsodising.v ribosylating.v ricking.v ricochetting.v ridging.v riming.v riting.v ritting.v ritualising.v ritualizing.v riving.v robing.v romanticising.v roneoing.v rongeuring.v roofing.v rooking.v roseting.v rosetting.v rosining.v rough-casting.v roughcasting.v rough-drying.v roughhousing.v rouging.v roweling.v rowelling.v rubberising.v ruddling.v ruffing.v rumoring.v rumouring.v rusking.v ruting.v rutting.v sabering.v sabring.v salaaming.v salifying.v sallowing.v salving.v sandaracing.v sandaracking.v sand-blasting.v sanitising.v sanitizing.v sating.v saucerizing.v sauting.v savoring.v savvying.v scabing.v scalloping.v scaming.v scamming.v scamping.v scapegoating.v scar_cicatrising scar_cicatrizing scarifying.v sclerotising.v sclerotizing.v scolloping.v scourging.v scrabbling.v scragging.v scraging.v scribing.v scrimmaging.v scripting.v scrupling.v scrutinising.v SCUBAing.v scudding.v scuding.v scuppering.v scything.v seaming.v secluding.v sectioning.v sectoring.v secularising.v sedimenting.v segmenting.v semaphoring.v semisynthesising.v semisynthesizing.v sensibilising.v sensibilizing.v sensitising.v sequencing.v sequestrating.v serialising.v serogrouping.v serotyping.v servo-controling.v servocontroling.v servo-controlling.v servocontrolling.v sexing.v sexualising.v sexualizing.v shafting.v shallowing.v shambling.v shanghaiing.v sheering.v sheeting.v shellacing.v shellacking.v shiming.v shimming.v shinning.v shipwrecking.v shoding.v shoeing.v short-listing.v shoveling.v shrining.v shriving.v shuttling.v sialadenectomizing.v sialylating.v siccing.v sicing.v sickling.v side-tracking.v signalising.v signalizing.v siliconising.v siliconizing.v silting.v silvering.v silylating.v singularising.v singularizing.v sintering.v siting.v situating.v skateboarding.v skeining.v skeletonising.v skying.v slanging.v slatting.v sledding.v sleding.v sleighing.v slenderising.v sleuthing.v slitting.v slivering.v slopping.v sludging.v sluicing.v smirching.v smuting.v smutting.v snaffling.v snicking.v snowshoeing.v snugging.v snuging.v soaping.v socialising.v sodding.v soding.v soft-pedaling.v soft-soaping.v soft-soldering.v solacing.v solating.v solemnising.v solemnizing.v soliloquising.v soling.v soloing.v solubilising.v solubilizing.v solvating.v somatising.v somatotyping.v sonicating.v sooting.v sorbing.v sorrowing.v sovietizing.v spangling.v spatchcocking.v spating.v spatulating.v speckling.v spindling.v spiralising.v spiritualising.v spiritualizing.v spirting.v splenectomising.v splenectomizing.v splinting.v splotching.v spoofing.v spooking.v spooling.v spooning.v sporulating.v spudding.v spuding.v squeegeeing.v squeegeing.v stabling.v stagging.v stanching.v standardising.v steam-heating.v steam-rollering.v stenciling.v stencilling.v sterilising.v stewarding.v stigmatising.v stilting.v stinking.v stock-piling.v stockpiling.v stomping.v stoppering.v stranding.v strangulating.v striating.v stricturing.v stroping.v stropping.v strychnizing.v stultifying.v stupefying.v stylising.v subcategorising.v subcategorizing.v sub-classifying.v subclassifying.v subcompartmentalising.v subcompartmentalizing.v subcultivating.v subculturing.v subexciting.v subgrouping.v subindexing.v subjoining.v subliming.v sublocalising.v sublocalizing.v subluxating.v suborning.v subsaturating.v subsidising.v subspecialising.v subtitling.v subtyping.v suctioning.v sugaring.v sulfating.v sulfonating.v sulfurating.v sulfureting.v sulfuretting.v sulfurizing.v sulphating.v sulphonating.v sulphurating.v sulphureting.v sulphuretting.v sulphurising.v sulphurizing.v summarising.v sunburning.v superactivating.v superannuating.v supercooling.v superducting.v superfusing.v superhydrating.v superinducing.v superintending.v superposing.v superprecipitating.v supersaturating.v supershifting.v suprarenalectomizing.v surcharging.v surfeiting.v suscitating.v suturing.v swabbing.v swabing.v swaddling.v swaging.v swaning.v swanning.v swilling.v swobbing.v swobing.v swoping.v swopping.v syllabicating.v syllabifying.v syllabizing.v symbolising.v sympathectomising.v sympathectomizing.v sympathising.v synapsing.v synchronising.v synergising.v synonymizing.v synostosing.v synthesising.v synthetising.v synthetizing.v syringing.v systematising.v tabooing.v tabuing.v tape-recording.v targetting.v taring.v tarmacing.v tarmacking.v teeing.v telecommunicating.v telefaxing.v telepathizing.v teletransmiting.v teletransmitting.v tempering.v temporising.v tenanting.v tenoning.v tenotomizing.v tenting.v tenuring.v terrorising.v teslaizing.v tetanising.v tetanizing.v tetramerising.v thermalising.v thermocauterising.v thermocauterizing.v thermocycling.v thermoregulating.v thermosensitising.v thermosensitizing.v thoracotomising.v thoracotomizing.v throeing.v throing.v thrusting.v thwacking.v thymectomising.v thymectomizing.v thymolizing.v thyroidectomising.v thyroidectomizing.v thyroidizing.v thyroparathyroidectomizing.v timetabling.v tincturing.v tingeing.v tinning.v tittivating.v toggling.v tolerising.v tolerizing.v tonicizing.v tonsillectomizing.v tonsuring.v tooling.v top-dressing.v torquing.v torrefying.v tosylating.v toweling.v trabeculating.v tracheostomizing.v tracheotomizing.v traducing.v trafficing.v trafficking.v trammeling.v trammelling.v tranquillising.v transactivating.v transdifferentiating.v transducing.v transecting.v transesterifying.v transfecting.v transfiguring.v transhiping.v transilluminating.v transiting.v transliterating.v translocating.v transmogrifying.v transphosphorylating.v transsecting.v transshiping.v trapsing.v traumatising.v traumatizing.v travestying.v treadling.v treeing.v trellising.v trenching.v trending.v trepaning.v trepanning.v trephining.v triangulating.v trichinizing.v trilling.v triplicating.v trisecting.v tritiating.v triturating.v trivialising.v trolling.v trooping.v trucking.v truing.v trussing.v trypsinising.v trypsinizing.v tubularizing.v turfing.v turgidizing.v twining.v twinning.v twiting.v twitting.v tyrannising.v ubiquitinating.v ultrapurifying.v ultrasonicating.v unbaring.v unbarring.v unbinding.v unbosoming.v unbridling.v uncaping.v uncapping.v unclamping.v uncliping.v unclipping.v unclogging.v uncloging.v uncuffing.v undeceiving.v undercalling.v underdetecting.v underdiagnosing.v underemphasising.v underemphasizing.v underexerting.v under-feeding.v undernourishing.v underpredicting.v undersedating.v understaging.v understaining.v undertreating.v underusing.v underutilising.v underutilizing.v underwriting.v unfiting.v unfitting.v unhorsing.v universalizing.v unknotting.v unmaning.v unmanning.v unravelling.v unroofing.v unsaying.v unseating.v unsexing.v unsticking.v upregulating.v uptaking.v urbanising.v utilising.v vacuuming.v vagotomizing.v vailing.v vandalising.v vandalizing.v vaporising.v vapourising.v vapourizing.v variegating.v variolating.v vascularising.v vascularizing.v vasectomizing.v vaunting.v veneering.v ventralising.v ventralizing.v ventricular_hypertrophying ventriducting.v verbalising.v victimising.v victualing.v victualling.v videoing.v virilising.v virilizing.v visioning.v visualising.v vitalising.v vitalizing.v vitrectomising.v vitrectomizing.v vivifying.v vocalising.v vogueing.v voguing.v volitilising.v vortexing.v vulcanising.v vulcanizing.v vulgarising.v vulnerating.v wagering.v wallpapering.v wanding.v wardening.v waring.v warring.v waterlogging.v wearying.v weaseling.v webbing.v weeing.v weekending.v weiring.v welching.v welling.v wenching.v westernising.v whisking.v whizing.v whizzing.v whopping.v winching.v winkling.v wintering.v wising.v womanising.v wowing.v wracking.v wreathing.v xanthating.v xenografting.v xeroxing.v Xeroxing.v x_raying X_raying x-raying.v xraying.v X-raying.v yarning.v yellowing.v yoking.v zenkerizing.v zippering.v link-grammar/data/en/words/words.v.2.30000644000000000000000000004336412536650433014645 0ustar abdicated.v-d abided.v-d aborted.v-d abraded.v-d accelerated.v-d acclimated.v-d acclimateed.v-d acclimatized.v-d acculturated.v-d accumulated.v-d acidified.v-d adapted.v-d adjourned.v-d adjudicated.v-d adjusted.v-d advanced.v-d advertised.v-d aerosolized.v-d affiliated.v-d aged.v-d agglutinated.v-d aggregated.v-d agitateed.v-d aglomerated.v-d ailed.v-d aligned.v-d alimented.v-d alkalified.v-d allied.v-d altered.v-d alternated.v-d amalgamated.v-d Americanized.v-d anastomosed.v-d anchored.v-d anergized.v-d ankylosed.v-d anteverted.v-d apostrophized.v-d appealed.v-d applauded.v-d applicated.v-d applied.v-d approached.v-d approximated.v-d arbitrated.v-d arborized.v-d arched.v-d articulated.v-d arylated.v-d ascended.v-d assembled.v-d assimilated.v-d assisted.v-d associated.v-d attached.v-d attended.v-d auditioned.v-d augured.v-d autoactivated.v-d autocatalyzed.v-d autocorrelated.v-d autodigested.v-d autolyzed.v-d automatized.v-d autophosphorylated.v-d autosensitized.v-d autotransfused.v-d availed.v-d awakened.v-d axenized.v-d bagged.v-d banded.v-d banked.v-d bargained.v-d bartered.v-d bathed.v-d batted.v-d baulked.v-d benefited.v-d benefitted.v-d berthed.v-d bicompartmentalized.v-d bifurcated.v-d bioaccumulated.v-d biotested.v-d blabbed.v-d blackened.v-d blackleged.v-d blacklegged.v-d blanched.v-d blasphemed.v-d blasphemeed.v-d bleached.v-d blended.v-d blinked.v-d blistered.v-d bluffed.v-d blurred.v-d boggled.v-d bonded.v-d boned.v-d bootleged.v-d bootlegged.v-d boped.v-d bopped.v-d bordered.v-d borrowed.v-d botanized.v-d bottle-feeded.v-d bowdlerized.v-d breastfed.v-d bred.v-d brewed.v-d bridled.v-d bridleed.v-d broadcasted.v-d broadened.v-d broiled.v-d bronchodilated.v-d browned.v-d bruxed.v-d budged.v-d buffeted.v-d buggered.v-d bullied.v-d burglarized.v-d burgled.v-d burnished.v-d burrowed.v-d cabled.v-d calcified.v-d calcifiesed.v-d calcined.v-d cambered.v-d cancelled.v-d cancerized.v-d canvassed.v-d capitalized.v-d capsized.v-d carped.v-d catabolized.v-d catenated.v-d cationized.v-d celebrated.v-d centered.v-d centred.v-d chanted.v-d charred.v-d chelated.v-d circled.v-d circulated.v-d clanged.v-d clapped.v-d clasped.v-d clavelized.v-d cleaved.v-d clicked.v-d clinched.v-d clinked.v-d cloied.v-d clotted.v-d cloyed.v-d clutched.v-d coacervated.v-d coached.v-d coagglutinated.v-d coaggregated.v-d coagulated.v-d coamplified.v-d coarctated.v-d coarsened.v-d coaxed.v-d codistributed.v-d coextracted.v-d cofractionated.v-d cogitated.v-d coincubated.v-d coinjected.v-d coinsured.v-d collapsed.v-d collimated.v-d co-localised.v-d colocalised.v-d co-localized.v-d colocalized.v-d combined.v-d cometabolized.v-d commenced.v-d commingled.v-d communicated.v-d commuted.v-d compared.v-d compensated.v-d composed.v-d computed.v-d concentrated.v-d conceptualized.v-d condensed.v-d conducted.v-d confederated.v-d conferred.v-d confided.v-d congested.v-d conjoined.v-d conjugated.v-d consolidated.v-d constipated.v-d consulted.v-d contested.v-d contrasted.v-d contributed.v-d convened.v-d converted.v-d copartitioned.v-d coprecipitated.v-d copurified.v-d coregistered.v-d correlated.v-d corroded.v-d corrugated.v-d corrupted.v-d cosedimented.v-d costained.v-d costared.v-d co-starred.v-d couched.v-d counter-attacked.v-d counterattacked.v-d counterindicated.v-d countermined.v-d crashed.v-d crash-landed.v-d craved.v-d creased.v-d creosoted.v-d cribbed.v-d crinkled.v-d crisscrossed.v-d crocheted.v-d crooned.v-d cross-checked.v-d crosschecked.v-d cross_fertilized crosslinked.v-d cryosectioned.v-d crystallized.v-d cuddled.v-d cumulated.v-d curdled.v-d cursed.v-d curved.v-d dabbed.v-d damped.v-d dangled.v-d daped.v-d dapped.v-d darkened.v-d darned.v-d dated.v-d de-acidified.v-d deacidified.v-d de-adapted.v-d deadapted.v-d de-aggregated.v-d deaggregated.v-d de-alcoholized.v-d dealcoholized.v-d de-allergized.v-d deallergized.v-d debarked.v-d debated.v-d de-bonded.v-d debonded.v-d de-branched.v-d debranched.v-d decelerated.v-d de-cidualized.v-d decidualized.v-d de-clamped.v-d declamped.v-d decomposed.v-d de-condensed.v-d decondensed.v-d de-conditioned.v-d deconditioned.v-d de-congested.v-d decongested.v-d de-conjugated.v-d deconjugated.v-d de-constructed.v-d deconstructed.v-d decreased.v-d de-crepitated.v-d decrepitated.v-d de-differentiated.v-d dedifferentiated.v-d deepened.v-d de-epithelialized.v-d deepithelialized.v-d de-fibrinogenated.v-d defibrinogenated.v-d deflected.v-d de-fluorinated.v-d defluorinated.v-d de-gloved.v-d degloved.v-d de-glycosylated.v-d deglycosylated.v-d de-granulated.v-d degranulated.v-d de-humidified.v-d dehumidified.v-d de-iodinated.v-d deiodinated.v-d delayed.v-d delighted.v-d de-masculinized.v-d demasculinized.v-d democratized.v-d de-morphinized.v-d demorphinized.v-d de-naturated.v-d denaturated.v-d departmentalized.v-d de-phased.v-d dephased.v-d de-polarized.v-d depolarized.v-d de-polymerized.v-d depolymerized.v-d de-proteinized.v-d deproteinized.v-d de-quenched.v-d dequenched.v-d derailed.v-d derived.v-d derogated.v-d de-saturated.v-d desaturated.v-d descended.v-d de-squamated.v-d desquamated.v-d de-stabilized.v-d destabilized.v-d de-synchronized.v-d desynchronized.v-d detonated.v-d de-toxified.v-d detoxified.v-d developed.v-d de-vitrified.v-d devitrified.v-d dialyzed.v-d dichotomized.v-d dictated.v-d differentiated.v-d diffused.v-d digested.v-d digitalized.v-d digitilized.v-d dilated.v-d dimerized.v-d diminished.v-d dimmed.v-d dinned.v-d dipped.v-d disarmed.v-d disarticulated.v-d disbanded.v-d discased.v-d discharged.v-d discolored.v-d discontinued.v-d disengaged.v-d disentangled.v-d disincorporated.v-d disinflated.v-d disjoined.v-d dismounted.v-d dispensed.v-d dispersed.v-d dissimulated.v-d dissipated.v-d dissolved.v-d distended.v-d distilled.v-d distinguished.v-d disunited.v-d dive-bombed.v-d diversified.v-d diverticulized.v-d divined.v-d docked.v-d dodged.v-d dogmatized.v-d dorsalized.v-d dorsiflexed.v-d double-clicked.v-d downsized.v-d dreaded.v-d dribbled.v-d drilled.v-d dripped.v-d drooped.v-d dulled.v-d dynamized.v-d dysmyelinated.v-d echoed.v-d effluxed.v-d effused.v-d ejaculated.v-d ejected.v-d elaborated.v-d electrobloted.v-d electrocoagulated.v-d electrodialyzed.v-d electroejaculated.v-d electrofocused.v-d electrofocussed.v-d electrotyped.v-d elongated.v-d embolized.v-d embrittled.v-d embroidered.v-d emplaned.v-d encapsidated.v-d encysted.v-d ended.v-d endocytosed.v-d endothelialized.v-d endured.v-d engaged.v-d engorged.v-d enlisted.v-d enroled.v-d enrolled.v-d entered.v-d entertained.v-d entrenched.v-d enunciated.v-d epimerized.v-d epoxidated.v-d eroded.v-d escalated.v-d escaped.v-d esterized.v-d etched.v-d etiolated.v-d euhydrated.v-d evacuated.v-d evolved.v-d exaggerated.v-d excysted.v-d exercised.v-d exfoliated.v-d exhaled.v-d exogastrulated.v-d expanded.v-d expectorated.v-d exploded.v-d explored.v-d expounded.v-d expressed.v-d extemporized.v-d extended.v-d extrapolated.v-d extravasated.v-d exuviated.v-d famished.v-d farrowed.v-d fastened.v-d feasted.v-d federated.v-d fermented.v-d ferried.v-d fibrillated.v-d fiddled.v-d fielded.v-d filmed.v-d fissurated.v-d fistulized.v-d fitted.v-d fixated.v-d flagged.v-d flapped.v-d flashed.v-d fledged.v-d fled.v-d flexed.v-d flocced.v-d flocculated.v-d floced.v-d flossed.v-d fluidified.v-d fluorinated.v-d focalized.v-d focused.v-d focussed.v-d foliated.v-d footed.v-d force-landed.v-d foreclosed.v-d formed.v-d foundered.v-d foveated.v-d fractured.v-d frayed.v-d fronted.v-d frosted.v-d fructified.v-d fudged.v-d fuelled.v-d fulgurated.v-d fumbled.v-d furled.v-d fused.v-d gagged.v-d gained.v-d gambled.v-d gamed.v-d gammed.v-d ganted.v-d gargled.v-d gasified.v-d gasped.v-d gazumped.v-d gelatinized.v-d generalized.v-d germinated.v-d gestated.v-d gimped.v-d glanced.v-d globalized.v-d glossed.v-d glucoronized.v-d glucosylated.v-d gnashed.v-d gnawed.v-d governed.v-d granulated.v-d grasped.v-d grated.v-d grieved.v-d groaned.v-d groped.v-d grounded.v-d ground.v-d grouped.v-d growled.v-d grumbled.v-d grunted.v-d hailed.v-d haploidized.v-d hardened.v-d harmonized.v-d hatched.v-d heaved.v-d heckled.v-d hectored.v-d hedged.v-d heightened.v-d hemagglutinated.v-d hemmed.v-d hemoagglutinated.v-d hemocoagulated.v-d hemolyzed.v-d heterotransplanted.v-d hoarded.v-d hoed.v-d honked.v-d hooted.v-d howled.v-d hugged.v-d humidified.v-d hummed.v-d hushed.v-d hustled.v-d hybridized.v-d hydrated.v-d hydrolyzed.v-d hyperarticulated.v-d hypercoagulated.v-d hyperhydrated.v-d hyperinflated.v-d hypermodified.v-d hyperphosphorylated.v-d hyperpolarized.v-d hyperproliferated.v-d hypersensitized.v-d hyperventilated.v-d hypohydrated.v-d hypomethylated.v-d hyposecreted.v-d hypoventilated.v-d iced.v-d idled.v-d ignited.v-d immunomodulated.v-d immunoprecipitated.v-d imploded.v-d imprecated.v-d improved.v-d improvised.v-d incepted.v-d inclined.v-d incorporated.v-d increased.v-d incubated.v-d indented.v-d indulged.v-d indurated.v-d industrialized.v-d infibulated.v-d infolded.v-d infringed.v-d inhaled.v-d initiated.v-d inosculated.v-d insonated.v-d intensified.v-d interbred.v-d interconnected.v-d intercorrelated.v-d interlocked.v-d intermixed.v-d interned.v-d interpenetrated.v-d interpreted.v-d interrelated.v-d interrupted.v-d intersected.v-d intertwined.v-d interviewed.v-d intravasated.v-d intrigued.v-d intussuscepted.v-d invaginated.v-d invested.v-d investigated.v-d invigilated.v-d iodized.v-d ionized.v-d isografted.v-d isomerized.v-d jabbed.v-d jaged.v-d jangled.v-d jeered.v-d jigged.v-d jiggled.v-d jingled.v-d jolted.v-d jostled.v-d juggled.v-d keratinized.v-d kidded.v-d kindled.v-d knitted.v-d labilized.v-d labored.v-d laboured.v-d lactonized.v-d lamented.v-d landed.v-d latched.v-d lateralized.v-d launched.v-d lectured.v-d left-clicked.v-d lengthened.v-d lessened.v-d levitated.v-d liganded.v-d lighted.v-d liquefied.v-d liquidated.v-d litigated.v-d littered.v-d lobbied.v-d lobulated.v-d localised.v-d localized.v-d located.v-d lodged.v-d luminesced.v-d lunched.v-d luteinized.v-d lysed.v-d macerated.v-d mainlined.v-d maldigested.v-d malrotated.v-d maneuvered.v-d manoeuvred.v-d marbleized.v-d marinated.v-d massed.v-d masturbated.v-d mated.v-d medialized.v-d mediated.v-d melded.v-d meliorated.v-d mended.v-d merged.v-d meshed.v-d metallized.v-d metricized.v-d met.v-d micellized.v-d microembolized.v-d microencapsulated.v-d milled.v-d mimed.v-d mined.v-d misaligned.v-d misarticulated.v-d miscalculated.v-d miscarried.v-d miscounted.v-d misdealt.v-d misfolded.v-d misjudged.v-d misted.v-d mistimed.v-d misunderstanded.v-d misunderstood.v-d moaned.v-d mobilized.v-d moderated.v-d modernized.v-d moistened.v-d mooned.v-d mottled.v-d moulded.v-d moulted.v-d mounted.v-d mourned.v-d mowed.v-d muddled.v-d multimerized.v-d multiplicated.v-d multiplied.v-d mumbled.v-d munched.v-d murmured.v-d muscularized.v-d mutated.v-d myelinated.v-d narrowed.v-d navigated.v-d neared.v-d necrotized.v-d negotiated.v-d nephrectomized.v-d nibbled.v-d nipped.v-d nitrogenized.v-d nucleated.v-d nuzzled.v-d obeyed.v-d obsessed.v-d occluded.v-d ogled.v-d opacified.v-d operated.v-d opsonized.v-d orbited.v-d originated.v-d ossified.v-d outspaned.v-d outspanned.v-d overarched.v-d overbalanced.v-d overcalled.v-d overcharged.v-d overclouded.v-d overdressed.v-d overfeeded.v-d overfilled.v-d overflowed.v-d overheated.v-d over-indulged.v-d overindulged.v-d overlapped.v-d overproduced.v-d overproliferated.v-d overreached.v-d overreplicated.v-d oversecreted.v-d overspent.v-d overstretched.v-d overtrained.v-d overtranscribed.v-d overtrumped.v-d overturned.v-d overworked.v-d oviposited.v-d oxidated.v-d oxidized.v-d paced.v-d paddled.v-d paraded.v-d parked.v-d parsed.v-d parted.v-d particularized.v-d passivized.v-d pathergized.v-d pealed.v-d pecked.v-d peculated.v-d pedaled.v-d pedalled.v-d peddled.v-d pended.v-d penetrated.v-d peptonized.v-d perched.v-d performed.v-d peroxidized.v-d petitioned.v-d petrified.v-d phenolized.v-d phlebotomized.v-d photodegraded.v-d photodissociated.v-d photoisomerized.v-d photolyzed.v-d photooxidized.v-d photoreactivated.v-d picketed.v-d pillaged.v-d pinocytosed.v-d pioneered.v-d pitched.v-d placered.v-d plasticized.v-d plundered.v-d poached.v-d poised.v-d polled.v-d posed.v-d power-dived.v-d practised.v-d preached.v-d preactivated.v-d precontracted.v-d preincubated.v-d preplaned.v-d preplanned.v-d presurfaced.v-d pretested.v-d pringled.v-d privatized.v-d projected.v-d promenaded.v-d pronated.v-d propagated.v-d protonated.v-d prowled.v-d pseudonormalized.v-d puked.v-d punctured.v-d punted.v-d purled.v-d pustulated.v-d putted.v-d puzzled.v-d qualified.v-d quickened.v-d quietened.v-d raced.v-d racemized.v-d radiated.v-d radioed.v-d rallied.v-d ramified.v-d rancidified.v-d ranged.v-d ranked.v-d rapped.v-d rated.v-d rattled.v-d raveled.v-d ravelled.v-d reactivated.v-d reacylated.v-d readapted.v-d readjusted.v-d reannealed.v-d reapplied.v-d reared.v-d rearmed.v-d rearrested.v-d reassembled.v-d reawakened.v-d rebleeded.v-d rebreathed.v-d rebred.v-d rebreeded.v-d rebuilt.v-d recalculated.v-d recanted.v-d recapitulated.v-d recapped.v-d received.v-d recemented.v-d recharged.v-d reciprocated.v-d recolonized.v-d recommenced.v-d recomputed.v-d reconfirmed.v-d reconnected.v-d reconvened.v-d reconverted.v-d recovered.v-d recrossed.v-d recruited.v-d recrystallized.v-d recurved.v-d reddened.v-d redifferentiated.v-d redissolved.v-d redoubled.v-d reelevated.v-d reendothelialized.v-d reentered.v-d reepithelialized.v-d reequilibrated.v-d reeved.v-d reexpanded.v-d refed.v-d referred.v-d refited.v-d refitted.v-d reflated.v-d refloated.v-d refocused.v-d refocussed.v-d re-formed.v-d reformed.v-d refreezed.v-d refueled.v-d refuelled.v-d regenerated.v-d registered.v-d regrouped.v-d regrowed.v-d rehearsed.v-d rehydrated.v-d reincorporated.v-d reincubated.v-d reinduced.v-d reinflated.v-d reinfused.v-d reinvested.v-d reinvestigated.v-d reirradiated.v-d rekindled.v-d related.v-d relaxed.v-d relocated.v-d remarried.v-d remeasured.v-d remineralized.v-d remitted.v-d remobilized.v-d remounted.v-d renegotiated.v-d reoccluded.v-d re-opened.v-d reopened.v-d reoperated.v-d reordered.v-d reorganized.v-d reoxidized.v-d repacked.v-d repaired.v-d rephosphorylated.v-d repolarized.v-d reprised.v-d reprobed.v-d reproduced.v-d reseeded.v-d resensitized.v-d resettled.v-d resigned.v-d respirated.v-d restarted.v-d restituted.v-d resumed.v-d resuscitated.v-d retailed.v-d retested.v-d rethrombosed.v-d retired.v-d retooled.v-d retrotransposed.v-d retruded.v-d returned.v-d reunified.v-d reunited.v-d reventilated.v-d reversed.v-d revived.v-d rhymed.v-d ricocheted.v-d right-clicked.v-d rigidified.v-d ringed.v-d roamed.v-d roared.v-d roasted.v-d rotated.v-d roused.v-d rowed.v-d ruffled.v-d ruptured.v-d rustled.v-d sacrificed.v-d saluted.v-d saponified.v-d scanned.v-d scattered.v-d scissored.v-d sclerosed.v-d scoffed.v-d scolded.v-d scored.v-d scrambled.v-d scrawled.v-d scribbled.v-d scrubbed.v-d sculled.v-d sculptured.v-d searched.v-d seized.v-d senesced.v-d separated.v-d serrated.v-d severed.v-d shaded.v-d shamed.v-d shammed.v-d shattered.v-d shelled.v-d shop-lifted.v-d shoplifted.v-d short-circuited.v-d shortened.v-d shoved.v-d showered.v-d shrieked.v-d shuffled.v-d sifted.v-d singed.v-d sinusoidalized.v-d sipped.v-d skeletonized.v-d skewed.v-d slammed.v-d slanted.v-d sledged.v-d slenderized.v-d sloshed.v-d smacked.v-d smeared.v-d smoked.v-d smudged.v-d snarled.v-d snipped.v-d snorted.v-d snuggled.v-d socialized.v-d solidified.v-d somatized.v-d sowed.v-d spalted.v-d spattered.v-d spawned.v-d spied.v-d spiralized.v-d splashed.v-d splayed.v-d splintered.v-d spoiled.v-d sponged.v-d sported.v-d spouted.v-d spreadeagled.v-d spring-cleaned.v-d squashed.v-d stabilised.v-d stabilized.v-d stained.v-d stalled.v-d stammered.v-d stampeded.v-d steadied.v-d steeped.v-d steepened.v-d steered.v-d stewed.v-d stifled.v-d stinted.v-d stippled.v-d stonewalled.v-d strained.v-d stratified.v-d streaked.v-d strengthened.v-d strobed.v-d strummed.v-d stumped.v-d stung.v-d subcontracted.v-d subdivided.v-d subducted.v-d subleased.v-d subleted.v-d submerged.v-d submitted.v-d substituted.v-d succeeded.v-d sued.v-d suffered.v-d suffocated.v-d summated.v-d superheated.v-d superinfected.v-d superovulated.v-d supervised.v-d supinated.v-d supplicated.v-d surrendered.v-d survived.v-d swallowed.v-d swapped.v-d swayed.v-d sweated.v-d swished.v-d swiveled.v-d swivelled.v-d synchronized.v-d synergized.v-d tackled.v-d tanned.v-d tapped.v-d tarnished.v-d tautomerized.v-d telephoned.v-d terminated.v-d tetramerized.v-d thawed.v-d thermalized.v-d thieved.v-d thrashed.v-d threshed.v-d thrilled.v-d thrombosed.v-d thronged.v-d throttled.v-d thrumed.v-d thrummed.v-d thumped.v-d thundered.v-d tickled.v-d tilted.v-d tined.v-d tinged.v-d titivated.v-d titrated.v-d toasted.v-d tooted.v-d traced.v-d traded.v-d transaminated.v-d transcomplemented.v-d transcytosed.v-d transferred.v-d transgressed.v-d translated.v-d transplanted.v-d trawled.v-d treated.v-d trebled.v-d triaged.v-d trimerized.v-d trotted.v-d troubleshooted.v-d trumped.v-d trumpeted.v-d tuberculized.v-d tugged.v-d tumed.v-d tummed.v-d twanged.v-d twirled.v-d ulcerated.v-d umpired.v-d unbended.v-d uncoated.v-d uncoiled.v-d uncurled.v-d undercorrected.v-d underfeeded.v-d underprescribed.v-d underreported.v-d underspent.v-d undressed.v-d unfastened.v-d unfolded.v-d unhitched.v-d unified.v-d unionized.v-d united.v-d unknoted.v-d unloaded.v-d unlocked.v-d unpacked.v-d unraveled.v-d unrolled.v-d unscrewed.v-d unstressed.v-d untied.v-d untwisted.v-d unwound.v-d unwrapped.v-d uploaded.v-d urbanized.v-d vaporized.v-d varicellized.v-d varied.v-d vasodilated.v-d ventured.v-d versified.v-d verted.v-d vesicated.v-d vesiculated.v-d vested.v-d vibrated.v-d visited.v-d vitrified.v-d vituperated.v-d vociferated.v-d volatilized.v-d volleyed.v-d vomited.v-d waded.v-d wagged.v-d waggled.v-d wailed.v-d wakened.v-d warped.v-d watered.v-d waxed.v-d weakened.v-d wedded.v-d welded.v-d whealed.v-d wheeled.v-d whined.v-d whirled.v-d whistled.v-d whitened.v-d whittled.v-d whorled.v-d widened.v-d wiggled.v-d worsened.v-d worshiped.v-d worshipped.v-d wrestled.v-d wrinkled.v-d yelled.v-d yielded.v-d yodelled.v-d link-grammar/data/en/words/words.v.6.20000644000000000000000000000677612536650433014656 0ustar adopts.v airlifts.v airs.v angles.v armors.v authorises.v averages.v backfills.v backpacks.v backs.v badges.v bails.v bangs.v beams.v beats.v beckons.v beefs.v bellows.v benchmarks.v bends.v bicycles.v bikes.v binds.v bites.v blares.v bleeds.v blogs.v blows.v bobs.v bogs.v boils.v bolts.v boos.v boots.v boozes.v bores.v bounces.v bounds.v bowls.v boxs.v branches.v breaks.v breathes.v brightens.v bruises.v brushes.v buckles.v bucks.v builds.v bulges.v bumps.v bums.v bunches.v burns.v busts.v buttons.v butts.v buzzes.v calms.v camps.v cancels.v canoes.v captions.v carves.v cashes.v casts.v catches.v chambers.v changes.v chats.v cheats.v checks.v cheers.v chews.v chills.v chips.v chokes.v chops.v choreographs.v churns.v cleans.v climbs.v clogs.v closes.v clouds.v clumps.v coffers.v coils.v combs.v connects.v contracts.v cooks.v cools.v cops.v costumes.v coughs.v counts.v cracks.v crams.v crosses.v crowds.v crumbles.v crumples.v crunches.v curls.v dashes.v dematerializes.v dials.v digs.v dines.v drags.v drains.v dresses.v dries.v drinks.v drives.v dropkicks.v drops.v drowns.v drums.v ducks.v dumbs.v eases.v eats.v edges.v emails.v emcees.v empties.v evangelizes.v evens.v faces.v fans.v farms.v fattens.v feeds.v fends.v fetches.v feuds.v files.v fills.v filters.v fires.v firms.v fishes.v fists.v flares.v flattens.v flavors.v flies.v flips.v floats.v floods.v flunks.v flushes.v folds.v follows.v forks.v fouls.v freaks.v freezes.v frenchs.v freshens.v frizzes.v frizzles.v fucks.v fuels.v gallops.v gathers glazes.v gobbles.v gongs.v grinds.v gulps.v hacks.v hammers.v hangs.v hardwires.v harkens.v hauls.v heads.v heals.v heats.v herds.v hides.v hikes.v hitches.v homers.v hooks.v hops.v hunts.v irons.v jams.v jerks.v joins.v jumbles.v jumps.v kayaks.v kills.v knocks.v knots.v laps.v lashes.v leads.v leaks.v leans.v leaps.v levels.v licks.v lightens.v lights.v limbers.v lines.v livens.v logs.v loops.v loosens.v loses.v marches.v marchs.v marries.v matches.v melts.v messes.v misses.v mixes.v mops.v mounds.v mouths.v moves.v mucks.v nods.v oozes.v opens options.v packs.v pairs.v pans.v parlays.v parties.v peels.v pees.v piles.v pisses.v plays.v ploughs.v plows.v plucks.v plunges.v points.v pokes.v pops.v pounds.v pries.v prinks.v puckers.v pulls.v pumps.v quiets.v rakes.v reaches.v reels.v rents.v rerecords.v resizes.v revs.v rewinds.v rides.v rings.v rips.v rocks.v rolls.v roots.v rotoscopes.v rounds.v rubs.v runs.v rushes.v sails.v saws.v scopes.v scouts.v scrapes.v scratches.v screws.v scuffs.v seals.v segues.v serves.v settles.v sews.v shapes.v shaves.v shifts.v ships.v shoots.v shorts.v shrugs.v shushes.v shuts.v signs.v silkscreens.v sketches.v skin-dives.v skips.v skis.v slides.v slips.v sloughs.v slows.v smartens.v smashes.v smooths.v snaps.v snatches.v sneaks.v sniffs.v snorkels.v snuffs.v soaks.v sobers.v softens.v spaces.v sparks.v speeds.v spells.v spills.v spins.v spirals.v spits.v splices.v splits.v spreads.v springs.v sprouts.v spruces.v squares.v squeezes.v squirts.v staggers.v stalks.v stamps.v stares.v stars.v starves.v steams.v sticks.v stiffens.v stirs.v stocks.v storms.v straightens.v stretches.v strikes.v strips.v sucks.v sums.v surfs.v swells.v swims.v swings.v switches.v swots.v tallies.v tangles.v tapers.v tasks.v thickens.v thins.v ticks.v tidies.v tightens.v tinkles.v tips.v tires.v togs.v tones.v topples tosses.v trails.v treads.v trims.v trips.v tucks.v tumbles.v tunes.v twists.v types.v wakes.v walks.v warms.v weaves.v weeds.v weighs.v whips.v whoops.v winds.v wins.v wipes.v works.v wraps.v zeroes.v link-grammar/data/en/words/units.4.dot0000644000000000000000000000006512536650432015021 0ustar min.u h.u hr.u dy.u wk.u wks.u mo.u mos.u yr.u yrs.u link-grammar/data/en/words/entities.given-bisex.sing0000644000000000000000000000545212536650432017737 0ustar Aaron.b Adam.b Adrian.b Adrien.b Albert.b Alex.b Alexander.b Alexis.b Ali.b Allen.b Alix.b Alva.b Amal.b Andre.b Andrea.b Andrew.b Angel.b Angelo.b Anka.b Anthony.b Antonia.b Antonio.b Ariel.b Arthur.b Ashley.b Ashton.b Aubrey.b Audrey.b Augie.b Augustine.b Austin.b Avery.b Bell.b Bennie.b Bernie.b Berry.b Billie.b Billy.b Blair.b Blake.b Bobbie.b Bobby.b Brandon.b Brett.b Brian.b Britt.b Cameron.b Carey.b Carl.b Carlos.b Carmen.b Carol.b Carrol.b Carroll.b Cary.b Casey.b Cecil.b Chang.b Charles.b Charlie.b Chi.b Chong.b Chris.b Christian.b Christopher.b Chung.b Clair.b Clarence.b Claude.b Cleo.b Clyde.b Cody.b Colby.b Connie.b Corey.b Cory.b Courtney.b Cruz.b Curtis.b Dale.b Dallas.b Dan.b Dana.b Daniel.b Dannie.b Darnell.b Daryl.b David.b Dean.b Dee.b Demetrius.b Dennis.b Denny.b Deon.b Devin.b Devon.b Dion.b Dominique.b Donald.b Dong.b Donnie.b Dorian.b Drew.b Dusty.b Eddie.b Edward.b Elisha.b Ellis.b Elmer.b Eric.b Erin.b Eugene.b Evan.b Fluffy.b Frances.b Francis.b Francisco.b Frank.b Frankie.b Fred.b Freddie.b Gabriel.b Gail.b Gale.b Gary.b Gayle.b Gene.b George.b Gerald.b Gerry.b Glenn.b Gregory.b Guadalupe.b Harold.b Henry.b Hollis.b Hong.b Ira.b Ivory.b Jack.b Jackie.b Jae.b Jaime.b Jame.b James.b Jamey.b Jamie.b Jan.b Jason.b Jay.b Jean.b Jeffrey.b Jeremy.b Jerry.b Jesse.b Jessie.b Jesus.b Jewel.b Jewell.b Jimmie.b Jimmy.b Joan.b Jody.b Joe.b Joel.b Joey.b Johnie.b Johnnie.b Johnny.b Jon.b Jordan.b Jose.b Joseph.b Joshua.b Juan.b Jude.b Julian.b Julio.b Justin.b Karl.b Kasey.b Keith.b Kelley.b Kelly.b Kendall.b Kenneth.b Kerry.b Kevin.b Kim.b King.b Kirby.b Kris.b Kyle.b Lacy.b Lane.b Larry.b Lauren.b Laurence.b Lavern.b Laverne.b Lawrence.b Lee.b Leigh.b Leo.b Leon.b Lesley.b Leslie.b Lester.b Lewis.b Lindsay.b Lindsey.b Logan.b Lonnie.b Loren.b Lou.b Louie.b Louis.b Luis.b Lupe.b Lynn.b Man.b Maria.b Mario.b Marion.b Mark.b Marlin.b Marshall.b Martin.b Marty.b Mary.b Matthew.b Maurice.b Melvin.b Merle.b Merrill.b Micah.b Michael.b Michal.b Micheal.b Michel.b Mickey.b Mike.b Minh.b Mitchell.b Morgan.b Nicky.b Noel.b Norman.b Numbers.b Odell.b Ollie.b Oscar.b Otha.b Paris.b Pat.b Patricia.b Patrick.b Paul.b Perry.b Peter.b Quinn.b Randy.b Ray.b Raymond.b Refugio.b Rene.b Richard.b Rickie.b Robbie.b Robert.b Roberto.b Robin.b Ronald.b Ronnie.b Rory.b Rosario.b Rover.b Roy.b Royce.b Rudy.b Russell.b Ryan.b Sam.b Sammie.b Sammy.b Samuel.b Sandy.b Sang.b Santos.b Scott.b Scottie.b Sean.b Shane.b Shannon.b Shaun.b Shawn.b Shayne.b Shelby.b Shirley.b Sidney.b Sol.b Son.b Stacey.b Stacy.b Stephen.b Steven.b Stevie.b Sung.b Sydney.b Taylor.b Terrell.b Terry.b Thanh.b Theo.b Thomas.b Timothy.b Toby.b Tommie.b Tommy.b Tony.b Tory.b Tracey.b Tracy.b Travis.b Trinidad.b Tristan.b Troy.b Tyler.b Val.b Valentine.b Van.b Vernon.b Victor.b Virgil.b Walter.b Wesley.b Whitney.b William.b Willie.b Yong.b Young.b link-grammar/data/en/words/entities.given-female.sing0000644000000000000000000011124712536650432020056 0ustar Abbey.f Abbie.f Abby.f Abigail.f Ada.f Adah.f Adaline.f Adda.f Addie.f Adela.f Adelaida.f Adelaide.f Adele.f Adelia.f Adelina.f Adeline.f Adell.f Adella.f Adelle.f Adena.f Adina.f Adline.f Adria.f Adriana.f Adriane.f Adrianna.f Adrianne.f Adriene.f Adrienne.f Afton.f Agatha.f Aggie.f Agnes.f Agnus.f Agripina.f Agueda.f Agustina.f Ai.f Aida.f Aide.f Aiko.f Aileen.f Ailene.f Aimee.f Aisha.f Aja.f Akiko.f Akilah.f Alaina.f Alaine.f Alana.f Alane.f Alanna.f Alayna.f Alba.f Alberta.f Albertha.f Albertina.f Albertine.f Albina.f Alcie.f Alda.f Aldona.f Alease.f Alecia.f Aleen.f Aleida.f Aleisha.f Alejandra.f Alejandrina.f Alena.f Alene.f Alesha.f Aleshia.f Alesia.f Alessandra.f Aleta.f Aletha.f Alethea.f Alethia.f Alexa.f Alexandra.f Alexandria.f Alexia.f Alfreda.f Alfredia.f Alia.f Alica.f Alice.f Alicia.f Alida.f Alina.f Aline.f Alisa.f Alise.f Alisha.f Alishia.f Alisia.f Alison.f Alissa.f Alita.f Aliza.f Alla.f Alleen.f Allegra.f Allena.f Allene.f Allie.f Alline.f Allison.f Allyn.f Allyson.f Alma.f Almeda.f Almeta.f Almira.f Almyra.f Alona.f Alpha.f Alta.f Altagracia.f Altha.f Althea.f Alvena.f Alvera.f Alverta.f Alvina.f Alvira.f Alyce.f Alycia.f Alys.f Alysa.f Alyse.f Alysha.f Alysia.f Alyson.f Alyssa.f Amada.f Amalia.f Amanda.f Amber.f Amberly.f Amee.f Amelia.f America.f Ami.f Amie.f Amiee.f Amina.f Amira.f Ammie.f Amparo.f Amy.f An.f Ana.f Anabel.f Analisa.f Anamaria.f Anastacia.f Anastasia.f Andera.f Andra.f Andree.f Andria.f Anette.f Angela.f Angele.f Angelena.f Angeles.f Angelia.f Angelic.f Angelica.f Angelika.f Angelina.f Angeline.f Angelique.f Angelita.f Angella.f Angelyn.f Angie.f Angila.f Angla.f Angle.f Anglea.f Anh.f Anika.f Anisa.f Anisha.f Anissa.f Anita.f Anitra.f Anja.f Anjanette.f Anjelica.f Ann.f Anna.f Annabel.f Annabell.f Annabelle.f Annalee.f Annalisa.f Annamae.f Annamaria.f Annamarie.f Anne.f Anneliese.f Annelle.f Annemarie.f Anner.f Annett.f Annetta.f Annette.f Annice.f Annie.f Annika.f Annis.f Annita.f Annmarie.f Antionette.f Antoinette.f Antonetta.f Antonette.f Antonietta.f Antonina.f Anya.f Apolonia.f April.f Apryl.f Ara.f Araceli.f Aracelis.f Aracely.f Araminta.f Arcelia.f Ardath.f Ardelia.f Ardell.f Ardella.f Ardelle.f Ardis.f Ardith.f Aretha.f Argelia.f Argentina.f Aria.f Ariana.f Ariane.f Arianna.f Arianne.f Arica.f Arie.f Arielle.f Arizona.f Arla.f Arlean.f Arleen.f Arlena.f Arlene.f Arletha.f Arletta.f Arlette.f Arlinda.f Arline.f Arlyne.f Armanda.f Armandina.f Armida.f Arminda.f Arminta.f Arnetta.f Arnette.f Arnita.f Arrie.f Artie.f Arvilla.f Asha.f Ashanti.f Ashely.f Ashlea.f Ashlee.f Ashleigh.f Ashli.f Ashlie.f Ashly.f Ashlyn.f Asia.f Asley.f Assunta.f Astrid.f Asuncion.f Atha.f Athena.f Audie.f Audra.f Audrea.f Audria.f Audrie.f Audry.f Augusta.f Augustina.f Aundrea.f Aura.f Aurea.f Aurelia.f Aurora.f Aurore.f Autumn.f Ava.f Avelina.f Avie.f Avis.f Avril.f Awilda.f Ayako.f Ayana.f Ayanna.f Ayesha.f Azalee.f Azucena.f Azzie.f Babara.f Babette.f Bailey.f Bama.f Bambi.f Bao.f Barabara.f Barb.f Barbar.f Barbara.f Barbera.f Barbie.f Barbra.f Bari.f Barrie.f Basilia.f Bea.f Beata.f Beatrice.f Beatris.f Beatriz.f Beaulah.f Bebe.f Becki.f Beckie.f Becky.f Bee.f Belen.f Belia.f Belinda.f Belkis.f Bella.f Belle.f Belva.f Bena.f Benita.f Berdie.f Berenice.f Berna.f Bernadette.f Bernadine.f Bernarda.f Bernardina.f Bernardine.f Berneice.f Bernetta.f Bernice.f Berniece.f Bernita.f Berta.f Bertha.f Bertie.f Beryl.f Bess.f Besse.f Bessie.f Beth.f Bethanie.f Bethann.f Bethany.f Bethel.f Betsey.f Betsy.f Bette.f Bettie.f Bettina.f Betty.f Bettyann.f Bettye.f Beula.f Beulah.f Bev.f Beverlee.f Beverley.f Beverly.f Bianca.f Bibi.f Billi.f Billye.f Bina.f Bird.f Birdie.f Birgit.f Birtha.f Birtie.f Blanca.f Blanch.f Blanche.f Blondell.f Blossom.f Blythe.f Bobbi.f Bobbye.f Bobette.f Bok.f Bong.f Bonita.f Bonnie.f Bonny.f Branda.f Brande.f Brandee.f Brandi.f Brandie.f Brandy.f Breana.f Breann.f Breanna.f Breanne.f Bree.f Brenda.f Brenna.f Briana.f Brianna.f Brianne.f Bridget.f Bridgett.f Bridgette.f Brigette.f Brigid.f Brigida.f Brigitte.f Brinda.f Britany.f Britney.f Britni.f Britta.f Brittaney.f Brittani.f Brittanie.f Brittany.f Britteny.f Brittney.f Brittni.f Brittny.f Bronwyn.f Brook.f Brooke.f Bruna.f Brunilda.f Bryanna.f Brynn.f Buena.f Buffy.f Bula.f Bulah.f Bunny.f Burma.f Burnice.f Caddie.f Caitlin.f Caitlyn.f Calandra.f Caldonia.f Calista.f Calla.f Callie.f Camelia.f Camellia.f Cami.f Camie.f Camila.f Camilla.f Camille.f Cammie.f Cammy.f Candace.f Candance.f Candelaria.f Candi.f Candice.f Candida.f Candie.f Candis.f Candra.f Candy.f Candyce.f Caprice.f Cara.f Caren.f Cari.f Caridad.f Carie.f Carin.f Carina.f Carisa.f Carissa.f Carita.f Carla.f Carlee.f Carleen.f Carlena.f Carlene.f Carletta.f Carley.f Carli.f Carlie.f Carline.f Carlita.f Carlota.f Carlotta.f Carly.f Carlyn.f Carma.f Carman.f Carmel.f Carmela.f Carmelia.f Carmelina.f Carmelita.f Carmella.f Carmina.f Carmon.f Carola.f Carolann.f Carole.f Carolee.f Carolin.f Carolina.f Caroline.f Caroll.f Carolyn.f Carolyne.f Carolynn.f Caron.f Caroyln.f Carra.f Carri.f Carrie.f Carry.f Caryl.f Carylon.f Caryn.f Casandra.f Casie.f Casimira.f Cassandra.f Cassaundra.f Cassey.f Cassi.f Cassidy.f Cassie.f Cassondra.f Cassy.f Catalina.f Catarina.f Caterina.f Catharine.f Catherin.f Catherina.f Catherine.f Cathern.f Catheryn.f Cathey.f Cathi.f Cathie.f Cathleen.f Cathrine.f Cathryn.f Cathy.f Catina.f Catrice.f Catrina.f Cayla.f Cecelia.f Cecila.f Cecile.f Cecilia.f Cecille.f Cecily.f Celena.f Celesta.f Celeste.f Celestia.f Celestina.f Celestine.f Celia.f Celie.f Celina.f Celinda.f Celine.f Celsa.f Ceola.f Chae.f Chan.f Chana.f Chanda.f Chandra.f Chanel.f Chanell.f Chanelle.f Chaney.f Chanie.f Chantal.f Chantay.f Chante.f Chantel.f Chantell.f Chantelle.f Chara.f Charis.f Charise.f Charissa.f Charisse.f Charita.f Charity.f Charla.f Charleen.f Charlena.f Charlene.f Charlesetta.f Charlette.f Charline.f Charlott.f Charlotta.f Charlotte.f Charlottie.f Charlsie.f Charlyn.f Charmain.f Charmaine.f Charolette.f Chasidy.f Chasity.f Chassidy.f Chastity.f Chau.f Chaya.f Chelsea.f Chelsey.f Chelsie.f Cher.f Chere.f Cheree.f Cherelle.f Cheri.f Cherie.f Cherilyn.f Cherise.f Cherish.f Cherly.f Cherlyn.f Cherri.f Cherrie.f Cherry.f Cherryl.f Chery.f Cheryl.f Cheryle.f Cheryll.f Cheyenne.f Chia.f Chieko.f Chimere.f Chin.f China.f Ching.f Chiquita.f Chloe.f Chrissie.f Chrissy.f Christa.f Christal.f Christeen.f Christel.f Christen.f Christena.f Christene.f Christi.f Christia.f Christiana.f Christiane.f Christie.f Christin.f Christina.f Christine.f Christinia.f Christy.f Chrystal.f Chu.f Chun.f Ciara.f Cicely.f Ciera.f Cierra.f Cinda.f Cinderella.f Cindi.f Cindie.f Cindy.f Cinthia.f Cira.f Claire.f Clara.f Clarabelle.f Clare.f Claretha.f Claretta.f Claribel.f Clarice.f Clarinda.f Clarine.f Claris.f Clarisa.f Clarissa.f Clarita.f Classie.f Claudette.f Claudia.f Claudie.f Claudine.f Clelia.f Clella.f Clemencia.f Clementina.f Clementine.f Clemie.f Clemmie.f Cleopatra.f Cleora.f Cleotilde.f Cleta.f Clora.f Clorinda.f Clotilde.f Clyda.f Codi.f Coleen.f Colene.f Coletta.f Colette.f Colleen.f Collen.f Collene.f Collette.f Concepcion.f Conception.f Concetta.f Concha.f Conchita.f Constance.f Consuela.f Consuelo.f Contessa.f Cora.f Coral.f Coralee.f Coralie.f Corazon.f Corda.f Cordelia.f Cordella.f Cordia.f Cordie.f Coreen.f Corene.f Coretta.f Cori.f Corie.f Corina.f Corine.f Corinna.f Corinne.f Corliss.f Cornelia.f Corrie.f Corrin.f Corrina.f Corrine.f Corrinne.f Cortney.f Creola.f Cris.f Criselda.f Crissy.f Crista.f Cristal.f Cristen.f Cristi.f Cristie.f Cristin.f Cristina.f Cristine.f Cristy.f Crysta.f Crystal.f Crystle.f Cuc.f Cyndi.f Cyndy.f Cynthia.f Cyrstal.f Cythia.f Dacia.f Dagmar.f Dagny.f Dahlia.f Daina.f Daine.f Daisey.f Daisie.f Daisy.f Dakota.f Dalene.f Dalia.f Dalila.f Damaris.f Danae.f Danelle.f Danette.f Dani.f Dania.f Danica.f Daniela.f Daniele.f Daniell.f Daniella.f Danielle.f Danika.f Danille.f Danita.f Dann.f Danna.f Dannette.f Dannielle.f Danuta.f Danyel.f Danyell.f Danyelle.f Daphine.f Daphne.f Dara.f Darby.f Darcel.f Darcey.f Darci.f Darcie.f Darcy.f Daria.f Darla.f Darleen.f Darlena.f Darlene.f Darline.f Davida.f Davina.f Dawn.f Dawna.f Dawne.f Dayle.f Dayna.f Dayse.f Daysi.f Deadra.f Deana.f Deandra.f Deandrea.f Deane.f Deann.f Deanna.f Deanne.f Deb.f Debbi.f Debbie.f Debbra.f Debby.f Debera.f Debi.f Debora.f Deborah.f Debra.f Debrah.f Debroah.f Dede.f Dedra.f Deeann.f Deeanna.f Deedee.f Deedra.f Deena.f Deetta.f Deidra.f Deidre.f Deirdre.f Deja.f Delaine.f Delana.f Delcie.f Delena.f Delfina.f Delia.f Deliah.f Delicia.f Delila.f Delilah.f Delina.f Delinda.f Delisa.f Dell.f Della.f Dellar.f Delle.f Delma.f Delmy.f Delois.f Deloise.f Delora.f Deloras.f Delores.f Deloris.f Delorse.f Delpha.f Delphia.f Delphine.f Delsie.f Delta.f Demetra.f Demetria.f Demetrice.f Dena.f Denae.f Deneen.f Denese.f Denice.f Denise.f Denisha.f Denisse.f Denita.f Denna.f Dennise.f Denyse.f Deonna.f Desirae.f Desire.f Desiree.f Despina.f Dessa.f Dessie.f Destiny.f Detra.f Devona.f Devora.f Devorah.f Dia.f Diamond.f Dian.f Diana.f Diane.f Diann.f Dianna.f Dianne.f Dicie.f Dicy.f Diedra.f Diedre.f Dierdre.f Digna.f Dillie.f Dimple.f Dina.f Dinah.f Dinorah.f Dione.f Dionna.f Dionne.f Divina.f Dixie.f Docia.f Dodie.f Dollie.f Dolly.f Dolores.f Doloris.f Domenica.f Dominga.f Dominica.f Dominque.f Domitila.f Domonique.f Dona.f Donella.f Donetta.f Donette.f Donia.f Donie.f Donita.f Donna.f Donnetta.f Donnette.f Donya.f Dora.f Dorathy.f Dorcas.f Doreatha.f Doreen.f Dorene.f Doretha.f Dorethea.f Doretta.f Dori.f Doria.f Dorie.f Dorinda.f Dorine.f Doris.f Dorla.f Dorotha.f Dorothea.f Dorothy.f Dorris.f Dortha.f Dorthea.f Dorthey.f Dorthy.f Dosha.f Doshia.f Doshie.f Dot.f Dottie.f Dotty.f Dove.f Dovie.f Dreama.f Drema.f Drucilla.f Drusilla.f Dulce.f Dulcie.f Dung.f Dusti.f Dwana.f Dyan.f Earlean.f Earleen.f Earlene.f Earlie.f Earline.f Earnestine.f Eartha.f Easter.f Ebba.f Eboni.f Ebonie.f Ebony.f Echo.f Eda.f Edda.f Edelmira.f Eden.f Edie.f Edith.f Edmonia.f Edna.f Ednah.f Edra.f Edris.f Edwina.f Edyth.f Edythe.f Effa.f Effie.f Ehtel.f Eileen.f Eilene.f Ela.f Eladia.f Elaina.f Elaine.f Elana.f Elane.f Elanor.f Elayne.f Elba.f Elberta.f Elda.f Eldora.f Eleanor.f Eleanora.f Eleanore.f Elease.f Electa.f Elena.f Elene.f Eleni.f Elenor.f Elenora.f Elenore.f Eleonor.f Eleonora.f Eleonore.f Elfreda.f Elfrieda.f Elfriede.f Elia.f Eliana.f Elicia.f Elida.f Elidia.f Elin.f Elina.f Elinor.f Elinore.f Elisa.f Elisabeth.f Elise.f Elissa.f Eliz.f Eliza.f Elizabet.f Elizabeth.f Elizbeth.f Elizebeth.f Elke.f Ella.f Ellamae.f Ellan.f Ellar.f Ellen.f Ellena.f Elli.f Ellie.f Elly.f Ellyn.f Elma.f Elmina.f Elmira.f Elmire.f Elna.f Elnora.f Elodia.f Elois.f Eloisa.f Eloise.f Elouise.f Elsa.f Else.f Elsie.f Elsy.f Elta.f Elva.f Elvera.f Elvia.f Elvie.f Elvina.f Elvira.f Elwanda.f Elyse.f Elza.f Elzada.f Ema.f Emaline.f Emelda.f Emelia.f Emelie.f Emelina.f Emeline.f Emely.f Emerald.f Emerita.f Emiko.f Emilee.f Emilia.f Emilie.f Emily.f Emma.f Emmaline.f Emmer.f Emmie.f Emmy.f Emogene.f Ena.f Enda.f Enedina.f Eneida.f Enid.f Enola.f Enriqueta.f Eola.f Epifania.f Era.f Erica.f Ericha.f Ericka.f Erie.f Erika.f Erinn.f Erlene.f Erlinda.f Erline.f Erma.f Ermelinda.f Erminia.f Erna.f Ernesta.f Ernestina.f Ernestine.f Eryn.f Esmeralda.f Esperanza.f Essie.f Esta.f Estefana.f Estela.f Estell.f Estella.f Estelle.f Ester.f Esther.f Estie.f Estrella.f Etha.f Ethel.f Ethelene.f Ethelyn.f Ether.f Ethyl.f Etna.f Etsuko.f Etta.f Etter.f Ettie.f Eudora.f Eufemia.f Eugena.f Eugenia.f Eugenie.f Eula.f Eulah.f Eulalia.f Eulalie.f Eun.f Euna.f Eunice.f Euphemia.f Eura.f Eusebia.f Eustolia.f Eva.f Evalena.f Evaline.f Evalyn.f Evangelina.f Evangeline.f Eve.f Evelia.f Evelin.f Evelina.f Eveline.f Evelyn.f Evelyne.f Evelynn.f Evette.f Evia.f Evie.f Evita.f Evon.f Evonne.f Ewa.f Exie.f Fabiola.f Fae.f Fairy.f Faith.f Fallon.f Fannie.f Fanny.f Farah.f Farrah.f Fatima.f Fatimah.f Faustina.f Faviola.f Fawn.f Fay.f Faye.f Fe.f Felecia.f Felica.f Felice.f Felicia.f Felicidad.f Felicita.f Felicitas.f Felipa.f Felisa.f Felisha.f Fermina.f Fern.f Fernanda.f Fernande.f Ferne.f Fidela.f Fidelia.f Filomena.f Fiona.f Flavia.f Fleta.f Flo.f Flor.f Flora.f Florance.f Florence.f Florencia.f Florene.f Florentina.f Flores.f Floretta.f Floria.f Florida.f Florinda.f Florine.f Florrie.f Flossie.f Floy.f Fonda.f Fran.f Francene.f Francesca.f Franchesca.f Francie.f Francina.f Francine.f Francisca.f Francoise.f Fransisca.f Freda.f Fredda.f Frederica.f Fredericka.f Fredia.f Fredricka.f Freeda.f Freida.f Frida.f Frieda.f Frona.f Fronie.f Fronnie.f Fumiko.f Gabriela.f Gabriele.f Gabriella.f Gabrielle.f Gala.f Galina.f Garnet.f Garnett.f Gay.f Gaye.f Gayla.f Gaylene.f Gaynell.f Gaynelle.f Gearldine.f Gema.f Gemma.f Gena.f Genesis.f Geneva.f Genevie.f Genevieve.f Genevive.f Genia.f Genie.f Genna.f Gennie.f Genny.f Genoveva.f Georgann.f Georgeann.f Georgeanna.f Georgene.f Georgetta.f Georgette.f Georgia.f Georgiana.f Georgiann.f Georgianna.f Georgianne.f Georgie.f Georgina.f Georgine.f Geraldine.f Geralyn.f Gerda.f Geri.f Germaine.f Gerri.f Gertha.f Gertie.f Gertrud.f Gertrude.f Gertrudis.f Gertude.f Ghislaine.f Gia.f Gianna.f Gidget.f Gigi.f Gilberte.f Gilda.f Gillian.f Gilma.f Gina.f Ginette.f Ginger.f Ginny.f Giovanna.f Gisela.f Gisele.f Giselle.f Gita.f Giuseppina.f Gladis.f Glady.f Gladys.f Glayds.f Glenda.f Glendora.f Glenna.f Glennie.f Glennis.f Glinda.f Gloria.f Glory.f Glynda.f Glynis.f Golda.f Golden.f Goldia.f Goldie.f Grace.f Gracia.f Gracie.f Graciela.f Grayce.f Grazyna.f Gregoria.f Greta.f Gretchen.f Gretta.f Gricelda.f Grisel.f Griselda.f Gudrun.f Guillermina.f Gussie.f Gwen.f Gwenda.f Gwendolyn.f Gwenn.f Gwyn.f Gwyneth.f Ha.f Hae.f Hailey.f Haley.f Halina.f Halley.f Hallie.f Han.f Hana.f Hang.f Hanh.f Hanna.f Hannah.f Hannelore.f Harmony.f Harriet.f Harriett.f Harriette.f Hassie.f Hattie.f Haydee.f Hayley.f Hazel.f Hazle.f Heather.f Hedwig.f Hedy.f Hee.f Heide.f Heidi.f Heidy.f Heike.f Helaine.f Helen.f Helena.f Helene.f Helga.f Hellen.f Helma.f Helyn.f Henretta.f Henrieta.f Henrietta.f Henriette.f Herlinda.f Herma.f Hermelinda.f Hermila.f Hermina.f Hermine.f Herminia.f Herta.f Hertha.f Hessie.f Hester.f Hettie.f Hiedi.f Hien.f Hilaria.f Hilary.f Hilda.f Hilde.f Hildegard.f Hildegarde.f Hildred.f Hildur.f Hillary.f Hilma.f Hiroko.f Hisako.f Hoa.f Holley.f Holli.f Hollie.f Holly.f Honey.f Honora.f Hope.f Hortencia.f Hortense.f Hortensia.f Hsiu.f Hue.f Hui.f Hulda.f Huldah.f Huong.f Hwa.f Hyacinth.f Hye.f Hyo.f Hyon.f Hyun.f Icie.f Icy.f Ida.f Idalia.f Idell.f Idella.f Iesha.f Ignacia.f Ila.f Ilana.f Ilda.f Ileana.f Ileen.f Ilene.f Iliana.f Illa.f Ilona.f Ilse.f Iluminada.f Ima.f Imelda.f Imogene.f In.f Ina.f India.f Indiana.f Indira.f Indre.f Inell.f Ines.f Inez.f Inga.f Inge.f Ingeborg.f Inger.f Ingrid.f Inocencia.f Iola.f Iona.f Ione.f Iraida.f Irena.f Irene.f Irina.f Iris.f Irish.f Irma.f Irmgard.f Isa.f Isabel.f Isabell.f Isabella.f Isabelle.f Isadora.f Isaura.f Isela.f Isidra.f Isis.f Isobel.f Iva.f Ivah.f Ivana.f Ivelisse.f Ivette.f Ivey.f Ivonne.f Ivy.f Izetta.f Izola.f Izora.f Ja.f Jacalyn.f Jacelyn.f Jacinda.f Jacinta.f Jackeline.f Jackelyn.f Jacki.f Jacklyn.f Jackqueline.f Jaclyn.f Jacqualine.f Jacque.f Jacquelin.f Jacqueline.f Jacquelyn.f Jacquelyne.f Jacquelynn.f Jacquetta.f Jacqui.f Jacquie.f Jacquiline.f Jacquline.f Jacqulyn.f Jada.f Jade.f Jadwiga.f Jaimee.f Jaimie.f Jaleesa.f Jalisa.f Jama.f Jamee.f Jami.f Jamika.f Jamila.f Jammie.f Jana.f Janae.f Janay.f Jane.f Janean.f Janee.f Janeen.f Janel.f Janell.f Janella.f Janelle.f Janene.f Janessa.f Janet.f Janeth.f Janett.f Janetta.f Janette.f Janey.f Jani.f Janice.f Janie.f Janiece.f Janina.f Janine.f Janis.f Janise.f Janita.f Jann.f Janna.f Jannet.f Jannette.f Jannie.f January.f Janyce.f Jaqueline.f Jaquelyn.f Jasmin.f Jasmine.f Jaunita.f Jaye.f Jayme.f Jaymie.f Jayna.f Jayne.f Jazmin.f Jazmine.f Jeana.f Jeane.f Jeanelle.f Jeanene.f Jeanett.f Jeanetta.f Jeanette.f Jeanice.f Jeanie.f Jeanine.f Jeanmarie.f Jeanna.f Jeanne.f Jeannetta.f Jeannette.f Jeannie.f Jeannine.f Jeffie.f Jen.f Jena.f Jenae.f Jene.f Jenee.f Jenell.f Jenelle.f Jenette.f Jeneva.f Jeni.f Jenice.f Jenifer.f Jeniffer.f Jenine.f Jenise.f Jenna.f Jennefer.f Jennell.f Jennette.f Jenni.f Jennie.f Jennifer.f Jenniffer.f Jennine.f Jenny.f Jeraldine.f Jeri.f Jerica.f Jerilyn.f Jerlene.f Jerri.f Jerrica.f Jerrie.f Jesenia.f Jesica.f Jessenia.f Jessi.f Jessia.f Jessica.f Jessika.f Jestine.f Jesusa.f Jesusita.f Jetta.f Jettie.f Ji.f Jill.f Jillian.f Jin.f Jina.f Jinny.f Jo.f Joana.f Joane.f Joanie.f Joann.f Joanna.f Joanne.f Joannie.f Joaquina.f Jocelyn.f Jodee.f Jodi.f Jodie.f Joeann.f Joella.f Joelle.f Joellen.f Joetta.f Joette.f Johana.f Johanna.f Johannah.f Johanne.f Johna.f Johnetta.f Johnette.f Johnna.f Johnsie.f Joi.f Joie.f Jolanda.f Joleen.f Jolene.f Jolie.f Joline.f Jolyn.f Jolynn.f Jona.f Jone.f Jonell.f Jonelle.f Jong.f Joni.f Jonie.f Jonna.f Jonnie.f Josefa.f Josefina.f Josefine.f Joselyn.f Josephina.f Josephine.f Josette.f Josie.f Josiephine.f Joslyn.f Josphine.f Jossie.f Jovan.f Jovita.f Joy.f Joya.f Joyce.f Joycelyn.f Joye.f Juana.f Juanita.f Judi.f Judie.f Judith.f Judy.f Jule.f Julee.f Julene.f Juli.f Julia.f Juliana.f Juliane.f Juliann.f Julianna.f Julianne.f Julie.f Julieann.f Julienne.f Juliet.f Julieta.f Julietta.f Juliette.f Julissa.f June.f Jung.f Junie.f Junita.f Junko.f Justa.f Justina.f Justine.f Jutta.f Ka.f Kacey.f Kaci.f Kacie.f Kacy.f Kai.f Kaila.f Kaitlin.f Kaitlyn.f Kala.f Kaleigh.f Kaley.f Kali.f Kallie.f Kalyn.f Kam.f Kamala.f Kami.f Kamilah.f Kandace.f Kandi.f Kandice.f Kandis.f Kandra.f Kandy.f Kanesha.f Kanisha.f Kara.f Karan.f Kareen.f Karen.f Karena.f Karey.f Kari.f Karie.f Karima.f Karin.f Karina.f Karine.f Karisa.f Karissa.f Karla.f Karleen.f Karlene.f Karly.f Karlyn.f Karma.f Karmen.f Karol.f Karole.f Karoline.f Karolyn.f Karon.f Karren.f Karri.f Karrie.f Karry.f Kary.f Karyl.f Karyn.f Kasandra.f Kasha.f Kasi.f Kasie.f Kassandra.f Kassie.f Kate.f Katelin.f Katelyn.f Katelynn.f Katerine.f Kathaleen.f Katharina.f Katharine.f Katharyn.f Kathe.f Katheleen.f Katherin.f Katherina.f Katherine.f Kathern.f Katheryn.f Kathey.f Kathi.f Kathie.f Kathleen.f Kathlene.f Kathline.f Kathlyn.f Kathrin.f Kathrine.f Kathryn.f Kathryne.f Kathy.f Kathyrn.f Kati.f Katia.f Katie.f Katina.f Katlyn.f Katrice.f Katrina.f Kattie.f Katy.f Kay.f Kayce.f Kaycee.f Kaye.f Kayla.f Kaylee.f Kayleen.f Kayleigh.f Kaylene.f Kazuko.f Kecia.f Keeley.f Keely.f Keena.f Keesha.f Keiko.f Keila.f Keira.f Keisha.f Keitha.f Keli.f Kelle.f Kellee.f Kelli.f Kellie.f Kellye.f Kelsey.f Kelsi.f Kelsie.f Kemberly.f Kena.f Kenda.f Kendal.f Kendra.f Kenia.f Kenisha.f Kenna.f Kenya.f Kenyatta.f Kenyetta.f Kera.f Keren.f Keri.f Kerri.f Kerrie.f Kerstin.f Kesha.f Keshia.f Keturah.f Keva.f Khadijah.f Khalilah.f Kia.f Kiana.f Kiara.f Kiera.f Kiersten.f Kiesha.f Kiley.f Kimber.f Kimberely.f Kimberlee.f Kimberley.f Kimberli.f Kimberlie.f Kimberly.f Kimbery.f Kimbra.f Kimi.f Kimiko.f Kina.f Kindra.f Kira.f Kirsten.f Kirstie.f Kirstin.f Kisha.f Kit.f Kittie.f Kitty.f Kiyoko.f Kizzie.f Kizzy.f Klara.f Kori.f Kortney.f Kourtney.f Krishna.f Krissy.f Krista.f Kristal.f Kristan.f Kristeen.f Kristel.f Kristen.f Kristi.f Kristian.f Kristie.f Kristin.f Kristina.f Kristine.f Kristle.f Kristy.f Kristyn.f Krysta.f Krystal.f Krysten.f Krystin.f Krystina.f Krystle.f Krystyna.f Kum.f Kyla.f Kylee.f Kylene.f Kylie.f Kym.f Kymberly.f Kyoko.f Kyong.f Kyra.f Kyung.f Lacey.f Lachelle.f Laci.f Lacie.f Lacresha.f Ladawn.f Ladonna.f Lady.f Lael.f Lahoma.f Lai.f Laila.f Laine.f Lajuana.f Lakeesha.f Lakeisha.f Lakendra.f Lakenya.f Lakesha.f Lakeshia.f Lakia.f Lakiesha.f Lakisha.f Lakita.f Lala.f Lamonica.f Lan.f Lana.f Lanell.f Lanelle.f Lanette.f Lang.f Lani.f Lanie.f Lanita.f Lannie.f Lanora.f Laquanda.f Laquita.f Lara.f Larae.f Laraine.f Laree.f Larhonda.f Larisa.f Larissa.f Larita.f Laronda.f Larraine.f Larue.f Lasandra.f Lashanda.f Lashandra.f Lashaun.f Lashaunda.f Lashawn.f Lashawna.f Lashawnda.f Lashay.f Lashell.f Lashon.f Lashonda.f Lashunda.f Lasonya.f Latanya.f Latarsha.f Latasha.f Latashia.f Latesha.f Latia.f Laticia.f Latina.f Latisha.f Latonia.f Latonya.f Latoria.f Latosha.f Latoya.f Latoyia.f Latrice.f Latricia.f Latrina.f Latrisha.f Launa.f Laura.f Lauralee.f Lauran.f Laure.f Laureen.f Laurel.f Laurena.f Laurene.f Lauretta.f Laurette.f Lauri.f Laurice.f Laurie.f Laurinda.f Laurine.f Lauryn.f Lavada.f Lavelle.f Lavenia.f Lavera.f Laverna.f Laveta.f Lavette.f Lavina.f Lavinia.f Lavon.f Lavona.f Lavonda.f Lavone.f Lavonia.f Lavonna.f Lavonne.f Lawana.f Lawanda.f Lawanna.f Layla.f Layne.f Le.f Lea.f Leah.f Lean.f Leana.f Leandra.f Leann.f Leanna.f Leanne.f Leanora.f Leatha.f Leatrice.f Lecia.f Leda.f Leeann.f Leeanna.f Leeanne.f Leena.f Leesa.f Leia.f Leida.f Leigha.f Leighann.f Leila.f Leilani.f Leisa.f Leisha.f Leitha.f Lekisha.f Lela.f Lelah.f Lelar.f Lelia.f Lella.f Lemma.f Lena.f Lenita.f Lenna.f Lennie.f Lenora.f Lenore.f Leola.f Leoma.f Leona.f Leonarda.f Leone.f Leonia.f Leonida.f Leonie.f Leonila.f Leonor.f Leonora.f Leonore.f Leontine.f Leora.f Leota.f Lera.f Lesa.f Lesha.f Lesia.f Leslee.f Lesli.f Lessie.f Leta.f Letha.f Leticia.f Letisha.f Letitia.f Letta.f Lettie.f Letty.f Lexie.f Lezlie.f Li.f Lia.f Liana.f Liane.f Lianne.f Libbie.f Libby.f Liberty.f Librada.f Lida.f Liddie.f Lidia.f Lidie.f Lien.f Lieselotte.f Ligia.f Lila.f Lili.f Lilia.f Lilian.f Liliana.f Lilla.f Liller.f Lilli.f Lillia.f Lilliam.f Lillian.f Lilliana.f Lillie.f Lillis.f Lilly.f Lily.f Lilyan.f Lin.f Lina.f Linda.f Lindsy.f Lindy.f Linette.f Ling.f Linh.f Linn.f Linna.f Linnea.f Linnie.f Linsey.f Lisa.f Lisabeth.f Lisandra.f Lisbeth.f Lise.f Lisette.f Lisha.f Lissa.f Lissette.f Lissie.f Lita.f Littie.f Livia.f Liz.f Liza.f Lizabeth.f Lizbeth.f Lizeth.f Lizette.f Lizzette.f Lizzie.f Loan.f Lockie.f Loida.f Lois.f Loise.f Lola.f Lolita.f Lollie.f Loma.f Lona.f Londa.f Loni.f Lonie.f Lonna.f Lora.f Loraine.f Loralee.f Lorayne.f Lore.f Lorean.f Loree.f Loreen.f Lorelei.f Lorena.f Lorene.f Lorenza.f Loreta.f Loretta.f Lorette.f Loretto.f Lori.f Loria.f Loriann.f Lorie.f Lorilee.f Lorina.f Lorinda.f Lorine.f Loris.f Lorita.f Lorna.f Lorraine.f Lorretta.f Lorri.f Lorriane.f Lorrie.f Lorrine.f Lory.f Lossie.f Lotta.f Lottie.f Louann.f Louanne.f Louella.f Louetta.f Louisa.f Louise.f Loula.f Loura.f Lourdes.f Lourie.f Louvenia.f Love.f Lovella.f Lovetta.f Lovie.f Lovina.f Lovisa.f Loyce.f Lu.f Luana.f Luann.f Luanna.f Luanne.f Luba.f Luci.f Lucia.f Luciana.f Lucie.f Lucienne.f Lucila.f Lucile.f Lucilla.f Lucille.f Lucina.f Lucinda.f Lucrecia.f Lucretia.f Lucy.f Ludie.f Ludivina.f Lue.f Luella.f Luetta.f Lugenia.f Luisa.f Luise.f Lula.f Lular.f Lulie.f Lulu.f Luna.f Lupita.f Lura.f Lurlene.f Lurline.f Lutie.f Luvenia.f Luvinia.f Luz.f Lyda.f Lydia.f Lyla.f Lyn.f Lynda.f Lyndia.f Lyndsay.f Lyndsey.f Lynell.f Lynelle.f Lynetta.f Lynette.f Lynna.f Lynne.f Lynnette.f Lynsey.f Ma.f Mabel.f Mabelle.f Mable.f Machelle.f Macie.f Mackenzie.f Macy.f Madalene.f Madaline.f Madalyn.f Maddie.f Madelaine.f Madeleine.f Madelene.f Madeline.f Madelyn.f Madge.f Madie.f Madison.f Madlyn.f Madonna.f Madora.f Mae.f Maegan.f Mafalda.f Magali.f Magaly.f Magan.f Magaret.f Magda.f Magdalen.f Magdalena.f Magdalene.f Magen.f Maggie.f Magnolia.f Mahala.f Mahalia.f Mai.f Maia.f Maida.f Maile.f Maira.f Maire.f Maisha.f Maisie.f Majorie.f Makeda.f Malena.f Malia.f Malika.f Malinda.f Malisa.f Malissa.f Malka.f Mallie.f Mallory.f Malorie.f Malvina.f Mame.f Mamie.f Mammie.f Mana.f Manda.f Mandi.f Mandie.f Mandy.f Manerva.f Manervia.f Manie.f Manuela.f Many.f Mao.f Maple.f Mara.f Maragaret.f Maragret.f Maranda.f Marcela.f Marcelene.f Marcelina.f Marceline.f Marcell.f Marcella.f Marcelle.f Marcene.f Marchelle.f Marci.f Marcia.f Marcie.f Marcy.f Mardell.f Maren.f Marg.f Margaret.f Margareta.f Margarete.f Margarett.f Margaretta.f Margarette.f Margarita.f Margarite.f Margart.f Marge.f Margene.f Margeret.f Margert.f Margery.f Marget.f Margherita.f Margie.f Margit.f Margo.f Margorie.f Margot.f Margret.f Margrett.f Marguerita.f Marguerite.f Margurite.f Margy.f Marhta.f Mari.f Mariah.f Mariam.f Marian.f Mariana.f Marianela.f Mariann.f Marianna.f Marianne.f Maribel.f Maribeth.f Marica.f Maricela.f Maricruz.f Marie.f Mariel.f Mariela.f Mariella.f Marielle.f Marietta.f Mariette.f Mariko.f Marilee.f Marilla.f Marilou.f Marilu.f Marilyn.f Marilynn.f Marin.f Marina.f Marinda.f Marine.f Maris.f Marisa.f Marisela.f Marisha.f Marisol.f Marissa.f Marita.f Maritza.f Marivel.f Marjorie.f Marjory.f Marketta.f Markita.f Marla.f Marlana.f Marleen.f Marlen.f Marlena.f Marlene.f Marline.f Marlo.f Marlyn.f Marlys.f Marna.f Marni.f Marnie.f Marquerite.f Marquetta.f Marquita.f Marquitta.f Marry.f Marsha.f Marta.f Marth.f Martha.f Marti.f Martina.f Martine.f Marva.f Marvel.f Marvella.f Marvis.f Marx.f Marya.f Maryalice.f Maryam.f Maryann.f Maryanna.f Maryanne.f Marybelle.f Marybeth.f Maryellen.f Maryetta.f Maryjane.f Maryjo.f Maryland.f Marylee.f Marylin.f Maryln.f Marylou.f Marylouise.f Marylyn.f Marylynn.f Maryrose.f Masako.f Matha.f Mathilda.f Mathilde.f Matie.f Matilda.f Matilde.f Mattie.f Maud.f Maude.f Maudie.f Maura.f Maureen.f Maurine.f Maurita.f Mavis.f Maxie.f Maxima.f Maximina.f Maxine.f May.f Maya.f Maybell.f Maybelle.f Maye.f Mayme.f Maymie.f Mayola.f Mayra.f Mazie.f Mckenzie.f Meagan.f Meaghan.f Mechelle.f Meda.f Mee.f Meg.f Megan.f Meggan.f Meghan.f Meghann.f Mei.f Melaine.f Melani.f Melania.f Melanie.f Melany.f Melba.f Melda.f Melia.f Melida.f Melina.f Melinda.f Melisa.f Melissa.f Melissia.f Melita.f Mellie.f Mellisa.f Mellissa.f Melodee.f Melodi.f Melodie.f Melody.f Melonie.f Melony.f Melva.f Melvina.f Melynda.f Mena.f Mendy.f Mercedes.f Mercedez.f Mercy.f Meredith.f Meri.f Merideth.f Meridith.f Merilyn.f Merissa.f Merlene.f Merlyn.f Merna.f Merri.f Merrie.f Merrilee.f Merry.f Mertie.f Meryl.f Meta.f Metta.f Mettie.f Mi.f Mia.f Mica.f Micaela.f Micha.f Michaela.f Michaele.f Michele.f Michelina.f Micheline.f Michell.f Michelle.f Michiko.f Micki.f Mickie.f Miesha.f Migdalia.f Mignon.f Miguelina.f Mika.f Mikaela.f Miki.f Mikki.f Mila.f Milagro.f Milagros.f Milda.f Mildred.f Milissa.f Millicent.f Millie.f Milly.f Mima.f Mimi.f Min.f Mina.f Minda.f Mindi.f Mindy.f Minerva.f Minervia.f Ming.f Minna.f Minnie.f Minta.f Mintie.f Mira.f Miranda.f Mireille.f Mirella.f Mireya.f Miriam.f Mirian.f Mirna.f Mirta.f Mirtha.f Misha.f Miss.f Missouri.f Missy.f Misti.f Mistie.f Misty.f Mitsue.f Mitsuko.f Mittie.f Mitzi.f Mitzie.f Miyoko.f Modesta.f Moira.f Mollie.f Molly.f Mona.f Monet.f Monica.f Monika.f Monique.f Monnie.f Monserrate.f Moon.f Mora.f Moriah.f Mossie.f Mozell.f Mozella.f Mozelle.f Mui.f Muoi.f Muriel.f My.f Myesha.f Myong.f Myra.f Myriam.f Myrl.f Myrle.f Myrna.f Myrta.f Myrtice.f Myrtie.f Myrtis.f Myrtle.f Myung.f Na.f Nada.f Nadene.f Nadia.f Nadine.f Naida.f Nakesha.f Nakia.f Nakisha.f Nakita.f Nam.f Nan.f Nana.f Nancee.f Nancey.f Nanci.f Nancie.f Nancy.f Nanette.f Nannette.f Nannie.f Naoma.f Naomi.f Narcisa.f Natacha.f Natalia.f Natalie.f Natalya.f Natasha.f Natashia.f Nathalie.f Natisha.f Natividad.f Natosha.f Nealie.f Necole.f Neda.f Nedra.f Neely.f Neida.f Nelda.f Nelia.f Nelida.f Nell.f Nella.f Nelle.f Nellie.f Nelly.f Nena.f Nenita.f Neoma.f Neomi.f Neppie.f Nereida.f Nerissa.f Nery.f Neta.f Netta.f Nettie.f Neva.f Nevada.f Nga.f Ngan.f Ngoc.f Nguyet.f Nia.f Nichelle.f Nichol.f Nichole.f Nicholle.f Nicki.f Nickie.f Nickole.f Nicol.f Nicola.f Nicolasa.f Nicole.f Nicolette.f Nicolle.f Nida.f Nidia.f Niesha.f Nieves.f Niki.f Nikia.f Nikita.f Nikki.f Nikole.f Nila.f Nilda.f Nilsa.f Nina.f Ninfa.f Nisha.f Nita.f Nobuko.f Noelia.f Noella.f Noelle.f Noemi.f Nohemi.f Nola.f Nolia.f Nolie.f Noma.f Nona.f Nonie.f Nora.f Norah.f Noreen.f Norene.f Noriko.f Norine.f Norma.f Nova.f Novella.f Nu.f Nubia.f Nydia.f Nyla.f Obdulia.f Ocie.f Octavia.f Oda.f Odelia.f Odessa.f Odette.f Odilia.f Ofelia.f Ok.f Ola.f Olene.f Oleta.f Olevia.f Olga.f Olie.f Olimpia.f Olinda.f Oliva.f Olive.f Olivia.f Olympia.f Oma.f Omega.f Omie.f Ona.f Oneida.f Oneta.f Onie.f Onita.f Opal.f Ophelia.f Ora.f Oralee.f Oralia.f Oretha.f Orilla.f Orpha.f Osa.f Osie.f Ossie.f Otelia.f Otilia.f Ottie.f Ottilia.f Ottilie.f Ouida.f Ova.f Ozell.f Ozella.f Ozie.f Pa.f Page.f Paige.f Palma.f Palmira.f Pam.f Pamala.f Pamela.f Pamelia.f Pamella.f Pamila.f Pamula.f Pandora.f Pansy.f Paola.f Paralee.f Parthenia.f Particia.f Pasty.f Patience.f Patria.f Patrica.f Patrice.f Patrina.f Patsy.f Patti.f Pattie.f Patty.f Paula.f Paulene.f Pauletta.f Paulette.f Paulina.f Pauline.f Paulita.f Paz.f Pearl.f Pearle.f Pearlene.f Pearlie.f Pearline.f Pearly.f Peg.f Peggie.f Peggy.f Pei.f Penelope.f Penney.f Penni.f Pennie.f Penny.f Perla.f Permelia.f Petra.f Petrina.f Petronila.f Phebe.f Phillis.f Philomena.f Phoebe.f Phung.f Phuong.f Phylicia.f Phylis.f Phyliss.f Phyllis.f Pia.f Piedad.f Pilar.f Ping.f Pinkey.f Pinkie.f Piper.f Pok.f Pollie.f Polly.f Porsche.f Porsha.f Portia.f Precious.f Pricilla.f Princess.f Priscila.f Priscilla.f Providencia.f Prudence.f Pura.f Qiana.f Queen.f Queenie.f Quiana.f Quyen.f Rachael.f Rachal.f Racheal.f Rachel.f Rachele.f Rachell.f Rachelle.f Racquel.f Rae.f Raeann.f Raelene.f Rafaela.f Raguel.f Raina.f Raisa.f Ramona.f Ramonita.f Rana.f Ranae.f Randa.f Randee.f Randi.f Ranee.f Raquel.f Rasheeda.f Rashida.f Raven.f Raye.f Raylene.f Raymonde.f Rayna.f Rea.f Reagan.f Reanna.f Reatha.f Reba.f Rebbeca.f Rebbecca.f Rebeca.f Rebecca.f Rebecka.f Rebekah.f Reda.f Reena.f Refugia.f Regan.f Regena.f Regenia.f Regina.f Regine.f Reginia.f Reiko.f Reina.f Reita.f Rella.f Rema.f Remedios.f Remona.f Rena.f Renada.f Renae.f Renata.f Renate.f Renay.f Renda.f Renea.f Renee.f Renetta.f Renita.f Renna.f Rennie.f Ressie.f Reta.f Retha.f Retta.f Reva.f Reyna.f Reynalda.f Rhea.f Rheba.f Rhiannon.f Rhoda.f Rhona.f Rhonda.f Ria.f Ricarda.f Richelle.f Ricki.f Rikki.f Rilla.f Rillie.f Rima.f Rina.f Risa.f Rita.f Riva.f Rivka.f Robbi.f Robbin.f Robbyn.f Robena.f Roberta.f Robyn.f Rochel.f Rochell.f Rochelle.f Rocio.f Roena.f Rolanda.f Rolande.f Roma.f Romaine.f Romana.f Romelia.f Romona.f Rona.f Ronda.f Roni.f Ronna.f Ronni.f Rosa.f Rosalba.f Rosalee.f Rosalia.f Rosalie.f Rosalina.f Rosalind.f Rosalinda.f Rosaline.f Rosalva.f Rosalyn.f Rosamaria.f Rosamond.f Rosana.f Rosann.f Rosanna.f Rosanne.f Rosaria.f Rosaura.f Rose.f Roseann.f Roseanna.f Roseanne.f Roselee.f Roselia.f Roseline.f Rosella.f Roselle.f Roselyn.f Rosemarie.f Rosemary.f Rosena.f Rosenda.f Rosetta.f Rosette.f Rosia.f Rosie.f Rosina.f Rosio.f Rosita.f Roslyn.f Rossana.f Rossie.f Rosy.f Rowena.f Roxana.f Roxane.f Roxann.f Roxanna.f Roxanne.f Roxie.f Roxy.f Rozanne.f Rozella.f Rubi.f Rubie.f Ruby.f Rubye.f Rufina.f Ruth.f Rutha.f Ruthann.f Ruthanne.f Ruthe.f Ruthie.f Ryann.f Sabina.f Sabine.f Sabra.f Sabrina.f Sacha.f Sachiko.f Sada.f Sade.f Sadie.f Sadye.f Sage.f Salena.f Salina.f Salley.f Sallie.f Sally.f Salome.f Samantha.f Samara.f Samatha.f Samella.f Samira.f Sana.f Sanda.f Sandee.f Sandi.f Sandie.f Sandra.f Sanjuana.f Sanjuanita.f Sannie.f Sanora.f Santa.f Santana.f Santina.f Sara.f Sarah.f Sarai.f Saran.f Sari.f Sarina.f Sarita.f Sasha.f Saturnina.f Sau.f Saundra.f Savanna.f Savannah.f Scarlet.f Scarlett.f Season.f Sebrina.f See.f Seema.f Selena.f Selene.f Selina.f Selma.f Sena.f Senaida.f September.f Serafina.f Serena.f Serina.f Serita.f Setsuko.f Sha.f Shae.f Shaina.f Shakia.f Shakira.f Shakita.f Shala.f Shalanda.f Shalon.f Shalonda.f Shameka.f Shamika.f Shan.f Shana.f Shanae.f Shanda.f Shandi.f Shandra.f Shaneka.f Shanel.f Shanell.f Shanelle.f Shani.f Shanice.f Shanika.f Shaniqua.f Shanita.f Shanna.f Shannan.f Shanon.f Shanta.f Shantae.f Shantay.f Shante.f Shantel.f Shantell.f Shantelle.f Shanti.f Shaquana.f Shaquita.f Shara.f Sharan.f Sharda.f Sharee.f Sharell.f Sharen.f Shari.f Sharice.f Sharie.f Sharika.f Sharilyn.f Sharita.f Sharla.f Sharleen.f Sharlene.f Sharmaine.f Sharolyn.f Sharon.f Sharonda.f Sharri.f Sharron.f Sharyl.f Sharyn.f Shasta.f Shauna.f Shaunda.f Shaunna.f Shaunta.f Shaunte.f Shavon.f Shavonda.f Shavonne.f Shawana.f Shawanda.f Shawanna.f Shawna.f Shawnda.f Shawnee.f Shawnna.f Shawnta.f Shay.f Shayla.f Shayna.f Shea.f Sheba.f Sheena.f Sheila.f Sheilah.f Shela.f Shelba.f Shelia.f Shella.f Shelley.f Shelli.f Shellie.f Shelly.f Shelva.f Shemeka.f Shemika.f Shena.f Shenika.f Shenita.f Shenna.f Shera.f Sheree.f Sherell.f Sheri.f Sherice.f Sheridan.f Sherie.f Sherika.f Sherill.f Sherilyn.f Sherise.f Sherita.f Sherlene.f Sherley.f Sherly.f Sherlyn.f Sheron.f Sherrell.f Sherri.f Sherrie.f Sherril.f Sherrill.f Sherron.f Sherry.f Sherryl.f Shery.f Sheryl.f Sheryll.f Shiela.f Shila.f Shiloh.f Shin.f Shira.f Shirely.f Shirl.f Shirlee.f Shirleen.f Shirlene.f Shirly.f Shizue.f Shizuko.f Shona.f Shonda.f Shondra.f Shonna.f Shonta.f Shoshana.f Shu.f Shyla.f Sibyl.f Sierra.f Signe.f Sigrid.f Silva.f Silvana.f Silvia.f Sima.f Simona.f Simone.f Simonne.f Sina.f Sindy.f Siobhan.f Sirena.f Siu.f Sixta.f Skye.f Slyvia.f So.f Socorro.f Sofia.f Soila.f Solange.f Soledad.f Somer.f Sommer.f Sona.f Sondra.f Song.f Sonia.f Sonja.f Sonya.f Soo.f Sook.f Soon.f Sophia.f Sophie.f Sophronia.f Soraya.f Sparkle.f Spring.f Stacee.f Staci.f Stacia.f Stacie.f Star.f Starla.f Starr.f Stasia.f Stefani.f Stefania.f Stefanie.f Stefany.f Steffanie.f Stella.f Stepanie.f Stephaine.f Stephane.f Stephani.f Stephania.f Stephanie.f Stephany.f Stephenie.f Stephine.f Stephnie.f Stormy.f Su.f Suanne.f Sudie.f Sue.f Sueann.f Suellen.f Suk.f Sula.f Sulema.f Sumiko.f Summer.f Sun.f Sunday.f Sunni.f Sunny.f Sunshine.f Susan.f Susana.f Susann.f Susanna.f Susannah.f Susanne.f Susie.f Susy.f Suzan.f Suzann.f Suzanna.f Suzanne.f Suzette.f Suzi.f Suzie.f Suzy.f Svetlana.f Sybil.f Sybilla.f Syble.f Sylvia.f Sylvie.f Synthia.f Syreeta.f Ta.f Tabatha.f Tabetha.f Tabitha.f Tai.f Taina.f Taisha.f Tajuana.f Takako.f Takisha.f Talia.f Talisha.f Talitha.f Tam.f Tama.f Tamala.f Tamar.f Tamara.f Tamatha.f Tambra.f Tameika.f Tameka.f Tamekia.f Tamela.f Tamera.f Tamesha.f Tami.f Tamica.f Tamie.f Tamika.f Tamiko.f Tamisha.f Tammara.f Tammera.f Tammi.f Tammie.f Tammy.f Tamra.f Tana.f Tandra.f Tandy.f Taneka.f Tanesha.f Tangela.f Tania.f Tanika.f Tanisha.f Tanja.f Tanna.f Tanya.f Tara.f Tarah.f Taren.f Tari.f Tarra.f Tarsha.f Taryn.f Tasha.f Tashia.f Tashina.f Tasia.f Tatiana.f Tatum.f Tatyana.f Taunya.f Tawana.f Tawanda.f Tawanna.f Tawna.f Tawny.f Tawnya.f Tayna.f Teena.f Tegan.f Teisha.f Tella.f Telma.f Temeka.f Temika.f Tempie.f Temple.f Tena.f Tenesha.f Tenisha.f Tennie.f Tennille.f Teodora.f Teofila.f Tequila.f Tera.f Tereasa.f Teresa.f Terese.f Teresia.f Teresita.f Teressa.f Teri.f Terica.f Terina.f Terisa.f Terra.f Terresa.f Terri.f Terrie.f Terrilyn.f Tesha.f Tess.f Tessa.f Tessie.f Thalia.f Thao.f Thea.f Theda.f Thelma.f Theodora.f Theodosia.f Theola.f Theresa.f Therese.f Theresia.f Theressa.f Thersa.f Thi.f Thomasena.f Thomasina.f Thomasine.f Thora.f Thresa.f Thu.f Thursa.f Thuy.f Tia.f Tiana.f Tianna.f Tiara.f Tien.f Tiera.f Tierra.f Tiesha.f Tifany.f Tiffaney.f Tiffani.f Tiffanie.f Tiffany.f Tiffiny.f Tijuana.f Tilda.f Tillie.f Timika.f Tina.f Tinisha.f Tiny.f Tisa.f Tish.f Tisha.f Tishie.f Tobi.f Tobie.f Toccara.f Toi.f Tomasa.f Tomeka.f Tomi.f Tomika.f Tomiko.f Tommye.f Tomoko.f Tona.f Tonda.f Tonette.f Toni.f Tonia.f Tonie.f Tonisha.f Tonita.f Tonja.f Tonya.f Tora.f Tori.f Torie.f Torri.f Torrie.f Tosha.f Toshia.f Toshiko.f Tova.f Towanda.f Toya.f Tracee.f Traci.f Tracie.f Tran.f Trang.f Treasa.f Treena.f Trena.f Tresa.f Tressa.f Tressie.f Treva.f Tricia.f Trina.f Trinh.f Trinity.f Trish.f Trisha.f Trista.f Trudi.f Trudie.f Trudy.f Trula.f Tu.f Tula.f Tuyet.f Twana.f Twanda.f Twanna.f Twila.f Twyla.f Tyesha.f Tyisha.f Tynisha.f Tyra.f Ula.f Ulrike.f Un.f Una.f Ursula.f Usha.f Ute.f Vada.f Valarie.f Valda.f Valencia.f Valene.f Valentina.f Valeri.f Valeria.f Valerie.f Valery.f Vallie.f Valorie.f Valrie.f Vanda.f Vanesa.f Vanessa.f Vanetta.f Vania.f Vanita.f Vanna.f Vannesa.f Vannessa.f Vannie.f Vashti.f Vasiliki.f Vassie.f Veda.f Velda.f Velia.f Vella.f Velma.f Velva.f Velvet.f Vena.f Venessa.f Venetta.f Venice.f Venie.f Venita.f Vennie.f Venus.f Veola.f Vera.f Verda.f Verdell.f Verdie.f Verena.f Vergie.f Verla.f Verlene.f Verlie.f Verline.f Verna.f Vernell.f Vernetta.f Vernia.f Vernice.f Vernie.f Vernita.f Verona.f Veronica.f Veronika.f Veronique.f Versie.f Vertie.f Vesta.f Veta.f Veva.f Vi.f Vicenta.f Vickey.f Vicki.f Vickie.f Vicky.f Victoria.f Victorina.f Vida.f Viki.f Vikki.f Vilma.f Vina.f Vincenza.f Viney.f Vinita.f Vinnie.f Viola.f Violet.f Violeta.f Violette.f Vira.f Virgen.f Virgie.f Virgina.f Virginia.f Vita.f Viva.f Vivan.f Vivian.f Viviana.f Vivien.f Vivienne.f Voncile.f Vonda.f Vonnie.f Wai.f Waltraud.f Wan.f Wanda.f Waneta.f Wanetta.f Wanita.f Wava.f Wei.f Wen.f Wendi.f Wendie.f Wendolyn.f Wendy.f Wenona.f Whitley.f Wilda.f Wilhelmina.f Wilhelmine.f Wilhemina.f Willa.f Willena.f Willene.f Willetta.f Willette.f Willia.f Williemae.f Willodean.f Willow.f Wilma.f Windy.f Winifred.f Winnie.f Winnifred.f Winona.f Winter.f Wonda.f Wynell.f Wynona.f Xenia.f Xiao.f Xiomara.f Xochitl.f Xuan.f Yadira.f Yaeko.f Yael.f Yahaira.f Yajaira.f Yan.f Yang.f Yanira.f Yasmin.f Yasmine.f Yasuko.f Yee.f Yelena.f Yen.f Yer.f Yesenia.f Yessenia.f Yetta.f Yevette.f Yi.f Ying.f Yoko.f Yolanda.f Yolande.f Yolando.f Yolonda.f Yon.f Yoshie.f Yoshiko.f Youlanda.f Yu.f Yuette.f Yuk.f Yuki.f Yukiko.f Yuko.f Yulanda.f Yun.f Yung.f Yuonne.f Yuri.f Yuriko.f Yvette.f Yvone.f Yvonne.f Zada.f Zadie.f Zaida.f Zana.f Zandra.f Zelda.f Zella.f Zelma.f Zena.f Zenaida.f Zenia.f Zenobia.f Zetta.f Zettie.f Zilpha.f Zina.f Zita.f Zoa.f Zoe.f Zofia.f Zoila.f Zola.f Zona.f Zonia.f Zora.f Zoraida.f Zula.f Zulema.f Zulma.f link-grammar/data/en/words/words.v.8.40000644000000000000000000000232212536650433014641 0ustar auctioning.v bandying.v barring.v battening.v blocking.v blotting.v blurting.v boarding.v booking.v bottling.v bundling.v buttering.v caging.v carrying.v carting.v chalking.v chasing.v chucking.v cluttering.v covering.v cranking.v cutting.v damming.v dishing.v dividing.v doling.v dredging.v dumping.v egging.v eking.v exporting.v factoring.v faxing.v fixing.v flinging.v fobbing.v gouging.v hamming.v hashing.v hoisting.v jacking.v jazzing.v jotting.v kicking.v ladling.v laying.v lifting.v linking.v loading.v locking.v lopping.v mailing.v mapping.v marking.v meting.v mulling.v mussing.v nailing.v palming.v patching.v paving.v penning.v phasing.v phoning.v picking.v piecing.v pinning.v plugging.v pricking.v propping.v punching.v pushing.v racking.v reining.v rigging.v riling.v rinsing.v roughening.v roughing.v saving.v scaling.v scaring.v screening.v shaking.v shoring.v singling.v sizing.v skimming.v skittling.v smuggling.v sopping.v sorting.v spicing.v stacking.v staking.v staving.v stringing.v stuffing.v sussing.v sweeping.v tacking.v taping.v tearing.v throwing.v tiding.v topping.v totaling.v totalling.v touching.v toughening.v tracking.v tying.v wadding.v washing.v waving.v wearing.v wringing.v yanking.v zipping.v link-grammar/data/en/words/words.v.10.30000644000000000000000000000220512536650433014711 0ustar acknowledged.q-d added.q-d admitted.q-d affirmed.q-d agreed.q-d announced.q-d argued.q-d ascertained.q-d asserted.q-d assumed.q-d believed.q-d bragged.q-d calculated.q-d charged.q-d claimed.q-d commanded.q-d commented.q-d complained.q-d conceded.q-d concluded.q-d confessed.q-d confirmed.q-d contended.q-d continued.q-d decided.q-d declared.q-d deduced.q-d determined.q-d discerned.q-d disclosed.q-d discovered.q-d emphasized.q-d envisioned.q-d exclaimed.q-d explained.q-d figured.q-d guessed.q-d hinted.q-d hoped.q-d implied.q-d inquired.q-d insisted.q-d intimated.q-d learned.q-d maintained.q-d mused.q-d muttered.q-d noted.q-d observed.q-d ordered.q-d pledged.q-d postulated.q-d predicted.q-d presumed.q-d proclaimed.q-d proposed.q-d proved.q-d realized.q-d reasoned.q-d recalled.q-d reckoned.q-d recognized.q-d recounted.q-d reflected.q-d related.q-d remarked.q-d remembered.q-d repeated.q-d replied.q-d reported.q-d resolved.q-d responded.q-d retorted.q-d revealed.q-d ruled.q-d shouted.q-d sighed.q-d speculated.q-d stated.q-d stipulated.q-d stressed.q-d suggested.q-d testified.q-d theorized.q-d thought.q-d threatened.q-d whispered.q-d wondered.q-d link-grammar/data/en/words/words-medical.prep.10000644000000000000000000000121412536650432016563 0ustar admedian anconad anteriad antiniad atlantad basad basilad caudad caudalward cephalad coronad craniad dermad dextrad distad dorsad dorsocephalad dorsoventrad ectad ectoentad entad entoectad frontad glabellad hereinafter herewith I.M. in_cellulo incertae_sedis iniad in_ovo in_tela intrad in_utero in_vacuo laterad mediad mesad mesiad neurad no_place obeliad out-of-doors out_of_hospital peripherad posteriad prorsad proximad radiad retrad rightwards rostrad rotulad sacrad sinistrad sternad terminad thenad therefrom therein thereon thereupon tibiad ulnad ventrad ventrodorsad viscerad link-grammar/data/en/words/words.v.4.40000644000000000000000000007553712536650433014657 0ustar abandoning.v abasing.v abbreviating.v abducting.v abetting.v abhorring.v abolishing.v abridging.v abrogating.v absorbing.v abstracting.v abusing.v abutting.v accenting.v accentuating.v accessing.v acclaiming.v accommodating.v accompanying.v accomplishing.v accosting.v accrediting.v accreting.v accustoming.v acerbating.v achieving.v acquainting.v acquiring.v activating.v addicting.v addling.v addressing.v adjudging.v administering.v admiring.v admonishing.v adoring.v adorning.v adulterating.v adumbrating.v aerating.v affecting.v affixing.v afflicting.v aggrandizing.v aggravating.v alienating.v allaying.v alleviating.v allocating.v allotting.v amassing.v ambushing.v ameliorating.v amending.v amortizing.v amplifying.v amputating.v anaesthetizing.v anathematizing.v anesthetizing.v angering.v anglicizing.v animating.v annealing.v annexing.v annihilating.v annointing.v annotating.v annulling.v anointing.v antagonizing.v antedating.v anthologizing.v anthropomorphizing.v aping.v appalling.v appeasing.v appending.v apportioning.v appraising.v apprehending.v apprenticing.v apprising.v appropriating.v arming.v arousing.v arraigning.v arraying.v arresting.v arrogating.v ascribing.v asphalting.v asphyxiating.v aspirating.v assailing.v assassinating.v assaulting.v assaying.v assuaging.v atomizing.v attacking.v attaining.v attainting.v attenuating.v attiring.v attracting.v attributing.v attuning.v auditing.v augmenting.v authenticating.v autographing.v automating.v avenging.v averring.v averting.v awaiting.v awing.v axing.v backdating.v badgering.v baffling.v baiting.v baking.v balancing.v baling.v bamboozling.v bandaging.v banishing.v bankrupting.v banning.v baptizing.v barbarizing.v barbecuing.v baring.v barrelling.v barricading.v bashing.v basing.v basting.v battering.v battling.v beaking.v beaning.v beatifying.v beautifying.v bedevilling.v befalling.v befitting.v befouling.v befriending.v begetting.v beggaring.v beguiling.v beheading.v beholding.v bejeweling.v belabouring.v belittling.v belting.v belying.v bemoaning.v benching.v bequeathing.v berating.v bereaving.v beseeching.v besieging.v besmirching.v bespeaking.v besting.v bestirring.v bestowing.v bestrewing.v bestriding.v betokening.v betraying.v bevelling.v bewailing.v bewildering.v bewitching.v biasing.v biding.v biffing.v bilking.v billeting.v billing.v birching.v bisecting.v blackballing.v blacklisting.v blackmailing.v blading.v blaming.v blanketing.v blasting.v blazoning.v blemishing.v blessing.v blighting.v blindfolding.v blinding.v blitzing.v blockading.v blow-drying.v bludgeoning.v blue-pencilling.v blunting.v bolding.v bolstering.v bombarding.v bombing.v bookending.v boosting.v bossing.v botching.v boycotting.v bracing.v bracketing.v braiding.v brainwashing.v braising.v branding.v brandishing.v braving.v breaching.v bribing.v bricking.v bridging.v briefing.v brining.v broaching.v brocading.v brokering.v bronzing.v brooking.v browbeating.v brutalizing.v budgeting.v buffing.v bugging.v bulldozing.v bunging.v bungling.v buoying.v burdening.v burlesquing.v burying.v busying.v butchering.v buttonholing.v buttressing.v by-passing.v bypassing.v cajoling.v calibrating.v camouflaging.v caning.v cannibalizing.v canonising.v canonizing.v caping.v capping.v captivating.v capturing.v carbonizing.v carbureting.v carding.v caressing.v caricaturing.v carjacking.v carpeting.v casing.v castigating.v castrating.v cataloguing.v catapulting.v categorizing.v ceding.v cementing.v censoring.v censuring.v centralising.v centralizing.v chagrining.v chaining.v chairing.v championing.v channelling.v chaperoning.v charming.v chartering.v charting.v chastening.v chastising.v cheapening.v checkmating.v cherishing.v chiding.v chiselling.v chlorinating.v chording.v christening.v chroming.v chronicling.v circularizing.v circumcising.v circumnavigating.v circumscribing.v circumventing.v citing.v civilizing.v clading.v clamping.v classifying.v clawing.v cleansing.v clenching.v clipping.v cloaking.v clobbering.v cloistering.v cloning.v closeting.v clothing.v clubbing.v coating.v co-authoring.v coauthoring.v cobbling.v cocking.v coddling.v codenaming.v codifying.v coding.v coercing.v cofounding.v coining.v cold-shouldering.v collaring.v collating.v collecting.v collectivizing.v collocating.v colocating.v colonizing.v combating.v combatting.v comforting.v commandeering.v commemorating.v commending.v commercializing.v compacting.v compartmentalizing.v compiling.v complementing.v completing.v complicating.v complimenting.v composting.v compounding.v comprehending.v compressing.v comprising.v computerizing.v concealing.v concerning.v conciliating.v concocting.v conditioning.v condoning.v configuring.v confining.v confiscating.v conflating.v confounding.v confronting.v confusing.v confuting.v congaing.v congratulating.v conjuring.v conking.v conning.v connoting.v conquering.v conscripting.v consecrating.v conserving.v consigning.v consoling.v constituting.v constraining.v constricting.v constructing.v construing.v consuming.v consummating.v contacting.v containing.v contaminating.v contenting.v contorting.v contouring.v contradicting.v contravening.v contriving.v controlling.v convecting.v conventionalizing.v conveying.v convoking.v convoying.v convulsing.v cooping.v co-opting.v coordinating.v co-producing.v copying.v copyrighting.v cording.v cordoning.v coring.v corking.v cornering.v corralling.v correcting.v corroborating.v countenancing.v counteracting.v counterbalancing.v counterfeiting.v countermanding.v countersigning.v countersuing.v coupling.v courting.v court-martialing.v coveting.v coxing.v cradling.v cramping.v craning.v crayoning.v creaming.v creating.v crediting.v cremating.v crimping.v crippling.v criticizing.v crossbreeding.v cross-examining.v cross-fertilizing.v cross-indexing.v cross-questioning.v crowning.v crucifying.v crushing.v cubing.v cudgeling.v cuffing.v culling.v cultivating.v cupping.v curbing.v curing.v currying.v curtailing.v cushioning.v damaging.v damning.v dampening.v dandling.v daubing.v daunting.v dazing.v dazzling.v deadening.v deafening.v debarring.v debasing.v debauching.v debilitating.v debiting.v debriefing.v debugging.v debunking.v decanting.v decapitating.v decarbonizing.v deceiving.v decentralizing.v decertifying.v decimalizing.v decimating.v deciphering.v decking.v declaiming.v declassifying.v decoding.v decolonizing.v decompressing.v deconsecrating.v decontaminating.v decorating.v decrying.v decrypting.v dedicating.v deducting.v deeding.v deep-freezing.v deepthroating.v de-escalating.v defacing.v defaming.v defeating.v defending.v deferring.v defiling.v defining.v deflating.v deflowering.v defoliating.v deforesting.v deforming.v defragmenting.v defrauding.v defraying.v defrocking.v defrosting.v defunding.v defusing.v defying.v degrading.v dehumanizing.v dehydrating.v de-icing.v deifying.v delegating.v deleting.v delimiting.v delineating.v delisting.v deluding.v deluging.v demagnetizing.v demarcating.v demeaning.v demerging.v demilitarizing.v demisting.v demobilizing.v demolishing.v demonizing.v demoralizing.v demoting.v demutualising.v denationalizing.v denigrating.v denominating.v denoting.v denouncing.v denuding.v deodorizing.v depleting.v deploring.v deploying.v depopulating.v deporting.v deposing.v depositing.v deprecating.v deprogramming.v deranging.v deriding.v desalinating.v desalinizing.v desecrating.v desegregating.v desensitizing.v deserting.v desiccating.v despatching.v despising.v despoiling.v destroying.v detaching.v detaining.v detecting.v deterring.v detesting.v dethroning.v detuning.v devaluating.v devaluing.v devastating.v devising.v devoting.v devouring.v dewatering.v diagnosing.v dicing.v diddling.v diffracting.v dignifying.v diluting.v directing.v disabling.v disaffiliating.v disallowing.v disappointing.v disarranging.v disassembling.v disassociating.v disavowing.v disbursing.v discarding.v disciplining.v disclaiming.v discomfiting.v disconcerting.v disconnecting.v discontenting.v discounting.v discouraging.v discrediting.v disdaining.v disembarrassing.v disembowelling.v disenchanting.v disenfranchising.v disestablishing.v disfavouring.v disfiguring.v disfranchising.v disgorging.v disgracing.v disguising.v disheartening.v dishonouring.v disillusioning.v disinfecting.v disinheriting.v disinterring.v dislocating.v dislodging.v dismantling.v dismembering.v dismissing.v disobeying.v disorientating.v disorienting.v disowning.v disparaging.v dispatching.v dispelling.v displacing.v displaying.v displeasing.v dispossessing.v disproving.v disqualifying.v disregarding.v disrupting.v dissecting.v disseminating.v dissing.v dissociating.v dissuading.v distancing.v distorting.v distracting.v distributing.v distrusting.v disturbing.v ditching.v diverting.v divesting.v divorcing.v divulging.v dizzying.v doctoring.v doffing.v domesticating.v dominating.v donating.v donning.v dooming.v doping.v dotting.v double-checking.v double-crossing.v dousing.v downgrading.v downing.v downloading.v downplaying.v dragooning.v dramatizing.v draping.v drenching.v drip-drying.v drubbing.v drugging.v dry-cleaning.v ducting.v dumbfounding.v dunking.v duping.v duplicating.v dusting.v dwarfing.v dyeing.v dynamiting.v earmarking.v earning.v eclipsing.v edifying.v editing.v effacing.v effecting.v elbowing.v electrifying.v electrocuting.v electrolyzing.v elevating.v eliciting.v eliding.v eliminating.v elucidating.v eluding.v emancipating.v emasculating.v embalming.v embargoing.v embedding.v embellishing.v embezzling.v embittering.v emblazoning.v embodying.v emboldening.v embossing.v embracing.v embroiling.v emending.v emitting.v empanelling.v empowering.v emulating.v emulsifying.v enacting.v enamelling.v encasing.v enchanting.v encircling.v enclosing.v encoding.v encompassing.v encountering.v encrypting.v encumbering.v endangering.v endearing.v endorsing.v endowing.v enervating.v enfeoffing.v enfolding.v enforcing.v enfranchising.v engendering.v engineering.v engraving.v engrossing.v engulfing.v enhancing.v enjoining.v enlarging.v enlightening.v enlivening.v enmeshing.v ennobling.v enraging.v enriching.v ensconcing.v enshrining.v enshrouding.v enslaving.v ensnaring.v ensouling.v entangling.v enthralling.v enthroning.v enthusing.v entombing.v entraining.v entrancing.v entrapping.v entreating.v entrusting.v entwining.v enumerating.v enveloping.v envying.v epitomizing.v equalizing.v equalling.v equating.v equipping.v eradicating.v erasing.v erecting.v eschewing.v escorting.v espousing.v espying.v esteeming.v eulogizing.v evading.v evicting.v evincing.v eviscerating.v evoking.v exacerbating.v exalting.v exasperating.v excavating.v exceeding.v excepting.v exchanging.v excising.v excluding.v excommunicating.v excoriating.v excreting.v exculpating.v excusing.v executing.v exemplifying.v exempting.v exerting.v exhausting.v exhibiting.v exhilarating.v exhuming.v exiling.v exorcizing.v expediting.v expelling.v expending.v experiencing.v expiating.v explicating.v exploiting.v exposing.v expropriating.v expunging.v expurgating.v extenuating.v exterminating.v externalizing.v extinguishing.v extirpating.v extolling.v extorting.v extracting.v extraditing.v extricating.v exuding.v eying.v fabricating.v facelifting.v faceting.v facilitating.v fagging.v faking.v falsifying.v familiarizing.v fancying.v fascinating.v fashioning.v fathoming.v fatiguing.v fating.v faulting.v favoriting.v favouring.v fazing.v feathering.v featuring.v feigning.v felling.v fencing.v ferreting.v fertilizing.v festooning.v feting.v fettering.v fianchettoing.v filleting.v finalizing.v financing.v fine-tuning.v fingering.v firebombing.v flagellating.v flanking.v flattering.v flaunting.v flavouring.v flaying.v fleecing.v flicking.v flogging.v floodlighting.v flooring.v flouting.v fluffing.v flummoxing.v fluoridating.v flurrying.v flustering.v foiling.v foisting.v fomenting.v fonding.v fondling.v fooling.v force-feeding.v fording.v forecasting.v foregoing.v foreordaining.v foreshadowing.v foreshortening.v forestalling.v foreswearing.v foretelling.v forfeiting.v forging.v forgoing.v formalizing.v formulating.v forsaking.v forswearing.v fortifying.v forwarding.v fostering.v founding.v framing.v franking.v frazzling.v freeing.v frequenting.v frescoing.v fricasseeing.v frightening.v frisking.v frittering.v frogmarching.v frustrating.v frying.v fulfilling.v fumigating.v funding.v funnelling.v furbishing.v furnishing.v furrowing.v furthering.v gaging.v gainsaying.v galling.v galvanizing.v gaoling.v garbing.v garbling.v garnering.v garnishing.v garrisoning.v gashing.v gatecrashing.v gauging.v generating.v genericizing.v gerrymandering.v ghettoizing.v gilding.v ginning.v girding.v glaciating.v gladdening.v glamorizing.v gleaning.v glimpsing.v glorifying.v glutting.v goading.v gorging.v goring.v grabbing.v gracing.v grading.v grafting.v gratifying.v gravelling.v greasing.v greenlighting.v greeting.v grilling.v gripping.v gritting.v groining.v grooming.v grossing.v grudging.v guarding.v guiding.v guillotining.v gumming.v gunning.v gutting.v guzzling.v gypping.v hallowing.v halting.v halving.v hampering.v hamstringing.v handcrafting.v handcuffing.v handicapping.v handling.v haranguing.v harassing.v harboring.v harbouring.v harming.v harnessing.v harpooning.v harrowing.v harrying.v harvesting.v hassling.v haunting.v hawking.v hazarding.v hazing.v headquartering.v heaping.v heartening.v hearting.v heeding.v helming.v heralding.v highjacking.v highlighting.v hijacking.v hindering.v hitting.v hoaxing.v hobbling.v hocking.v hogging.v hollowing.v homesteading.v homogenizing.v honing.v honoring.v honouring.v hooding.v hoodwinking.v horrifying.v horsewhipping.v hosing.v hospitalizing.v hosting.v hotfooting.v hounding.v housing.v hulling.v humbling.v humbugging.v humiliating.v humouring.v humping.v hunching.v hurling.v husking.v hyphenating.v hypnotizing.v idealizing.v identifying.v idolizing.v ignoring.v ill-treating.v illuminating.v illumining.v illustrating.v imaging.v imbibing.v imbuing.v imitating.v immersing.v immobilizing.v immolating.v immortalizing.v immunizing.v impacting.v impairing.v impaling.v impanelling.v imparting.v impeaching.v impeding.v imperilling.v impersonating.v implanting.v implementing.v implicating.v importing.v imposing.v impounding.v impoverishing.v impregnating.v impressing.v imprinting.v imprisoning.v impugning.v imputing.v inactivating.v inaugurating.v incapacitating.v incarcerating.v incarnating.v incensing.v incinerating.v including.v inconveniencing.v incriminating.v inculcating.v incurring.v indemnifying.v indenturing.v indexing.v indicting.v individuating.v indoctrinating.v inducting.v infatuating.v infecting.v infesting.v infilling.v infiltrating.v inflaming.v inflating.v inflecting.v inflicting.v influencing.v infuriating.v infusing.v ingesting.v ingratiating.v inhabiting.v inheriting.v inhibiting.v initialling.v injecting.v injuring.v inking.v inoculating.v inscribing.v inseminating.v inserting.v inspecting.v installing.v instating.v instigating.v instilling.v instituting.v institutionalizing.v insulating.v insulting.v insuring.v integrating.v intercepting.v interchanging.v interdicting.v interesting.v interjecting.v interleaving.v internalizing.v internationalizing.v interoperating.v interpolating.v interring.v interrogating.v interspersing.v interweaving.v intimidating.v intoning.v intoxicating.v introducing.v intuiting.v inundating.v invading.v invalidating.v invaliding.v inveigling.v inventing.v inverting.v invigorating.v invoking.v irking.v irradiating.v irrigating.v isolating.v italicizing.v itemizing.v iterating.v jailing.v jarring.v jeopardizing.v jettisoning.v jilting.v jinxing.v jollying.v jugging.v juxtaposing.v kenning.v kidnapping.v kissing.v kneading.v knifing.v knighting.v lacerating.v lacing.v lacking.v lacquering.v lambasting.v laminating.v lampooning.v lancing.v landscaping.v lassoing.v lauding.v laundering.v lavishing.v leaching.v leapfrogging.v leasing.v leavening.v legalizing.v legitimatizing.v leniting.v leveraging.v levering.v levying.v libelling.v liberalizing.v liberating.v licencing.v likening.v limiting.v lionizing.v liquidizing.v listing.v loaning.v loathing.v lobbing.v lofting.v looting.v lubricating.v lugging.v lulling.v lumping.v luring.v lynching.v maddening.v magnetizing.v magnifying.v maiming.v maligning.v maltreating.v manacling.v mandating.v mangling.v manhandling.v manicuring.v manifesting.v manipulating.v manning.v manufacturing.v marginalising.v marginalizing.v marketing.v marooning.v marring.v marshalling.v martyring.v mashing.v masking.v massaging.v mass-producing.v mastering.v masterminding.v masticating.v mauling.v maximizing.v maxing.v measuring.v mechanizing.v medicating.v memorializing.v memorizing.v menacing.v meriting.v mesmerizing.v microfilming.v miffing.v milking.v mimeographing.v mimicking.v mincing.v miniaturizing.v minimizing.v minting.v miring.v mirroring.v misapplying.v misapprehending.v misappropriating.v miscastting.v misconceiving.v misconstruing.v misdating.v misdirecting.v misgoverning.v misguiding.v mishandling.v mishearing.v misinforming.v misinterpreting.v mislaying.v misleading.v mismanaging.v misnaming.v misplacing.v mispronouncing.v misquoting.v misreading.v misrepresenting.v misspelling.v misspending.v misstating.v mistaking.v mistranslating.v mistreating.v mistrusting.v misusing.v mitigating.v mobbing.v mocking.v modeling.v modifying.v molding.v molesting.v mollifying.v mollycoddling.v monitoring.v monopolizing.v montaging.v mooring.v mooting.v morphing.v mortaring.v mortgaging.v mortifying.v mothballing.v mothproofing.v motorizing.v muddying.v muffing.v muffling.v mugging.v mulching.v multiplexing.v murdering.v mustering.v mutilating.v muting.v muzzling.v myspacing.v mystifying.v nabbing.v nagging.v namespacing.v narrating.v nationalizing.v naturalizing.v needling.v negating.v netting.v nettling.v neutering.v neutralizing.v nicking.v nicknaming.v nixing.v noogieing.v normalizing.v norming.v notarizing.v notating.v nourishing.v novelising.v novelizing.v nudging.v nullifying.v numbering.v numbing.v nursing.v nurturing.v obfuscating.v obligating.v obliterating.v obscuring.v obstructing.v obtaining.v obviating.v occasioning.v occupying.v offending.v offloading.v offsetting.v oiling.v okaying.v omening.v omitting.v oppressing.v orchestrating.v ordaining.v organizing.v orientating.v orienting.v ornamenting.v ostracizing.v ousting.v outbalancing.v outclassing.v outdistancing.v outdoing.v outfighting.v outfitting.v outflanking.v outfoxing.v outgrowing.v outlasting.v outlawing.v outlining.v outliving.v outmanoeuvring.v outnumbering.v outplaying.v outraging.v outranking.v outrideing.v outrighting.v outrunning.v outscoring.v outshining.v outsmarting.v outsourcing.v outstaying.v outvoting.v outweighing.v outwitting.v overawing.v overbearing.v overburdening.v overcoming.v overcooking.v overcrowding.v overdoing.v overdubing.v overemphasizing.v overestimating.v overexerting.v overexposing.v overgrazing.v overhauling.v overhearing.v overleaping.v overloading.v overlooking.v overpaying.v overplaying.v overpopulating.v overpowering.v overpraising.v overprinting.v overrating.v overruling.v overrunning.v overseeing.v overshadowing.v overshooting.v oversimplifying.v overstating.v overstaying.v overstepping.v overstocking.v overstraining.v oversubscribing.v overtaking.v overtaxing.v overvaluing.v overwhelming.v overwriting.v owning.v oxygenating.v pacifying.v packaging.v padding.v padlocking.v paging.v paining.v palatalizing.v pampering.v papering.v parallelizing.v parallelling.v paralysing.v paralyzing.v parametrizing.v paraphrasing.v parching.v pardoning.v paring.v parodying.v paroling.v parrying.v partitioning.v partnering.v pasteurizing.v pasting.v patenting.v patrolling.v patronizing.v patterning.v patting.v pauperizing.v pawing.v pawning.v pedestrianizing.v pegging.v pelting.v penalizing.v pencilling.v peppering.v perfecting.v perforating.v perfuming.v perfusing.v perjuring.v permeating.v perming.v permuting.v perpetrating.v perpetuating.v perplexing.v persecuting.v personalizing.v personifying.v perturbing.v perusing.v pervading.v perverting.v pestering.v petting.v photocopying.v photographing.v photosensitizing.v photostatting.v phrasing.v pickling.v picturing.v piercing.v pigeonholing.v pigmenting.v pilfering.v piloting.v pinching.v pinpointing.v piping.v pipping.v piquing.v pirating.v pitchforking.v pitting.v pitying.v placating.v placing.v plagiarizing.v plaguing.v planting.v plastering.v pleasing.v plumbing.v pluralizing.v plying.v pocketing.v podcasting.v poisoning.v polarizing.v policing.v polishing.v politicizing.v pollinating.v polluting.v pondering.v pooh-poohing.v pooling.v popularizing.v populating.v portaging.v portending.v porting.v positioning.v possessing.v postdating.v posting.v postmarking.v postponing.v powdering.v praising.v prearranging.v preceding.v precipitating.v precluding.v preconceiving.v predestining.v predetermining.v predicating.v predisposing.v pre-empting.v preempting.v preening.v prefabricating.v prefacing.v prefiguring.v preforming.v preheating.v prejudging.v prejudicing.v premeditating.v premising.v preoccupying.v preordaining.v prepaying.v prerecording.v prerendering.v presaging.v prescribing.v presenting.v preserving.v presorting.v pressurizing.v prestressing.v prettifying.v preventing.v pricing.v priding.v priming.v printing.v privileging.v prizing.v probing.v processing.v proctoring.v procuring.v prodding.v producing.v proffering.v profiling.v prognosticating.v prohibiting.v prolonging.v promoting.v promulgating.v pronouncing.v proofing.v propelling.v proportioning.v propositioning.v propounding.v proscribing.v prosecuting.v prostituting.v prostrating.v protecting.v pruning.v psychoanalysing.v psychoanalyzing.v publicizing.v publishing.v pulverizing.v pummelling.v punctuating.v punishing.v purchasing.v pureing.v purifying.v purloining.v pursing.v pursuing.v purveying.v quaffing.v qualifying.v quantifying.v quarantining.v quarterbacking.v quartering.v quashing.v quelling.v quenching.v querying.v quick-freezing.v quilting.v quoting.v radicalizing.v raffling.v raiding.v railroading.v ramming.v ramping.v ransacking.v ransoming.v raping.v ratifying.v rationalizing.v rationing.v ravaging.v ravishing.v razing.v reacquainting.v re-addressing.v readmitting.v reaping.v reappointing.v rearranging.v reassessing.v reauthorizing.v rebadging.v rebooting.v rebranding.v rebroadcasting.v rebuffing.v rebuking.v rebutting.v recapturing.v recasting.v recessing.v rechristening.v reciting.v reclaiming.v recoloring.v recommitting.v recompensing.v reconciling.v reconditioning.v reconquering.v reconsecrating.v reconsidering.v reconstructing.v reconvicting.v recouping.v recreating.v rectifying.v recusing.v recuting.v recycling.v redecorating.v redeeming.v redefining.v redeploying.v redesignating.v redesigning.v redeveloping.v rediscovering.v redistributing.v redoing.v redrafting.v redrawing.v redressing.v redshirting.v reducing.v reduplicating.v reemploying.v reenacting.v reequiping.v re-establishing.v reestablishing.v refashioning.v refilling.v refinancing.v refining.v reflexing.v reformulating.v refracting.v refreshing.v refrigerating.v refunding.v refurbishing.v refurnishing.v refuting.v regaining.v regaling.v regimenting.v regrading.v regularizing.v regulating.v regurgitating.v rehabilitating.v rehashing.v rehiring.v rehousing.v reigniting.v reimagining.v reimbursing.v reinforcing.v reinstalling.v reinstating.v reinsuring.v reintegrating.v reinterpreting.v reinventing.v reinvigorating.v reissuing.v rejecting.v rejoining.v rejuvenating.v relaunching.v relaying.v releasing.v relegating.v relieving.v relinquishing.v relishing.v relisting.v reliving.v reloading.v remanding.v remastering.v rematching.v remedying.v remilitarizing.v remixing.v remodelling.v remolding.v remoulding.v removing.v remunerating.v rending.v renewing.v renominating.v renouncing.v renovating.v renumbering.v reoccupying.v reorientating.v reorienting.v repackaging.v repainting.v repatriating.v repealing.v repelling.v rephotographing.v rephrasing.v replacing.v replanting.v replastering.v replaying.v replenishing.v replicating.v reprehending.v representing.v repressing.v reprieving.v reprimanding.v reprinting.v reproaching.v reproofing.v reproving.v repudiating.v repulsing.v repurchasing.v repurposing.v reputing.v requisitioning.v rereading.v rereleasing.v rerolling.v rerouting.v rescheduling.v rescinding.v rescuing.v researching.v reseating.v reselling.v resembling.v resenting.v reserving.v resetting.v reshaping.v reshuffling.v resiting.v resoling.v respecting.v restating.v restocking.v restoring.v restraining.v restricting.v restructuring.v restyling.v resubmiting.v resurrecting.v retaining.v retaking.v retarding.v retelling.v rethinking.v reting.v retitling.v retouching.v retracing.v retracting.v retransmitting.v retrieving.v retriing.v retrying.v revaluing.v revamping.v revering.v reveting.v reviewing.v reviling.v revising.v revisiting.v revitalizing.v revoking.v revolutionizing.v rewarding.v rewatering.v rewiring.v rewording.v rewriting.v ribbing.v ridding.v riddling.v ridiculing.v rifling.v righting.v rimming.v rivaling.v rivalling.v riveting.v romanizing.v romanticizing.v roping.v routing.v rubberizing.v rubber-stamping.v ruing.v ruining.v rumpling.v rusticating.v sabotaging.v sacking.v saddening.v saddling.v safeguarding.v salting.v salvaging.v sampling.v sanctifying.v sanctioning.v sandblasting.v sanding.v sandpapering.v sandwiching.v sapping.v satiating.v satirising.v satirizing.v satisfying.v saturating.v sauteing.v savaging.v savouring.v scalding.v scalping.v scandalizing.v scanting.v scarpering.v scarring.v scenting.v scheduling.v schooling.v scooping.v scorching.v scorning.v scotching.v scouring.v scrapping.v scrunching.v scrutinizing.v sculpting.v scuttling.v searing.v seasoning.v seating.v seconding.v secreting.v secularizing.v securing.v sedating.v seducing.v seeding.v segregating.v selecting.v sensationalizing.v sensitizing.v sentimentalizing.v sequestering.v serenading.v serializing.v servicing.v shackling.v shadowing.v shampooing.v shapeshifting.v sharing.v sharpening.v shearing.v sheathing.v shedding.v sheltering.v shelving.v shepherding.v shielding.v shingling.v shirking.v shocking.v shooing.v short-changing.v shortlisting.v shouldering.v shovelling.v showcasing.v shredding.v shrouding.v shucking.v shunning.v shunting.v shuttering.v sickening.v sicking.v sidelining.v sidestepping.v sidetracking.v sieving.v sighting.v signposting.v silencing.v silhouetting.v simplifying.v simulating.v simulcasting.v siphoning.v siring.v skewering.v skinning.v skippering.v skirting.v slaking.v slandering.v slapping.v slashing.v slating.v slaughtering.v slaying.v sleeving.v slicing.v slighting.v slinging.v slotting.v slugging.v slurring.v smelting.v smiting.v smothering.v snagging.v snaring.v snubbing.v socking.v sodomizing.v soft-pedalling.v soiling.v soldering.v soliciting.v solving.v soothing.v soundproofing.v souping.v sourcing.v sousing.v spading.v spanking.v spanning.v sparing.v spaying.v spearheading.v spearing.v specifying.v spewing.v spiking.v spin-drying.v spiriting.v spiting.v sponsoring.v spoonfeeding.v spotlighting.v spotting.v spraining.v spraying.v sprinkling.v spurning.v squandering.v squelching.v squiring.v stabbing.v staffing.v staging.v stalemating.v standardizing.v stapling.v starching.v startling.v stashing.v stationing.v staunching.v stealing.v steamrollering.v steeling.v stereotyping.v sterilizing.v stiffing.v stigmatizing.v stilling.v stimulating.v stitching.v stockading.v stoking.v stomaching.v stoning.v storing.v storyboarding.v stowing.v straddling.v strafing.v straitening.v strangling.v strapping.v streamlining.v strewing.v stroking.v structuring.v stubbing.v stuccoing.v studding.v stunning.v stunting.v styling.v stylizing.v stymieing.v subduing.v subediting.v subjecting.v subjugating.v sublimating.v subordinating.v subpoenaing.v subserving.v subsidizing.v substantiating.v subsuming.v subtending.v subtracting.v subverting.v succouring.v suckling.v suffusing.v suiciding.v suiting.v sullying.v summarizing.v summoning.v sundering.v sunning.v superimposing.v superseding.v supplanting.v supplementing.v supplying.v supporting.v suppressing.v surmounting.v surnaming.v surpassing.v surrounding.v surveying.v suspending.v sustaining.v swamping.v swathing.v swatting.v sweetening.v swigging.v swindling.v swiping.v symbolizing.v syncopating.v syndicating.v synthesizing.v syphoning.v systematizing.v tabling.v tabulating.v tailing.v tailoring.v tainting.v taming.v tamping.v tantalizing.v targeting.v tarring.v tattooing.v taunting.v taxing.v teasing.v telecasting.v teleporting.v telescoping.v televising.v tendering.v terracing.v terrifying.v terrorizing.v tessellating.v test-driving.v tethering.v thanking.v thatching.v thirsting.v threading.v thumbing.v thwarting.v ticketing.v tiering.v tiling.v tilling.v timelining.v timing.v tinting.v titillating.v toeing.v tolerating.v torching.v tormenting.v torpedoing.v torturing.v toting.v touring.v tousling.v touting.v towelling.v towing.v trademarking.v trampling.v tranquilizing.v tranquillizing.v transacting.v transcending.v transcoding.v transcribing.v transfixing.v transforming.v transfusing.v transgendering.v transistorizing.v transitioning.v transmitting.v transmuting.v transporting.v transposing.v transshipping.v trapping.v trashing.v traversing.v treasuring.v tricking.v triggering.v trivializing.v troubling.v trouncing.v truncating.v turbocharging.v tutoring.v tweaking.v twiddling.v typecasting.v typifying.v tyrannizing.v unaffiliating.v unbalancing.v unbanning.v unblocking.v unbolting.v unbuckling.v unburdening.v unbuttoning.v unclothing.v uncluttering.v uncorking.v uncoupling.v uncovering.v uncrossing.v undercharging.v undercutting.v underestimating.v underexposing.v underfunding.v undergoing.v underlining.v underlying.v undermining.v underpaying.v underpinning.v underquoting.v underrating.v underrepresenting.v underscoring.v underselling.v underserving.v undershooting.v undersigning.v understating.v understocking.v understudying.v undervaluing.v underwriteing.v undoing.v unearthing.v unencumbering.v unfettering.v unfrocking.v unfurling.v unhanding.v unhinging.v unhooking.v uninstalling.v unlearning.v unleashing.v unloosing.v unmasking.v unnerving.v unplugging.v unrecording.v unsaddling.v unscrambling.v unsettling.v unsheathing.v unveiling.v unzipping.v upbraiding.v updating.v upgrading.v upholding.v upholstering.v uplifting.v uprighting.v uprooting.v upsetting.v upstaging.v ushering.v usurping.v utilizing.v uttering.v vacating.v vaccinating.v valeting.v validating.v valuing.v vanquishing.v varnishing.v veiling.v vending.v venerating.v ventilating.v venting.v verbalizing.v vetoing.v vetting.v vexing.v victimizing.v videotaping.v vilifying.v vindicating.v violating.v visaing.v visualizing.v vitiating.v vivisecting.v vocalizing.v voicing.v voiding.v vouchsafing.v vulgarizing.v waging.v waiving.v walling.v walloping.v wangling.v warding.v warehousing.v warranting.v wasting.v waterproofing.v waylaying.v weaning.v weaponizing.v weathering.v wedging.v weighting.v welcoming.v wending.v westernizing.v wetting.v whacking.v wheedling.v whetting.v whiling.v whitewashing.v wielding.v wikiing.v winging.v winnowing.v withholding.v withstanding.v witnessing.v wolfing.v wooing.v wording.v worming.v wounding.v wreaking.v wrecking.v wrenching.v wresting.v wronging.v zapping.v zoning.v link-grammar/data/en/words/words-medical.v.4.10000644000000000000000000010221712536650432016231 0ustar abash.v abjure.v ablate.v abnegate.v abominate.v abscess.v abscise.v absent.v acccouter.v accession.v acclimatise.v accouple.v accoutre.v acetify.v acetonate.v acetonize.v acetylate.v acetylise.v acetylize.v ace.v achromatise.v achromatize.v acidulate.v actualise.v actualize.v actuate.v acylate.v adduct.v adenosine_diphosphate-ribosylate adjure.v administrate.v admix.v ADP-ribosylate.v adrenalectomize.v adsorb.v adulate.v advantage.v afforest.v affront.v afterload.v agglomerate.v aggrieve.v agonise.v airbrush.v alcoholise.v alcoholize.v alias.v aline.v aliquot.v alite.v alkalinise.v alkalinize.v alkalise.v alkalize.v alkylate.v allelotype.v allergize.v allograft.v alloimmunise.v alloimmunize.v allotransplant.v alloy.v allure.v alphabetise.v alphabetize.v aluminate.v Americanise.v amidate.v aminate.v aminoacylate.v ammoniate.v amortise.v anaesthetise.v anatomize.v anergise.v anesthetise.v anglicise.v animadvert.v annexe.v annualise.v annualize.v annunciate.v anodise.v anodize.v anonymise.v anonymize.v anoxiate.v antagonise.v anteriorise.v anteriorize.v ante.v antiaggregate.v anticoagulate.v antigenise.v antigenize.v antirepress.v antisepticise.v antisepticize.v apease.v apodize.v apologise.v apostatise.v appall.v appal.v apparell.v apparel.v apport.v appose.v apprize.v arborise.v archive.v arck.v arc.v aromatise.v aromatize.v arsonate.v arterialize.v article.v asexualize.v asperge.v asperse.v asseverate.v asterisk.v atomise.v attitudinise.v audiotape.v auscultate.v author.v autocatalyse.v autoclave.v autogenerate.v autoimmunise.v autoimmunize.v autoinduce.v autoinduct.v autoinject.v autolise.v automatise.v autoperfuse.v autopsy.v autoradiograph.v autoregulate.v autosensitise.v autotransplant.v auxotype.v avalanche.v avianise.v avianize.v avow.v avulse.v awake.v axotomise.v axotomize.v azotize.v baby.v backcross.v backdrop.v backlabel.v backscatter.v ballast.v ballot.v ball.v baptise.v barber.v bariumize.v barrack.v barrage.v bastardize.v ba.v bayonet.v beach.v bead.v beaver.v bedaub.v bedeck.v bed.v behoove.v behove.v beleaguer.v bell.v benefice.v benzoylate.v bereve.v besmear.v betroth.v better.v biasse.v bib.v bicompartmentalise.v binge.v bing.v bioactivate.v bioassay.v bioconvert.v bioengineer.v biomagnify.v bio-monitor.v biomonitor.v biopsy.v bioreduce.v bioremediate.v biosynthesise.v biosynthesize.v biotinylate.v biotransform.v biotype.v bisintercalate.v bivouack.v black.v blanco.v blank.v blob.v blood.v bloody.v blue.v bluster.v boat.v bobsled.v boob.v boomerang.v booster.v bootstrap.v bottleneck.v brain.v brain-wash.v braze.v breakfast.v breast-feed.v breast.v brevet.v broadside.v brod.v bromate.v brominate.v bromize.v bruit.v brutalise.v bucket.v buffer.v bulbectomize.v bulk.v bull.v bunker.v burke.v burk.v burr.v buss.v cache.v cak.v calender.v caliper.v calk.v calliper.v calumniate.v canalize.v cancerise.v canker.v cannulate.v cannulize.v canopy.v cantilever.v cant.v capacitate.v capillarise.v capitalise.v capitate.v caponise.v caponize.v captain.v carbamoylate.v carbamylate.v carbolate.v carbolise.v carbolize.v carbonate.v carbonise.v carboxylate.v cardiectomize.v career.v cartoon.v cashier.v catabolise.v catalise.v catalize.v catalog.v catalyse.v catalyze.v categorise.v catheterise.v catheterize.v caulk.v causticize.v cauterise.v cauterize.v cavitate.v C-band.v cementify.v centrifugalise.v centrifugalize.v centrifugate.v centrifuge.v cere.v certificate.v chaff.v chamfer.v champ.v chance.v chaperone.v chap.v characterise.v charbroil.v checker.v cheek.v chemoattract.v chemo-prevent.v chemoprevent.v chemo-sensitise.v chemo-sensitize.v chemosensitize.v chequer.v chicken.v chine.v chink.v chin.v chlore.v chloroformise.v chloroformize.v chloroform.v chlor.v chock.v cholecystectomise.v cholecystectomize.v chorus.v chromate.v chromatize.v chromatograph.v chromicize.v chunk.v chute.v cicatrise.v cicatrize.v cipher.v circularise.v circumduct.v civilise.v class.v clear-cut.v clearcut.v clew.v clock.v clout.v clue.v clysterize.v coactivate.v coadminister.v co-agglutinate.v co-apply.v coapply.v coapt.v coarticulate.v co-assemble.v coassemble.v cocainise.v cocainize.v co-calibrate.v cocalibrate.v co-chromatograph.v cochromatograph.v co-circulate.v co-cluster.v cocluster.v co-colonize.v cocolonize.v cocoon.v co-crystallize.v cocrystallize.v co-cultivate.v cocultivate.v coculture.v co-develop.v co-electroporate.v coelectroporate.v coelute.v co-encapsidate.v coencapsidate.v coencapsulate.v co-enrich.v coenrich.v co-exist.v co-expose.v coexpose.v coexpress.v co-extract.v cograft.v cogwheel.v co-hybridise.v cohybridise.v co-hybridize.v cohybridize.v coimmobilise.v coimmobilize.v coinfect.v coinfuse.v co-ingest.v coingest.v co-inherit.v coinherit.v co-inoculate.v coinoculate.v coke.v collateralise.v collectivise.v colliquate.v colonise.v colonoscope.v colorise.v colorize.v colourize.v co-manage.v comanage.v comedicate.v cometabolise.v commercialise.v compartmentalise.v compartment.v compass.v compeer.v complex.v comport.v computerise.v concatenate.v conceptualise.v concord.v concrete.v concuss.v condole.v conduce.v cond.v conglomerate.v conglutinate.v consternate.v constitutionalize.v contradistinguish.v contraindicate.v controvert.v contund.v contuse.v convolute.v co-ordinate.v co-oxidise.v cooxidise.v co-oxidize.v cooxidize.v co-partition.v co-perfuse.v coperfuse.v copolymerise.v copolymerize.v copper.v coproduce.v co-promote.v copromote.v corbell.v corbel.v co-rear.v corear.v co-register.v co-regulate.v coregulate.v co-release.v corelease.v corkscrew.v cornify.v corn.v co-secrete.v cosecrete.v cosegregate.v cosensitise.v cosensitize.v cosh.v cosolubilise.v cosolubilize.v co-sponsor.v cosponsor.v cosset.v costarr.v co-stimulate.v costimulate.v co-store.v costore.v co-synthesise.v cosynthesise.v co-synthesize.v cosynthesize.v co-transcribe.v cotranscribe.v cotransfect.v cotransferr.v co-transfer.v cotransfer.v cotransform.v cotransmit.v co-transport.v cotransport.v co-treat.v cotreat.v coulorise.v counterpoise.v counterregulate.v countersink.v counterstain.v counter-transport.v countertransport.v countervail.v course.v covenant.v cow.v cozen.v crabb.v craft.v crape.v crater.v crate.v crepe.v crew.v crick.v criminalise.v criminalize.v crimson.v crisp.v criss-cross.v cristallise.v cristallize.v criticise.v critique.v crock.v cross-clamp.v crossclamp.v cross_dress cross_fertilize cross-link.v cross_match cross-match.v cross-protect.v crossprotect.v cross-react.v crossreact.v cross-reference.v crossreference.v crust.v cryo-fix.v cryofix.v cryo-preserve.v cryopreserve.v cryoprotect.v cryo-section.v cryotreat.v crystallise.v cuckoo.v cudgell.v cumber.v cund.v curarise.v curarize.v curate.v curette.v curet.v curtain.v cuss.v customise.v customize.v cu.v cyanylate.v cyclise.v cypher.v cyto-adhere.v cytoreduce.v cytospin.v cytostain.v dansylate.v dapple.v deacetylate.v deactivate.v deacylate.v de-adenylate.v deadenylate.v deafferentate.v deafferent.v deallergise.v deamidate.v deamidize.v deaminate.v debouche.v debouch.v debride.v debulk.v debute.v decalcify.v decannulate.v decapsulate.v decarboxylate.v decatenate.v decentralise.v decerebrate.v decerebrize.v dechlorinate.v decidualise.v decoct.v decolonise.v decolorise.v decolorize.v decolourise.v decolourize.v decomplementize.v decontrol.v deconvolute.v decoronate.v decorticate.v decouple.v decoy.v decree.v deemanate.v de-energise.v deenergise.v de-energize.v deenergize.v de-epicardialize.v de-epithelialise.v deepithelialise.v deethylate.v de-etiolate.v defaecate.v defaunate.v defeminise.v defeminize.v defenestrate.v defibrillate.v defibrinate.v deflorate.v defocus.v deformylate.v defunctionalise.v defunctionalize.v degalactosylate.v degas.v degauss.v degenitalize.v deglycerate.v degrease.v dehaematise.v dehalogenate.v dehematize.v dehemoglobinize.v dehisc.v dehorn.v dehull.v dehumanise.v dehydrochlorinate.v dehydrogenate.v dehydrogenise.v dehydrogenize.v dehydroxylate.v dehypnotise.v dehypnotize.v deinduce.v deinstitutionalize.v deionise.v deionize.v deject.v de-lead.v delead.v delimitate.v delipidate.v delocalise.v delocalize.v delouse.v demagnetise.v demark.v demasculinise.v demedullate.v demembranate.v demetalise.v demetalize.v demethylate.v demilitarise.v demineralise.v demineralize.v demobilise.v democratise.v demodulate.v demonetise.v demonetize.v demoralise.v demustardize.v demyelinate.v demystify.v denationalise.v denature.v denervate.v denitrate.v denitrify.v deodorise.v deoxidise.v deoxidize.v deoxygenate.v depancreatize.v deparaffinise.v deparaffinize.v departmentalise.v depersonalize.v dephosphorylate.v depigment.v depilate.v depolarise.v depoliticise.v depoliticize.v depolymerise.v depotentiate.v deprave.v depressurise.v depressurize.v deproject.v deprotect.v deproteinate.v deprotonate.v depurate.v depute.v deputise.v deregulate.v derepress.v deresinate.v derivatise.v derivatize.v derivitise.v derivitize.v deroof.v derotate.v derrick.v desalinise.v desalt.v desamidate.v desamidize.v descale.v desensitise.v desexualise.v desexualize.v desheathe.v desheath.v desialylate.v desolate.v desolvate.v desorb.v despeciate.v destabilise.v destablise.v destablize.v destain.v desulfate.v desulfurate.v desulphate.v desulphurate.v desynchronise.v dethyroidize.v detour.v detoxicate.v deuterate.v deuteriate.v devascularize.v devil.v devitalise.v devitalize.v deworm.v dextrinate.v dextrinize.v diacetylate.v diacylate.v diagram.v dialkylate.v dialogue.v dialog.v dialyse.v diapause.v diaper.v diazotize.v dibble.v dicker.v dideuterate.v diesterify.v difluorinate.v digitalise.v digitilise.v digitise.v digitize.v dihalogenate.v dihydrogenate.v dihydroxylate.v diiodinate.v dike.v dilatate.v dimerise.v dimethylate.v dimite.v dimit.v dimple.v diphosphorylate.v dirty.v disacidify.v disadvantage.v disaggregate.v disambiguate.v disarray.v disbelieve.v disbud.v disburden.v discolour.v discommode.v discompose.v disconfirm.v discountenance.v disco.v discretise.v discretize.v disembody.v disencumber.v disfavor.v dishabituate.v dishevel.v dishonor.v disimmunize.v disinhibit.v disinsert.v disjoint.v dismutate.v disocclude.v disocclud.v disorder.v disorganise.v disorganize.v dispensarise.v dispensarize.v dispirit.v disproportionate.v disquiet.v disregulate.v dissatisfy.v dissimilate.v distemper.v distrain.v divulse.v docket.v doll.v dolly.v domicile.v dorsalise.v dorsiduct.v dose.v doss.v douche.v dowel.v downmodulate.v downregulate.v downstage.v dowse.v dramatise.v drat.v drivel.v drudge.v dumfound.v dun.v duplex.v dyke.v dysregulate.v earth.v ear.v echolocate.v economise.v ecphorise.v ecphorize.v ectropionise.v ectropionize.v editorialise.v educe.v edulcorate.v effectuate.v eff.v egest.v ekphorize.v elate.v electro-cauterise.v electrocauterise.v electro-cauterize.v electrocauterize.v electrodialyse.v electroelute.v electro-inject.v electroinject.v electroinsert.v electrophorese.v electrophore.v electrophor.v electroplate.v electroporate.v electrotransfer.v electrovert.v elute.v elutriate.v emaciate.v embolise.v embrocate.v emedullate.v empathise.v emphasise.v emplace.v emulsion.v enamor.v enamour.v encapsulate.v enchain.v encore.v encrust.v endarterectomise.v endarterectomize.v endoscope.v endothelialise.v endue.v energise.v energize.v enfeeble.v engraft.v engrail.v enkindle.v enlace.v enlac.v enplane.v enplan.v enrapture.v ensheathe.v ensheath.v ensilage.v ensile.v ensil.v enterectomise.v enterectomize.v entropionize.v envenom.v environ.v enwrap.v epilate.v epimerise.v epithelialise.v epithelialize.v epithelise.v epithelize.v epitomise.v epoxidise.v epoxidize.v equalise.v equilibrate.v eroticise.v eroticize.v erotise.v erotize.v essay.v esterify.v estrange.v estrogenise.v estrogenize.v etherise.v etherize.v ethylate.v euthanatise.v euthanatize.v euthanise.v euthanize.v evaginate.v evert.v evidence.v exact.v exanimate.v excerpt.v exchange-transfuse.v excogitate.v execrate.v exenterate.v exorcise.v expatriate.v exsanguinate.v exsect.v exsomatize.v exteriorise.v exteriorize.v externalise.v extrude.v extubate.v factorise.v factorize.v faggot.v fagot.v familiarise.v fantasise.v faradise.v faradize.v farnesylate.v father.v feather-bed.v fecundate.v federalise.v federalize.v felicitate.v feminise.v feminize.v fenestrate.v fertilise.v feu.v fictionalise.v fictionalize.v field-test.v filch.v filtrate.v finalise.v fingerprint.v fire-proof.v fireproof.v fissure.v fistulise.v flabbergast.v flange.v fleck.v flesh.v flexibilise.v flexibilize.v flounce.v floure.v flour.v fluidize.v fluoresceinate.v fluoridise.v fluoridize.v fluoroscope.v flute.v foal.v focalise.v fog.v footle.v footnote.v footprint.v footslog.v foray.v forbode.v forebid.v forebode.v foredoom.v foreground.v foreknow.v forest.v foretaste.v formalinise.v formalinize.v formalise.v format.v formylate.v fossilise.v fowl.v fox.v fractionate.v franchise.v fraternise.v freckle.v free-graft.v freeze_dry freeze-dry.v freeze-fracture.v freight.v fringe.v frolick.v fruit.v fuddle.v functionalise.v functionalize.v funk.v furcate.v fur.v gabble.v gab.v gad.v galactosylate.v galavant.v galivant.v galvanise.v ganglionectomise.v ganglionectomize.v gangrene.v gap.v garage.v garland.v garote.v garot.v garrote.v garrot.v gastrectomise.v gastrectomize.v gas.v gate.v gavage.v gazette.v gelatinise.v geld.v gell.v generalise.v genotype.v gentle.v gen.v geocode.v geranylgeranylate.v ghost.v ginger.v girdle.v glace.v glamorise.v glissade.v globalise.v glomectomise.v glomectomize.v glom.v glove.v glucoronise.v glucuronidate.v glue.v glycate.v glycerolate.v glycerolize.v glycosylate.v gonadectomize.v goose.v gormandise.v gown.v grain.v grandfather.v grandparent.v graph.v grass.v green.v grime.v grizzle.v grommet.v grub.v guest.v gull.v gusset.v guy.v habilitate.v habituate.v haemagglutinate.v haemoagglutinate.v haemocoagulate.v haemodialyse.v haemodialyze.v haemodilute.v haemolyse.v haemolyze.v haemoperfuse.v haemorrhage.v hallmark.v halogenate.v handpick.v haploidise.v haptenate.v hap.v harmonise.v hasp.v headline.v hemicastrate.v hemi-delete.v hemisect.v hemispherectomise.v hemispherectomize.v hemodialyse.v hemodialyze.v hemodilute.v hemolyse.v hemoperfuse.v hemorrhage.v heparinise.v heparinize.v hepatectomise.v hepatectomize.v heterodimerise.v hex.v hie.v high-jack.v hirudinize.v histoculture.v hobo.v hole.v holiday.v home.v homodimerise.v homodimerize.v homogenise.v homograft.v honeycomb.v hoop.v horse.v hospitalise.v hot.v hox.v humanise.v humanize.v humor.v hurdle.v husband.v hyalinise.v hyalinize.v hybridise.v hydrogenate.v hydrogenize.v hydrolise.v hydrolize.v hydrolyse.v hydroxylate.v hye.v hymn.v hyperacetylate.v hyperactivate.v hypercontract.v hyperdefaecate.v hyperexpress.v hyperextend.v hyperfiltrate.v hyperfractionate.v hyperimmunise.v hyperimmunize.v hyper-induce.v hyperinduce.v hyperinnervate.v hyperluteinise.v hyper-methylate.v hypermethylate.v hypernucleate.v hyperpolarise.v hyperproduce.v hypersensitise.v hyperstimulate.v hypertransfuse.v hypnoidize.v hypnotise.v hypomineralise.v hypomineralize.v hypo-phosphorylate.v hypophosphorylate.v hypophysectomise.v hypophysectomize.v hyposensitize.v hypothecate.v hysterectomise.v hysterectomize.v idealise.v idolise.v imbed.v immobilise.v immortalise.v immunise.v immunoabsorb.v immunoadsorb.v immuno-assay.v immunoassay.v immunoblot.v immunocompromise.v immunodeplete.v immunodepress.v immunoenhance.v immunoexpress.v immunoinhibit.v immunoisolate.v immunolabel.v immunolocalise.v immunolocalize.v immunoneutralise.v immunoneutralize.v immunophenotype.v immunopurify.v immunoradioassay.v immunoregulate.v immunoscreen.v immunoselect.v immunostain.v immunostimulate.v immunosuppress.v immuno-target.v immunotarget.v immunotitrate.v immunotype.v immure.v impersonalise.v impersonalize.v importune.v incise.v inclose.v incommode.v increment.v inculpate.v individualise.v individualize.v indorse.v indue.v industrialise.v inebriate.v influx.v inf.v ingle.v ingraft.v ingrain.v inhume.v inhum.v initialise.v initialize.v inlay.v innervate.v input.v inset.v insolubilise.v insolubilize.v insonify.v instance.v institutionalise.v instrument.v insufflate.v intellectualise.v intellectualize.v intercalate.v interconvert.v interface.v interiorise.v interiorize.v interlace.v interlard.v interleaf.v interlink.v internalise.v internationalise.v interpellate.v interpose.v interspace.v intrench.v introject.v introvert.v intrust.v intubate.v inure.v inventory.v invoice.v iodinate.v iodise.v ionise.v iontophorese.v iridectomize.v isoimmunise.v isoimmunize.v isomerise.v italicise.v itemise.v jacket.v jack_knife jackknife.v jecorize.v jejunectomise.v jejunectomize.v jeopardise.v joint.v juice.v junk.v karyotype.v keen.v kennel.v kent.v keratinise.v key.v kink.v knee.v K/O.v KO.v KO'.v labilise.v labyrinthectomise.v labyrinthectomize.v lacrymate.v lactonise.v ladder.v lambast.v lamb.v lame.v laminectomise.v laminectomize.v lam.v laparotomise.v laparotomize.v lapinise.v lapinize.v lard.v lariate.v lariat.v lark.v laryngectomise.v laryngectomize.v laser.v lassoo.v lateralise.v lather.v lathe.v lavage.v layer.v leaflet.v league.v leap-frog.v leash.v leech.v leep.v legalise.v legitimate.v legitimatise.v legitimise.v legitimize.v lentectomize.v lesion.v letter.v liberalise.v ligate.v lilt.v lime.v limn.v linearize.v linge.v lipectomise.v lipectomize.v lipidate.v liposuction.v lipoxygenate.v lip.v liquify.v lithograph.v lithotomize.v lobectomise.v lobectomize.v lobotomise.v lobotomize.v loose.v lord.v Lord.v loupe.v loup.v loure.v low.v lubrify.v luck.v luteinise.v luxate.v lymphadenectomise.v lymphadenectomize.v lyophilise.v lyophilize.v lypophilise.v lypophilize.v lysogenise.v lysogenize.v macadamise.v macadamize.v machine.v macroencapsulate.v magnetise.v mainstream.v malaxate.v malignise.v malposition.v malt.v mantle.v manumit.v manure.v marathon.v Marathon.v marginate.v marinade.v marsupialize.v masculinise.v masculinize.v massacre.v mastectomise.v mastectomize.v master-mind.v materialise.v matt.v mat.v maximise.v maze.v mechanise.v medialise.v medicalise.v medicalize.v medisect.v medullectomise.v medullectomize.v melanise.v melanize.v mentor.v mercerise.v mercerize.v merchandise.v mercurate.v mercurialize.v mercuriate.v mesmerise.v metabolise.v metabolize.v metal.v metastasise.v meter.v methylate.v metre.v metricise.v micellise.v microagglutinate.v microaggregate.v microbiopsy.v microcannulate.v microcatheterise.v microcatheterize.v microcomputerise.v microcomputerize.v microdetermine.v microdilute.v microdissect.v microembolise.v microfill.v microfilter.v microinject.v micromanipulate.v micromill.v micromodify.v micronise.v micronize.v microperfuse.v microprocess.v microsequence.v microtitrate.v microtome.v microwave.v middle.v mildew.v militarise.v militarize.v mimetise.v mimetize.v mineralise.v mineralize.v miniaturise.v minify.v minimise.v minute.v misadvise.v misattribute.v miscall.v misclassify.v miscode.v misconduct.v misdiagnose.v mis-fold.v misidentify.v misincorporate.v mislabel.v mislocalise.v mislocalize.v mismatch.v mispair.v misperceive.v misprint.v misrecognise.v misrecognize.v misregulate.v misrepair.v misroute.v misrule.v misspecify.v mis-tune.v mistune.v miter.v mitre.v mobilise.v modernise.v moire.v moisturise.v moisturize.v molder.v monophosphorylate.v monopolise.v moonlight.v moralise.v morcellate.v morphinize.v morse.v Morse.v mortice.v mortise.v mother.v moth-proof.v motorcycle.v motorise.v muckrake.v mulct.v multimerise.v mummify.v mummy.v mump.v muscle.v muscularise.v mutagenize.v myectomize.v myristoylate.v narcotize.v nark.v nasalise.v nasalize.v nationalise.v naturalise.v nauseate.v nebulise.v nebulize.v necropsy.v necrotise.v negative.v neighbor.v neighbour.v nephrectomise.v nep.v nerve.v nesslerise.v nesslerize.v neuromodulate.v neurostimulate.v neutralise.v niche.v nickel.v nim.v Nissl-stain.v nitrate.v nitrosate.v nitrosylate.v nobble.v nonplus.v noose.v normalise.v nose.v notch.v objectify.v objurgate.v oblate.v obtrude.v obtund.v obturate.v oestrogenise.v oestrogenize.v oint.v O.K..v OK.v oligomerise.v oligomerize.v oophorectomise.v oophorectomize.v operationalise.v operationalize.v oppugn.v opsonify.v opsonise.v optimise.v optimize.v orchidectomise.v orchidectomize.v ordinate.v organise.v orphan.v osmicate.v osteotomise.v osteotomize.v ostracise.v outbrave.v out-compete.v outcompete.v outdate.v outface.v out-Herod.v outmaneuver.v outmarch.v outmatch.v out-pace.v outpace.v outperform.v outpoint.v output.v outrange.v outrang.v outrival.v outsail.v outspread.v outstrip.v outvie.v outwear.v ovariectomise.v ovariectomize.v over-associate.v overassociate.v over-burden.v over-capitalise.v overcapitalise.v over-capitalize.v overcapitalize.v over-charge.v over-consume.v overconsume.v over-cook.v overcorrect.v overcrop.v over-crowd.v over-detect.v overdetect.v overdiagnose.v overdose.v over-elongate.v overelongate.v overemphasise.v over-emphasize.v over-estimate.v over-exert.v over-expose.v overexpress.v over-feed.v over-hang.v overhang.v over-heat.v over-insert.v overinsert.v overlay.v over-learn.v overlearn.v overleep.v overmaster.v over-pay.v over-praise.v over-predict.v overpredict.v over-produce.v over-proliferate.v over-refer.v overrefer.v over-report.v overreport.v over-represent.v overrepresent.v oversaturate.v over-secrete.v over-sew.v oversew.v over-simplify.v over-stage.v overstage.v overstag.v overstain.v overstimulate.v over-strain.v over-stretch.v over-synthesise.v oversynthesise.v over-synthesize.v oversynthesize.v over-transcribe.v overtreat.v overuse.v over-value.v overventilate.v overview.v over_weight overweight.v over-wrap.v overwrap.v oxidise.v oxygenise.v oxygenize.v ozonise.v ozonize.v palisade.v palliate.v palpate.v palp.v pancreatectomize.v panel.v paragraph.v parameterise.v parameterize.v parasitise.v parasitize.v parasol.v parathyroidectomize.v parboil.v parcel.v parrot.v particularise.v pasteurise.v pasture.v patronise.v pean.v peen.v pelletise.v pelletize.v pellet.v penalise.v pension.v people.v pepsinate.v pepsinise.v pepsinize.v peptonise.v percuss.v perifuse.v peritomize.v peritonealize.v peritonize.v permeabilize.v permeablise.v peroxidise.v personalise.v pestle.v phagocytise.v phagocytize.v phagocytose.v phalangize.v phenocopy.v phenolate.v phenotype.v philosophise.v phlebotomise.v phlorhizinise.v phlorhizinize.v phloridzinise.v phloridzinize.v phosphonylate.v phosphorylate.v photoactivate.v photobleach.v photodamage.v photodecompose.v photoinactivate.v photoinduce.v photoisomerise.v photolabel.v photolyse.v photo-oxidise.v photooxidise.v photo-oxidize.v photopolymerise.v photopolymerize.v photoprotect.v photoreduce.v photoregulate.v photoreverse.v photosensitise.v photostate.v photostimulate.v physick.v physic.v piggyback.v pillow.v pill.v pind.v pinealectomise.v pinealectomize.v pinion.v pink.v pin-point.v pipette.v pith.v plagiarise.v plait.v planimeter.v plank.v plasmolyse.v plasmolyze.v plateau.v plate.v platinate.v pleat.v plea.v plicate.v plump.v plum.v plunk.v pneumonectomise.v pneumonectomize.v pod.v polarise.v pole-axe.v poleaxe.v pole-ax.v poleax.v politicise.v politzerize.v pollack.v pollard.v polyadenalate.v polyadenylate.v polyglutamylate.v polymerise.v polymerize.v pomade.v pommel.v poniard.v popularise.v portacaval_shunt portion.v postfix.v potentiate.v poultice.v power.v prawn.v preabsorb.v preadmit.v precept.v precise.v precoat.v precook.v precool.v preculture.v predate.v predecease.v predefine.v predestinate.v pre-digest.v predigest.v pre-embed.v preembed.v pre-establish.v preestablish.v preexist.v pre-expose.v preexpose.v prefeed.v prefix.v preimmunize.v preinduce.v preinfect.v pre-irradiate.v preirradiate.v prelabel.v preload.v prelude.v premedicate.v premier.v premix.v prepossess.v preprint.v preprocess.v preprogram.v preprotect.v prep.v prereduce.v prescreen.v preselect.v presensitize.v pre-set.v preset.v presoak.v prespawn.v prespecify.v pressurise.v prestimulate.v pre-surface.v pretrain.v pretreate.v pretreat.v preview.v prewarm.v prewash.v prickle.v prioritise.v prioritize.v prise.v privatise.v probate.v profane.v professionalize.v prognose.v prolate.v prong.v propagandise.v prophesy.v propitiate.v prorate.v prorogue.v proselytise.v prospect.v prostatectomise.v prostatectomize.v proteolyse.v proteolyze.v protract.v provision.v pseudonormalise.v psycho-analyse.v psycho-analyze.v psych.v ptyalize.v publicise.v puddle.v pulp.v pulverise.v pup.v purpose.v purpurate.v putty.v pyridoxylate.v quadrisect.v quadruplicate.v quad.v quail.v quantise.v quantitate.v quantize.v quark.v quarrell.v quartisect.v quaternize.v queen.v Queen.v quizz.v rabbit.v radiograph.v radioimmunoassay.v radiolabel.v radiolocalise.v radiolocalize.v radiosensitise.v radiosensitize.v ranch.v randomise.v randomize.v rappel.v rarefy.v rase.v rationalise.v ray.v razor.v reabsorb.v reaccumulate.v reacquire.v re-adapt.v readdress.v readd.v readminister.v ready.v re-afforest.v reafforest.v reaggregate.v realign.v realise.v reallocate.v re-amplify.v reamplify.v reamputate.v ream.v reanalyse.v reanalyze.v re-animate.v reanimate.v reappraise.v re-approximate.v reapproximate.v re-arterialise.v rearterialise.v re-arterialize.v rearterialize.v reassert.v reassign.v reassociate.v reassort.v reattach.v rebase.v rebind.v reble.v rebreath.v recalcify.v recalibrate.v recanalize.v recategorise.v recategorize.v recatheterise.v recatheterize.v receipt.v recemise.v recertify.v rechallenge.v rechromatograph.v recirculate.v reclassify.v reclone.v recode.v recognise.v recolonise.v recombine.v recompress.v reconceptualize.v reconfigure.v reconnoiter.v reconstitute.v recontaminate.v recontoure.v recontour.v re-convert.v re-count.v re-cover.v recultivate.v reculture.v redact.v rededicate.v redescribe.v redetect.v redetermine.v rede.v redirect.v redissect.v red.v reecho.v reeducate.v re-elevate.v reemphasize.v re-endothelialise.v reendothelialise.v re-endothelialize.v re-engineer.v reengineer.v re-enter.v re-epithelialise.v reepithelialise.v re-epithelialize.v re-equilibrate.v re-esterify.v reesterify.v reevaluate.v re-examine.v reexamine.v re-excise.v reexcise.v re-explore.v reexplore.v reexpose.v reexpress.v re-extract.v reextract.v reface.v refeed.v reference.v refinish.v reflux.v refold.v reforest.v reformat.v reframe.v regionalise.v regionalize.v regraft.v regularise.v rehear.v reheat.v rehospitalise.v rehospitalize.v reimmunize.v re-implant.v reimplant.v reincarcerate.v reincarnate.v re-inflate.v reinitiate.v reinject.v reinjure.v reinnervate.v reinoculate.v reinsert.v reinstitute.v re-internalise.v reinternalise.v re-internalize.v reinternalize.v re-interview.v reinterview.v reintroduce.v reintubate.v re-invent.v re-irradiate.v reisolate.v rejig.v re-join.v relabel.v relaparoscopy.v relearn.v reline.v relipidate.v relocalise.v relocalize.v remainder.v remake.v remap.v remediate.v remilitarise.v remobilise.v remyelinate.v renature.v renegue.v re-obliterate.v reobliterate.v re-occlude.v re-occurr.v reoccurr.v reorganise.v reoxidise.v reoxygenate.v repartition.v repattern.v reperforate.v reperfuse.v reperitonealise.v reperitonealize.v replate.v repoint.v repolarise.v repopulate.v repose.v reposition.v reposit.v repot.v reprime.v reprobate.v reprocess.v reprogram.v republish.v repurify.v requite.v requit.v resample.v rescan.v re-scoer.v re-score.v rescore.v rescreen.v reseal.v resect.v resensitise.v resequence.v residualise.v residualize.v re-slice.v reslice.v resocialise.v resocialize.v resolubilize.v resorb.v respell.v restage.v restain.v re-stenose.v restimulate.v restretch.v restudy.v resulfate.v resulphate.v resurvey.v resuspend.v resuture.v resynthesise.v resynthesize.v retrain.v retransform.v retransfuse.v retransplant.v retraumatize.v retread.v re-treat.v retrocede.v retrofit.v retrotranscribe.v retype.v reuse.v reutilise.v reutilize.v revaccinate.v revalidate.v revascularise.v revascularize.v reveil.v revendicate.v revenge.v revitalise.v revivify.v revolutionalise.v revolutionalize.v revolutionise.v rewarm.v rework.v rex.v rhapsodise.v ribosylate.v rick.v ridge.v rime.v ritualise.v ritualize.v rit.v rive.v robe.v romanticise.v roneo.v rongeure.v rongeur.v roof.v rook.v rosette.v roset.v rosine.v rosin.v rouge.v rough-cast.v roughcast.v rough-dry.v roughhouse.v rowel.v rubberise.v ruddle.v ruff.v rumour.v rusk.v rut.v saber.v sabre.v salaam.v salify.v sallow.v salve.v sandarace.v sandarack.v sandarac.v sand-blast.v sanitise.v sanitize.v sate.v saucerize.v saute.v savor.v savvy.v scab.v scallop.v scamp.v scam.v scapegoate.v scar_cicatrise scar_cicatrize scarify.v sclerotise.v sclerotize.v scollop.v scourge.v scrabble.v scrag.v scribe.v scrimmage.v script.v scruple.v scrutinise.v SCUBA.v scud.v scupper.v scythe.v seam.v seclude.v section.v sector.v secularise.v sediment.v segment.v semaphore.v semisynthesise.v semisynthesize.v sensibilise.v sensibilize.v sensitise.v sequence.v sequestrate.v serialise.v serogroup.v serotype.v servo-control.v servocontrol.v sexualise.v sexualize.v sex.v shaft.v shallow.v shamble.v shanghai.v shanghi.v sheer.v sheet.v shellack.v shellac.v shim.v shin.v shipwreck.v shoe.v short-list.v shrine.v shrive.v shuttle.v sialadenectomize.v sialylate.v sickle.v sic.v side-track.v sightsee.v signalise.v signalize.v siliconise.v siliconize.v silt.v silver.v silylate.v singularise.v singularize.v sinter.v site.v situate.v skateboard.v skeine.v skein.v skeletonise.v slang.v slat.v sled.v sleigh.v slenderise.v sleuth.v sliver.v slop.v sludge.v sluice.v smirch.v smut.v snaffle.v snick.v snug.v soap.v socialise.v sod.v soft-soap.v soft-solder.v solace.v solate.v solemnise.v solemnize.v sole.v soliloquise.v solo.v solubilise.v solubilize.v solvate.v somatise.v somatotype.v sonicate.v soot.v sorb.v sorrow.v sovietize.v spangle.v spatchcock.v spate.v spatulate.v spindle.v spiralise.v spiritualise.v spiritualize.v spirt.v splenectomise.v splenectomize.v splint.v splotch.v spoof.v spook.v spool.v spoon.v sporulate.v spud.v squeegee.v squeege.v stable.v stag.v stanch.v standardise.v steam-heat.v steam-roller.v stencil.v sterilise.v steward.v stigmatise.v stock-pile.v stockpile.v stomp.v stopper.v strand.v strangulate.v striate.v stricture.v strop.v strychnize.v stultify.v stupefy.v stylise.v subcategorise.v subcategorize.v sub-classify.v subclassify.v subcompartmentalise.v subcompartmentalize.v subcultivate.v subculture.v subexcite.v subgroup.v subindex.v subjoin.v sublime.v sublocalise.v sublocalize.v subluxate.v suborn.v subsaturate.v subsidise.v subspecialise.v subtitle.v subtype.v suction.v sugar.v sulfate.v sulfonate.v sulfurate.v sulfurete.v sulfuret.v sulfurize.v sulphate.v sulphonate.v sulphurate.v sulphurete.v sulphuret.v sulphurise.v sulphurize.v summarise.v superactivate.v superannuate.v supercool.v superduct.v superfuse.v superhydrate.v superinduce.v superintend.v superpose.v superprecipitate.v supersaturate.v supershift.v suprarenalectomize.v surcharge.v surfeit.v suscitate.v suture.v swab.v swaddle.v swage.v swan.v swill.v swinge.v swob.v swop.v syllabicate.v syllabify.v syllabize.v symbolise.v sympathectomise.v sympathectomize.v sympathise.v synapse.v synchronise.v synergise.v synonymize.v synostose.v synthesise.v synthetise.v synthetize.v syringe.v systematise.v taboo.v tabu.v tap_dance tape-record.v tare.v tarmack.v tarmac.v tee.v telecommunicate.v telefax.v telepathize.v teletransmit.v temper.v temporise.v tenant.v tenon.v tenotomize.v tent.v tenure.v terrorise.v teslaize.v tetanise.v tetanize.v tetramerise.v thermalise.v thermocauterise.v thermocauterize.v thermocycle.v thermoregulate.v thermosensitise.v thermosensitize.v thoracotomise.v thoracotomize.v thwack.v thymectomise.v thymectomize.v thymolize.v thyroidectomise.v thyroidectomize.v thyroidize.v thyroparathyroidectomize.v timetable.v tincture.v tin.v tittivate.v toggle.v tolerise.v tolerize.v tonicize.v tonsillectomize.v tonsure.v tool.v top-dress.v torque.v torrefy.v tosylate.v trabeculate.v tracheostomize.v tracheotomize.v traduce.v traffick.v traffic.v trammel.v tranquillise.v transactivate.v transdifferentiate.v transduce.v transect.v transesterify.v transfect.v transfigure.v tranship.v transilluminate.v transit.v transliterate.v translocate.v transmogrify.v transphosphorylate.v transsect.v trapse.v traumatise.v traumatize.v travesty.v treadle.v tree.v trellise.v trench.v trend.v trepan.v trephine.v triangulate.v trichinize.v trill.v triplicate.v trisect.v tritiate.v triturate.v trivialise.v troll.v troop.v truck.v true.v truss.v trypsinise.v trypsinize.v tubularize.v turf.v turgidize.v twine.v twin.v twit.v tyrannise.v ubiquitinate.v ultrapurify.v ultrasonicate.v unbar.v unbind.v unbosom.v unbridle.v uncap.v unclamp.v unclip.v unclog.v uncuff.v undeceive.v undercall.v underdetect.v underdiagnose.v underemphasise.v underemphasize.v underexert.v under-feed.v undernourish.v underpredict.v undersedate.v understage.v understain.v undertreat.v underuse.v underutilise.v underutilize.v unfit.v unhorse.v universalize.v unman.v unroof.v unsay.v unseat.v unsex.v unstick.v upregulate.v uptake.v urbanise.v utilise.v vacuum.v vagotomize.v vail.v vandalise.v vandalize.v vaporise.v vapourise.v vapourize.v variegate.v variolate.v vascularise.v vascularize.v vasectomize.v vaunt.v vd..v vd.'.v Vd.v Vd'.v veneer.v ventralise.v ventralize.v ventriduct.v verbalise.v victimise.v victual.v video.v virilise.v virilize.v vision.v visualise.v vitalise.v vitalize.v vitrectomise.v vitrectomize.v vivify.v vocalise.v vogue.v volitilise.v vortex.v vulcanise.v vulcanize.v vulgarise.v vulnerate.v wager.v wallpaper.v wand.v warden.v war.v waterlog.v weary.v weasel.v weave.v weekend.v weir.v welch.v well.v wench.v westernise.v whisk.v whiz.v whizz.v whop.v winch.v winkle.v winter.v wise.v womanise.v wow.v wrack.v wreath.v wrought.v xanthate.v xenograft.v xerox.v Xerox.v x-ray.v xray.v X-ray.v yarn.v yellow.v yoke.v zenkerize.v zipper.v link-grammar/data/en/words/words-medical.v.4.20000644000000000000000000011030112536650432016223 0ustar abashes.v abjures.v ablates.v abnegates.v abominates.v abscesses.v abscises.v absents.v acccouters.v accessions.v acclimatises.v accouples.v accoutres.v aces.v acetifies.v acetonates.v acetonizes.v acetylates.v acetylises.v acetylizes.v achromatises.v achromatizes.v acidulates.v actualises.v actualizes.v actuates.v acylates.v adducts.v adenosine_diphosphate-ribosylates adjures.v administrates.v admixes.v ADP-ribosylates.v adrenalectomizes.v adsorbs.v adulates.v advantages.v afforests.v affronts.v afterloads.v agglomerates.v aggrieves.v agonises.v airbrushes.v alcoholises.v alcoholizes.v aliases.v alines.v aliquots.v alites.v alkalinises.v alkalinizes.v alkalises.v alkalizes.v alkylates.v allelotypes.v allergizes.v allografts.v alloimmunises.v alloimmunizes.v allotransplants.v alloys.v allures.v alphabetises.v alphabetizes.v aluminates.v Americanises.v amidates.v aminates.v aminoacylates.v ammoniates.v amortises.v anaesthetises.v anatomizes.v anergises.v anesthetises.v anglicises.v animadverts.v annualises.v annualizes.v annunciates.v anodises.v anodizes.v anonymises.v anonymizes.v anoxiates.v antagonises.v anteriorises.v anteriorizes.v antes.v antiaggregates.v anticoagulates.v antigenises.v antigenizes.v antirepresses.v antisepticises.v antisepticizes.v apeases.v apodizes.v apologises.v apostatises.v appalls.v apparells.v apparels.v apports.v apposes.v apprizes.v arborises.v archives.v arcks.v arcs.v aromatises.v aromatizes.v arsonates.v arterializes.v articles.v asexualizes.v asperges.v asperses.v asseverates.v asterisks.v atomises.v attitudinises.v audiotapes.v auscultates.v authors.v autocatalyses.v autoclaves.v autogenerates.v autoimmunises.v autoimmunizes.v autoinduces.v autoinducts.v autoinjects.v autolises.v automatises.v autoperfuses.v autopsies.v autoradiographs.v autoregulates.v autosensitises.v autotransplants.v auxotypes.v avalanches.v avalanchs.v avianises.v avianizes.v avows.v avulses.v awakes.v axotomises.v axotomizes.v azotizes.v babies.v baby-sits.v babys.v backcrosses.v backdrops.v backlabells.v backlabels.v backscatters.v ballasts.v ballots.v balls.v bamms.v baptises.v barbers.v bariumizes.v barracks.v barrages.v bastardizes.v bas.v bayonets.v beaches.v beads.v beavers.v bedaubs.v bedecks.v behooves.v behoves.v beleaguers.v bells.v benefices.v benzoylates.v bereves.v besets.v besmears.v betroths.v betters.v biasses.v bibs.v bicompartmentalises.v binges.v bings.v bioactivates.v bioassays.v bioconverts.v bioengineers.v biomagnifies.v bio-monitors.v biomonitors.v biopsies.v bioreduces.v bioremediates.v biosynthesises.v biosynthesizes.v biotinylates.v biotransforms.v biotypes.v bisintercalates.v bivouacks.v blacks.v blancos.v blanks.v blobs.v bloodies.v bloods.v blues.v blusters.v boats.v bobsleds.v boobs.v boomerangs.v boosters.v bootstraps.v bottlenecks.v brains.v brain-washes.v brazes.v breakfasts.v breast-feeds.v breasts.v brevets.v broadsides.v brods.v bromates.v brominates.v bromizes.v bruits.v brutalises.v bruxes.v buckets.v buffers.v bulbectomizes.v bulks.v bulls.v bunkers.v burkes.v burks.v burrs.v busses.v caches.v caks.v calenders.v calipers.v calks.v callipers.v calumniates.v canalizes.v cancerises.v cankers.v cannulates.v cannulizes.v canopies.v canopys.v cantilevers.v cants.v capacitates.v capillarises.v capitalises.v capitates.v caponises.v caponizes.v captains.v carbamoylates.v carbamylates.v carbolates.v carbolises.v carbolizes.v carbonates.v carbonises.v carboxylates.v cardiectomizes.v careers.v cartoons.v cashiers.v catabolises.v catalises.v catalizes.v catalogs.v catalyses.v catalyzes.v categorises.v catheterises.v catheterizes.v caulks.v causticizes.v cauterises.v cauterizes.v cavitates.v C-bands.v cementifies.v centrifugalises.v centrifugalizes.v centrifugates.v centrifuges.v ceres.v certificates.v chaffs.v chamfers.v champs.v chances.v chaperones.v chaps.v characterises.v charbroils.v checkers.v cheeks.v chemoattracts.v chemo-prevents.v chemoprevents.v chemo-sensitises.v chemo-sensitizes.v chemosensitizes.v chequers.v chickens.v chines.v chinks.v chins.v chlores.v chloroformises.v chloroformizes.v chloroforms.v chlors.v chocks.v cholecystectomises.v cholecystectomizes.v choruses.v chorusses.v chromates.v chromatizes.v chromatographs.v chromicizes.v chunks.v chutes.v cicatrises.v cicatrizes.v ciphers.v circularises.v circumducts.v civilises.v clamors.v classes.v clear-cuts.v clearcuts.v clews.v clocks.v clouts.v clues.v clysterizes.v coactivates.v coadministers.v co-agglutinates.v co-applies.v coapplies.v coapts.v coarticulates.v co-assembles.v coassembles.v cocainises.v cocainizes.v co-calibrates.v cocalibrates.v co-chromatographs.v cochromatographs.v co-circulates.v co-clusters.v coclusters.v co-colonizes.v cocolonizes.v cocoons.v co-crystallizes.v cocrystallizes.v co-cultivates.v cocultivates.v cocultures.v co-develops.v co-electroporates.v coelectroporates.v coelutes.v co-encapsidates.v coencapsidates.v coencapsulates.v co-enriches.v coenriches.v co-exists.v co-exposes.v coexposes.v coexpresses.v co-extracts.v cografts.v cogwheels.v co-hybridises.v cohybridises.v co-hybridizes.v cohybridizes.v coimmobilises.v coimmobilizes.v coinfects.v coinfuses.v co-ingests.v coingests.v co-inherits.v coinherits.v co-inoculates.v coinoculates.v cokes.v collateralises.v collectivises.v colliquates.v colonises.v colonoscopes.v colorises.v colorizes.v colourizes.v co-manages.v comanages.v comedicates.v cometabolises.v commercialises.v compartmentalises.v compartments.v compasses.v compeers.v complexes.v comports.v computerises.v concatenates.v conceptualises.v concords.v concretes.v concusses.v condoles.v conds.v conduces.v conglomerates.v conglutinates.v consternates.v constitutionalizes.v contradistinguishes.v contraindicates.v controverts.v contunds.v contuses.v convolutes.v co-ordinates.v coossifies.v co-oxidises.v cooxidises.v co-oxidizes.v cooxidizes.v co-partitions.v co-perfuses.v coperfuses.v copolymerises.v copolymerizes.v coppers.v coproduces.v co-promotes.v copromotes.v corbells.v corbels.v co-rears.v corears.v co-registers.v co-regulates.v coregulates.v co-releases.v coreleases.v corkscrews.v cornifies.v corns.v co-secretes.v cosecretes.v cosegregates.v cosensitises.v cosensitizes.v coshes.v cosolubilises.v cosolubilizes.v co-sponsors.v cosponsors.v cossets.v costarrs.v co-stimulates.v costimulates.v co-stores.v costores.v co-synthesises.v cosynthesises.v co-synthesizes.v cosynthesizes.v cotranscribes.v cotransfects.v co-transfers.v cotransfers.v cotransforms.v cotransmits.v co-transports.v cotransports.v co-treats.v cotreats.v coulorises.v counsells.v counterpoises.v counterregulates.v countersinks.v counterstains.v counter-transports.v countertransports.v countervails.v courses.v covenants.v cows.v cozens.v crabbes.v crabbs.v crabs.v crafts.v crapes.v craters.v crates.v crepes.v creps.v crews.v cricks.v criminalises.v criminalizes.v crimsons.v crisps.v criss-crosses.v cristallises.v cristallizes.v criticises.v critiques.v crocks.v cross-clamps.v crossclamps.v cross_fertilizes cross-links.v cross_matches cross-matches.v crossmatches.v cross-protects.v crossprotects.v cross-reacts.v crossreacts.v cross-references.v crossreferences.v crusts.v cryo-fixes.v cryofixes.v cryo-preserves.v cryopreserves.v cryoprotects.v cryo-sections.v cryotreates.v cryotreats.v crystallises.v cuckoos.v cudgells.v cumbers.v cunds.v curarises.v curarizes.v curates.v curets.v curettes.v curtains.v cusses.v customises.v customizes.v cyanylates.v cyclises.v cyphers.v cyto-adheres.v cytoreduces.v cytostains.v dansylates.v dapples.v deacetylates.v deactivates.v deacylates.v de-adenylates.v deadenylates.v deafferentates.v deafferents.v deallergises.v deamidates.v deamidizes.v deaminates.v debouches.v debranches.v debrides.v debulks.v debutes.v decalcifies.v decannulates.v decapsulates.v decarboxylates.v decatenates.v decentralises.v decerebrates.v decerebrizes.v dechlorinates.v decidualises.v declutches.v decocts.v decolonises.v decolorises.v decolorizes.v decolourises.v decolourizes.v decomplementizes.v decontrols.v deconvolutes.v decoronates.v decorticates.v decouples.v decoupls.v decoys.v decrees.v deemanates.v de-energises.v deenergises.v de-energizes.v deenergizes.v de-epicardializes.v deepithelialises.v deethylates.v defaecates.v defaunates.v defeminises.v defeminizes.v defenestrates.v defibrillates.v defibrinates.v deflorates.v defocuses.v deformylates.v defunctionalises.v defunctionalizes.v degalactosylates.v degases.v degausses.v degenitalizes.v deglycerates.v degreases.v dehaematises.v dehalogenates.v dehematizes.v dehemoglobinizes.v dehiscs.v dehorns.v dehulls.v dehumanises.v dehydrochlorinates.v dehydrogenates.v dehydrogenises.v dehydrogenizes.v dehydroxylates.v dehypnotises.v dehypnotizes.v deinduces.v deinstitutionalizes.v deionises.v deionizes.v dejects.v de-leads.v deleads.v delimitates.v delipidates.v delocalises.v delocalizes.v delouses.v demagnetises.v demarks.v demasculinises.v demedullates.v demembranates.v demetalises.v demetalizes.v demethylates.v demilitarises.v demineralises.v demineralizes.v demobilises.v democratises.v demodulates.v demonetises.v demonetizes.v demoralises.v demustardizes.v demyelinates.v demystifies.v denationalises.v denatures.v denervates.v denitrates.v denitrifies.v deodorises.v deoxidises.v deoxidizes.v deoxygenates.v depancreatizes.v deparaffinises.v deparaffinizes.v departmentalises.v depersonalizes.v dephosphorylates.v depigments.v depilates.v depolarises.v depoliticises.v depoliticizes.v depolymerises.v depotentiates.v depraves.v depressurises.v depressurizes.v deprojects.v deprotects.v deproteinates.v deprotonates.v depurates.v deputes.v deputises.v dequenches.v deregulates.v derepresses.v deresinates.v derivatises.v derivatizes.v derivitises.v derivitizes.v deroofs.v derotates.v derricks.v desalinises.v desalts.v desamidates.v desamidizes.v descales.v desensitises.v desexualises.v desexualizes.v desheathes.v desheaths.v desialylates.v desolates.v desolvates.v desorbs.v despeciates.v destabilises.v destablises.v destablizes.v destains.v desulfates.v desulfurates.v desulphates.v desulphurates.v desynchronises.v dethyroidizes.v detours.v detoxicates.v deuterates.v deuteriates.v devascularizes.v devils.v devitalises.v devitalizes.v deworms.v dextrinates.v dextrinizes.v diacetylates.v diacylates.v diagrams.v dialkylates.v dialogs.v dialogues.v dialyses.v diapauses.v diapers.v diazotizes.v dibbles.v dickers.v dideuterates.v diesterifies.v difluorinates.v digitalises.v digitilises.v digitises.v digitizes.v dihalogenates.v dihydrogenates.v dihydroxylates.v diiodinates.v dikes.v dilatates.v dimerises.v dimethylates.v dimites.v dimits.v dimples.v diphosphorylates.v dirties.v disacidifies.v disadvantages.v disaggregates.v disambiguates.v disarrays.v disbelieves.v disbuds.v disburdens.v discolours.v discommodes.v discommods.v discomposes.v disconfirms.v discos.v discountenances.v discretises.v discretizes.v disembodies.v disencumbers.v disfavors.v dishabituates.v dishevels.v dishonors.v disimmunizes.v disinhibits.v disinserts.v disjoints.v dismutates.v disoccludes.v disorders.v disorganises.v disorganizes.v dispensarises.v dispensarizes.v dispirits.v disproportionates.v disquiets.v disregulates.v dissatisfies.v dissimilates.v distempers.v distrains.v divulses.v dockets.v dollies.v dolls.v dollys.v domiciles.v dorsalises.v dorsiducts.v dorsiflexes.v doses.v dosses.v douches.v dowels.v downmodulates.v downregulates.v downstages.v dowses.v dramatises.v drats.v drivels.v drudges.v dumfounds.v duns.v duplexes.v dykes.v dysregulates.v ears.v earths.v echolocates.v economises.v ecphorises.v ecphorizes.v ectropionises.v ectropionizes.v editorialises.v educes.v edulcorates.v effectuates.v effluxes.v effs.v egests.v ekphorizes.v elates.v electro-cauterises.v electrocauterises.v electro-cauterizes.v electrocauterizes.v electrodialyses.v electroelutes.v electro-injects.v electroinjects.v electroinserts.v electrophoreses.v electrophores.v electroplates.v electroporates.v electrotransfers.v electroverts.v elutes.v elutriates.v emaciates.v embolises.v embrocates.v emedullates.v empathises.v emphasises.v emplaces.v emulsions.v enamors.v enamours.v encapsulates.v enchains.v encores.v encrusts.v endarterectomises.v endarterectomizes.v endoscopes.v endothelialises.v endues.v energises.v energizes.v enfeebles.v engrafts.v engrails.v enkindles.v enlaces.v enlacs.v enplanes.v enraptures.v ensheathes.v ensheaths.v ensilages.v ensiles.v enterectomises.v enterectomizes.v entrenches.v entropionizes.v envenoms.v environs.v enwraps.v epilates.v epimerises.v epithelialises.v epithelializes.v epithelises.v epithelizes.v epitomises.v epoxidises.v epoxidizes.v equalises.v equilibrates.v eroticises.v eroticizes.v erotises.v erotizes.v essays.v esterifies.v estranges.v estrogenises.v estrogenizes.v etherises.v etherizes.v ethylates.v euthanatises.v euthanatizes.v euthanises.v euthanizes.v evaginates.v everts.v evidences.v exacts.v exanimates.v excerpts.v exchange-transfuses.v excogitates.v execrates.v exenterates.v exorcises.v expatriates.v exsanguinates.v exsects.v exsomatizes.v exteriorises.v exteriorizes.v externalises.v extrudes.v extubates.v factorises.v factorizes.v faggots.v fagots.v familiarises.v fantasises.v faradises.v faradizes.v farnesylates.v fathers.v feather-beds.v fecundates.v federalises.v federalizes.v felicitates.v feminises.v feminizes.v fenestrates.v fertilises.v feus.v fictionalises.v fictionalizes.v field-tests.v filches.v filtrates.v finalises.v fingerprints.v fire-proofs.v fireproofs.v fissures.v fistulises.v flabbergasts.v flanges.v flecks.v fleshes.v flexibilises.v flexibilizes.v flounces.v floures.v flours.v fluidizes.v fluoresceinates.v fluoridises.v fluoridizes.v fluoroscopes.v flutes.v foals.v focalises.v fogs.v footles.v footnotes.v footprints.v footslogs.v forays.v forbodes.v forebids.v forebodes.v foredooms.v foregrounds.v foreknows.v forests.v foretastes.v formalinises.v formalinizes.v formalises.v formats.v formylates.v fossilises.v fowls.v foxs.v fractionates.v franchises.v fraternises.v freckles.v free-grafts.v freeze_dries freeze-dries.v freeze-fractures.v freights.v fringes.v frolicks.v fruits.v fuddles.v functionalises.v functionalizes.v funks.v furcates.v furs.v gabbles.v gabs.v gads.v galactosylates.v galavants.v galivants.v galvanises.v gamms.v ganglionectomises.v ganglionectomizes.v gangrenes.v gaps.v garages.v garlands.v garotes.v garots.v garrotes.v garrots.v gases.v gasses.v gastrectomises.v gastrectomizes.v gates.v gavages.v gazetes.v gazets.v gelatinises.v gelds.v generalises.v genotypes.v gens.v gentles.v geocodes.v geranylgeranylates.v ghosts.v gingers.v girdles.v girts.v glaces.v glamorises.v glissades.v globalises.v glomectomises.v glomectomizes.v gloms.v gloves.v glucoronises.v glucuronidates.v glues.v glycates.v glycerolates.v glycerolizes.v glycosylates.v gonadectomizes.v gooses.v gormandises.v gowns.v grains.v grandfathers.v grandparents.v graphs.v grasses.v greens.v grimes.v grizzles.v grommets.v grubs.v guests.v gulls.v gussets.v guys.v habilitates.v habituates.v haemagglutinates.v haemoagglutinates.v haemocoagulates.v haemodialyses.v haemodialyzes.v haemodilutes.v haemolyses.v haemolyzes.v haemoperfuses.v haemorrhages.v hallmarks.v halogenates.v handpicks.v haploidises.v haps.v haptenates.v harmonises.v hasps.v headlines.v hemicastrates.v hemi-deletes.v hemisects.v hemispherectomises.v hemispherectomizes.v hemodialyses.v hemodialyzes.v hemodilutes.v hemolyses.v hemoperfuses.v hemorrhages.v heparinises.v heparinizes.v hepatectomises.v hepatectomizes.v heterodimerises.v hexes.v hies.v high-jacks.v hirudinizes.v histocultures.v hobos.v holes.v holidays.v homes.v homodimerises.v homodimerizes.v homogenises.v homografts.v honeycombs.v hoops.v horses.v hospitalises.v hots.v hoves.v hoxes.v humanises.v humanizes.v humors.v hurdles.v husbands.v hyalinises.v hyalinizes.v hybridises.v hydrogenates.v hydrogenizes.v hydrolises.v hydrolizes.v hydrolyses.v hydroxylates.v hyes.v hymns.v hyperacetylates.v hyperactivates.v hypercontracts.v hyperdefaecates.v hyperexpresses.v hyperextends.v hyperfiltrates.v hyperfractionates.v hyperimmunises.v hyperimmunizes.v hyper-induces.v hyperinduces.v hyperinnervates.v hyperluteinises.v hyper-methylates.v hypermethylates.v hypernucleates.v hyperpolarises.v hyperproduces.v hypersensitises.v hyperstimulates.v hypertransfuses.v hypertrophies.v hypnoidizes.v hypnotises.v hypomineralises.v hypomineralizes.v hypo-phosphorylates.v hypophosphorylates.v hypophysectomises.v hypophysectomizes.v hyposensitizes.v hypothecates.v hysterectomises.v hysterectomizes.v idealises.v idolises.v imbeds.v immobilises.v immortalises.v immunises.v immunoabsorbs.v immunoadsorbs.v immuno-assays.v immunoassays.v immunoblots.v immunocompromises.v immunodepletes.v immunodepresses.v immunoenhances.v immunoexpresses.v immunoinhibits.v immunoisolates.v immunolabels.v immunolocalises.v immunolocalizes.v immunoneutralises.v immunoneutralizes.v immunophenotypes.v immunopurifies.v immunoradioassays.v immunoregulates.v immunoscreens.v immunoselects.v immunostains.v immunostimulates.v immunosuppresses.v immuno-targets.v immunotargets.v immunotitrates.v immunotypes.v immures.v impersonalises.v impersonalizes.v importunes.v incises.v incloses.v incommodes.v increments.v inculpates.v individualises.v individualizes.v indorses.v indues.v industrialises.v inebriates.v influxs.v ingles.v ingrafts.v ingrains.v inhumes.v inhums.v initialises.v initializes.v inlays.v innervates.v inputs.v insets.v insolubilises.v insolubilizes.v insonifies.v instances.v institutionalises.v instruments.v insufflates.v intellectualises.v intellectualizes.v intercalates.v interconverts.v interfaces.v interiorises.v interiorizes.v interlaces.v interlards.v interleafs.v interlinks.v internalises.v internationalises.v interpellates.v interposes.v interspaces.v intrenches.v introjects.v introverts.v intrusts.v intubates.v inures.v inventorys.v invoices.v iodinates.v iodises.v ionises.v iontophoreses.v iridectomizes.v isoimmunises.v isoimmunizes.v isomerises.v italicises.v itemises.v jackets.v jack_knifes jackknifes.v jecorizes.v jejunectomises.v jejunectomizes.v jeopardises.v joints.v juices.v junks.v karyotypes.v keens.v kennels.v kents.v keratinises.v keys.v kinks.v knees.v KO's.v labilises.v labyrinthectomises.v labyrinthectomizes.v lacrymates.v lactonises.v ladders.v lambasts.v lambs.v lames.v laminectomises.v laminectomizes.v lams.v laparotomises.v laparotomizes.v lapinises.v lapinizes.v lards.v lariates.v lariats.v larks.v laryngectomises.v laryngectomizes.v lasers.v lassoes.v lassooes.v lateralises.v lathers.v lathes.v lavages.v layers.v leaflets.v leagues.v leap-frogs.v leashs.v leechs.v leeps.v legalises.v legitimates.v legitimatises.v legitimises.v legitimizes.v lentectomizes.v lesions.v letters.v liberalises.v ligates.v lilts.v limes.v limns.v linearizes.v linges.v lings.v lins.v lipectomises.v lipectomizes.v lipidates.v liposuctions.v lipoxygenates.v lips.v liquifies.v lithographs.v lithotomizes.v lobectomises.v lobectomizes.v lobotomises.v lobotomizes.v looses.v lords.v Lords.v loupes.v loups.v loures.v lours.v lows.v lubrifies.v lucks.v luteinises.v luxates.v lymphadenectomises.v lymphadenectomizes.v lyophilises.v lyophilizes.v lypophilises.v lypophilizes.v lysogenises.v lysogenizes.v macadamises.v macadamizes.v machines.v macroencapsulates.v magnetises.v mainstreams.v malaxates.v malignises.v malpositions.v malts.v mantles.v manumits.v manures.v marathons.v Marathons.v marginates.v marinades.v marsupializes.v masculinises.v masculinizes.v massacres.v mastectomises.v mastectomizes.v master-minds.v materialises.v mats.v maximises.v mazes.v mechanises.v medialises.v medicalises.v medicalizes.v medisects.v medullectomises.v medullectomizes.v melanises.v melanizes.v mentors.v mercerises.v mercerizes.v merchandises.v mercurates.v mercurializes.v mercuriates.v mesmerises.v metabolises.v metabolizes.v metals.v metastasises.v meters.v methylates.v metres.v metricises.v micellises.v microagglutinates.v microaggregates.v microbiopsies.v microcannulates.v microcatheterises.v microcatheterizes.v microcomputerises.v microcomputerizes.v microdetermines.v microdilutes.v microdissects.v microembolises.v microfills.v microfilters.v microinjects.v micromanipulates.v micromills.v micromodifies.v micronises.v micronizes.v microperfuses.v microprocesses.v microsequences.v microtitrates.v microtomes.v microwaves.v middles.v mildews.v militarises.v militarizes.v mimetises.v mimetizes.v mineralises.v mineralizes.v miniaturises.v minifies.v minimises.v minutes.v misadvises.v misattributes.v miscalls.v misclassifies.v miscodes.v misconducts.v misdiagnoses.v mis-folds.v misidentifies.v misincorporates.v mislabels.v mislocalises.v mislocalizes.v mismatches.v mispairs.v misperceives.v misprints.v misrecognises.v misrecognizes.v misregulates.v misrepairs.v misroutes.v misrules.v misspecifies.v mis-tunes.v mistunes.v miters.v mitres.v mobilises.v modernises.v moires.v moisturises.v moisturizes.v molders.v monophosphorylates.v monopolises.v moonlights.v moralises.v morcellates.v morphinizes.v morses.v Morses.v mortices.v mortises.v mothers.v moth-proofs.v motorcycles.v motorises.v muckrakes.v mulcts.v multimerises.v mummifies.v mummys.v mumps.v muscles.v muscularises.v mutagenizes.v myectomizes.v myristoylates.v narcotizes.v narks.v nasalises.v nasalizes.v nationalises.v naturalises.v nauseates.v nebulises.v nebulizes.v necropsies.v necrotises.v negatives.v neighbors.v neighbours.v nephrectomises.v neps.v nerves.v nesslerises.v nesslerizes.v neuromodulates.v neurostimulates.v neutralises.v niches.v nickels.v nims.v Nissl-stains.v nitrates.v nitrosates.v nitrosylates.v nobbles.v nonpluses.v nooses.v normalises.v noses.v notchs.v objectifies.v objurgates.v oblates.v obtrudes.v obtunds.v obturates.v oestrogenises.v oestrogenizes.v oints.v O.K.s.v OKs.v oligomerises.v oligomerizes.v oophorectomises.v oophorectomizes.v operationalises.v operationalizes.v oppugns.v opsonifies.v opsonises.v optimises.v optimizes.v orchidectomises.v orchidectomizes.v ordinates.v organises.v orphans.v osmicates.v osteotomises.v osteotomizes.v ostracises.v outbides.v outbraves.v out-competes.v outcompetes.v outdates.v outfaces.v out-Herods.v outmaneuvers.v outmarches.v outmatches.v out-paces.v outpaces.v outperforms.v outpoints.v outputs.v outranges.v outrangs.v outrivals.v outsails.v outspreads.v outstrips.v outvies.v outwears.v ovariectomises.v ovariectomizes.v overarches.v over-associates.v overassociates.v over-burdens.v over-capitalises.v overcapitalises.v over-capitalizes.v overcapitalizes.v over-charges.v over-consumes.v overconsumes.v over-cooks.v overcorrects.v overcrops.v over-crowds.v over-detects.v overdetects.v overdiagnoses.v overdoses.v over-eats.v over-elongates.v overelongates.v overemphasises.v over-emphasizes.v over-estimates.v over-exerts.v over-exposes.v overexpresses.v over-feeds.v over-hangs.v overhangs.v over-heats.v over-inserts.v overinserts.v overlays.v over-learns.v overlearns.v overleeps.v overmasters.v over-praises.v over-predicts.v overpredicts.v over-produces.v over-proliferates.v over-refers.v overrefers.v over-reports.v overreports.v over-represents.v overrepresents.v oversaturates.v over-secretes.v oversews.v over-simplifies.v over-stages.v overstages.v overstains.v overstimulates.v over-strains.v over-stretches.v overstretches.v over-synthesises.v oversynthesises.v over-synthesizes.v oversynthesizes.v over-transcribes.v overtreats.v overuses.v over-values.v overventilates.v overviews.v over_weights overweights.v over-wraps.v overwraps.v oxidises.v oxygenises.v oxygenizes.v ozonises.v ozonizes.v palisades.v palliates.v palpates.v palps.v pancreatectomizes.v panels.v paragraphs.v parameterises.v parameterizes.v parasitises.v parasitizes.v parasols.v parathyroidectomizes.v parboils.v parcels.v parrots.v particularises.v pasteurises.v pastures.v patronises.v peans.v peens.v pelletises.v pelletizes.v pellets.v penalises.v pensions.v peoples.v pepsinates.v pepsinises.v pepsinizes.v peptonises.v percusses.v perifuses.v peritomizes.v peritonealizes.v peritonizes.v permeabilizes.v permeablises.v peroxidises.v personalises.v pestles.v phagocytises.v phagocytizes.v phagocytoses.v phalangizes.v phenocopies.v phenolates.v phenotypes.v philosophises.v phlebotomises.v phlorhizinises.v phlorhizinizes.v phloridzinises.v phloridzinizes.v phosphonylates.v phosphorylates.v photoactivates.v photobleaches.v photodamages.v photodecomposes.v photoinactivates.v photoinduces.v photoisomerises.v photolabels.v photolyses.v photo-oxidises.v photooxidises.v photo-oxidizes.v photopolymerises.v photopolymerizes.v photoprotects.v photoreduces.v photoregulates.v photoreverses.v photosensitises.v photostates.v photostimulates.v physicks.v piggybacks.v pillows.v pills.v pinds.v pinealectomises.v pinealectomizes.v pinions.v pinks.v pin-points.v pipettes.v piths.v plagiarises.v plaits.v planimeters.v planks.v plasmolyses.v plasmolyzes.v plateaus.v plates.v platinates.v pleas.v pleats.v plicates.v plumps.v plums.v plunks.v pneumonectomises.v pneumonectomizes.v pods.v polarises.v pole-axes.v poleaxes.v poleaxs.v politicises.v politzerizes.v pollacks.v pollards.v polyadenalates.v polyadenylates.v polyglutamylates.v polymerises.v polymerizes.v pomades.v pommels.v poniards.v popularises.v portacaval_shunts portions.v postfixes.v potentiates.v poultices.v powers.v prawns.v preabsorbs.v preachifies.v preadmits.v precepts.v precises.v precoats.v precooks.v precools.v precultures.v predates.v predeceases.v predefines.v predestinates.v pre-digests.v predigests.v pre-embeds.v preembeds.v pre-establishes.v preestablishes.v preexists.v pre-exposes.v preexposes.v prefeeds.v prefixs.v preimmunizes.v preinduces.v preinfects.v pre-irradiates.v preirradiates.v prelabels.v preloads.v preludes.v premedicates.v premiers.v premixes.v prepossesses.v preprints.v preprocesses.v preprograms.v preprotects.v preps.v prereduces.v prescreens.v preselects.v presensitizes.v pre-sets.v presets.v presoaks.v prespawns.v prespecifies.v pressurises.v prestimulates.v pre-surfaces.v pretrains.v pretreats.v previews.v prewarms.v prewashes.v prickles.v prioritises.v prioritizes.v prises.v privatises.v probates.v profanes.v professionalizes.v prolates.v prongs.v propagandises.v prophesies.v propitiates.v prorates.v prorogues.v proselytises.v prospects.v prostatectomises.v prostatectomizes.v proteolyses.v proteolyzes.v protracts.v provisions.v pseudonormalises.v psycho-analyses.v psycho-analyzes.v psychs.v ptyalizes.v publicises.v puddles.v pulps.v pulverises.v pups.v purposes.v purpurates.v putties.v pyridoxylates.v quadrisects.v quadruplicates.v quads.v quails.v quantises.v quantitates.v quantizes.v quarks.v quarrells.v quartisects.v quaternizes.v queens.v Queens.v quizzes.v rabbits.v radiographs.v radioimmunoassays.v radiolabells.v radiolabels.v radiolocalises.v radiolocalizes.v radiosensitises.v radiosensitizes.v ranches.v ranchs.v randomises.v randomizes.v rappels.v rarefies.v rases.v rationalises.v rays.v razors.v reabsorbs.v reaccumulates.v reacquires.v re-adapts.v readdresses.v readds.v readies.v readministers.v re-afforests.v reafforests.v reaggregates.v realigns.v realises.v reallocates.v re-amplifies.v reamplifies.v reamputates.v reams.v reanalyses.v reanalyzes.v re-animates.v reanimates.v reappraises.v re-approximates.v reapproximates.v re-arterialises.v rearterialises.v re-arterializes.v rearterializes.v reasserts.v reassigns.v reassociates.v reassorts.v reattaches.v rebases.v rebinds.v rebles.v recalcifies.v recalibrates.v recanalizes.v recategorises.v recategorizes.v recatheterises.v recatheterizes.v receipts.v recemises.v recertifies.v rechallenges.v rechromatographs.v recirculates.v reclassifies.v reclones.v recodes.v recognises.v recolonises.v recombines.v recompresses.v reconceptualizes.v reconfigures.v reconnoiters.v reconstitutes.v recontaminates.v recontoures.v recontours.v re-converts.v re-counts.v re-covers.v recultivates.v recultures.v redacts.v rededicates.v redescribes.v redes.v redetects.v redetermines.v redirects.v redissects.v reds.v reeducates.v re-elevates.v reemphasizes.v re-endothelialises.v reendothelialises.v re-endothelializes.v re-engineers.v reengineers.v re-enters.v re-epithelialises.v reepithelialises.v re-epithelializes.v re-equilibrates.v re-esterifies.v reesterifies.v reevaluates.v re-examines.v reexamines.v re-excises.v reexcises.v re-explores.v reexplores.v reexposes.v reexpresses.v re-extracts.v reextracts.v refaces.v refeeds.v referees.v references.v referes.v refinishes.v refluxes.v refolds.v reforests.v reformats.v reframes.v regionalises.v regionalizes.v regrafts.v regularises.v rehears.v reheats.v rehospitalises.v rehospitalizes.v reimmunizes.v re-implants.v reimplants.v reincarcerates.v reincarnates.v re-inflates.v reinitiates.v reinjects.v reinjures.v reinnervates.v reinoculates.v reinserts.v reinstitutes.v re-internalises.v reinternalises.v re-internalizes.v reinternalizes.v re-interviews.v reinterviews.v reintroduces.v reintubates.v re-invents.v re-irradiates.v reisolates.v rejigs.v re-joins.v relabels.v relaparoscopies.v relearns.v relines.v relipidates.v relocalises.v relocalizes.v remainders.v remakes.v remaps.v remediates.v remilitarises.v remobilises.v remyelinates.v renatures.v renegues.v re-obliterates.v reobliterates.v re-occludes.v re-occurrs.v reoccurrs.v reorganises.v reoxidises.v reoxygenates.v repartitions.v repatterns.v reperforates.v reperfuses.v reperitonealises.v reperitonealizes.v replates.v repoints.v repolarises.v repopulates.v reposes.v repositions.v reposits.v repots.v reprimes.v reprobates.v reprocesses.v reprograms.v republishes.v repurifies.v requites.v requits.v resamples.v rescans.v re-scoers.v rescoers.v re-scores.v rescores.v rescreens.v reseals.v resects.v resensitises.v resequences.v residualises.v residualizes.v re-slices.v reslices.v resocialises.v resocializes.v resolubilizes.v resorbs.v respells.v restages.v restains.v re-stenoses.v restimulates.v restretches.v restudies.v resulfates.v resulphates.v resurveys.v resuspends.v resutures.v resynthesises.v resynthesizes.v retrains.v retransforms.v retransfuses.v retransplants.v retraumatizes.v retreads.v re-treats.v retrocedes.v retrofits.v retrotranscribes.v retypes.v reuses.v reutilises.v reutilizes.v revaccinates.v revalidates.v revascularises.v revascularizes.v reveils.v revendicates.v revenges.v revitalises.v revivifies.v revolutionalises.v revolutionalizes.v revolutionises.v rewarms.v reworks.v rexes.v rhapsodises.v ribosylates.v ricks.v ridges.v rimes.v rits.v ritualises.v ritualizes.v rives.v robes.v romanticises.v roneos.v rongeures.v rongeurs.v roofs.v rooks.v rosets.v rosettes.v rosines.v rosins.v rouges.v rough-casts.v roughcasts.v rough-dries.v roughhouses.v rowels.v rubberises.v ruddles.v ruffs.v rumours.v rusks.v ruts.v sabers.v sabres.v salaams.v salifies.v sallows.v salves.v sandaracks.v sandaracs.v sand-blasts.v sanitises.v sanitizes.v sates.v saucerizes.v savors.v savvies.v scabs.v scallops.v scamps.v scams.v scapegoates.v scar_cicatrises scarifies.v sclerotises.v sclerotizes.v scollops.v scourges.v scrabbles.v scrags.v scribes.v scrimmages.v scripts.v scruples.v scrutinises.v SCUBAs.v scuds.v scuppers.v scythes.v seams.v secludes.v sections.v sectors.v secularises.v sediments.v segments.v semaphores.v semisynthesises.v semisynthesizes.v sensibilises.v sensibilizes.v sensitises.v sequences.v sequestrates.v serialises.v serogroups.v serotypes.v servo-controls.v servocontrols.v sexes.v sexs.v sexualises.v sexualizes.v shafts.v shallows.v shanghais.v shanghis.v sheers.v sheets.v shellacks.v shellacs.v shims.v shins.v shipwrecks.v shods.v shoes.v short-lists.v shrines.v shrives.v shuttles.v sialadenectomizes.v sialylates.v sickles.v sics.v side-tracks.v signalises.v signalizes.v siliconises.v siliconizes.v silts.v silvers.v silylates.v singularises.v singularizes.v sinters.v sites.v situates.v skateboards.v skeines.v skeins.v skeletonises.v slangs.v slats.v sleds.v sleighs.v slenderises.v sleuths.v slivers.v slops.v sludges.v sluices.v smirches.v smuts.v snaffles.v snicks.v snugs.v soaps.v socialises.v sods.v soft-soaps.v soft-solders.v solaces.v solates.v solemnises.v solemnizes.v soles.v soliloquises.v solos.v solubilises.v solubilizes.v solvates.v somatises.v somatotypes.v sonicates.v soots.v sorbs.v sorrows.v sovietizes.v spangles.v spatchcocks.v spates.v spatulates.v spilts.v spindles.v spiralises.v spiritualises.v spiritualizes.v spirts.v splenectomises.v splenectomizes.v splints.v splotchs.v spoofs.v spooks.v spools.v spoons.v sporulates.v spuds.v squeegees.v squelches.v stables.v stags.v stanches.v standardises.v steam-heats.v steam-rollers.v stencils.v sterilises.v stewards.v stigmatises.v stock-piles.v stockpiles.v stomaches.v stomps.v stoppers.v strands.v strangulates.v striates.v strictures.v strops.v strychnizes.v stultifies.v stupefies.v stylises.v subcategorises.v subcategorizes.v sub-classifies.v subclassifies.v subcompartmentalises.v subcompartmentalizes.v subcultivates.v subcultures.v subexcites.v subgroups.v subindexes.v subjoins.v sublimes.v sublocalises.v sublocalizes.v subluxates.v suborns.v subsaturates.v subsidises.v subspecialises.v subtitles.v subtypes.v suctions.v sugars.v sulfates.v sulfonates.v sulfurates.v sulfuretes.v sulfurets.v sulfurizes.v sulphates.v sulphonates.v sulphurates.v sulphuretes.v sulphurets.v sulphurises.v sulphurizes.v summarises.v superactivates.v superannuates.v supercools.v superducts.v superfuses.v superhydrates.v superinduces.v superintends.v superposes.v superprecipitates.v supersaturates.v supershifts.v suprarenalectomizes.v surcharges.v surfeits.v suscitates.v sutures.v swabs.v swaddles.v swages.v swans.v swills.v swinges.v swobs.v swops.v syllabicates.v syllabifies.v syllabizes.v symbolises.v sympathectomises.v sympathectomizes.v sympathises.v synapses.v synchronises.v synergises.v synonymizes.v synostoses.v synthesises.v synthetises.v synthetizes.v syringes.v systematises.v taboos.v tabus.v tape-records.v tares.v tarmacks.v tarmacs.v tees.v telecommunicates.v telefaxs.v telepathizes.v teletransmits.v tempers.v temporises.v tenants.v tenons.v tenotomizes.v tents.v tenures.v terrorises.v teslaizes.v tetanises.v tetanizes.v tetramerises.v thermalises.v thermocauterises.v thermocauterizes.v thermocycles.v thermoregulates.v thermosensitises.v thermosensitizes.v thoracotomises.v thoracotomizes.v threshes.v thwacks.v thymectomises.v thymectomizes.v thymolizes.v thyroidectomises.v thyroidectomizes.v thyroidizes.v thyroparathyroidectomizes.v timetables.v tinctures.v tittivates.v toggles.v tolerises.v tolerizes.v tonicizes.v tonsillectomizes.v tonsures.v tools.v top-dresses.v torques.v torrefies.v tosylates.v trabeculates.v tracheostomizes.v tracheotomizes.v traduces.v trafficks.v traffics.v trammels.v tranquillises.v transactivates.v transdifferentiates.v transduces.v transects.v transesterifies.v transfects.v transfigures.v tranships.v transilluminates.v transits.v transliterates.v translocates.v transmogrifies.v transphosphorylates.v transsects.v trapses.v traumatises.v traumatizes.v travestys.v treadles.v trees.v trellises.v trenchs.v trends.v trepans.v trephines.v triangulates.v trichinizes.v trills.v triplicates.v trisects.v tritiates.v triturates.v trivialises.v trolls.v troops.v trucks.v trues.v trusses.v trypsinises.v trypsinizes.v tubularizes.v turfs.v turgidizes.v twines.v twins.v twits.v tyrannises.v ubiquitinates.v ultrapurifies.v ultrasonicates.v unbars.v unbinds.v unbosoms.v unbridles.v uncaps.v unclamps.v unclips.v unclogs.v uncuffs.v undeceives.v undercalls.v underdetects.v underdiagnoses.v underemphasises.v underemphasizes.v underexerts.v under-feeds.v undernourishes.v underpredicts.v undersedates.v understages.v understains.v undertreats.v underuses.v underutilises.v underutilizes.v unfits.v unhorses.v universalizes.v unmans.v unroofs.v unsays.v unseats.v unsexes.v unsticks.v upregulates.v uptakes.v urbanises.v utilises.v vacuums.v vagotomizes.v vails.v vandalises.v vandalizes.v vaporises.v vapourises.v vapourizes.v variegates.v variolates.v vascularises.v vascularizes.v vasectomizes.v vaunts.v vd.'s.v vd.s.v Vd's.v Vds.v veneers.v ventralises.v ventralizes.v ventriducts.v verbalises.v victimises.v victuals.v videos.v virilises.v virilizes.v visions.v visualises.v vitalises.v vitalizes.v vitrectomises.v vitrectomizes.v vivifies.v vocalises.v vogues.v volitilises.v vortexs.v vulcanises.v vulcanizes.v vulgarises.v vulnerates.v wagers.v wallpapers.v wands.v wardens.v wars.v waterlogs.v wearies.v weasels.v weekends.v wees.v weirs.v welches.v wells.v wenchs.v westernises.v whisks.v whizes.v whops.v winches.v winkles.v winters.v wises.v womanises.v wows.v wracks.v wreathes.v xanthates.v xenografts.v xeroxes.v Xeroxes.v x-rays.v xrays.v X-rays.v yarns.v yellows.v yokes.v zenkerizes.v zippers.v link-grammar/data/en/words/entities.given-male.sing0000644000000000000000000003423212536650432017541 0ustar Ab.m Abbot.m Abbott.m Abdul.m Abdullah.m Abe.m Abel.m Abner.m Abraham.m Abram.m Absalom.m Ace.m Acher.m Achilles.m Achmad.m Achmed.m Acie.m Adair.m Adalberto.m Adan.m Addison.m Addulla.m Adel.m Adelbert.m Aden.m Adlai.m Adler.m Adolf.m Adolfo.m Adolph.m Adolpho.m Adolphus.m Adrain.m Agustin.m Agustus.m Ahmad.m Ahmed.m Aiden.m Ajay.m Ajit.m Akar.m Akbar.m Akim.m Akio.m Akira.m Akule.m Al.m Alain.m Alan.m Alaric.m Alastair.m Alban.m Alben.m Alberto.m Albertus.m Albin.m Albion.m Albrecht.m Alby.m Alcide.m Alden.m Alder.m Aldo.m Aldous.m Aldy.m Alec.m Alejandro.m Alek.m Aleksander.m Aleksandr.m Aleksandre.m Alex.m Alexandr.m Alexandre.m Alf.m Alfonse.m Alfonso.m Alfonzo.m Alford.m Alfred.m Alfredo.m Algar.m Algernon.m Algie.m Algir.m Alim.m Aliphont.m Alistair.m Alister.m Allan.m Allessandro.m Almer.m Almeric.m Almon.m Alois.m Alonso.m Alonza.m Alonzo.m Aloysius.m Alpheus.m Alphonse.m Alphonso.m Alrik.m Alroy.m Alton.m Alvah.m Alvaro.m Alvia.m Alvie.m Alvin.m Alvis.m Alwin.m Alwyn.m Alyn.m Amadeus.m Amado.m Amando.m Ambrose.m Ameer.m Ameet.m Americo.m Amin.m Amir.m Amit.m Ammon.m Amos.m Anand.m Ananda.m Anastacio.m Anatole.m Anders.m Anderson.m Andrae.m Andre.m Andreas.m Andrei.m Andrej.m Andres.m Andrey.m Andrius.m Andrzej.m André.m Andy.m Angus.m Anibal.m Annada.m Annan.m Anselm.m Anson.m Antanas.m Antione.m Antoine.m Anton.m Antonas.m Antone.m Antony.m Antos.m Antwain.m Antwan.m Antwon.m Archer.m Archibald.m Archie.m Arden.m Ari.m Arian.m Aric.m Aries.m Aristide.m Arkadi.m Arkady.m Arlan.m Arlen.m Arley.m Arlie.m Arlin.m Arlington.m Arlis.m Arlo.m Arlyn.m Arman.m Armand.m Armando.m Armin.m Armon.m Armond.m Armondo.m Arnaldo.m Arne.m Arnie.m Arnold.m Arnoldo.m Arnulfo.m Aron.m Arron.m Arslan.m Art.m Arther.m Arthuro.m Artin.m Artis.m Artur.m Arturas.m Arturo.m Arun.m Arunas.m Arvel.m Arvid.m Arvil.m Arvin.m Arvydas.m Asa.m Asberry.m Asbury.m Asfar.m Ashby.m Asher.m Ashfar.m Ashir.m Ashur.m Asif.m Atman.m Atsuhiko.m Atsushi.m Attila.m Auberon.m Aubert.m August.m Auguste.m Augustin.m Augustus.m Aurelio.m Aurelius.m Aurthur.m Auther.m Authur.m Autry.m Avi.m Avraham.m Axel.m Ayaz.m Aylwin.m Azad.m Azfar.m Azi.m Azis.m Babe.m Bahia.m Baldwin.m Ballard.m Barnett.m Barney.m Barnie.m Barrett.m Barry.m Bart.m Bartholomew.m Bartley.m Barton.m Basil.m Baton.m Baxter.m Bayard.m Beau.m Bedford.m Belo.m Ben.m Benedict.m Benito.m Benjaman.m Benjamin.m Benjamine.m Benjiman.m Bennett.m Benny.m Benton.m Bernard.m Bernardo.m Bernhard.m Bert.m Berton.m Bertram.m Bertrand.m Bill.m Birt.m Bishop.m Bjorn.m Blaine.m Blas.m Bo.m Bob.m Booker.m Boris.m Boston.m Boyce.m Boyd.m Brad.m Braden.m Bradford.m Bradley.m Bradly.m Brady.m Brain.m Brandan.m Branden.m Brannon.m Brant.m Brendan.m Brenden.m Brendon.m Brennan.m Brent.m Brenton.m Bret.m Brice.m Britton.m Brock.m Broderick.m Brody.m Bronson.m Brooks.m Bruce.m Bruno.m Bryan.m Bryant.m Bryce.m Bryon.m Bryson.m Buck.m Bud.m Budd.m Buddie.m Buddy.m Buford.m Burdette.m Burl.m Burley.m Burnell.m Burnett.m Burr.m Burt.m Burton.m Buster.m Butler.m Byrd.m Byron.m Caesar.m Cal.m Cale.m Caleb.m Calvin.m Candido.m Carleton.m Carlo.m Carlton.m Carlyle.m Carmelo.m Carmine.m Carson.m Carter.m Casimer.m Casimir.m Casper.m Cassius.m Cato.m Ceasar.m Cedric.m Cedrick.m Cesar.m Ceylon.m Chad.m Chadd.m Chadrick.m Chadwick.m Chalmer.m Chalmers.m Chance.m Chancy.m Charley.m Chas.m Chase.m Chauncey.m Chaz.m Chesley.m Chester.m Chet.m Chiang.m Christoper.m Chuck.m Cicero.m Clarance.m Clark.m Clarke.m Claud.m Claudio.m Claudius.m Claus.m Clay.m Clayton.m Clem.m Clemens.m Clement.m Clemente.m Cleon.m Cletus.m Cleve.m Cleveland.m Cliff.m Clifford.m Clifton.m Clint.m Clinton.m Clopton.m Clovis.m Cloyd.m Coby.m Cole.m Coleman.m Colin.m Collin.m Collins.m Collis.m Colton.m Columbus.m Conley.m Conor.m Conrad.m Constantin.m Constantine.m Cordell.m Cornelious.m Cornelius.m Cornell.m Cortez.m Coy.m Craig.m Crawford.m Creed.m Cristian.m Cristobal.m Cristopher.m Crockett.m Cullen.m Curley.m Curt.m Curtiss.m Cyril.m Cyrus.m Dalton.m Dameon.m Damian.m Damien.m Damion.m Damon.m Dan.m Dane.m Danial.m Danilo.m Danny.m Dante.m Darell.m Daren.m Darian.m Darin.m Dario.m Darius.m Darold.m Daron.m Darrel.m Darrell.m Darren.m Darrick.m Darrin.m Darron.m Darryl.m Darvin.m Darwin.m Dave.m Davie.m Davin.m Davis.m Davon.m Dayton.m Deandre.m Deangelo.m Dedrick.m Deimos.m Dejuan.m Del.m Delano.m Delbert.m Delmar.m Delmer.m Delos.m Delton.m Delvin.m Demarco.m Demarcus.m Demario.m Demond.m Dempsey.m Denis.m Dennie.m Denver.m Denzil.m Derald.m Dereck.m Derek.m Deric.m Derick.m Derik.m Derrell.m Derrick.m Deshaun.m Deshawn.m Desmond.m Dewayne.m Dewey.m Dewitt.m Dexter.m Dick.m Dickie.m Diego.m Dillard.m Dillon.m Dino.m Dirk.m Doc.m Dock.m Dolphus.m Domenic.m Domenick.m Domingo.m Dominic.m Dominick.m Don.m Donal.m Donn.m Donnell.m Donny.m Donovan.m Donta.m Donte.m Dorsey.m Doss.m Doug.m Douglas.m Douglass.m Dow.m Doyle.m Duane.m Dudley.m Duff.m Duke.m Duncan.m Durward.m Durwood.m Dustan.m Dustin.m Duwayne.m Dwain.m Dwaine.m Dwayne.m Dwight.m Dylan.m Earl.m Earle.m Earnest.m Eben.m Eber.m Ed.m Edd.m Eddy.m Edgar.m Edgardo.m Edison.m Edmond.m Edmund.m Edmundo.m Edouard.m Edsel.m Edson.m Eduardo.m Edwardo.m Edwin.m Efrain.m Efren.m Egbert.m Elam.m Elbert.m Elden.m Elder.m Eldon.m Eldred.m Eldridge.m Elgin.m Eli.m Elias.m Elick.m Elie.m Eliga.m Eligah.m Elige.m Elihu.m Elijah.m Eliseo.m Elliot.m Elliott.m Ellsworth.m Ellwood.m Elmo.m Elmore.m Eloy.m Elroy.m Elton.m Elvin.m Elvis.m Elwin.m Elwood.m Elwyn.m Ely.m Elzie.m Emanuel.m Emerson.m Emery.m Emil.m Emile.m Emilio.m Emmanuel.m Emmet.m Emmett.m Emmit.m Emmitt.m Emory.m Ennis.m Enoch.m Enos.m Enrique.m Ephraim.m Ephriam.m Erasmo.m Erasmus.m Erastus.m Erich.m Erick.m Erik.m Erling.m Ernest.m Ernesto.m Ernie.m Ernst.m Errol.m Ervin.m Erwin.m Esau.m Esteban.m Estel.m Estevan.m Eston.m Ethan.m Etienne.m Eugenio.m Eusebio.m Evans.m Everett.m Everette.m Evert.m Ewell.m Ezekiel.m Ezell.m Ezequiel.m Ezra.m Fabian.m Farrell.m Farris.m Faustino.m Fausto.m Fayette.m Federico.m Felipe.m Felix.m Felton.m Ferd.m Ferdinand.m Fermin.m Fernando.m Ferris.m Fidel.m Filiberto.m Finley.m Firman.m Fitzhugh.m Flem.m Fleming.m Fletcher.m Florencio.m Florentino.m Florian.m Floyd.m Ford.m Forest.m Forrest.m Foster.m Foy.m Francesco.m Franco.m Franklin.m Franklyn.m Franz.m Freddy.m Frederic.m Frederick.m Frederik.m Fredric.m Fredrick.m Freeman.m Friedel.m Friedrich.m Fritz.m Fulgence.m Furman.m Gabe.m Gaetano.m Galen.m Gardner.m Garett.m Garfield.m Garland.m Garold.m Garret.m Garrett.m Garrick.m Garry.m Garth.m Gaston.m Gavin.m Gaylon.m Gaylord.m Gearld.m Gee.m Genaro.m Geo.m Geoffrey.m Geraldo.m Gerard.m Gerardo.m Gerhard.m German.m Gerold.m Gideon.m Gil.m Gilbert.m Gilberto.m Giles.m Gilles.m Gino.m Giovanni.m Giuseppe.m Glen.m Glendon.m Glenwood.m Glynn.m Godfrey.m Goebel.m Gonzalo.m Gorden.m Gordon.m Gorge.m Gottlieb.m Grady.m Graham.m Graig.m Grant.m Granville.m Greg.m Gregg.m Greggory.m Gregorio.m Grover.m Guido.m Guillaume.m Guillermo.m Gus.m Guss.m Gustaf.m Gustav.m Gustave.m Gustavo.m Gustavus.m Guy.m Hai.m Hal.m Halsey.m Hamilton.m Hamp.m Hampton.m Hank.m Hans.m Hardie.m Hardin.m Harding.m Hardy.m Harl.m Harlan.m Harland.m Harlen.m Harley.m Harlow.m Harman.m Harmon.m Harrell.m Harrie.m Harris.m Harrison.m Harry.m Harve.m Harvey.m Harvie.m Haskell.m Hassan.m Hayden.m Hayes.m Hays.m Hayward.m Haywood.m Heath.m Heber.m Hector.m Heinrich.m Helmer.m Henderson.m Henery.m Henri.m Herb.m Herbert.m Heriberto.m Herman.m Hermann.m Hermon.m Herschel.m Hershel.m Hervey.m Hezekiah.m Hilario.m Hilbert.m Hillard.m Hilliard.m Hilton.m Hipolito.m Hiram.m Hiroshi.m Hobart.m Hobert.m Hobson.m Holmes.m Homer.m Horace.m Horacio.m Horatio.m Hosea.m Hosie.m Hosteen.m Houston.m Howard.m Howell.m Hoy.m Hoyt.m Hubert.m Hudson.m Huey.m Hugh.m Hugo.m Humberto.m Humphrey.m Hung.m Hunt.m Hunter.m Huston.m Hyman.m Hyrum.m Ian.m Ignacio.m Ignatius.m Ike.m Irven.m Irvin.m Irving.m Irwin.m Isaac.m Isadore.m Isaiah.m Isaias.m Isam.m Isham.m Ishmael.m Isiah.m Isidore.m Isidro.m Ismael.m Isom.m Israel.m Isreal.m Issac.m Ivan.m Jabari.m Jabez.m Jace.m Jacinto.m Jackson.m Jacky.m Jacob.m Jacques.m Jake.m Jamaal.m Jamal.m Jamar.m Jameel.m Jamel.m Jamil.m Jamin.m Jamison.m Janus.m Jarad.m Jared.m Jarod.m Jaron.m Jarred.m Jarret.m Jarrett.m Jarrod.m Jarvis.m Jasen.m Jasper.m Javier.m Javon.m Jayson.m Jc.m Jed.m Jedediah.m Jedidiah.m Jeff.m Jefferey.m Jefferson.m Jeffery.m Jeffry.m Jehovah.m Jennings.m Jerad.m Jerald.m Jeramiah.m Jeramie.m Jeramy.m Jere.m Jered.m Jereme.m Jeremey.m Jeremiah.m Jeremie.m Jerimiah.m Jermain.m Jermaine.m Jermey.m Jerod.m Jerold.m Jerome.m Jeromy.m Jerrel.m Jerrell.m Jerrod.m Jerrold.m Jess.m Jessee.m Jessy.m Jim.m Joaquin.m Job.m Joeseph.m Joesph.m Johann.m John.m Johnathan.m Johnathon.m Johnpaul.m Johnson.m Jonah.m Jonas.m Jonathan.m Jonathon.m Jones.m Jordon.m Jorge.m Josef.m Josh.m Josiah.m Jospeh.m Josue.m Judd.m Judge.m Judson.m Jules.m Julious.m Julius.m Junior.m Junious.m Junius.m Jupiter.m Justen.m Justice.m Juston.m Justus.m Kaleb.m Kareem.m Keegan.m Keenan.m Kelvin.m Ken.m Kendrick.m Keneth.m Kennith.m Kenny.m Kent.m Kenton.m Kenyon.m Keon.m Kermit.m Keven.m Kieth.m Kip.m Kirk.m Kiyoshi.m Knute.m Kody.m Korey.m Kory.m Kraig.m Kristofer.m Kristoffer.m Kristopher.m Kurt.m Kurtis.m Lafayette.m Lafe.m Lamar.m Lambert.m Lamont.m Lance.m Landon.m Lanny.m Larkin.m Laron.m Lars.m Laurance.m Lavar.m Lawerence.m Lawson.m Layton.m Lazaro.m Leamon.m Leander.m Leandro.m Leeroy.m Leif.m Leland.m Lem.m Lemmie.m Lemuel.m Len.m Lenard.m Lenny.m Lenord.m Lenwood.m Leonard.m Leonardo.m Leonel.m Leonidas.m Leopold.m Leopoldo.m Leroy.m Les.m Levar.m Levi.m Levy.m Lew.m Liam.m Lige.m Linas.m Lincoln.m Lindell.m Lino.m Linus.m Linwood.m Lionel.m Llewellyn.m Lloyd.m Lon.m Long.m Lonny.m Lonzo.m Loran.m Lorenzo.m Lorin.m Lowell.m Loy.m Loyd.m Lucas.m Lucian.m Luciano.m Lucien.m Lucio.m Lucious.m Lucius.m Ludwig.m Luigi.m Lukas.m Luke.m Lum.m Luther.m Lyle.m Lyman.m Lyndon.m Lynwood.m Mac.m Mack.m Mahlon.m Major.m Mal.m Malachi.m Malcolm.m Malcom.m Malik.m Malvin.m Manford.m Manley.m Mannie.m Manual.m Manuel.m Marc.m Marcel.m Marcelino.m Marcellus.m Marcelo.m Marco.m Marcos.m Marcus.m Margarito.m Mariano.m Markus.m Marlon.m Marmaduke.m Marques.m Marquis.m Marshal.m Mart.m Marvin.m Masao.m Mason.m Mathew.m Mathias.m Matt.m Mauricio.m Mauro.m Max.m Maximo.m Maxwell.m Maynard.m Mckinley.m Mearl.m Mel.m Melton.m Melville.m Melvyn.m Merl.m Merlin.m Merritt.m Merton.m Mervin.m Meyer.m Michale.m Miguel.m Mikel.m Milan.m Milburn.m Miles.m Milford.m Millard.m Milo.m Milton.m Minoru.m Miquel.m Mitch.m Mitchel.m Modesto.m Mohamed.m Mohammad.m Mohammed.m Moises.m Monroe.m Mont.m Monte.m Monty.m Moody.m Morris.m Mortimer.m Morton.m Mose.m Moses.m Moshe.m Muhammad.m Murl.m Murphy.m Murray.m Murry.m Myles.m Myron.m Napoleon.m Nat.m Nathan.m Nathanael.m Nathanial.m Nathaniel.m Nathen.m Neal.m Ned.m Neil.m Nels.m Nelson.m Nestor.m Neville.m Newell.m Newt.m Newton.m Nicholas.m Nicholaus.m Nick.m Nickolas.m Nicolas.m Nigel.m Nikolas.m Noah.m Noble.m Noe.m Nolan.m Norbert.m Norberto.m Normand.m Norris.m Norton.m Norval.m Norwood.m Nunzio.m Oakley.m Obed.m Obie.m Octavio.m Odie.m Odis.m Olaf.m Olan.m Ole.m Olen.m Olin.m Oliver.m Omar.m Omari.m Omer.m Oneal.m Oral.m Oran.m Oren.m Orie.m Orin.m Orland.m Orlando.m Orley.m Orren.m Orrin.m Orson.m Orval.m Orvil.m Orville.m Osborne.m Osvaldo.m Oswald.m Oswaldo.m Otho.m Otis.m Ottis.m Otto.m Owen.m Pablo.m Palmer.m Park.m Parker.m Pasquale.m Pedro.m Percival.m Percivall.m Percy.m Perley.m Pete.m Phil.m Philip.m Phillip.m Pierce.m Pierre.m Pinkney.m Ples.m Porfirio.m Porter.m Prentice.m Preston.m Prince.m Quentin.m Quincy.m Quintin.m Quinton.m Rafael.m Rafe.m Raheem.m Raleigh.m Ralph.m Ramiro.m Ramon.m Ramsey.m Ram.m Ran.m Randal.m Randall.m Randell.m Randolph.m Raoul.m Raphael.m Rashad.m Rashawn.m Rasheed.m Raul.m Rayburn.m Rayford.m Raymon.m Raymundo.m Redden.m Reed.m Reese.m Reggie.m Reginald.m Regis.m Reid.m Reinaldo.m Reinhold.m Renaldo.m Renato.m Reuben.m Rex.m Rey.m Reyes.m Reynaldo.m Reynold.m Rhett.m Ricardo.m Riccardo.m Rice.m Rich.m Richie.m Richmond.m Rick.m Rickey.m Ricky.m Rico.m Rigoberto.m Riley.m Rob.m Robby.m Robt.m Rocco.m Rocky.m Rod.m Roderick.m Rodger.m Rodney.m Rodolfo.m Rodrick.m Rodrigo.m Rogelio.m Roger.m Rogers.m Roland.m Rolando.m Rolf.m Rolla.m Rolland.m Rollie.m Rollin.m Roman.m Romeo.m Ron.m Ronny.m Roosevelt.m Roscoe.m Rosendo.m Rosevelt.m Ross.m Rowland.m Royal.m Rube.m Ruben.m Rubin.m Rudolf.m Rudolph.m Rueben.m Rufus.m Rupert.m Rush.m Russ.m Russel.m Rustin.m Rusty.m Rutherford.m Sal.m Salomon.m Salvador.m Salvatore.m Samir.m Sampson.m Samson.m Samual.m Sanders.m Sanford.m Santiago.m Santo.m Saul.m Schin.m Schuyler.m Scot.m Scotty.m Sebastian.m Sedrick.m Seneca.m Sergio.m Seth.m Seward.m Seymour.m Shad.m Shedrick.m Sheldon.m Shelton.m Sherman.m Sherwood.m Shon.m Sid.m Sigmund.m Silas.m Silvio.m Sim.m Simeon.m Simon.m Smith.m Soloman.m Solomon.m Solon.m Sonny.m Spencer.m Spurgeon.m Squire.m Stan.m Stanford.m Stanley.m Stanton.m Stefan.m Stephan.m Sterling.m Steve.m Stewart.m Stonewall.m Stuart.m Sullivan.m Sumner.m Sylvan.m Sylvester.m Tad.m Tallie.m Talmadge.m Tanner.m Tavares.m Ted.m Teddy.m Teodoro.m Terence.m Terrance.m Terrence.m Tex.m Thad.m Thaddeus.m Theadore.m Theodore.m Theron.m Thornton.m Thurman.m Thurston.m Tilden.m Tillman.m Tim.m Timmy.m Titus.m Tobe.m Tobias.m Tod.m Todd.m Tom.m Tomas.m Toney.m Torrance.m Torrey.m Tremaine.m Tremayne.m Trent.m Trenton.m Trever.m Trevor.m Trey.m Truman.m Tuan.m Tucker.m Ty.m Tyree.m Tyrell.m Tyron.m Tyrone.m Tyson.m Ulysses.m Uriah.m Valentin.m Vance.m Vaughan.m Vaughn.m Vergil.m Verl.m Verle.m Verlin.m Vern.m Verne.m Verner.m Vester.m Vicente.m Vince.m Vincent.m Vincenzo.m Virgilio.m Virgle.m Vishnu.m Vito.m Volney.m Von.m Wade.m Waldo.m Walker.m Wallace.m Wally.m Walton.m Ward.m Wardell.m Warner.m Warren.m Watson.m Watt.m Waverly.m Wayland.m Waylon.m Wayman.m Waymon.m Wayne.m Weaver.m Webb.m Webster.m Weldon.m Wellington.m Welton.m Wendel.m Wendell.m Werner.m Wes.m Westley.m Weston.m Wheeler.m White.m Wilber.m Wilbert.m Wilbur.m Wilburn.m Wiley.m Wilford.m Wilfred.m Wilfredo.m Wilfrid.m Wilhelm.m Wilkie.m Will.m Willam.m Willard.m Williams.m Willian.m Willis.m Willy.m Wilmer.m Wilson.m Wilton.m Windell.m Winfield.m Winford.m Winfred.m Winston.m Winton.m Wm.m Wong.m Woodie.m Woodrow.m Woodson.m Woody.m Wyatt.m Wylie.m Xavier.m Yoel.m Yoshio.m Zachariah.m Zachary.m Zachery.m Zack.m Zackary.m Zackery.m Zane.m Zeb.m Zebulon.m Zeke.m Zollie.m link-grammar/data/en/words/words.v.6.50000644000000000000000000001035112536650433014641 0ustar adopting.g airing.g airlifting.g angling.g armoring.g authorising.g averaging.g backfilling.g backing.g backpacking.g badging.g bailing.g banging.g beaming.g beating.g beckoning.g beefing.g bellowing.g benchmarking.g bending.g bicycling.g biking.g binding.g biting.g blaring.g bleeding.g blogging.g bloging.g blowing.g bobbing.g bogging.g boiling.g bolting.g booing.g booting.g boozing.g boring.g bouncing.g bounding.g bowling.g boxing.g branching.g breaking.g breathing.g brightening.g bruising.g brushing.g bucking.g buckling.g building.g bulging.g bumming.g bumping.g bunching.g burning.g busting.g butting.g buttoning.g buzzing.g calming.g camping.g canceling.g canoeing.g captioning.g carving.g cashing.g casting.g catching.g chambering.g changing.g chatting.g cheating.g checking.g cheering.g chewing.g chilling.g chipping.g choking.g chopping.g choreographing.g churning.g cleaning.g climbing.g clogging.g closing.g clouding.g clumping.g coffering.g coiling.g combing.g connecting.g contracting.g cooking.g cooling.g copping.g costuming.g coughing.g counting.g cracking.g cramming.g crossing.g crowding.g crumbling.g crumpling.g crunching.g curling.g dashing.g dematerializing.g dialing.g dialling.g digging.g dining.g dragging.g draining.g dressing.g drinking.g driving.g dropkicking.g dropping.g drowning.g drumming.g drying.g ducking.g dumbing.g easing.g eating.g edging.g emailing.g emceing.g emptying.g evangelizing.g evening.g facing.g fanning.g farming.g fattening.g feeding.g fending.g fetching.g feuding.g filing.g filling.g filtering.g firing.g firming.g fishing.g fisting.g flaring.g flattening.g flavoring.g flipping.g floating.g flooding.g flunking.g flushing.g flying.g folding.g following.g forking.g fouling.g freaking.g freezing.g frenching.g freshening.g frizzing.g frizzling.g fucking.g fueling.g galloping.g gathering.g glazing.g gobbling.g gonging.g grinding.g gulping.g hacking.g hammering.g hanging.g hardwiring.g harkening.g hauling.g heading.g healing.g heating.g herding.g hiding.g hiking.g hitching.g homering.g hooking.g hopping.g hunting.g ironing.g jamming.g jerking.g joining.g jumbling.g jumping.g kayaking.g killing.g knocking.g knotting.g lapping.g lashing.g leading.g leaking.g leaning.g leaping.g leveling.g levelling.g licking.g lightening.g lighting.g limbering.g lining.g livening.g looping.g loosening.g losing.g marching.g marrying.g matching.g melting.g messing.g missing.g mixing.g mopping.g mounding.g mouthing.g moving.g mucking.g nodding.g oozing.g opening.g optioning.g packing.g pairing.g panning.g parlaying.g partying.g peeing.g peeling.g piling.g pissing.g playing.g ploughing.g plowing.g plucking.g plunging.g pointing.g poking.g popping.g pounding.g prinking.g prying.g puckering.g pulling.g pumping.g quieting.g raking.g reaching.g reeling.g renting.g rerecording.g resizing.g reving.g rewinding.g riding.g ringing.g ripping.g rocking.g rolling.g rooting.g rotoscoping.g rounding.g rubbing.g running.g rushing.g sawing.g scoping.g scouting.g scraping.g scratching.g screwing.g scuffing.g sealing.g seguing.g serving.g settling.g sewing.g shaping.g shaving.g shifting.g shipping.g shooting.g shorting.g shrugging.g shushing.g shutting.g signing.g silkscreening.g sketching.g skiing.g skin-diving.g skipping.g sliding.g slipping.g sloughing.g slowing.g smartening.g smashing.g smoothing.g snapping.g snatching.g sneaking.g sniffing.g snorkeling.g snorkelling.g snuffing.g soaking.g sobering.g softening.g spacing.g sparking.g speeding.g spelling.g spilling.g spinning.g spiraling.g spiralling.g spitting.g splicing.g splitting.g spreading.g springing.g sprouting.g sprucing.g squaring.g squeezing.g squirting.g staggering.g stalking.g stamping.g staring.g starring.g starving.g steaming.g sticking.g stiffening.g stirring.g stocking.g storming.g straightening.g stretching.g striking.g stripping.g sucking.g summing.g surfing.g swelling.g swimming.g swinging.g switching.g swotting.g tallying.g tangling.g tapering.g tasking.g thickening.g thinning.g ticking.g tidying.g tightening.g tinkling.g tipping.g tiring.g togging.g toning.g toppling.g tossing.g trailing.g treading.g trimming.g tripping.g tucking.g tumbling.g tuning.g twisting.g typing.g waking.g warming.g weaving.g weeding.g weighing.g whipping.g whooping.g winding.g winning.g wiping.g working.g wrapping.g link-grammar/data/en/words/words.adv.20000644000000000000000000000141012536650432014772 0ustar absurdly additionally admittedly allegedly alternatively appallingly arguably assuredly astonishingly basically commonly conceivably consequentially contrastingly conveniently crucially curiously customarily disappointingly doubtless essentially fascinatingly fortunately hopefully ideally idiotically incidentally incontestably increasingly indeniably indisputably indubitably inevitably invariably lamentably lastly luckily meanwhile miraculously obviously ordinarily ostensibly paradoxically predictably preferably principally regrettably reportedly secondarily strictly supposedly surely tragically unavoidably uncannily uncharacteristically understandably undisputably unfortunately unluckily unquestionably contrarily namely neurologically coincidentally reversibly viz link-grammar/data/en/words/words.v.8.50000644000000000000000000000232212536650433014642 0ustar auctioning.g bandying.g barring.g battening.g blocking.g blotting.g blurting.g boarding.g booking.g bottling.g bundling.g buttering.g caging.g carrying.g carting.g chalking.g chasing.g chucking.g cluttering.g covering.g cranking.g cutting.g damming.g dishing.g dividing.g doling.g dredging.g dumping.g egging.g eking.g exporting.g factoring.g faxing.g fixing.g flinging.g fobbing.g gouging.g hamming.g hashing.g hoisting.g jacking.g jazzing.g jotting.g kicking.g ladling.g laying.g lifting.g linking.g loading.g locking.g lopping.g mailing.g mapping.g marking.g meting.g mulling.g mussing.g nailing.g palming.g patching.g paving.g penning.g phasing.g phoning.g picking.g piecing.g pinning.g plugging.g pricking.g propping.g punching.g pushing.g racking.g reining.g rigging.g riling.g rinsing.g roughening.g roughing.g saving.g scaling.g scaring.g screening.g shaking.g shoring.g singling.g sizing.g skimming.g skittling.g smuggling.g sopping.g sorting.g spicing.g stacking.g staking.g staving.g stringing.g stuffing.g sussing.g sweeping.g tacking.g taping.g tearing.g throwing.g tiding.g topping.g totaling.g totalling.g touching.g toughening.g tracking.g tying.g wadding.g washing.g waving.g wearing.g wringing.g yanking.g zipping.g link-grammar/data/en/words/entities.organizations.sing0000644000000000000000000000047712536650432020410 0ustar 10K 7-11 Antarctic Bank Central Chase.o Christmas City Democratic Dodge.o East El Equatorial Features Federated Ford.o Former Friar Island Islands Isle Korea La Land Lands Los New Norfolk North Ocean Republic San Sao Sea Socialist South Southern Soviet States Strip Sun.o Territory Undersea Union United West Western link-grammar/data/en/words/words.v.6.30000644000000000000000000001100612536650433014635 0ustar adopted.v-d aired.v-d airlifted.v-d angled.v-d armored.v-d authorised.v-d averaged.v-d backed.v-d backfilled.v-d backpacked.v-d badged.v-d bailed.v-d banged.v-d beamed.v-d beckoned.v-d beefed.v-d bellowed.v-d benchmarked.v-d bended.v-d bent.v-d bicycled.v-d biked.v-d blared.v-d bled.v-d bloged.v-d blogged.v-d bobbed.v-d bogged.v-d boiled.v-d bolted.v-d booed.v-d booted.v-d boozed.v-d bored.v-d bounced.v-d bounded.v-d bound.w bowled.v-d boxed.v-d branched.v-d breathed.v-d brightened.v-d bruised.v-d brushed.v-d bucked.v-d buckled.v-d built.v-d bulged.v-d bummed.v-d bumped.v-d bunched.v-d burned.v-d busted.v-d butted.v-d buttoned.v-d buzzed.v-d calmed.v-d camped.v-d canceled.v-d canoed.v-d captioned.v-d carved.v-d cashed.v-d caught.v-d chambered.v-d changed.v-d chatted.v-d cheated.v-d checked cheered.v-d chewed.v-d chilled.v-d chipped.v-d choked.v-d chopped.v-d choreographed.v-d churned.v-d cleaned.v-d climbed.v-d clogged.v-d closed clouded.v-d clumped.v-d coffered.v-d coiled.v-d combed.v-d connected.v-d contracted.v-d cooked.v-d cooled.v-d copped.v-d costumed.v-d coughed.v-d counted.v-d cracked.v-d crammed.v-d crossed.v-d crowded.v-d crumbled.v-d crumpled.v-d crunched.v-d curled.v-d dashed.v-d dealed.v-d dematerialized.v-d dialed.v-d dialled.v-d dined.v-d dragged.v-d drained.v-d dressed.v-d dried.v-d dropkicked.v-d dropped.v-d drowned.v-d drummed.v-d ducked.v-d dug.v-d dumbed.v-d eased.v-d edged.v-d emailed.v-d emceed.v-d emptied.v-d evangelized.v-d evened.v-d faced.v-d fanned.v-d farmed.v-d fattened.v-d fed.v-d fended.v-d fetched.v-d feuded.v-d filed.v-d filled.v-d filtered.v-d fired.v-d firmed.v-d fished.v-d fisted.v-d flared.v-d flattened.v-d flavored.v-d flipped.v-d floated.v-d flooded.v-d flunked.v-d flushed.v-d folded.v-d followed.v-d forked.v-d fouled.v-d freaked.v-d frenched.v-d freshened.v-d frizzed.v-d frizzled.v-d fucked.v-d fueled.v-d galloped.v-d gathered.v-d glazed.v-d gobbled.v-d gonged.v-d grinded.v-d gulped.v-d guttered.v-d hacked.v-d hammered.v-d hanged.v-d hardwired.v-d harkened.v-d hauled.v-d headed.v-d healed.v-d heated.v-d herded.v-d hiked.v-d hitched.v-d homered.v-d hooked.v-d hopped.v-d hung.v-d hunted.v-d ironed.v-d jammed.v-d jerked.v-d joined jumbled.v-d jumped.v-d kayaked.v-d killed.v-d knocked.v-d knotted.v-d lapped.v-d lashed.v-d leaked.v-d leaned.v-d leaped.v-d leapt.v-d led.v-d leveled.v-d levelled.v-d licked.v-d lightened.v-d limbered.v-d lined.v-d lit.v-d livened.v-d logged.v-d looped.v-d loosened.v-d lost.v-d marched.v-d married.v-d matched.v-d melted.v-d messed.v-d missed.v-d mixed.v-d mopped.v-d mounded.v-d mouthed.v-d moved.v-d mucked.v-d nodded.v-d oozed.v-d opened.v-d optioned.v-d packed.v-d paired.v-d panned.v-d parlayed.v-d partied.v-d peeed.v-d peeled.v-d piled pissed.v-d played.v-d ploughed.v-d plowed.v-d plucked.v-d plunged.v-d pointed.v-d poked.v-d pooped.v-d popped.v-d pounded.v-d pried.v-d prinked.v-d puckered.v-d pulled.v-d pumped.v-d quieted.v-d raked.v-d reached.v-d reeled.v-d rented.v-d rerecorded.v-d resized.v-d revved.v-d rewound.v-d ripped.v-d rocked.v-d rolled.v-d rooted.v-d rotoscoped.v-d rounded.v-d rubbed.v-d rushed.v-d sailed.v-d sawed.v-d scoped.v-d scouted.v-d scraped.v-d scratched.v-d screwed.v-d scuffed.v-d sealed.v-d segued.v-d served.v-d settled.v-d sewed.v-d shaped.v-d shaved.v-d shifted.v-d shipped.v-d shorted.v-d shot.v-d shrugged.v-d shushed.v-d signed.v-d silkscreened.v-d sketched.v-d skied.v-d skin-dived.v-d skin-dove.v-d skipped.v-d slid.v-d slipped.v-d sloughed.v-d slowed.v-d smartened.v-d smashed.v-d smoothed.v-d snapped.v-d snatched.v-d sneaked.v-d sniffed.v-d snorkeled.v-d snorkelled.v-d snuffed.v-d soaked.v-d sobered.v-d softened.v-d spaced.v-d sparked.v-d spat.v-d sped.v-d speeded.v-d spelled.v-d spelt.v-d spilled.v-d spiraled.v-d spiralled.v-d spitted.v-d spliced.v-d sprouted.v-d spruced.v-d spun.v-d squared.v-d squeezed.v-d squirted.v-d staggered.v-d stamped.v-d stared.v-d starred.v-d starved.v-d steamed.v-d stiffened.v-d stirred.v-d stocked.v-d stormed.v-d straightened.v-d stretched.v-d stripped.v-d struck.v-d stuck.v-d sucked.v-d summed.v-d surfed.v-d swam.v-d swelled.v-d swinged.v-d switched.v-d swotted.v-d swung.v-d tallied.v-d tangled.v-d tapered.v-d tasked.v-d thickened.v-d thinned.v-d ticked.v-d tidied.v-d tightened.v-d tinkled.v-d tipped.v-d tired.v-d togged.v-d toned.v-d toppled.v-d tossed.v-d trailed.v-d treaded.v-d trimmed.v-d tripped.v-d tucked.v-d tumbled.v-d tuned.v-d twisted.v-d typed.v-d waked.v-d walked.v-d warmed.v-d weeded.v-d weighed.v-d whipped.v-d whooped.v-d winded.v-d wiped.v-d won.v-d worked.v-d wound.w wrapped.v-d zeroed.v-d link-grammar/data/en/words/words.n.2.s.wiki0000644000000000000000000000672512536650433015677 0ustar actuators.n agonists.n airdates.n airlifts.n airspeeds.n aminos.n animators.n annals.n antennas.n antidepressants.n architectures.n arrangers.n automakers.n backpacks.n bandmates.n bassists.n batsmans.n battlecruisers.n beamlines.n bestsellers.n bibles.n biodiversities.n bios.n biosyntheses.n bitmaps.n blogs.n bookends.n bungees.n campsites.n capacitors.n carcinomas.n carvings.n cassavas.n characteristics.n chargebacks.n châteaus.n chipsets.n chlorides.n cholines.n ciliates.n coauthors.n codenames.n codeshares.n coeds.n collaborations.n collaboratives.n consortiums.n constructivists.n cornerbacks.n cosmologys.n cottonseeds.n cowls.n crossovers.n crystallographers.n cytokines.n damselfishs.n deformations.n dehydrogenases.n deliriants.n dementias.n demographics.n départements.n desertifications.n desktops.n dhimmis.n diagnostics.n diazepams.n dielectrics.n diodes.n dipoles.n disambiguations.n discographies.n dissociatives.n disulfides.n docodonts.n dodecahedrons.n dogsleds.n dongles.n dopamines.n dropkicks.n duos.n dysplasias.n eds.n electrophoresiss.n els.n ems.n emulsifiers.n endgames.n enrollments.n epiphytes.n escudos.n esters.n ethanols.n exorcisms.n facelifts.n factsheets.n fansites.n fanzines.n faunas.n favorites.n fenestras.n fibers.n fibrosiss.n filmmakers.n filmographies.n firefighters.n flatbeds.n frontlines.n functionalities.n gamers.n genomes.n geophytes.n glutens.n gratings.n guans.n habitants.n haires.n handcrafts.n haploids.n headlocks.n herbicides.n herbivores.n homepages.n homers.n homeworlds.n homologs.n honeys.s housemates.n hydrolases.n hydroxyls.n hypertensions.n indies.n inductees.n infills.n insecticides.n internationals.n intros.n jetways.n jurisdictions.n kasbahs.n kinases.n latencies.s lats.n layouts.n lays.n lentinans.n leukemias.s lifestyles.s linebackers.n lipids.n lobs.n logins.n logistics.n louvers.n mafias.n maréchals.n maters.n maxillaries.n melanogasters.n metalwares.s metros.n microarrays.n midfielders.n miffs.n millenniums.s minimalists.n miniseries.n minis.n mollusks.n moots.n mornings.n morphes.n morphs.n morts.n mullions.n multicasts.n multilayers.n multiplexes.s mutants.n myopathies.n myspaces.n namespaces.n nanotubes.n noogies.n novellas.s nutrients.n offloads.n omnivores.n orchestrations.s outs.n outtakes.n overdubs.n panchayats.n paras.n parlays.n particulates.n peptides.n phylogenies.s phylogenys.s phylums.s pides.s pixels.n plantings.n plesiosaurs.n plugins.n podcasts.n polymerases.n polysaccharides.n polyunsaturates.n porphyrias.n portages.n preforms.n preschools.n presenters.n promos.n purebreds.n purines.n pyrimidines.n quartos.n rankings.n rappers.n reasoners.n reboots.n rebrands.n rebroadcasters.n receptors.n redrafts.n redshirts.n relaxants.n remixes.n renters.n replications.n rerecords.n rereleases.n resits.n retardants.n retries.n rewinds.n ridings.n sauropods.n scopes.n screenshots.n screenwriters.n segues.n semis.n sensors.n sequestrants.n setups.n shorthairs.n shorthands.n sidekicks.n silkscreens.n simulcasts.n songwriters.n specialisations.n speciations.n standardbreds.n stats.n steroids.n storyboards.n storylines.n strikeouts.n suicides.s supervillains.n suplexes.n surroundings.n swears.n sweeteners.n synopses.n syntheses.n telcos.n theses.n timbales.n timelines.n topologies.n torsions.n tortas.n trackbeds.n transfers.s transgenders.n trisomies.n vapors.n varsities.s vegans.n vertexes.s verticies.s virals.n vocals.n vols.n wargames.n waymarks.n webcams.n weblogs.n webpages.n wetlands.n wheelbases.n wikis.n yuans.n link-grammar/data/en/words/words.v.4.20000644000000000000000000006627212536650433014651 0ustar abandons.v abases.v abbreviates.v abducts.v abets.v abhors.v abolishes.v abridges.v abrogates.v absorbs.v abstracts.v abuses.v abuts.v accents.v accentuates.v accesses.v acclaims.v accommodates.v accompanies.v accomplishes.v accosts.v accredits.v accretes.v accustoms.v acerbates.v achieves.v acquaints.v acquires.v activates.v addicts.v addles.v addresses.v adjudges.v administers.v admires.v admonishes.v adores.v adorns.v adulterates.v adumbrates.v aerates.v affects.v affixes.v afflicts.v aggrandizes.v aggravates.v alienates.v allays.v alleviates.v allocates.v allots.v amasses.v ambushes.v ameliorates.v amends.v amortizes.v amplifies.v amputates.v anaesthetizes.v anathematizes.v anesthetizes.v angers.v anglicizes.v animates.v anneals.v annexes.v annihilates.v annoints.v annotates.v annuls.v anoints.v antagonizes.v antedates.v anthologizes.v anthropomorphizes.v apes.v appals.v appeases.v appends.v apportions.v appraises.v apprehends.v apprentices.v apprises.v appropriates.v arms.v arouses.v arraigns.v arrays.v arrests.v arrogates.v ascribes.v asphalts.v asphyxiates.v aspirates.v assails.v assassinates.v assaults.v assays.v assuages.v atomizes.v attacks.v attains.v attaints.v attenuates.v attires.v attracts.v attributes.v attunes.v audits.v augments.v authenticates.v autographs.v automates.v avenges.v avers.v averts.v awaits.v awes.v axes.v backdates.v badgers.v baffles.v bakes.v balances.v bales.v bamboozles.v bandages.v banishes.v bankrupts.v bans.v baptizes.v barbarizes.v barbecues.v bares.v barrels.v barricades.v bases.v bashes.v bastes.v batters.v battles.v beaks.v beans.v beatifies.v beautifies.v bedevils.v befalls.v befits.v befouls.v befriends.v begets.v beggars.v beguiles.v beheads.v beholds.v bejewels.v belabours.v belies.v belittles.v belts.v bemoans.v benchs.v bequeaths.v berates.v bereaves.v beseeches.v besieges.v besmirches.v bespeaks.v bestirs.v bestows.v bestrews.v bestrides.v bests.v betokens.v betrays.v bevels.v bewails.v bewilders.v bewitches.v biases.v bides.v biffs.v bilks.v billets.v bills.v birches.v bisects.v blackballs.v blacklists.v blackmails.v blades.v blames.v blankets.v blasts.v blazons.v blemishes.v blesses.v blights.v blindfolds.v blinds.v blitzes.v blockades.v blow-dries.v bludgeons.v blue-pencils.v blunts.v bolds.v bolsters.v bombards.v bombs.v bookends.v boosts.v bosses.v botches.v boycotts.v braces.v brackets.v braids.v brainwashes.v braises.v brandishes.v brands.v braves.v breaches.v bribes.v bricks.v bridges.v briefs.v brines.v broaches.v brocades.v brokers.v bronzes.v brooks.v browbeats.v brutalizes.v budgets.v buffs.v bugs.v bulldozes.v bungles.v bungs.v buoys.v burdens.v buries.v burlesques.v buses.v busies.v butchers.v buttonholes.v buttresses.v by-passes.v bypasses.v cajoles.v calibrates.v camouflages.v canes.v cannibalizes.v canonises.v canonizes.v capes.v caps.v captivates.v captures.v carbonizes.v carburets.v cards.v caresses.v caricatures.v carjacks.v carpets.v cases.v castigates.v castrates.v catalogues.v catapults.v categorizes.v cedes.v cements.v censors.v censures.v centralises.v centralizes.v chagrins.v chains.v chairs.v champions.v channels.v chaperons.v charms.v charters.v charts.v chastens.v chastises.v cheapens.v checkmates.v cherishes.v chides.v chisels.v chlorinates.v chords.v christens.v chromes.v chronicles.v circularizes.v circumcises.v circumnavigates.v circumscribes.v circumvents.v cites.v civilizes.v clads.v clamps.v classifies.v claws.v cleanses.v clenches.v clips.v cloaks.v clobbers.v cloisters.v clones.v closets.v clothes.v clubs.v coats.v co-authors.v coauthors.v cobbles.v cocks.v coddles.v codenames.v codes.v codifies.v coerces.v cofounds.v coins.v cold-shoulders.v collars.v collates.v collectivizes.v collects.v collocates.v colocates.v colonizes.v combats.v comforts.v commandeers.v commemorates.v commends.v commercializes.v compacts.v compartmentalizes.v compiles.v complements.v completes.v complicates.v compliments.v composts.v compounds.v comprehends.v compresses.v comprises.v computerizes.v conceals.v concerns.v conciliates.v concocts.v conditions.v condones.v configures.v confines.v confiscates.v conflates.v confounds.v confronts.v confuses.v confutes.v congas.v congratulates.v conjures.v conks.v connotes.v conquers.v conscripts.v consecrates.v conserves.v consigns.v consoles.v constitutes.v constrains.v constricts.v constructs.v construes.v consumes.v consummates.v cons.v contacts.v contains.v contaminates.v contents.v contorts.v contours.v contradicts.v contravenes.v contrives.v controls.v convects.v conventionalizes.v conveys.v convokes.v convoys.v convulses.v coops.v co-opts.v coordinates.v copies.v co-produces.v copyrights.v cordons.v cords.v cores.v corks.v corners.v corrals.v corrects.v corroborates.v countenances.v counteracts.v counterbalances.v counterfeits.v countermands.v countersigns.v countersues.v couples.v court-martials.v courts.v covets.v coxs.v cradles.v cramps.v cranes.v crayons.v creams.v creates.v credits.v cremates.v crimps.v cripples.v criticizes.v crossbreeds.v cross-examines.v cross-fertilizes.v cross-indexes.v cross-questions.v crowns.v crucifies.v crushes.v cubes.v cudgels.v cuffs.v culls.v cultivates.v cups.v curbs.v cures.v curries.v curtails.v cushions.v damages.v damns.v dampens.v dandles.v daubs.v daunts.v dazes.v dazzles.v deadens.v deafens.v debars.v debases.v debauches.v debilitates.v debits.v debriefs.v debugs.v debunks.v decants.v decapitates.v decarbonizes.v deceives.v decentralizes.v decertifies.v decimalizes.v decimates.v deciphers.v decks.v declaims.v declassifies.v decodes.v decolonizes.v decompresses.v deconsecrates.v decontaminates.v decorates.v decries.v decrypts.v dedicates.v deducts.v deeds.v deep-freezes.v deepthroats.v de-escalates.v defaces.v defames.v defeats.v defends.v defers.v defies.v defiles.v defines.v deflates.v deflowers.v defoliates.v deforests.v deforms.v defragments.v defrauds.v defrays.v defrocks.v defrosts.v defunds.v defuses.v degrades.v dehumanizes.v dehydrates.v de-ices.v deifies.v delegates.v deletes.v delimits.v delineates.v delists.v deludes.v deluges.v demagnetizes.v demarcates.v demeans.v demerges.v demilitarizes.v demists.v demobilizes.v demolishes.v demonizes.v demoralizes.v demotes.v demutualises.v denationalizes.v denigrates.v denominates.v denotes.v denounces.v dents.v denudes.v deodorizes.v depletes.v deplores.v deploys.v depopulates.v deports.v deposes.v deposits.v deprecates.v deprograms.v deranges.v derides.v desalinates.v desalinizes.v desecrates.v desegregates.v desensitizes.v deserts.v desiccates.v despatches.v despises.v despoils.v destroys.v detaches.v detains.v detects.v deters.v detests.v dethrones.v detunes.v devaluates.v devalues.v devastates.v devises.v devotes.v devours.v dewaters.v diagnoses.v dices.v diddles.v diffracts.v dignifies.v dilutes.v directs.v disables.v disaffiliates.v disallows.v disappoints.v disarranges.v disassembles.v disassociates.v disavows.v disburses.v discards.v disciplines.v disclaims.v discomfits.v disconcerts.v disconnects.v discontents.v discounts.v discourages.v discredits.v disdains.v disembarrasses.v disembowels.v disenchants.v disenfranchises.v disestablishes.v disfavours.v disfigures.v disfranchises.v disgorges.v disgraces.v disguises.v disheartens.v dishonours.v disillusions.v disinfects.v disinherits.v disinters.v dislocates.v dislodges.v dismantles.v dismembers.v dismisses.v disobeys.v disorientates.v disorients.v disowns.v disparages.v dispatches.v dispels.v displaces.v displays.v displeases.v dispossesses.v disproves.v disqualifies.v disregards.v disrupts.v dissects.v disseminates.v disses.v dissociates.v dissuades.v distances.v distils.v distorts.v distracts.v distributes.v distrusts.v disturbs.v ditches.v diverts.v divests.v divorces.v divulges.v dizzies.v doctors.v doffs.v domesticates.v dominates.v donates.v dons.v dooms.v dopes.v dots.v double-checks.v double-crosses.v douses.v downgrades.v downloads.v downplays.v downs.v dragoons.v dramatizes.v drapes.v drenches.v drip-dries.v drubs.v drugs.v dry-cleans.v ducts.v dumbfounds.v dunks.v dupes.v duplicates.v dusts.v dwarfs.v dyes.v dynamites.v earmarks.v earns.v eclipses.v edifies.v edits.v effaces.v effects.v elbows.v electrifies.v electrocutes.v electrolyzes.v elevates.v elicits.v elides.v eliminates.v elucidates.v eludes.v emancipates.v emasculates.v embalms.v embargos.v embeds.v embellishes.v embezzles.v embitters.v emblazons.v embodies.v emboldens.v embosses.v embraces.v embroils.v emends.v emits.v empanels.v empowers.v emulates.v emulsifies.v enacts.v enamels.v encases.v enchants.v encircles.v encloses.v encodes.v encompasses.v encounters.v encrypts.v encumbers.v endangers.v endears.v endorses.v endows.v enervates.v enfeoffs.v enfolds.v enforces.v enfranchises.v engenders.v engineers.v engraves.v engrosses.v engulfs.v enhances.v enjoins.v enlarges.v enlightens.v enlivens.v enmeshes.v ennobles.v enrages.v enriches.v ensconces.v enshrines.v enshrouds.v enslaves.v ensnares.v ensouls.v entangles.v enthralls.v enthrals.v enthrones.v enthuses.v entombs.v entrains.v entrances.v entraps.v entreats.v entrusts.v entwines.v enumerates.v envelops.v envies.v epitomizes.v equalizes.v equals.v equates.v equips.v erases.v erects.v eschews.v escorts.v espies.v espouses.v esteems.v eulogizes.v evades.v evicts.v evinces.v eviscerates.v evokes.v exacerbates.v exalts.v exasperates.v excavates.v exceeds.v excepts.v exchanges.v excises.v excludes.v excommunicates.v excoriates.v excretes.v exculpates.v excuses.v executes.v exemplifies.v exempts.v exerts.v exhausts.v exhibits.v exhilarates.v exhumes.v exiles.v exorcizes.v expedites.v expels.v expends.v experiences.v expiates.v explicates.v exploits.v exposes.v expropriates.v expunges.v expurgates.v extenuates.v exterminates.v externalizes.v extinguishes.v extirpates.v extols.v extorts.v extracts.v extradites.v extricates.v exudes.v eyes.v fabricates.v facelifts.v facets.v facilitates.v fags.v fakes.v falsifies.v familiarizes.v fancies.v fascinates.v fashions.v fates.v fathoms.v fatigues.v faults.v favorites.v favours.v fazes.v feathers.v features.v feigns.v fells.v fences.v ferrets.v fertilizes.v festoons.v fetes.v fetters.v fianchettos.v fillets.v finalizes.v finances.v fine-tunes.v fingers.v firebombs.v flagellates.v flanks.v flatters.v flaunts.v flavours.v flays.v fleeces.v flicks.v flogs.v floodlights.v floors.v flouts.v fluffs.v flummoxes.v fluoridates.v flurries.v flusters.v foils.v foists.v foments.v fondles.v fonds.v fools.v force-feeds.v fords.v forecasts.v foregoes.v foreordains.v foreshadows.v foreshortens.v forestalls.v foreswears.v foretells.v forfeits.v forges.v forgoes.v formalizes.v formulates.v forsakes.v forswears.v fortifies.v forwards.v fosters.v founds.v frames.v franks.v frazzles.v frees.v frequents.v frescos.v fricassees.v fries.v frightens.v frisks.v fritters.v frogmarches.v frustrates.v fulfills.v fulfils.v fumigates.v funds.v funnels.v furbishes.v furnishes.v furrows.v furthers.v gages.v gainsays.v galls.v galvanizes.v gaols.v garbles.v garbs.v garners.v garnishes.v garrisons.v gashes.v gatecrashes.v gauges.v generates.v genericizes.v gerrymanders.v ghettoizes.v gilds.v gins.v girds.v glaciates.v gladdens.v glamorizes.v gleans.v glimpses.v glorifies.v gluts.v goads.v gores.v gorges.v grabs.v graces.v grades.v grafts.v gratifies.v gravels.v greases.v greenlights.v greets.v grills.v grips.v grits.v groins.v grooms.v grosses.v grudges.v guards.v guides.v guillotines.v gums.v guns.v guts.v guzzles.v gyps.v hallows.v halts.v halves.v hampers.v hamstrings.v handcrafts.v handcuffs.v handicaps.v handles.v harangues.v harasses.v harbors.v harbours.v harms.v harnesses.v harpoons.v harries.v harrows.v harvests.v hassles.v haunts.v hawks.v hazards.v hazes.v headquarters.v heaps.v heartens.v hearts.v heeds.v helms.v heralds.v highjacks.v highlights.v hijacks.v hinders.v hits.v hoaxes.v hobbles.v hocks.v hogs.v hollows.v homesteads.v homogenizes.v hones.v honors.v honours.v hoods.v hoodwinks.v horrifies.v horsewhips.v hoses.v hospitalizes.v hosts.v hotfoots.v hounds.v houses.v hulls.v humbles.v humbugs.v humiliates.v humours.v humps.v hunches.v hurls.v husks.v hyphenates.v hypnotizes.v idealizes.v identifies.v idolizes.v ignores.v ill-treats.v illuminates.v illumines.v illustrates.v images.v imbibes.v imbues.v imitates.v immerses.v immobilizes.v immolates.v immortalizes.v immunizes.v impacts.v impairs.v impales.v impanels.v imparts.v impeaches.v impedes.v imperils.v impersonates.v implants.v implements.v implicates.v imports.v imposes.v impounds.v impoverishes.v impregnates.v impresses.v imprints.v imprisons.v impugns.v imputes.v inactivates.v inaugurates.v incapacitates.v incarcerates.v incarnates.v incenses.v incinerates.v includes.v inconveniences.v incriminates.v inculcates.v incurs.v indemnifies.v indentures.v indexes.v indicts.v individuates.v indoctrinates.v inducts.v infatuates.v infects.v infests.v infills.v infiltrates.v inflames.v inflates.v inflects.v inflicts.v influences.v infuriates.v infuses.v ingests.v ingratiates.v inhabits.v inherits.v inhibits.v initials.v injects.v injures.v inks.v inoculates.v inscribes.v inseminates.v inserts.v inspects.v installs.v instates.v instigates.v instills.v instils.v institutes.v institutionalizes.v insulates.v insults.v insures.v integrates.v intercepts.v interchanges.v interdicts.v interests.v interjects.v interleaves.v internalizes.v internationalizes.v interoperates.v interpolates.v interrogates.v intersperses.v inters.v interweaves.v intimidates.v intones.v intoxicates.v introduces.v intuits.v inundates.v invades.v invalidates.v invalids.v inveigles.v invents.v inverts.v invigorates.v invokes.v irks.v irradiates.v irrigates.v isolates.v italicizes.v itemizes.v iterates.v jails.v jars.v jeopardizes.v jettisons.v jilts.v jinxes.v jinxs.v jollies.v jugs.v juxtaposes.v kens.v kidnaps.v kisses.v kneads.v knifes.v knights.v lacerates.v laces.v lacks.v lacquers.v lambastes.v laminates.v lampoons.v lances.v landscapes.v lassos.v lauds.v launders.v lavishes.v leaches.v leapfrogs.v leases.v leavens.v legalizes.v legitimatizes.v lenites.v leverages.v levers.v levies.v libels.v liberalizes.v liberates.v licences.v likens.v limits.v lionizes.v liquidizes.v lists.v loans.v loathes.v lobs.v lofts.v loots.v lubricates.v lugs.v lulls.v lumps.v lures.v lynches.v maddens.v magnetizes.v magnifies.v maims.v maligns.v maltreats.v manacles.v mandates.v mangles.v manhandles.v manicures.v manifests.v manipulates.v mans.v manufactures.v marginalises.v marginalizes.v markets.v maroons.v marshals.v mars.v martyrs.v mashes.v masks.v massages.v mass-produces.v masterminds.v masters.v masticates.v mauls.v maxes.v maximizes.v maxs.v measures.v mechanizes.v medicates.v memorializes.v memorizes.v menaces.v merits.v mesmerizes.v microfilms.v miffs.v milks.v mimeographs.v mimics.v minces.v miniaturizes.v minimizes.v mints.v mires.v mirrors.v misapplies.v misapprehends.v misappropriates.v miscasts.v misconceives.v misconstrues.v misdates.v misdirects.v misgoverns.v misguides.v mishandles.v mishears.v misinforms.v misinterprets.v mislays.v misleads.v mismanages.v misnames.v misplaces.v mispronounces.v misquotes.v misreads.v misrepresents.v misspells.v misspends.v misstates.v mistakes.v mistranslates.v mistreats.v mistrusts.v misuses.v mitigates.v mobs.v mocks.v models.v modifies.v modulates.v molds.v molests.v mollifies.v mollycoddles.v monitors.v monopolizes.v montages.v moors.v moots.v morphs.v mortars.v mortgages.v mortifies.v mothballs.v mothproofs.v motorizes.v muddies.v muds.v muffles.v muffs.v mugs.v mulches.v multiplexes.v multiplexs.v murders.v musters.v mutes.v mutilates.v muzzles.v myspaces.v mystifies.v nabs.v nags.v namespaces.v narrates.v nationalizes.v naturalizes.v needles.v negates.v nets.v nettles.v neuters.v neutralizes.v nicknames.v nicks.v nixes.v nixs.v noogies.v normalizes.v norms.v notarizes.v notates.v nourishes.v novelises.v novelizes.v nudges.v nullifies.v numbers.v numbs.v nurses.v nurtures.v obfuscates.v obligates.v obliterates.v obscures.v obstructs.v obtains.v obviates.v occasions.v occupies.v offends.v offloads.v offsets.v oils.v okays.v omens.v omits.v oppresses.v orchestrates.v ordains.v organizes.v orientates.v orients.v ornaments.v ostracizes.v ousts.v outbalances.v outclasses.v outdistances.v outdoes.v outfights.v outfits.v outflanks.v outfoxes.v outgrows.v outlasts.v outlaws.v outlines.v outlives.v outmanoeuvres.v outnumbers.v outplays.v outrages.v outranks.v outrides.v outrights.v outruns.v outscores.v outshines.v outsmarts.v outsources.v outstays.v outvotes.v outweighs.v outwits.v overawes.v overbears.v overburdens.v overcomes.v overcooks.v overcrowds.v overdoes.v overdubs.v overemphasizes.v overestimates.v overexerts.v overexposes.v overgrazes.v overhauls.v overhears.v overleaps.v overloads.v overlooks.v overpays.v overplays.v overpopulates.v overpowers.v overpraises.v overprints.v overrates.v overrides.v overrules.v overruns.v oversees.v overshadows.v overshoots.v oversimplifies.v overstates.v overstays.v oversteps.v overstocks.v overstrains.v oversubscribes.v overtakes.v overtaxes.v overvalues.v overwhelms.v overwrites.v owns.v oxygenates.v pacifies.v packages.v padlocks.v pads.v pages.v pains.v palatalizes.v pampers.v papers.v parallelizes.v parallels.v paralyses.v paralyzes.v parametrizes.v paraphrases.v parches.v pardons.v pares.v parodies.v paroles.v parries.v partitions.v partners.v pastes.v pasteurizes.v patents.v patrols.v patronizes.v pats.v patterns.v pauperizes.v pawns.v paws.v pedestrianizes.v pegs.v pelts.v penalizes.v pencils.v peppers.v perfects.v perforates.v perfumes.v perfuses.v perjures.v permeates.v perms.v permutes.v perpetrates.v perpetuates.v perplexes.v persecutes.v personalizes.v personifies.v perturbs.v peruses.v pervades.v perverts.v pesters.v pets.v photocopies.v photographs.v photosensitizes.v photostats.v phrases.v pickles.v pictures.v pierces.v pigeonholes.v pigments.v pilfers.v pilots.v pinches.v pinpoints.v pipes.v pips.v piques.v pirates.v pitchforks.v pities.v pits.v placates.v places.v plagiarizes.v plagues.v plants.v plasters.v pleases.v plies.v plumbs.v pluralizes.v pockets.v podcasts.v poisons.v polarizes.v polices.v polishes.v politicizes.v pollinates.v pollutes.v ponders.v pooh-poohs.v pools.v popularizes.v populates.v portages.v portends.v ports.v positions.v possesses.v postdates.v postmarks.v postpones.v posts.v powders.v praises.v prearranges.v precedes.v precipitates.v precludes.v preconceives.v predestines.v predetermines.v predicates.v predisposes.v pre-empts.v preempts.v preens.v prefabricates.v prefaces.v prefigures.v preforms.v preheats.v prejudges.v prejudices.v premeditates.v premises.v preoccupies.v preordains.v prepays.v prerecords.v prerenders.v presages.v prescribes.v presents.v preserves.v presorts.v pressurizes.v prestresses.v prettifies.v prevents.v prices.v prides.v primes.v prints.v privileges.v prizes.v probes.v processes.v proctors.v procures.v prods.v produces.v proffers.v profiles.v prognosticates.v prohibits.v prolongs.v promotes.v promulgates.v propels.v proportions.v propositions.v propounds.v proscribes.v prosecutes.v prostitutes.v prostrates.v protects.v prunes.v psychoanalyses.v psychoanalyzes.v publicizes.v publishes.v pulverizes.v pummels.v punctuates.v punishes.v purchases.v purees.v purifies.v purloins.v purses.v pursues.v purveys.v quaffs.v quantifies.v quarantines.v quarterbacks.v quarters.v quashes.v quells.v quenches.v queries.v quick-freezes.v quilts.v quotes.v radicalizes.v raffles.v raids.v railroads.v ramps.v rams.v ransacks.v ransoms.v rapes.v ratifies.v rationalizes.v rations.v ravages.v ravishes.v razes.v reacquaints.v re-addresses.v readmits.v reappoints.v reaps.v rearranges.v reassesses.v reauthorizes.v rebadges.v reboots.v rebrands.v rebroadcasts.v rebuffs.v rebukes.v rebuts.v recaptures.v recasts.v recesses.v rechristens.v recites.v reclaims.v recolors.v recommits.v recompenses.v reconciles.v reconditions.v reconquers.v reconsecrates.v reconsiders.v reconstructs.v reconvicts.v recoups.v recreates.v rectifies.v recuses.v recuts.v recycles.v redecorates.v redeems.v redefines.v redeploys.v redesignates.v redesigns.v redevelops.v rediscovers.v redistributes.v redoes.v redrafts.v redraws.v redresses.v redshirts.v reduces.v reduplicates.v re-educates.v reemploys.v reenacts.v reequips.v re-establishes.v reestablishes.v refashions.v refills.v refinances.v refines.v reflexes.v reformulates.v refracts.v refreshes.v refrigerates.v refunds.v refurbishes.v refurnishes.v refutes.v regains.v regales.v regiments.v regrades.v regularizes.v regulates.v regurgitates.v rehabilitates.v rehashes.v rehires.v rehouses.v reignites.v reimagines.v reimburses.v reinforces.v reinstalls.v reinstates.v reinsures.v reintegrates.v reinterprets.v reinvents.v reinvigorates.v reissues.v rejects.v rejoins.v rejuvenates.v relaunchs.v relays.v releases.v relegates.v relieves.v relinquishes.v relishes.v relists.v relives.v reloads.v remands.v remasters.v rematchs.v remedies.v remilitarizes.v remixs.v remodels.v remolds.v remoulds.v removes.v remunerates.v rends.v renews.v renominates.v renounces.v renovates.v renumbers.v reoccupys.v reorientates.v reorients.v repackages.v repaints.v repatriates.v repeals.v repels.v rephotographs.v rephrases.v replaces.v replants.v replasters.v replays.v replenishes.v replicates.v reprehends.v represents.v represses.v reprieves.v reprimands.v reprints.v reproaches.v reproofs.v reproves.v repudiates.v repulses.v repurchases.v repurposes.v reputes.v requisitions.v rereads.v rereleases.v rerolls.v reroutes.v reschedules.v rescinds.v rescues.v researches.v reseats.v resells.v resembles.v resents.v reserves.v resets.v reshapes.v reshuffles.v resits.v resoles.v respects.v restates.v restocks.v restores.v restrains.v restricts.v restructures.v restyles.v resubmits.v resurrects.v retains.v retakes.v retards.v retells.v rethinks.v retitles.v retouches.v retraces.v retracts.v retransmits.v retrieves.v retrys.v rets.v revalues.v revamps.v reveres.v revets.v reviews.v reviles.v revises.v revisits.v revitalizes.v revokes.v revolutionizes.v rewards.v rewaters.v rewires.v rewords.v rewrites.v ribs.v riddles.v ridicules.v rids.v rifles.v rights.v rims.v rivals.v rivets.v romanizes.v romanticizes.v ropes.v routes.v routs.v rubberizes.v rubber-stamps.v rubbers.v rues.v ruins.v rumples.v rusticates.v sabotages.v sacks.v saddens.v saddles.v safeguards.v salts.v salvages.v samples.v sanctifies.v sanctions.v sandblasts.v sandpapers.v sands.v sandwiches.v saps.v satiates.v satirises.v satirizes.v satisfies.v saturates.v sautes.v savages.v savours.v scalds.v scalps.v scandalizes.v scants.v scarpers.v scars.v scents.v schedules.v schools.v scoops.v scorches.v scorns.v scotches.v scours.v scraps.v scrunches.v scrutinizes.v sculpts.v scuttles.v sears.v seasons.v seats.v secretes.v secularizes.v secures.v sedates.v seduces.v seeds.v segregates.v selects.v sensationalizes.v sensitizes.v sentimentalizes.v sequesters.v serenades.v serializes.v services.v shackles.v shadows.v shames.v shampoos.v shapeshifts.v shares.v sharpens.v shears.v sheathes.v sheds.v shelters.v shelves.v shepherds.v shields.v shingles.v shirks.v shocks.v shoos.v short-changes.v shortlists.v shoulders.v shovels.v showcases.v shreds.v shrouds.v shucks.v shuns.v shunts.v shutters.v sickens.v sicks.v sidelines.v sidesteps.v sidetracks.v sieves.v sights.v signposts.v silences.v silhouettes.v simplifies.v simulates.v simulcasts.v siphons.v sires.v skewers.v skins.v skippers.v skirts.v slakes.v slanders.v slaps.v slashes.v slates.v slaughters.v slays.v sleeves.v slices.v slights.v slings.v slots.v slugs.v slurs.v smelts.v smites.v smothers.v snags.v snares.v snubs.v socks.v sodomizes.v soft-pedals.v soils.v solders.v solicits.v solves.v soothes.v soundproofs.v soups.v sources.v souses.v spades.v spanks.v spans.v spares.v spays.v spearheads.v spears.v specifies.v spews.v spikes.v spin-dries.v spirits.v spites.v sponsors.v spoonfeeds.v spotlights.v spots.v sprains.v sprays.v sprinkles.v spurns.v squanders.v squelchs.v squires.v stabs.v staffs.v stages.v stalemates.v standardizes.v staples.v starches.v startles.v stashes.v stations.v staunches.v steals.v steamrollers.v steels.v stereotypes.v sterilizes.v stiffs.v stigmatizes.v stills.v stimulates.v stitches.v stockades.v stokes.v stomachs.v stones.v stores.v storyboards.v stows.v straddles.v strafes.v straitens.v strangles.v straps.v streamlines.v strews.v strokes.v structures.v stubs.v stuccos.v studs.v stuns.v stunts.v styles.v stylizes.v stymies.v subdues.v subedits.v subjects.v subjugates.v sublimates.v subordinates.v subpoenas.v subserves.v subsidizes.v substantiates.v subsumes.v subtends.v subtracts.v subverts.v succours.v suckles.v suffuses.v suicides.v suits.v sullies.v summarizes.v summons.v sunders.v suns.v superimposes.v supersedes.v supplants.v supplements.v supplies.v supports.v suppresses.v surmounts.v surnames.v surpasses.v surrounds.v surveys.v suspends.v sustains.v swamps.v swathes.v swats.v sweetens.v swigs.v swindles.v swipes.v symbolizes.v syncopates.v syndicates.v synthesizes.v syphons.v systematizes.v tables.v tabulates.v tailors.v tails.v taints.v tames.v tamps.v tantalizes.v targets.v tars.v tattoos.v taunts.v taxes.v teases.v telecasts.v teleports.v telescopes.v televises.v tenders.v terraces.v terrifies.v terrorizes.v tessellates.v test-drives.v tethers.v thanks.v thatches.v thirsts.v threads.v thumbs.v thwarts.v tickets.v tiers.v tiles.v tills.v timelines.v times.v tints.v titillates.v toes.v tolerates.v torchs.v torments.v torpedos.v tortures.v totes.v tours.v tousles.v touts.v towels.v tows.v trademarks.v tramples.v tranquilizes.v tranquillizes.v transacts.v transcends.v transcodes.v transcribes.v transfixes.v transforms.v transfuses.v transgenders.v transistorizes.v transitions.v transmits.v transmutes.v transports.v transposes.v transships.v traps.v trashs.v traverses.v treasures.v tricks.v triggers.v trivializes.v troubles.v trounces.v truncates.v turbocharges.v tutors.v tweaks.v twiddles.v typecasts.v typifies.v tyrannizes.v unaffiliates.v unbalances.v unbans.v unblocks.v unbolts.v unbuckles.v unburdens.v unbuttons.v unclothes.v unclutters.v uncorks.v uncouples.v uncovers.v uncrosses.v undercharges.v undercuts.v underestimates.v underexposes.v underfunds.v undergoes.v underlies.v underlines.v undermines.v underpays.v underpins.v underquotes.v underrates.v underrepresents.v underscores.v undersells.v underserves.v undershoots.v undersigns.v understates.v understocks.v understudies.v undervalues.v underwrites.v undoes.v unearths.v unencumbers.v unfetters.v unfrocks.v unfurls.v unhands.v unhinges.v unhooks.v uninstalls.v unlearns.v unleashes.v unlooses.v unmasks.v unnerves.v unplugs.v unrecords.v unsaddles.v unscrambles.v unsettles.v unsheathes.v unveils.v unzips.v upbraids.v updates.v upgrades.v upholds.v upholsters.v uplifts.v uprights.v uproots.v upsets.v upstages.v ushers.v usurps.v utilizes.v utters.v vacates.v vaccinates.v valets.v validates.v values.v vanquishes.v varnishes.v veils.v vends.v venerates.v ventilates.v vents.v verbalizes.v vetoes.v vetos.v vets.v vexes.v victimizes.v videotapes.v vilifies.v vindicates.v violates.v visas.v visualizes.v vitiates.v vivisects.v vocalizes.v voices.v voids.v vouchsafes.v vulgarizes.v wages.v waives.v wallops.v walls.v wangles.v wards.v warehouses.v warrants.v wastes.v waterproofs.v waylays.v weans.v weaponizes.v weathers.v wedges.v weights.v welcomes.v wends.v westernizes.v wets.v whacks.v wheedles.v whets.v whiles.v whitewashes.v wields.v wikis.v wings.v winnows.v withholds.v withstands.v witnesses.v wolfs.v woos.v words.v worms.v wounds.v wreaks.v wrecks.v wrenches.v wrests.v wrongs.v zaps.v zones.v link-grammar/data/en/words/words.v.6.10000644000000000000000000000574512536650433014650 0ustar adopt.v airlift.v air.v angle.v armor.v authorise.v average.v backfill.v backpack.v back.v badge.v bail.v bang.v beam.v beckon.v beef.v bellow.v benchmark.v bend.v beware.v bicycle.v bike.v bind.v bite.v blare.v bleed.v blog.v blow.v bob.v bog.v boil.v bolt.v boo.v boot.v booze.v bore.v bounce.v bound.v bowl.v box.v branch.v break.v breathe.v brighten.v bruise.v brush.v buckle.v buck.v build.v bulge.v bump.v bum.v bunch.v burn.v bust.v button.v butt.v buzz.v calm.v camp.v cancel.v canoe.v caption.v carve.v cash.v catch.v chamber.v change.v chat.v cheat.v check.v cheer.v chew.v chill.v chip.v choke.v chop.v choreograph.v churn.v clean.v climb.v clog.v close.v cloud.v clump.v coffer.v coil.v comb.v connect.v contract.v cook.v cool.v cop.v costume.v cough.v count.v crack.v cram.v cross.v crowd.v crumble.v crumple.v crunch.v curl.v dash.v dematerialize.v dial.v dig.v dine.v drag.v drain.v dress.v drink.v drive.v dropkick.v drop.v drown.v drum.v dry.v duck.v dumb.v ease.v eat edge.v email.v emcee.v empty.v evangelize.v even.v face.v fan.v farm.v fatten.v feed.v fend.v fetch.v feud.v file.v fill.v filter.v fire.v firm.v fish.v fist.v flare.v flatten.v flavor.v flip.v float.v flood.v flunk.v flush.v fly.v fold.v follow.v fork.v foul.v freak.v freeze.v french.v freshen.v fuck.v fuel.v gallop.v gather glaze.v gobble.v gong.v grind.v gulp.v hack.v hammer.v hang.v hardwire.v harken.v haul.v head.v heal.v heat.v herd.v hide.v hike.v hitch.v homer.v hook.v hop.v hunt.v iron.v jam.v jerk.v join.v jumble.v jump.v kayak.v kill.v knock.v knot.v lap.v lash.v lead.v leak.v lean.v leap.v level.v lick.v lighten.v light.v limber.v line.v liven.v log.v loop.v loosen.v lose.v march.v marry.v match.v melt.v mess.v miss.v mix.v mop.v mound.v mouth.v move.v muck.v nod.v ooze.v open.v option.v pack.v pair.v pan.v parlay.v party_hardy party.v peel.v pee.v pile.v piss.v play.v plough.v plow.v pluck.v plunge.v point.v poke.v pop.v pound.v pry.v pucker.v pull.v pump.v quiet.v rake.v reach.v reel.v rent.v rerecord.v resize.v rev.v rewind.v ride.v ring.v rip.v rock.v roll.v root.v rotoscope.v round.v rub.v rush.v sail.v saw.w scope.v scout.v scrape.v scratch.v screw.v seal.v segue.v serve.v settle.v sew.v shape.v shave.v shift.v ship.v shoot.v short.v shrug.v shush.v sign.v silkscreen.v sketch.v skin-dive.v skip.v ski.v slide.v slip.v slow.v smarten.v smash.v smooth.v snap.v snatch.v sneak.v sniff.v snorkel.v snuff.v soak.v sober.v soften.v space.v spark.v speed.v spell.v spill.v spin.v spiral.v spit.v splice.v spring.v sprout.v spruce.v square.v squeeze.v squirt.v stagger.v stalk.v stamp.v stare.v star.v starve.v steam.v stick.v stiffen.v stir.v stock.v storm.v straighten.v stretch.v strike.v strip.v suck.v sum.v surf.v swell.v swim.v swing.v switch.v tally.v tangle.v taper.v task.v thicken.v thin.v tick.v tidy.v tighten.v tinkle.v tip.v tire.v tone.v topple toss.v trail.v tread.v trim.v trip.v tuck.v tumble.v tune.v twist.v type.v wake.v walk.v warm.v weed.v weigh.v whip.v whoop.v wind.v win.v wipe.v work.v wrap.v zero.v link-grammar/data/en/words/units.30000644000000000000000000000013712536650432014233 0ustar °C.u °F.u degrees_Fahrenheit degrees_Centigrade degrees_C mph.i MPH.i mpg.i MPG.i cc.i ml.i link-grammar/data/en/words/words-medical.v.4.50000644000000000000000000012471412536650432016243 0ustar abashing.g abjuring.g ablating.g abnegating.g abominating.g abounding.g abscessing.g abscising.g absenting.g abstaining.g acccoutering.g accessioning.g acclimatising.g accoupling.g accoutring.g acetifying.g acetonating.g acetonizing.g acetylating.g acetylising.g acetylizing.g achromatising.g achromatizing.g acidulating.g acing.g actualising.g actualizing.g actuating.g acylating.g adducting.g adenosine_diphosphate-ribosylating adjuring.g administrating.g admixing.g ADP-ribosylating.g adrenalectomizing.g adsorbing.g adulating.g advantaging.g afforesting.g affronting.g afterloading.g agglomerating.g aggrieving.g agonising.g airbrushing.g alcoholising.g alcoholizing.g aliasing.g alining.g aliquoting.g alkalinising.g alkalinizing.g alkalising.g alkalizing.g alkylating.g allelotyping.g allergizing.g allografting.g alloimmunising.g alloimmunizing.g allotransplanting.g alloying.g alluring.g alphabetising.g alphabetizing.g aluminating.g Americanising.g amidating.g aminating.g aminoacylating.g ammoniating.g amortising.g anaesthetising.g anatomizing.g anergising.g anesthetising.g anglicising.g animadverting.g annualising.g annualizing.g annunciating.g anodising.g anodizing.g anonymising.g anonymizing.g anoxiating.g antagonising.g anteriorising.g anteriorizing.g antiaggregating.g anticoagulating.g antigenising.g antigenizing.g anting.g antirepressing.g antisepticising.g antisepticizing.g apeasing.g apodizing.g apologising.g apostatising.g appaling.g appareling.g apparelling.g apporting.g apposing.g apprizing.g arborising.g archiving.g arcing.g arcking.g aromatising.g aromatizing.g arsonating.g arterializing.g articling.g asexualizing.g asperging.g aspersing.g asseverating.g asterisking.g atomising.g attitudinising.g audiotaping.g auscultating.g authoring.g autocatalysing.g autoclaving.g autogenerating.g autoimmunising.g autoimmunizing.g autoinducing.g autoinducting.g autoinjecting.g autolising.g automatising.g auto-oxidising.g autoperfusing.g autopsying.g autoradiographing.g autoregulating.g autosensitising.g autotransplanting.g auxotyping.g avalanching.g avianising.g avianizing.g avowing.g avulsing.g awaking.g aweing.g axotomising.g axotomizing.g azotizing.g baaing.g babying.g baby-siting.g baby-sitting.g backcrossing.g backdroping.g backdropping.g backlabeling.g backlabelling.g backscattering.g baing.g ballasting.g balling.g balloting.g bamming.g bandpass_filtering baptising.g barbering.g barbing.g bariumizing.g barnstorming.g barracking.g barraging.g barreling.g bastardizing.g bayoneting.g beaching.g beading.g bearding.g beavering.g bedaubing.g bedding.g bedecking.g bedeviling.g behooving.g behoving.g beleaguering.g belling.g bench_pressing beneficing.g benzoylating.g bereving.g besetting.g besmearing.g betrothing.g bettering.g beveling.g biassing.g bibbing.g bickering.g bicompartmentalising.g binging.g bioactivating.g bioassaying.g bioconverting.g bioengineering.g biomagnifying.g bio-monitoring.g biomonitoring.g biopsying.g bioreducing.g bioremediating.g biosynthesising.g biosynthesizing.g biotinylating.g biotransforming.g biotyping.g bisintercalating.g bivouacking.g blacking.g blancoing.g blanking.g blathering.g blobbing.g blooding.g bloodying.g blueing.g bluing.g blustering.g boating.g bobsleding.g boobing.g boomeranging.g boostering.g bootstraping.g bootstrapping.g bottlenecking.g braining.g brain-washing.g brawling.g brazing.g breakfasting.g breast-feeding.g breasting.g breveting.g brevetting.g broadsiding.g brodding.g bromating.g brominating.g bromizing.g bruiting.g brutalising.g bucketing.g buffering.g bulbectomizing.g bulking.g bulling.g bunkering.g burgeoning.g burking.g burring.g bursting.g busing.g bussing.g caching.g caking.g calendering.g calipering.g calking.g callipering.g calumniating.g canalizing.g cancelling.g cancerising.g candying.g cankering.g canning.g cannulating.g cannulizing.g canopying.g cantilevering.g canting.g capacitating.g capillarising.g capitalising.g capitating.g caponising.g caponizing.g captaining.g carbamoylating.g carbamylating.g carbolating.g carbolising.g carbolizing.g carbonating.g carbonising.g carboxylating.g cardiectomizing.g careering.g cartooning.g cashiering.g catabolising.g catalase_testing catalising.g catalizing.g cataloging.g catalysing.g catalyzing.g categorising.g catheterising.g catheterizing.g caulking.g causticizing.g cauterising.g cauterizing.g cavitating.g C-banding.g cementifying.g centrifugalising.g centrifugalizing.g centrifugating.g centrifuging.g cering.g certificating.g chaffing.g chamfering.g champing.g chancing.g channeling.g chaping.g chapping.g characterising.g charbroiling.g checkering.g cheeking.g chemoattracting.g chemo-preventing.g chemopreventing.g chemo-sensitising.g chemo-sensitizing.g chemosensitizing.g chequering.g chickening.g chining.g chinking.g chiseling.g chloring.g chloroforming.g chloroformising.g chloroformizing.g chocking.g cholecystectomising.g cholecystectomizing.g chorusing.g chromating.g chromatizing.g chromatographing.g chromicizing.g chunking.g chuting.g cicatrising.g cicatrizing.g ciphering.g circularising.g circumducting.g civilising.g clamoring.g classing.g clear-cutting.g clearcutting.g clewing.g clocking.g clouting.g cluing.g clysterizing.g coactivating.g coadministering.g co-agglutinating.g co-applying.g coapplying.g coapting.g coarticulating.g co-assembling.g coassembling.g cocainising.g cocainizing.g co-calibrating.g cocalibrating.g co-chromatographing.g cochromatographing.g co-circulating.g co-clustering.g coclustering.g co-colonizing.g cocolonizing.g cocooning.g co-crystallizing.g cocrystallizing.g co-cultivating.g cocultivating.g coculturing.g co-developing.g co-electroporating.g coelectroporating.g coeluting.g co-encapsidating.g coencapsidating.g coencapsulating.g co-enriching.g coenriching.g co-existing.g coexisting.g co-exposing.g coexposing.g coexpressing.g co-extracting.g cografting.g cogwheeling.g co-hybridising.g cohybridising.g co-hybridizing.g cohybridizing.g coimmobilising.g coimmobilizing.g coinfecting.g coinfusing.g co-ingesting.g coingesting.g co-inheriting.g coinheriting.g co-inoculating.g coinoculating.g coking.g collateralising.g collectivising.g colliquating.g colonising.g colonoscoping.g colorising.g colorizing.g colourizing.g co-managing.g comanaging.g comedicating.g cometabolising.g commercialising.g compartmentalising.g compartmenting.g compassing.g compeering.g complexing.g comporting.g computerising.g concatenating.g conceptualising.g concording.g concreting.g concussing.g conding.g condoling.g conducing.g conglomerating.g conglutinating.g coning.g consorting.g consternating.g constitutionalizing.g contradistinguishing.g contraindicating.g controverting.g contunding.g contusing.g convoluting.g co-ordinating.g co-oxidising.g cooxidising.g co-oxidizing.g cooxidizing.g co-partitioning.g co-perfusing.g coperfusing.g copolymerising.g copolymerizing.g coppering.g coproducing.g co-promoting.g copromoting.g corbeling.g corbelling.g co-rearing.g corearing.g co-registering.g co-regulating.g coregulating.g co-releasing.g coreleasing.g corkscrewing.g cornifying.g corning.g corraling.g co-secreting.g cosecreting.g cosegregating.g cosensitising.g cosensitizing.g coshing.g cosolubilising.g cosolubilizing.g co-sponsoring.g cosponsoring.g cosseting.g costarring.g co-stimulating.g costimulating.g co-storing.g costoring.g co-synthesising.g cosynthesising.g co-synthesizing.g cosynthesizing.g cotranscribing.g cotransfecting.g co-transfering.g cotransfering.g co-transferring.g cotransferring.g cotransforming.g cotransmitting.g co-transporting.g cotransporting.g co-treating.g cotreating.g coulorising.g counselling.g counterpoising.g counterregulating.g countersinking.g counterstaining.g counter-transporting.g countertransporting.g countervailing.g coursing.g court-martialling.g covenanting.g cowing.g cozening.g crabbing.g crafting.g craping.g cratering.g crating.g crazing.g creaking.g creping.g crewing.g cricking.g criminalising.g criminalizing.g crimsoning.g crisping.g criss-crossing.g cristallising.g cristallizing.g criticising.g critiquing.g crocking.g crooking.g cross-clamping.g crossclamping.g cross_fertilizing cross-linking.g cross-matching.g crossmatching.g cross-protecting.g crossprotecting.g cross-reacting.g crossreacting.g cross-referencing.g crossreferencing.g crusting.g cryo-fixing.g cryofixing.g cryo-preserving.g cryopreserving.g cryoprotecting.g cryo_sectioning cryo-sectioning.g cryotreating.g crystallising.g cuckooing.g cudgelling.g cueing.g cuing.g culturing.g cumbering.g cunding.g curarising.g curarizing.g curating.g cureting.g curetting.g curtaining.g cussing.g customising.g customizing.g cyanylating.g cyclising.g cyphering.g cyto-adhering.g cytoreducing.g cytospinning.g cytospun.g cytostaining.g dansylating.g dappling.g deacetylating.g deactivating.g deacylating.g de-adenylating.g deadenylating.g deafferentating.g deafferenting.g deallergising.g deamidating.g deamidizing.g deaminating.g debouching.g debriding.g debulking.g debuting.g decalcifying.g decannulating.g decapsulating.g decarboxylating.g decatenating.g decentralising.g decerebrating.g decerebrizing.g dechlorinating.g decidualising.g declutching.g decocting.g decolonising.g decolorising.g decolorizing.g decolourising.g decolourizing.g decomplementizing.g decontroling.g decontrolling.g deconvoluting.g decoronating.g decorticating.g decoupling.g decoying.g decreeing.g deemanating.g de-energising.g deenergising.g de-energizing.g deenergizing.g de-epicardializing.g de-epithelialising.g deepithelialising.g deethylating.g defaecating.g defaunating.g defeminising.g defeminizing.g defenestrating.g defibrillating.g defibrinating.g deflorating.g defocusing.g defocussing.g deformylating.g defunctionalising.g defunctionalizing.g degalactosylating.g degasing.g degassing.g degaussing.g degenitalizing.g deglycerating.g degreasing.g dehaematising.g dehalogenating.g dehematizing.g dehemoglobinizing.g dehorning.g dehulling.g dehumanising.g dehydrochlorinating.g dehydrogenating.g dehydrogenising.g dehydrogenizing.g dehydroxylating.g dehypnotising.g dehypnotizing.g deinducing.g deinstitutionalizing.g deionising.g deionizing.g dejecting.g de-leading.g deleading.g delimitating.g delipidating.g delocalising.g delocalizing.g delousing.g demagnetising.g demarking.g demasculinising.g demedullating.g demembranating.g demetalising.g demetalizing.g demethylating.g demilitarising.g demineralising.g demineralizing.g demobilising.g democratising.g demodulating.g demonetising.g demonetizing.g demoralising.g demustardizing.g demyelinating.g demystifying.g denationalising.g denaturing.g denervating.g denitrating.g denitrifying.g deodorising.g deoxidising.g deoxidizing.g deoxygenating.g depancreatizing.g deparaffinising.g deparaffinizing.g departmentalising.g depersonalizing.g dephosphorylating.g depigmenting.g depilating.g depolarising.g depoliticising.g depoliticizing.g depolymerising.g depotentiating.g depraving.g depressurising.g depressurizing.g deprojecting.g deprotecting.g deproteinating.g deprotonating.g depurating.g deputing.g deputising.g deregulating.g derepressing.g deresinating.g derivatising.g derivatizing.g derivitising.g derivitizing.g deroofing.g derotating.g derricking.g desalinising.g desalting.g desamidating.g desamidizing.g descaling.g desensitising.g desexualising.g desexualizing.g desheathing.g desialylating.g desolating.g desolvating.g desorbing.g despeciating.g destabilising.g destablising.g destablizing.g destaining.g desulfating.g desulfurating.g desulphating.g desulphurating.g desynchronising.g detailing.g dethyroidizing.g detouring.g detoxicating.g deuterating.g deuteriating.g devascularizing.g deviling.g devilling.g devitalising.g devitalizing.g deworming.g dextrinating.g dextrinizing.g diacetylating.g diacylating.g diagraming.g diagramming.g dialkylating.g dialoging.g dialoguing.g dialysing.g diapausing.g diapering.g diazotizing.g dibbling.g dickering.g dideuterating.g diesterifying.g difluorinating.g digitalising.g digitilising.g digitising.g digitizing.g dihalogenating.g dihydrogenating.g dihydroxylating.g diiodinating.g diking.g dilatating.g dimerising.g dimethylating.g dimiting.g dimitting.g dimpling.g diphosphorylating.g dirtying.g disacidifying.g disadvantaging.g disaggregating.g disagreeing.g disambiguating.g disarraying.g disbelieving.g disbudding.g disbuding.g disburdening.g discoing.g discolouring.g discommoding.g discomposing.g disconfirming.g discountenancing.g discretising.g discretizing.g disembodying.g disemboweling.g disencumbering.g disfavoring.g dishabituating.g disheveling.g dishevelling.g dishonoring.g disimmunizing.g disinhibiting.g disinserting.g disjointing.g dismutating.g disoccluding.g disordering.g disorganising.g disorganizing.g dispensarising.g dispensarizing.g dispiriting.g disproportionating.g disquieting.g disregulating.g dissatisfying.g dissimilating.g distempering.g distraining.g divulsing.g docketing.g dogging.g dolling.g dollying.g domiciling.g doming.g dorsalising.g dorsiducting.g dosing.g dossing.g douching.g doweling.g dowelling.g downmodulating.g downregulating.g downstaging.g dowsing.g dramatising.g drating.g dratting.g driveling.g drivelling.g drudging.g dumfounding.g duning.g dunning.g duplexing.g dyking.g dysregulating.g earing.g earthing.g ebbing.g echolocating.g economising.g ecphorising.g ecphorizing.g ectropionising.g ectropionizing.g editorialising.g educing.g edulcorating.g effectuating.g effing.g egesting.g ekphorizing.g elating.g electroblotting.g electro-cauterising.g electrocauterising.g electro-cauterizing.g electrocauterizing.g electrodialysing.g electroeluting.g electro-injecting.g electroinjecting.g electroinserting.g electrophoresing.g electrophoring.g electroplating.g electroporating.g electrotransfering.g electrotransferring.g electroverting.g eluting.g elutriating.g emaciating.g embolising.g embrocating.g emedullating.g empaneling.g empathising.g emphasising.g emplacing.g emulsioning.g enameling.g enamoring.g enamouring.g encapsulating.g enchaining.g encoring.g encrusting.g endarterectomising.g endarterectomizing.g endoscoping.g endothelialising.g enduing.g energising.g energizing.g enfeebling.g engrafting.g engrailing.g enkindling.g enlacing.g enplaning.g enrapturing.g ensheathing.g ensilaging.g ensiling.g enterectomising.g enterectomizing.g enthraling.g entropionizing.g envelopping.g envenoming.g environing.g enwraping.g enwrapping.g epilating.g epimerising.g epithelialising.g epithelializing.g epithelising.g epithelizing.g epitomising.g epoxidising.g epoxidizing.g equaling.g equalising.g equilibrating.g eroticising.g eroticizing.g erotising.g erotizing.g essaying.g esterifying.g estranging.g estrogenising.g estrogenizing.g etherising.g etherizing.g ethylating.g euthanatising.g euthanatizing.g euthanising.g euthanizing.g evaginating.g everting.g evidencing.g exacting.g exanimating.g excerpting.g exchange-transfusing.g excogitating.g execrating.g exenterating.g exorcising.g expatriating.g exsanguinating.g exsecting.g exsomatizing.g exteriorising.g exteriorizing.g externalising.g extruding.g extubating.g exulting.g eyeing.g factorising.g factorizing.g faggoting.g fagoting.g familiarising.g fantasising.g faradising.g faradizing.g farnesylating.g farting.g fathering.g feather-beding.g fecundating.g federalising.g federalizing.g feeing.g felicitating.g feminising.g feminizing.g fenestrating.g fertilising.g festering.g feuing.g fevering.g fictionalising.g fictionalizing.g field_testing field-testing.g filching.g filtrating.g finalising.g fingerprinting.g fire-proofing.g fireproofing.g fissuring.g fistulising.g flabbergasting.g flanging.g flawing.g flecking.g fleshing.g flexibilising.g flexibilizing.g flouncing.g floundering.g flouring.g fluidizing.g fluoresceinating.g fluoridising.g fluoridizing.g fluoroscoping.g fluting.g foaling.g focalising.g fogging.g foging.g footling.g footnoting.g footprinting.g footsloging.g foraying.g forbidding.g forbiding.g forboding.g forebidding.g forebiding.g foreboding.g foredooming.g foregrounding.g foreknew.g foreknowing.g foresting.g foretasting.g formalinising.g formalinizing.g formalising.g formatting.g formylating.g fossilising.g fowling.g foxhunting.g foxing.g fractionating.g franchising.g fraternising.g freckling.g free_grafting free-grafting.g freeze_drying freeze-drying.g freeze-fracturing.g freighting.g fringing.g frivolling.g frolicking.g frothing.g fruiting.g fuddling.g functionalising.g functionalizing.g funking.g funneling.g furcating.g furring.g gabbing.g gabbling.g gadding.g galactosylating.g galavanting.g galivanting.g galumphing.g galvanising.g ganglionectomising.g ganglionectomizing.g gangrening.g gaping.g gapping.g garaging.g garlanding.g garoting.g garotting.g garroting.g garrotting.g gasing.g gassing.g gastrectomising.g gastrectomizing.g gating.g gavaging.g gazeting.g gazetting.g gelatinising.g gelding.g generalising.g gening.g genning.g genotyping.g gentling.g genuflecting.g geocoding.g geranylgeranylating.g ghosting.g gingering.g girdling.g glacing.g glamorising.g glissading.g globalising.g glomectomising.g glomectomizing.g gloming.g glomming.g gloving.g glowering.g glucoronising.g glucuronidating.g glueing.g gluing.g glycating.g glycerolating.g glycerolizing.g glycosylating.g gonadectomizing.g goosing.g gormandising.g gowning.g graining.g grandfathering.g grandparenting.g graphing.g grassing.g graveling.g greening.g griming.g grizzling.g grommeting.g grubbing.g grubing.g guesting.g gulling.g gusseting.g guttering.g guying.g habilitating.g habituating.g haemagglutinating.g haemoagglutinating.g haemocoagulating.g haemodialysing.g haemodialyzing.g haemodiluting.g haemolysing.g haemolyzing.g haemoperfusing.g haemorrhaging.g hallmarking.g halogenating.g handpicking.g haploidising.g happing.g haptenating.g harmonising.g hasping.g headlining.g hemicastrating.g hemi-deleting.g hemisecting.g hemispherectomising.g hemispherectomizing.g hemodialysing.g hemodialyzing.g hemodiluting.g hemolysing.g hemoperfusing.g hemorrhaging.g heparinising.g heparinizing.g hepatectomising.g hepatectomizing.g heterodimerising.g hexing.g hiccoughing.g hieing.g high-jacking.g hirudinizing.g histoculturing.g hoboing.g holidaying.g holing.g homing.g homodimerising.g homodimerizing.g homogenising.g homografting.g honeycombing.g hooping.g horning.g horsing.g hospitalising.g hoting.g hotting.g hoving.g hoxing.g humanising.g humanizing.g humoring.g hurdling.g husbanding.g hyalinising.g hyalinizing.g hybridising.g hydrogenating.g hydrogenizing.g hydrolising.g hydrolizing.g hydrolysing.g hydroxylating.g hying.g hymning.g hyperacetylating.g hyperactivating.g hypercontracting.g hyperdefaecating.g hyperexpressing.g hyperextending.g hyperfiltrating.g hyperfractionating.g hyperimmunising.g hyperimmunizing.g hyper-inducing.g hyperinducing.g hyperinnervating.g hyperluteinising.g hyper-methylating.g hypermethylating.g hypernucleating.g hyperpolarising.g hyperproducing.g hypersensitising.g hyperstimulating.g hypertransfusing.g hypnoidizing.g hypnotising.g hypomineralising.g hypomineralizing.g hypo-phosphorylating.g hypophosphorylating.g hypophysectomising.g hypophysectomizing.g hyposensitizing.g hypothecating.g hysterectomising.g hysterectomizing.g idealising.g idolising.g imbedding.g imbeding.g immobilising.g immortalising.g immunising.g immunoabsorbing.g immunoadsorbing.g immuno_assaying immuno-assaying.g immunoassaying.g immunobloting.g immunoblotting.g immunocompromising.g immunodepleting.g immunodepressing.g immunoenhancing.g immunoexpressing.g immunoinhibiting.g immunoisolating.g immunolabeling.g immunolabelling.g immunolocalising.g immunolocalizing.g immunoneutralising.g immunoneutralizing.g immunophenotyping.g immunopurifying.g immunoradioassaying.g immunoregulating.g immunoscreening.g immunoselecting.g immunostaining.g immunostimulating.g immunosuppressing.g immuno-targeting.g immunotargeting.g immunotitrating.g immunotyping.g immuring.g impaneling.g imperiling.g impersonalising.g impersonalizing.g importuning.g incising.g inclosing.g incommoding.g incrementing.g inculpating.g individualising.g individualizing.g indorsing.g induing.g industrialising.g inebriating.g influxing.g ingling.g ingrafting.g ingraining.g inhuming.g initialing.g initialising.g initializing.g inlaying.g inlayinging.g innervating.g inputing.g inputting.g inseting.g insetting.g insolubilising.g insolubilizing.g insonifying.g instancing.g institutionalising.g instrumenting.g insufflating.g intellectualising.g intellectualizing.g intercalating.g interconverting.g interfacing.g interiorising.g interiorizing.g interlacing.g interlarding.g interleafing.g interlinking.g internalising.g internationalising.g interpellating.g interposing.g interspacing.g intrenching.g introjecting.g introspecting.g introverting.g intrusting.g intubating.g inuring.g inventorying.g invoicing.g iodinating.g iodising.g ionising.g iontophoresing.g iridectomizing.g irritating.g isoimmunising.g isoimmunizing.g isomerising.g italicising.g itemising.g jacketing.g jack_knifing jackknifing.g jagging.g jaunting.g jecorizing.g jejunectomising.g jejunectomizing.g jeopardising.g jointing.g juicing.g junking.g karyotyping.g keening.g kenneling.g kennelling.g kenting.g keratinising.g keying.g kidnaping.g kinking.g kneeing.g KO'ing.g KO’ing.g labilising.g labyrinthectomising.g labyrinthectomizing.g lacrymating.g lactonising.g laddering.g lambing.g laminectomising.g laminectomizing.g laming.g lamming.g laparotomising.g laparotomizing.g lapinising.g lapinizing.g larding.g lariating.g larking.g laryngectomising.g laryngectomizing.g lasering.g lassooing.g lateralising.g lathering.g lathing.g lavaging.g layering.g leafleting.g leafletting.g leaguing.g leap-frogging.g leap-froging.g leapfroging.g leashing.g leeching.g leeping.g legalising.g legitimating.g legitimatising.g legitimising.g legitimizing.g lentectomizing.g lesioning.g lettering.g libeling.g liberalising.g ligating.g lilting.g liming.g limning.g linearizing.g linging.g linning.g lipectomising.g lipectomizing.g lipidating.g liping.g liposuctioning.g lipoxygenating.g lipping.g lip-reading.g liquifying.g lithographing.g lithotomizing.g lobectomising.g lobectomizing.g lobotomising.g lobotomizing.g loosing.g lording.g Lording.g louping.g louring.g lowing.g lubrifying.g lucking.g lurking.g luteinising.g luxating.g lymphadenectomising.g lymphadenectomizing.g lyophilising.g lyophilizing.g lypophilising.g lypophilizing.g lysogenising.g lysogenizing.g macadamising.g macadamizing.g machining.g macroencapsulating.g magnetising.g mainstreaming.g malaxating.g malfunctioning.g malignising.g malpositioning.g malting.g mantling.g manumiting.g manumitting.g manuring.g marathoning.g Marathoning.g marathonning.g Marathonning.g marbling.g marginating.g marinading.g marshaling.g marsupializing.g masculinising.g masculinizing.g massacring.g mastectomising.g mastectomizing.g master-minding.g materialising.g matting.g maximising.g mazing.g mechanising.g medialising.g medicalising.g medicalizing.g medisecting.g medullectomising.g medullectomizing.g melanising.g melanizing.g mentoring.g mercerising.g mercerizing.g merchandising.g mercurating.g mercurializing.g mercuriating.g mesmerising.g metabolising.g metabolizing.g metaling.g metalling.g metastasising.g metering.g methylating.g metricising.g metring.g mewing.g micellising.g microagglutinating.g microaggregating.g microbiopsying.g microcannulating.g microcatheterising.g microcatheterizing.g microcomputerising.g microcomputerizing.g microdetermining.g microdiluting.g microdissecting.g microembolising.g microfilling.g microfiltering.g microinjecting.g micromanipulating.g micromilling.g micromodifying.g micronising.g micronizing.g microperfusing.g microprocessing.g microsequencing.g microtitrating.g microtoming.g microwaving.g middling.g mildewing.g militarising.g militarizing.g mimetising.g mimetizing.g mineralising.g mineralizing.g miniaturising.g minifying.g minimising.g minuting.g misadvising.g misattributing.g miscalling.g miscasting.g misclassifying.g miscoding.g misconducting.g misdiagnosing.g mis-folding.g misidentifying.g misincorporating.g mislabeling.g mislabelling.g mislocalising.g mislocalizing.g mismatching.g mispairing.g misperceiving.g misprinting.g misrecognising.g misrecognizing.g misregulating.g misrepairing.g misrouting.g misruling.g misspecifying.g mis-tuning.g mistuning.g mitering.g mitring.g mobilising.g modernising.g moireing.g moisturising.g moisturizing.g moldering.g monophosphorylating.g monopolising.g moonlighting.g moralising.g morcellating.g morphinizing.g morsing.g Morsing.g morticing.g mortising.g mothering.g moth-proofing.g motorcycling.g motorising.g muckraking.g mulcting.g multimerising.g mummifying.g mummying.g mumping.g muscling.g muscularising.g mutagenizing.g myectomizing.g myristoylating.g narcotizing.g narking.g nasalising.g nasalizing.g nationalising.g naturalising.g nauseating.g nebulising.g nebulizing.g necropsying.g necrotising.g negativing.g neighboring.g neighbouring.g nephrectomising.g neping.g nepping.g nerving.g nesslerising.g nesslerizing.g neuromodulating.g neurostimulating.g neutralising.g niching.g nickeling.g nickelling.g niming.g nimming.g Nissl_staining Nissl-staining.g nitrating.g nitrosating.g nitrosylating.g nobbling.g nonplusing.g nonplussing.g noosing.g normalising.g nosing.g notching.g objectifying.g objurgating.g oblating.g obtruding.g obtunding.g obturating.g oestrogenising.g oestrogenizing.g ointing.g O.K.ing.g OKing.g oligomerising.g oligomerizing.g oophorectomising.g oophorectomizing.g operationalising.g operationalizing.g oppugning.g opsonifying.g opsonising.g optimising.g optimizing.g orchidectomising.g orchidectomizing.g ordinating.g organising.g orphaning.g osmicating.g osteotomising.g osteotomizing.g ostracising.g outbraving.g out-competing.g outcompeting.g outdating.g outfacing.g out-Heroding.g outlaying.g outmaneuvering.g outmarching.g outmatching.g out-pacing.g outpacing.g outperforming.g outpointing.g outputing.g outputting.g outranging.g outriding.g outrivaling.g outrivalling.g outsailing.g outspreading.g outstriping.g outstripping.g outvying.g outwearing.g ovariectomising.g ovariectomizing.g over-associating.g overassociating.g over-burdening.g over-capitalising.g overcapitalising.g over-capitalizing.g overcapitalizing.g over-charging.g over-consuming.g overconsuming.g over-cooking.g overcorrecting.g overcroping.g overcropping.g over-crowding.g over-detecting.g overdetecting.g overdiagnosing.g overdosing.g over-eating.g over-elongating.g overelongating.g overemphasising.g over-emphasizing.g over-estimating.g over-exerting.g over-exposing.g overexpressing.g over-feeding.g over-hanging.g overhanging.g over-heating.g over-inserting.g overinserting.g overlaying.g over-learning.g overlearning.g overleeping.g overmastering.g over-praising.g over-predicting.g overpredicting.g over-producing.g over-proliferating.g over-refering.g overrefering.g over-reporting.g overreporting.g over-representing.g overrepresenting.g oversaturating.g over-secreting.g oversewing.g over-simplifying.g over-staging.g overstaging.g overstaining.g overstimulating.g over-straining.g over-stretching.g over-synthesising.g oversynthesising.g over-synthesizing.g oversynthesizing.g overthrowing.g over-transcribing.g overtreating.g overusing.g over-valuing.g overventilating.g overviewing.g over_weighting overweighting.g over-wraping.g overwraping.g over-wrapping.g overwrapping.g oxidising.g oxygenising.g oxygenizing.g ozonising.g ozonizing.g palisading.g palliating.g palpating.g palping.g pancreatectomizing.g paneling.g panelling.g paragraphing.g paralleling.g parameterising.g parameterizing.g parasitising.g parasitizing.g parasoling.g parathyroidectomizing.g parboiling.g parceling.g parcelling.g parroting.g particularising.g pasteurising.g pasturing.g patronising.g peaning.g peening.g pelleting.g pelletising.g pelletizing.g penalising.g penciling.g pensioning.g peopling.g pepsinating.g pepsinising.g pepsinizing.g peptonising.g percussing.g perifusing.g peritomizing.g peritonealizing.g peritonizing.g permeabilizing.g permeablising.g peroxidising.g personalising.g pestling.g phagocytising.g phagocytizing.g phagocytosing.g phalangizing.g phenocopying.g phenolating.g phenotyping.g philosophising.g phlebotomising.g phlorhizinising.g phlorhizinizing.g phloridzinising.g phloridzinizing.g phosphonylating.g phosphorylating.g photoactivating.g photobleaching.g photodamaging.g photodecomposing.g photoinactivating.g photoinducing.g photoisomerising.g photolabeling.g photolabelling.g photolysing.g photo-oxidising.g photooxidising.g photo-oxidizing.g photopolymerising.g photopolymerizing.g photoprotecting.g photoreducing.g photoregulating.g photoreversing.g photosensitising.g photostating.g photostimulating.g physicking.g piggybacking.g pilling.g pillowing.g pinding.g pinealectomising.g pinealectomizing.g pinioning.g pinking.g pin-pointing.g pipetting.g pithing.g plagiarising.g plaiting.g planimetering.g planking.g plasmolysing.g plasmolyzing.g plateauing.g platinating.g plating.g pleaing.g pleating.g plicating.g pluming.g plummeting.g plumping.g plunking.g pneumonectomising.g pneumonectomizing.g podding.g poding.g polarising.g pole-axing.g poleaxing.g politicising.g politzerizing.g pollacking.g pollarding.g polyadenalating.g polyadenylating.g polyglutamylating.g polymerising.g polymerizing.g pomading.g pommeling.g pommelling.g poniarding.g popularising.g portacaval_shunting portioning.g postfixing.g potentiating.g potting.g poulticing.g powering.g prawning.g preabsorbing.g preadmiting.g preadmitting.g precepting.g precising.g precoating.g preconditioning.g precooking.g precooling.g preculturing.g predating.g predeceasing.g predefining.g predestinating.g pre-digesting.g predigesting.g pre-embedding.g preembedding.g pre-embeding.g preembeding.g pre-establishing.g preestablishing.g preexisting.g pre-exposing.g preexposing.g prefeeding.g prefixing.g preimmunizing.g preinducing.g preinfecting.g pre-irradiating.g preirradiating.g prelabeling.g prelabelling.g preloading.g preluding.g premedicating.g premiering.g premissing.g premixing.g preping.g prepossessing.g prepping.g preprinting.g preprocessing.g preprograming.g preprogramming.g preprotecting.g prereducing.g prescreening.g preselecting.g presensitizing.g pre-seting.g preseting.g pre-setting.g presetting.g presoaking.g prespawning.g prespecifying.g pressurising.g prestimulating.g pre-surfacing.g pretraining.g pretreating.g previewing.g prewarming.g prewashing.g prickling.g prioritising.g prioritizing.g prising.g privatising.g probating.g profaning.g professionalizing.g prognosing.g prolating.g pronging.g propagandising.g prophesying.g propitiating.g prorating.g proroguing.g proselytising.g prospecting.g prostatectomising.g prostatectomizing.g proteolysing.g proteolyzing.g protracting.g provisioning.g pseudonormalising.g psyching.g psycho-analysing.g psycho-analyzing.g ptyalizing.g publicising.g puddling.g pulping.g pulverising.g puping.g pupping.g purposing.g purpurating.g puttying.g pyridoxylating.g quadding.g quading.g quadrisecting.g quadruplicating.g quailing.g quantising.g quantitating.g quantizing.g quarking.g quarreling.g quarrelling.g quartisecting.g quaternizing.g queening.g Queening.g queuing.g quizzing.g rabbiting.g rabbitting.g radiographing.g radioimmunoassaying.g radiolabeling.g radiolabelling.g radiolocalising.g radiolocalizing.g radiosensitising.g radiosensitizing.g ragging.g ranching.g randomising.g randomizing.g rappeling.g rappelling.g rarefying.g rasing.g rationalising.g raying.g razoring.g reabsorbing.g reaccumulating.g reacquiring.g re-adapting.g readding.g readdressing.g readministering.g readying.g re-afforesting.g reafforesting.g reaggregating.g realigning.g realising.g reallocating.g reaming.g re-amplifying.g reamplifying.g reamputating.g reanalysing.g reanalyzing.g re-animating.g reanimating.g reappraising.g re-approximating.g reapproximating.g re-arterialising.g rearterialising.g re-arterializing.g rearterializing.g reasserting.g reassigning.g reassociating.g reassorting.g reattaching.g rebasing.g rebinding.g rebling.g recalcifying.g recalibrating.g recanalizing.g recategorising.g recategorizing.g recatheterising.g recatheterizing.g receipting.g recemising.g recertifying.g rechallenging.g rechromatographing.g recirculating.g reclassifying.g recloning.g recoding.g recognising.g recolonising.g recombining.g recompressing.g reconceptualizing.g reconfiguring.g reconnoitering.g reconstituting.g recontaminating.g recontouring.g re-converting.g re-counting.g re-covering.g recultivating.g reculturing.g redacting.g rededicating.g redescribing.g redetecting.g redetermining.g redevelopping.g reding.g redirecting.g redissecting.g re-echoing.g reeducating.g re-elevating.g reemphasizing.g re-endothelialising.g reendothelialising.g re-endothelializing.g re-engineering.g reengineering.g re-entering.g re-epithelialising.g reepithelialising.g re-epithelializing.g re-equilibrating.g re-esterifying.g reesterifying.g reevaluating.g re-examining.g reexamining.g re-excising.g reexcising.g re-exploring.g reexploring.g reexposing.g reexpressing.g re-extracting.g reextracting.g refacing.g refeeding.g refereeing.g refereing.g referencing.g refering.g reffing.g refinishing.g refluxing.g refolding.g reforesting.g reformating.g reformatting.g reframing.g regionalising.g regionalizing.g regrafting.g regularising.g rehearing.g reheating.g rehospitalising.g rehospitalizing.g reimmunizing.g re-implanting.g reimplanting.g reincarcerating.g reincarnating.g re-inflating.g reinitiating.g reinjecting.g reinjuring.g reinnervating.g reinoculating.g reinserting.g reinstituting.g re-internalising.g reinternalising.g re-internalizing.g reinternalizing.g re-interviewing.g reinterviewing.g reintroducing.g reintubating.g re-inventing.g re-irradiating.g reisolating.g rejigging.g rejiging.g re-joining.g relabeling.g relabelling.g relaparoscopying.g relearning.g relining.g relipidating.g relocalising.g relocalizing.g remaindering.g remaking.g remaping.g remapping.g remediating.g remilitarising.g remobilising.g remodeling.g remyelinating.g renaturing.g reneguing.g re-obliterating.g reobliterating.g re-occluding.g re-occurring.g reoccurring.g reorganising.g reoxidising.g reoxygenating.g repartitioning.g repatterning.g reperforating.g reperfusing.g reperitonealising.g reperitonealizing.g replating.g repointing.g repolarising.g repopulating.g reposing.g repositing.g repositioning.g repoting.g repotting.g repriming.g reprobating.g reprocessing.g reprograming.g reprogramming.g republishing.g repurifying.g requiting.g rerunning.g resampling.g rescaning.g rescanning.g re-scoering.g rescoering.g re-scoring.g rescoring.g rescreening.g resealing.g resecting.g resensitising.g resequencing.g residualising.g residualizing.g re-slicing.g reslicing.g resocialising.g resocializing.g resolubilizing.g resorbing.g respelling.g restaging.g restaining.g re-stenosing.g restimulating.g restretching.g restudying.g resulfating.g resulphating.g resurveying.g resuspending.g resuturing.g resynthesising.g resynthesizing.g retraining.g retransforming.g retransfusing.g retransplanting.g retraumatizing.g retreading.g re-treating.g retroceding.g retrofiting.g retrofitting.g retrotranscribing.g retyping.g reusing.g reutilising.g reutilizing.g revaccinating.g revalidating.g revascularising.g revascularizing.g reveiling.g revendicating.g revenging.g revitalising.g revivifying.g revolutionalising.g revolutionalizing.g revolutionising.g rewarming.g reworking.g rexing.g rhapsodising.g ribosylating.g ricking.g ricochetting.g ridging.g riming.g riting.g ritting.g ritualising.g ritualizing.g riving.g robing.g romanticising.g roneoing.g rongeuring.g roofing.g rooking.g roseting.g rosetting.g rosining.g rough-casting.g roughcasting.g rough-drying.g roughhousing.g rouging.g roweling.g rowelling.g rubberising.g ruddling.g ruffing.g rumoring.g rumouring.g rusking.g ruting.g rutting.g sabering.g sabring.g salaaming.g salifying.g sallowing.g salving.g sandaracing.g sandaracking.g sand-blasting.g sanitising.g sanitizing.g sating.g saucerizing.g sauting.g savoring.g savvying.g scabing.g scalloping.g scaming.g scamming.g scamping.g scapegoating.g scar_cicatrising scar_cicatrizing scarifying.g sclerotising.g sclerotizing.g scolloping.g scourging.g scrabbling.g scragging.g scraging.g scribing.g scrimmaging.g scripting.g scrupling.g scrutinising.g SCUBAing.g scudding.g scuding.g scuppering.g scything.g seaming.g secluding.g sectioning.g sectoring.g secularising.g sedimenting.g segmenting.g semaphoring.g semisynthesising.g semisynthesizing.g sensibilising.g sensibilizing.g sensitising.g sequencing.g sequestrating.g serialising.g serogrouping.g serotyping.g servo-controling.g servocontroling.g servo-controlling.g servocontrolling.g sexing.g sexualising.g sexualizing.g shafting.g shallowing.g shambling.g shanghaiing.g sheering.g sheeting.g shellacing.g shellacking.g shiming.g shimming.g shining.g shinning.g shipwrecking.g shoding.g shoeing.g short-listing.g shoveling.g shrining.g shriving.g shuttling.g sialadenectomizing.g sialylating.g siccing.g sicing.g sickling.g side-tracking.g signalising.g signalizing.g siliconising.g siliconizing.g silting.g silvering.g silylating.g singularising.g singularizing.g sintering.g siting.g situating.g skateboarding.g skeining.g skeletonising.g skying.g slanging.g slatting.g sledding.g sleding.g sleighing.g slenderising.g sleuthing.g slitting.g slivering.g sloping.g slopping.g sludging.g sluicing.g smirching.g smuting.g smutting.g snaffling.g snicking.g snowshoeing.g snugging.g snuging.g soaping.g socialising.g sodding.g soding.g soft-pedaling.g soft-soaping.g soft-soldering.g solacing.g solating.g solemnising.g solemnizing.g soliloquising.g soling.g soloing.g solubilising.g solubilizing.g solvating.g somatising.g somatotyping.g sonicating.g sooting.g sorbing.g sorrowing.g sovietizing.g spangling.g spatchcocking.g spating.g spatulating.g speckling.g spilt.g spilting.g spindling.g spiralising.g spiritualising.g spiritualizing.g spirting.g splenectomising.g splenectomizing.g splinting.g splotching.g spoofing.g spooking.g spooling.g spooning.g sporulating.g spudding.g spuding.g squeegeeing.g squeegeing.g stabling.g stagging.g stanching.g standardising.g steam-heating.g steam-rollering.g stenciling.g stencilling.g sterilising.g stewarding.g stigmatising.g stilting.g stinking.g stock-piling.g stockpiling.g stomping.g stoppering.g stranding.g strangulating.g striating.g stricturing.g stroping.g stropping.g strychnizing.g stultifying.g stupefying.g stylising.g subcategorising.g subcategorizing.g sub-classifying.g subclassifying.g subcompartmentalising.g subcompartmentalizing.g subcultivating.g subculturing.g subexciting.g subgrouping.g subindexing.g subjoining.g subliming.g sublocalising.g sublocalizing.g subluxating.g suborning.g subsaturating.g subsidising.g subspecialising.g subtitling.g subtyping.g suctioning.g sugaring.g sulfating.g sulfonating.g sulfurating.g sulfureting.g sulfuretting.g sulfurizing.g sulphating.g sulphonating.g sulphurating.g sulphureting.g sulphuretting.g sulphurising.g sulphurizing.g summarising.g sunburning.g superactivating.g superannuating.g supercooling.g superducting.g superfusing.g superhydrating.g superinducing.g superintending.g superposing.g superprecipitating.g supersaturating.g supershifting.g suprarenalectomizing.g surcharging.g surfeiting.g suscitating.g suturing.g swabbing.g swabing.g swaddling.g swaging.g swaning.g swanning.g swilling.g swobbing.g swobing.g swoping.g swopping.g syllabicating.g syllabifying.g syllabizing.g symbolising.g sympathectomising.g sympathectomizing.g sympathising.g synapsing.g synchronising.g synergising.g synonymizing.g synostosing.g synthesising.g synthetising.g synthetizing.g syringing.g systematising.g tabooing.g tabuing.g tape-recording.g targetting.g taring.g tarmacing.g tarmacking.g teeing.g telecommunicating.g telefaxing.g telepathizing.g teletransmiting.g teletransmitting.g tempering.g temporising.g tenanting.g tenoning.g tenotomizing.g tenting.g tenuring.g terrorising.g teslaizing.g tetanising.g tetanizing.g tetramerising.g thermalising.g thermocauterising.g thermocauterizing.g thermocycling.g thermoregulating.g thermosensitising.g thermosensitizing.g thoracotomising.g thoracotomizing.g throeing.g throing.g thrusting.g thwacking.g thymectomising.g thymectomizing.g thymolizing.g thyroidectomising.g thyroidectomizing.g thyroidizing.g thyroparathyroidectomizing.g timetabling.g tincturing.g tingeing.g tinning.g tittivating.g toggling.g tolerising.g tolerizing.g tonicizing.g tonsillectomizing.g tonsuring.g tooling.g top-dressing.g torquing.g torrefying.g tosylating.g toweling.g trabeculating.g tracheostomizing.g tracheotomizing.g traducing.g trafficing.g trafficking.g trammeling.g trammelling.g tranquillising.g transactivating.g transdifferentiating.g transducing.g transecting.g transesterifying.g transfecting.g transfiguring.g transhiping.g transilluminating.g transiting.g transliterating.g translocating.g transmogrifying.g transphosphorylating.g transsecting.g transshiping.g trapsing.g traumatising.g traumatizing.g travestying.g treadling.g treeing.g trellising.g trenching.g trending.g trepaning.g trepanning.g trephining.g triangulating.g trichinizing.g trilling.g triplicating.g trisecting.g tritiating.g triturating.g trivialising.g trolling.g trooping.g trucking.g truing.g trussing.g trypsinising.g trypsinizing.g tubularizing.g turfing.g turgidizing.g twining.g twinning.g twiting.g twitting.g tyrannising.g ubiquitinating.g ultrapurifying.g ultrasonicating.g unbaring.g unbarring.g unbinding.g unbosoming.g unbound.g unbridling.g uncaping.g uncapping.g unclamping.g uncliping.g unclipping.g unclogging.g uncloging.g uncuffing.g undeceiving.g undercalling.g underdetecting.g underdiagnosing.g underemphasising.g underemphasizing.g underexerting.g under-feeding.g undernourishing.g underpredicting.g undersedating.g understaging.g understaining.g undertreating.g underusing.g underutilising.g underutilizing.g underwriting.g unfiting.g unfitting.g unhorsing.g universalizing.g unknotting.g unmaning.g unmanning.g unravelling.g unroofing.g unsaying.g unseating.g unsexing.g unsticking.g upregulating.g uptaking.g urbanising.g utilising.g vacuuming.g vagotomizing.g vailing.g vandalising.g vandalizing.g vaporising.g vapourising.g vapourizing.g variegating.g variolating.g vascularising.g vascularizing.g vasectomizing.g vaunting.g veneering.g ventralising.g ventralizing.g ventricular_hypertrophying ventriducting.g verbalising.g victimising.g victualing.g victualling.g videoing.g virilising.g virilizing.g visioning.g visualising.g vitalising.g vitalizing.g vitrectomising.g vitrectomizing.g vivifying.g vocalising.g vogueing.g voguing.g volitilising.g vortexing.g vulcanising.g vulcanizing.g vulgarising.g vulnerating.g wagering.g wallpapering.g wanding.g wardening.g waring.g warring.g waterlogging.g wearying.g weaseling.g webbing.g weeing.g weekending.g weiring.g welching.g welling.g wenching.g westernising.g whisking.g whizing.g whizzing.g whopping.g winching.g winkling.g wintering.g wising.g womanising.g wowing.g wracking.g wreathing.g xanthating.g xenografting.g xeroxing.g Xeroxing.g x_raying X_raying x-raying.g xraying.g X-raying.g yarning.g yellowing.g yoking.g zenkerizing.g zig-zagging.g zippering.g link-grammar/data/en/words/words.v.10.20000644000000000000000000000171612536650433014716 0ustar acknowledges.q adds.q admits.q affirms.q agrees.q announces.q argues.q ascertains.q asserts.q assumes.q believes.q brags.q calculates.q charges.q claims.q commands.q comments.q complains.q concedes.q concludes.q confesses.q confirms.q contends.q decides.q declares.q deduces.q determines.q discerns.q discloses.q discovers.q emphasizes.q envisions.q exclaims.q explains.q figures.q guesses.q hints.q hopes.q implies.q inquires.q insists.q intimates.q learns.q maintains.q muses.q mutters.q notes.q observes.q orders.q pledges.q postulates.q predicts.q presumes.q proclaims.q proposes.q proves.q reads.q realizes.q reasons.q recalls.q reckons.q recognizes.q recounts.q reflects.q remarks.q remembers.q repeats.q replies.q reports.q resolves.q responds.q retorts.q reveals.q rules.q shouts.q sighs.q speculates.q states.q stipulates.q stresses.q suggests.q testifies.q theorizes.q thinks.q threatens.q warns.q whispers.q wonders.q writes.q relates.q continues.q link-grammar/data/en/words/words.v.1.p0000644000000000000000000000173012536650433014730 0ustar done_for accounted_for adhered_to arrived_at barked_at belched_at catered_to clung_to complied_with coped_with depended_on disapproved_of discriminated_against embarked_on frowned_on gazed_upon glared_at gossiped_about interfered_with laughed_at lived_in longed_for monkeyed_with objected_to presided_over ratted_on relied_on resorted_to talked_to toyed_with trifled_with voted_on voted_for jumped_on lied_to listened_to screamed_at sat_on spoken_to stepped_on appealed_to attended_to conceived_of dealt_with dispensed_with entered_into improved_on improved_upon negotiated_with operated_on referred_to searched_for stared_at tended_to yelled_at counted_on pointed_to pointed_at fought_with planned_for arranged_for tried_for added_to reckoned_with approved_of ruled_on wished_for hoped_for decided_on cared_for shouted_at dreamed_of dreamt_of thought_of heard_from looked_at called_for uncalled_for asked_for undreamed_of undreamt_of paid_for slept_in agreed_upon talked_about link-grammar/data/en/words/words.n.30000644000000000000000000022635112536650433014474 0ustar anaesthetic.n-u anesthetic.n-u abandonment.n-u abandon.n-u abasement.n-u abdication.n-u aberration.n-u abeyance.n-u abhorrence.n-u abnegation.n-u abnormality.n-u abolition.n-u abortion.n-u abrasive.n-u abridgement.n-u abridgment.n-u abrogation.n-u abruptness.n-u abscess.n-u absenteeism.n-u absinthe.n-u absolution.n-u absolutism.n-u absorption.n-u abstention.n-u abstinence.n-u abstraction.n-u absurdity.n-u abundance.n-u abuse.n-u academia.n-u acceleration.n-u accentuation.n-u acceptability.n-u acceptance.n-u accessibility.n-u accession.n-u access.n-u acclaim.n-u acclamation.n-u acclimatization.n-u accommodation.n-u accomplishment.n-u accordance.n-u accordion.n-u accord.n-u accountability.n-u accountancy.n-u accretion.n-u accumulation.n-u accuracy.n-u acetylene.n-u acidity.n-u acid.n-u acne.n-u acquaintance.n-u acquisition.n-u acquittal.n-u acreage.n-u acrimony.n-u acrylic.n-u action.n-u activation.n-u activism.n-u activity.n-u actuality.n-u acuity.n-u acumen.n-u acupuncture.n-u acuteness.n-u adaptability.n-u adaptation.n-u addiction.n-u addition.n-u adequacy.n-u adhesion.n-u adhesive.n-u adjudication.n-u adjustment.n-u administration.n-u admiration.n-u admissibility.n-u admission.n-u admittance.n-u adobe.n-u adobo.n-u adolescence.n-u ado.n-u adoption.n-u adoration.n-u adornment.n-u adrenaline.n-u adrenalin.n-u adroitness.n-u adulation.n-u adulteration.n-u adultery.n-u adulthood.n-u advancement.n-u advantage.n-u adventure.n-u adversity.n-u advertisement.n-u advertising.n-u advice.n-u advisability.n-u advisement.n-u advocacy.n-u aerosol.n-u aerospace.n-u affability.n-u affectation.n-u affection.n-u affiliation.n-u affinity.n-u affirmation.n-u affluence.n-u Afghan.n-u African.n-u aftercare.n-u aftermath.n-u afternoon.n-u agar.n-u ageing.n-u age.n-u agglomeration.n-u aggravation.n-u aggregation.n-u aggression.n-u aggressiveness.n-u aggro.n-u agidigbo.n-u agility.n-u agitation.n-u ag.n-u agnosticism.n-u agony.n-u agoraphobia.n-u agreement.n-u agribusiness.n-u agriculture.n-u agronomy.n-u aid.n-u aim.n-u aircraft.n-u airmail.n-u air.n-u alabaster.n-u alacrity.n-u alarm.n-u Albanian.n-u Alberian.n-u albumen.n-u alchemy.n-u alcoholism.n-u alcohol.n-u ale.n-u alertness.n-u alfalfa.n-u algebra.n-u Algerian.n-u alienation.n-u alignment.n-u alimony.n-u alizarin.n-u alkali.n-u allegiance.n-u alleviation.n-u alliance.n-u alliteration.n-u allocation.n-u allotment.n-u alloy.n-u allspice.n-u allure.n-u almond.n-u aloofness.n-u alpha.n-u alphorn.n-u alteration.n-u alternation.n-u altitude.n-u alto.n-u altruism.n-u aluminium.n-u aluminum.n-u alum.n-u amalgamation.n-u amaranth.n-u amateurism.n-u amazement.n-u amber.n-u ambiguity.n-u ambivalence.n-u ambrosia.n-u ambush.n-u amelioration.n-u amendment.n-u American.n-u amethyst.n-u amiability.n-u amicability.n-u amity.n-u ammonia.n-u ammunition.n-u amnesia.n-u amortization.n-u amphetamine.n-u amplification.n-u amplitude.n-u amputation.n-u amusement.n-u anaemia.n-u anaesthesia.n-u analgesia.n-u analogy.n-u analysis.n-u anarchism.n-u anarchy.n-u anathema.n-u anatomy.n-u Andorran.n-u Angentinian.n-u anger.n-u angina.n-u Angolan.n-u angora.n-u angst.n-u anguish.n-u animation.n-u anime.n-u animism.n-u animosity.n-u animus.n-u aniseed.n-u anisette.n-u annexation.n-u annihilation.n-u annotation.n-u annoyance.n-u annulment.n-u anonymity.n-u antagonism.n-u antecedence.n-u anthracite.n-u anthrax.n-u anthropology.n-u anticipation.n-u antifreeze.n-u Antiguan.n-u antimony.n-u antipathy.n-u antiquity.n-u anxiety.n-u apartheid.n-u apathy.n-u aphasia.n-u aphrodisiac.n-u aplomb.n-u apoplexy.n-u apostasy.n-u apparel.n-u appeal.n-u appeasement.n-u appendicitis.n-u appetite.n-u applause.n-u apple.n-u applicability.n-u application.n-u applique.n-u appointment.n-u apportionment.n-u apposition.n-u appreciation.n-u apprehension.n-u approbation.n-u appropriation.n-u approval.n-u approximation.n-u apricot.n-u aptitude.n-u aptness.n-u aquamarine.n-u aqua.n-u Arab.n-u arbitration.n-u archaeology.n-u archeology.n-u archery.n-u architecture.n-u archlute.n-u ardor.n-u ardour.n-u area.n-u argon.n-u argot.n-u argumentation.n-u aridity.n-u aristocracy.n-u arithmetic.n-u armament.n-u Armenian.n-u armor.n-u armour.n-u arpeggione.n-u arrangement.n-u arrest.n-u arrogance.n-u arroz_blanco arroz_con_pollo arroz.n-u arsenic.n-u arson.n-u arteriosclerosis.n-u arthritis.n-u artichoke.n-u articulation.n-u artifice.n-u artillery.n-u artistry.n-u art.n-u artwork.n-u asbestos.n-u ascendancy.n-u ascendency.n-u asceticism.n-u Aserbaijani.n-u asexuality.n-u ash.n-u Asian.n-u asparagus.n-u asperity.n-u asphalt.n-u asphyxia.n-u asphyxiation.n-u aspic.n-u aspiration.n-u aspirin.n-u assassination.n-u assault.n-u assemblage.n-u assessment.n-u assimilation.n-u assistance.n-u assonance.n-u asteroid.n-u asthma.n-u astigmatism.n-u astonishment.n-u astringency.n-u astrology.n-u astronomy.n-u astuteness.n-u asylum.n-u asymmetry.n-u atavism.n-u atheism.n-u atonality.n-u atonement.n-u atrophy.n-u attachment.n-u attack.n-u attainment.n-u attendance.n-u attention.n-u attentiveness.n-u attenuation.n-u attire.n-u attitude.n-u attribution.n-u attrition.n-u auction.n-u audacity.n-u audibility.n-u audition.n-u aught.n-u augmentation.n-u austerity.n-u Australian.n-u Austrian.n-u autarchy.n-u autarky.n-u authentication.n-u authenticity.n-u authoritarianism.n-u authority.n-u authorization.n-u authorship.n-u autism.n-u autobiography.n-u autocracy.n-u automation.n-u autonomy.n-u autumn.n-u availability.n-u avail.n-u avarice.n-u aversion.n-u aviation.n-u avocado.n-u avoidance.n-u avowal.n-u awe.n-u awkwardness.n-u azure.n-u baba_ganoush baba_ghanoush babble.n-u backbone.n-u backgammon.n-u backing.n-u backlash.n-u backstroke.n-u backtalk.n-u backwash.n-u bacon.n-u bacteriology.n-u badinage.n-u badminton.n-u badness.n-u bagel.n-u baggage.n-u bagpipe.n-u Bahamian.n-u bail.n-u bait.n-u balance.n-u balderdash.n-u baldness.n-u ballast.n-u ballet.n-u ball.n-u ballyhoo.n-u balm.n-u baloney.n-u balsam.n-u balsa.n-u bamboo.n-u banality.n-u banana.n-u banditry.n-u bandoneón.n-u bandura.n-u bane.n-u Bangladeshi.n-u banishment.n-u banjo.n-u bankholding.n-u banking.n-u bankruptcy.n-u banter.n-u baptism.n-u barbacoa.n-u Barbadian.n-u barbarity.n-u barbiturate.n-u barf.n-u baritone.n-u barium.n-u barleycorn.n-u barley.n-u barrenness.n-u barstar.n-u barter.n-u baryton.n-u basalt.n-u baseball.n-u basil.n-u basketball.n-u basketry.n-u bas-relief.n-u bassoon.n-u basso.n-u bass.n-u bathos.n-u batter.n-u battery.n-u batting.n-u battle.n-u bauxite.n-u bawdy.n-u bawu.n-u bayan.n-u bazooka.n-u beachwear.n-u beatification.n-u beauty.n-u beaver.n-u bedding.n-u bedlam.n-u beech.n-u beef.n-u beer.n-u beeswax.n-u beet.n-u beggary.n-u begging.n-u behalf.n-u behavior.n-u behaviourism.n-u behaviour.n-u beige.n-u Belarusian.n-u Belgian.n-u Belizian.n-u belligerency.n-u beneficence.n-u benevolence.n-u Beninese.n-u benzene.n-u benzine.n-u benzol.n-u bequest.n-u bereavement.n-u beryl.n-u bestiality.n-u bestowal.n-u beta.n-u betrayal.n-u betterment.n-u bewilderment.n-u bezique.n-u Bhutanian.n-u bias.n-u bibliography.n-u bicarbonate.n-u bidding.n-u bifurcation.n-u bigamy.n-u bigotry.n-u bikini.n-u bilateralism.n-u bile.n-u bilge.n-u billing.n-u binary.n-u bingo.n-u biochemistry.n-u biology.n-u biotechnology.n-u birch.n-u birdseed.n-u birth.n-u biscuit.n-u bisection.n-u bisexuality.n-u bismuth.n-u bistre.n-u bitterness.n-u bitumen.n-u biz.n-u blackmail.n-u blackness.n-u blame.n-u blancmange.n-u blandness.n-u blare.n-u blasphemy.n-u blather.n-u bleach.n-u bleeding.n-u blight.n-u blindness.n-u bliss.n-u blitzkrieg.n-u bloodlust.n-u blood.n-u bloodshed.n-u bloodthirstiness.n-u bloom.n-u blossom.n-u blubber.n-u blueberry.n-u bluff.n-u bluntness.n-u bluster.n-u board.n-u boarding.n-u bodywork.n-u boldness.n-u Bolivian.n-u bombarde.n-u bombardment.n-u bombast.n-u bondage.n-u bond.n-u bonhomie.n-u boogie.n-u bookkeeping.n-u boo.n-u booty.n-u booze.n-u borax.n-u bordonua.n-u boredom.n-u boron.n-u borrowing.n-u Bosnian.n-u botany.n-u bother.n-u botulism.n-u bouillon.n-u bounce.n-u bounty.n-u bourbon.n-u bouzouki.n-u bovril.n-u bowing.n-u bowling.n-u boyhood.n-u bracken.n-u braille.n-u brain.n-u bramble.n-u brandy.n-u bran.n-u brass.n-u bravado.n-u bravery.n-u brawn.n-u Brazilian.n-u bread.n-u breadth.n-u breakdown.n-u breakfast.n-u breaststroke.n-u breathing.n-u breath.n-u brevity.n-u briar.n-u bribery.n-u bric-a-brac.n-u brick.n-u brickwork.n-u brightness.n-u brilliance.n-u brimstone.n-u brine.n-u brinkmanship.n-u brisket.n-u British.n-u brocade.n-u broccoli.n-u bromide.n-u bromine.n-u bronchitis.n-u bronze.n-u brotherhood.n-u broth.n-u brownstone.n-u brunch.n-u Bruneian.n-u brush.n-u brushwork.n-u brutality.n-u bubbly.n-u buckshot.n-u buckskin.n-u buckwheat.n-u budget.n-u buffoonery.n-u buff.n-u buggery.n-u bugle.n-u Bulgarian.n-u bullion.n-u bull.n-u bullroarer.n-u bullshit.n-u bum.n-u bunk.n-u bunkum.n-u bun.n-u buoyancy.n-u burden.n-u bureaucracy.n-u burglary.n-u burgundy.n-u burial.n-u burlap.n-u burlesque.n-u burrito.n-u Burundian.n-u bush.n-u business.n-u bustle.n-u butane.n-u butchery.n-u butterfat.n-u buttermilk.n-u butter.n-u butterscotch.n-u cabbage.n-u cable.n-u cachet.n-u cactus.n-u cadmium.n-u caffeine.n-u cajolery.n-u cake.n-u calcium.n-u calculation.n-u calculus.n-u calibration.n-u calibre.n-u calico.n-u calligraphy.n-u calliope.n-u callousness.n-u calm.n-u calmness.n-u calumny.n-u camaraderie.n-u Cambodian.n-u Cameroonian.n-u camomile.n-u camouflage.n-u camping.n-u campus.n-u Canadian.n-u cancellation.n-u cancer.n-u candlelight.n-u candor.n-u candour.n-u candy.n-u cane.n-u canker.n-u cannabis.n-u cannibalism.n-u canonization.n-u cantaloupe.n-u cant.n-u Cantonese.n-u canvas.n-u capability.n-u capitalism.n-u capitalization.n-u capital.n-u capitulation.n-u cappuccino.n-u captivity.n-u capture.n-u caramel.n-u carbohydrate.n-u carbonization.n-u carbon.n-u carcinoma.n-u cardamom.n-u cardboard.n-u card.n-u careerism.n-u carefulness.n-u carelessness.n-u care.n-u cargo.n-u caricature.n-u carillon.n-u carmine.n-u carnage.n-u carne_asada carne_gisada carne_guisada carne.n-u carnitas.n-u carpentry.n-u carrion.n-u carrot.n-u carsickness.n-u cartage.n-u cartilage.n-u cartography.n-u casework.n-u cashmere.n-u cash.n-u castanets.n-u caste.n-u castigation.n-u castration.n-u castrato.n-u catarrh.n-u catastrophe.n-u catchup.n-u catechism.n-u catgut.n-u catholicity.n-u catsup.n-u cattle.n-u cauliflower.n-u causality.n-u causation.n-u caution.n-u caviar.n-u cayenne.n-u CD.n-u cedar.n-u celadon.n-u celebration.n-u celebrity.n-u celerity.n-u celery.n-u celesta.n-u celibacy.n-u cello.n-u cellophane.n-u celluloid.n-u cellulose.n-u cement.n-u censure.n-u centralization.n-u centrex.n-u ceramic.n-u cereal.n-u ceremonial.n-u ceremony.n-u cerise.n-u certainty.n-u certification.n-u certitude.n-u cerulean.n-u cessation.n-u chaff.n-u chagrin.n-u chain.n-u chairmanship.n-u chalk.n-u chalumeau.n-u champagne.n-u championship.n-u change.n-u chaos.n-u characterization.n-u character.n-u charcoal.n-u charge.n-u charisma.n-u charity.n-u charm.n-u chartreuse.n-u chastisement.n-u chastity.n-u château.n-u chattel.n-u chatter.n-u chauvinism.n-u cheapness.n-u cheek.n-u cheerfulness.n-u cheesecake.n-u cheesecloth.n-u cheese.n-u chemistry.n-u chemotherapy.n-u chess.n-u chestnut.n-u chiaroscuro.n-u chicanery.n-u chickenfeed.n-u chicken.n-u chickenpox.n-u chic.n-u chicory.n-u chiffon.n-u childbirth.n-u childhood.n-u Chilean.n-u chile_con_carne chile_con_queso chili_con_carne chili_con_queso chili.n-u china.n-u chinaware.n-u Chinese.n-u chintz.n-u chi.n-u chiropody.n-u chitarra.n-u chivalry.n-u chive.n-u chloride.n-u chlorination.n-u chlorine.n-u chloroform.n-u chlorophyll.n-u chocolate.n-u choice.n-u cholera.n-u cholesterol.n-u choreography.n-u chorizo.n-u chowder.n-u chow.n-u chrome.n-u chromium.n-u chronology.n-u church.n-u chutney.n-u cider.n-u cimbalom.n-u cinematography.n-u cinnabar.n-u cinnamon.n-u circularity.n-u circulation.n-u circumcision.n-u circumlocution.n-u circumnavigation.n-u circumspection.n-u circumvention.n-u cirrhosis.n-u citation.n-u citizenship.n-u citrus.n-u cittern.n-u civility.n-u civilization.n-u clairvoyance.n-u clamour.n-u claptrap.n-u claret.n-u clarification.n-u clarinet.n-u clarity.n-u classicism.n-u classification.n-u class.n-u claustrophobia.n-u claves.n-u clavichord.n-u clavinet.n-u clay.n-u cleaner.n-u cleanliness.n-u cleanser.n-u clearance.n-u clemency.n-u cleverness.n-u climatology.n-u clockwork.n-u closeness.n-u closure.n-u clothing.n-u cloth.n-u clout.n-u clover.n-u clumsiness.n-u clutter.n-u coagulation.n-u coalescence.n-u coal.n-u cobalt.n-u cocaine.n-u cockfighting.n-u cocoa.n-u coconut.n-u codeine.n-u code.n-u cod.n-u coeducation.n-u coercion.n-u coexistence.n-u coffee.n-u cogency.n-u cogeneration.n-u cogitation.n-u cognac.n-u cognition.n-u cognizance.n-u cohabitation.n-u coherence.n-u cohesion.n-u coinage.n-u coincidence.n-u coin.n-u coitus.n-u coke.n-u cola.n-u coldness.n-u cold.n-u coleslaw.n-u colic.n-u colitis.n-u collaboration.n-u collage.n-u collateral.n-u collation.n-u collectivization.n-u college.n-u collision.n-u colloquy.n-u collusion.n-u Colombian.n-u colonialism.n-u colonization.n-u coloratura.n-u color.n-u colouring.n-u colour.n-u combat.n-u comb.n-u combustion.n-u comedy.n-u comeliness.n-u comfort.n-u commemoration.n-u commendation.n-u commentary.n-u commerce.n-u commercialism.n-u commiseration.n-u commission.n-u commotion.n-u communication.n-u communion.n-u communism.n-u commutation.n-u compactness.n-u companionship.n-u company.n-u comparability.n-u comparison.n-u compassion.n-u compatibility.n-u compensation.n-u competence.n-u competition.n-u competitiveness.n-u compilation.n-u complacence.n-u complacency.n-u completeness.n-u completion.n-u complexity.n-u compliance.n-u complicity.n-u composition.n-u compost.n-u composure.n-u compote.n-u compound.n-u comprehensibility.n-u comprehension.n-u comprehensiveness.n-u compression.n-u compromise.n-u compulsion.n-u computation.n-u concatenation.n-u concavity.n-u concealment.n-u conceit.n-u concentrate.n-u concentration.n-u conception.n-u concertina.n-u conch.n-u conciliation.n-u conciseness.n-u concordance.n-u concord.n-u concrete.n-u concurrence.n-u concussion.n-u condemnation.n-u condensation.n-u condescension.n-u condiment.n-u conditioner.n-u condolence.n-u conduction.n-u conductivity.n-u conduct.n-u confectionery.n-u confection.n-u confederation.n-u conferment.n-u confession.n-u confidence.n-u confidentiality.n-u confinement.n-u confirmation.n-u confiscation.n-u conflict.n-u conformity.n-u confrontation.n-u confusion.n-u conga.n-u congestion.n-u Congolese.n-u congregation.n-u conjecture.n-u conjugation.n-u conjunction.n-u connexion.n-u connivance.n-u consanguinity.n-u conscientiousness.n-u consciousness.n-u conscription.n-u consecration.n-u consent.n-u conservation.n-u conservatism.n-u consideration.n-u consistency.n-u consolation.n-u consolidation.n-u consomme.n-u consonance.n-u consortium.n-u constancy.n-u consternation.n-u constipation.n-u constitutionality.n-u constraint.n-u constriction.n-u construction.n-u consultation.n-u consummation.n-u consumption.n-u contact.n-u contagion.n-u containment.n-u contamination.n-u contemplation.n-u contempt.n-u contentment.n-u content.n-u context.n-u contiguity.n-u continence.n-u contingency.n-u continuation.n-u continuity.n-u contraband.n-u contrabassoon.n-u contraception.n-u contraction.n-u contradiction.n-u contradistinction.n-u contralto.n-u contrary.n-u contrast.n-u contravention.n-u contrition.n-u control.n-u controversy.n-u convalescence.n-u convection.n-u convenience.n-u convergence.n-u conversation.n-u conversion.n-u convertibility.n-u convexity.n-u conveyance.n-u convocation.n-u cookery.n-u cooking.n-u cookware.n-u coolant.n-u coolness.n-u co-operation.n-u cooperation.n-u co-ordination.n-u coordination.n-u copper.n-u copra.n-u copulation.n-u copyright.n-u coral.n-u cordiality.n-u cordial.n-u cord.n-u corduroy.n-u cork.n-u cornet.n-u cornett.n-u cornflour.n-u corn.n-u cornstarch.n-u coronation.n-u corpulence.n-u correction.n-u correctness.n-u correspondence.n-u corroboration.n-u corrosion.n-u corruption.n-u Corsican.n-u cortisone.n-u cosmology.n-u cost.n-u costume.n-u cotton.n-u council.n-u counseling.n-u counsel.n-u countenance.n-u counteraction.n-u counterespionage.n-u counterintelligence.n-u counterpoint.n-u countertenor.n-u courage.n-u courtesy.n-u court.n-u courtship.n-u coverage.n-u covetousness.n-u cowardice.n-u cowbell.n-u cowboy.n-u cowhide.n-u cowpox.n-u coyness.n-u crab.n-u crackle.n-u craft.n-u craftsmanship.n-u crap.n-u craziness.n-u cream.n-u creation.n-u credence.n-u credibility.n-u credit.n-u credulity.n-u creep.n-u cremation.n-u crepe.n-u cricket.n-u crime.n-u criminology.n-u crimson.n-u crinoline.n-u crisis.n-u crispness.n-u criticism.n-u Croatian.n-u Croat.n-u crochet.n-u crockery.n-u cromorne.n-u croquet.n-u crossfire.n-u crosstalk.n-u crow.n-u crucifixion.n-u crude.n-u crudity.n-u cruelty.n-u crumhorn.n-u crumpet.n-u crust.n-u crwth.n-u crystallization.n-u crystallography.n-u crystallophone.n-u crystal.n-u cuatro.n-u Cuban.n-u cubism.n-u cucumber.n-u cuisine.n-u culpability.n-u cultivation.n-u culture.n-u cunning.n-u cuprophone.n-u curd.n-u cure-all.n-u cure.n-u curiosity.n-u curling.n-u currency.n-u curry.n-u curtailment.n-u curvature.n-u custard.n-u custody.n-u custom.n-u cutlass.n-u cutlery.n-u cuttlefish.n-u cyanide.n-u cyan.n-u cymbal.n-u cymbalum.n-u cynicism.n-u Cypriote.n-u Czech.n-u dalliance.n-u damage.n-u damask.n-u damnation.n-u dampness.n-u damselfish.n-u dance.n-u dancing.n-u dandruff.n-u Danish.n-u daring.n-u darkness.n-u dash.n-u data.n-u dative.n-u dawn.n-u daybreak.n-u daylight.n-u dayspring.n-u dazzle.n-u deadlock.n-u deafness.n-u dearth.n-u death.n-u debarkation.n-u debasement.n-u debate.n-u debauchery.n-u debenture.n-u debility.n-u debris.n-u debt.n-u decadence.n-u decapitation.n-u decay.n-u deceit.n-u decency.n-u decentralization.n-u deception.n-u decimalization.n-u declamation.n-u declassification.n-u declension.n-u decolonization.n-u decomposition.n-u decompression.n-u decontamination.n-u decoration.n-u decorum.n-u decrease.n-u decrepitude.n-u dedication.n-u deductibility.n-u deduction.n-u deerskin.n-u defacement.n-u defamation.n-u default.n-u defeatism.n-u defeat.n-u defecation.n-u defection.n-u defence.n-u defense.n-u deference.n-u deferment.n-u defiance.n-u deficiency.n-u defilement.n-u definition.n-u deflation.n-u deflection.n-u defoliation.n-u deformity.n-u deftness.n-u degeneration.n-u degradation.n-u deification.n-u deism.n-u dejection.n-u delay.n-u delectation.n-u delegation.n-u deletion.n-u deliberation.n-u delicacy.n-u delight.n-u delimitation.n-u delineation.n-u delinquency.n-u delirium.n-u deliverance.n-u delivery.n-u delta.n-u delusion.n-u demagnetization.n-u demagogy.n-u demand.n-u demarcation.n-u demeanour.n-u dementia.n-u demerara.n-u demise.n-u demobilization.n-u democracy.n-u democratization.n-u demography.n-u demolition.n-u demoralization.n-u demotion.n-u denationalization.n-u denial.n-u denigration.n-u denim.n-u density.n-u dentistry.n-u denunciation.n-u dependence.n-u dependency.n-u depiction.n-u depletion.n-u deployment.n-u depopulation.n-u deportation.n-u deportment.n-u deposit.n-u deposition.n-u depravity.n-u deprecation.n-u depreciation.n-u depredation.n-u depression.n-u deprival.n-u deprivation.n-u depth.n-u derailment.n-u deregulation.n-u dereliction.n-u derision.n-u derivation.n-u dermatology.n-u derogation.n-u desalination.n-u desalinization.n-u descent.n-u desecration.n-u desegregation.n-u desensitization.n-u desertion.n-u desert.n-u deshabille.n-u designation.n-u design.n-u desirability.n-u desolation.n-u despair.n-u despatch.n-u desperation.n-u despondency.n-u despotism.n-u dessert.n-u destabilization.n-u destiny.n-u destitution.n-u destruction.n-u detachment.n-u detail.n-u detection.n-u detente.n-u detention.n-u detergent.n-u deterioration.n-u deterrent.n-u detestation.n-u detriment.n-u detritus.n-u devaluation.n-u devastation.n-u development.n-u deviation.n-u devolution.n-u devotion.n-u dew.n-u dexterity.n-u dextrose.n-u dholak.n-u diabetes.n-u diagnosis.n-u dialect.n-u dialogue.n-u diamond.n-u diarrhea.n-u diarrhoea.n-u dictation.n-u dictatorship.n-u diction.n-u didgeridoo.n-u diesel.n-u differentiation.n-u difficulty.n-u diffidence.n-u diffusion.n-u digestion.n-u dignity.n-u dilapidation.n-u dilation.n-u diligence.n-u dill.n-u dilution.n-u diminution.n-u din.n-u dinner.n-u dint.n-u dioxide.n-u diphtheria.n-u diplomacy.n-u dip.n-u dipsomania.n-u direction.n-u directness.n-u dirt.n-u disability.n-u disablement.n-u disadvantage.n-u disaffection.n-u disagreeableness.n-u disagreement.n-u disappointment.n-u disapproval.n-u disarmament.n-u disarray.n-u disaster.n-u disavowal.n-u disbandment.n-u disbelief.n-u disbursement.n-u discernment.n-u discharge.n-u discipline.n-u discomfiture.n-u discomfort.n-u discontent.n-u discontinuity.n-u discord.n-u discouragement.n-u discourse.n-u discourtesy.n-u discredit.n-u discrepancy.n-u discreteness.n-u discretion.n-u discrimination.n-u discussion.n-u disdain.n-u disease.n-u disembarkation.n-u disenchantment.n-u disengagement.n-u disentanglement.n-u disequilibrium.n-u disestablishment.n-u disfavour.n-u disfigurement.n-u disfranchisement.n-u disgrace.n-u disguise.n-u disgust.n-u disharmony.n-u dishonesty.n-u dishonour.n-u dishwater.n-u disillusionment.n-u disinclination.n-u disinfectant.n-u disintegration.n-u disinterment.n-u dislocation.n-u disloyalty.n-u dismay.n-u dismissal.n-u disobedience.n-u disorder.n-u disorganization.n-u dispatch.n-u dispensation.n-u dispersal.n-u displacement.n-u display.n-u displeasure.n-u disposal.n-u disposition.n-u disproof.n-u disproportion.n-u disputation.n-u dispute.n-u disqualification.n-u disquiet.n-u disquietude.n-u disregard.n-u disrepair.n-u disrepute.n-u disrespect.n-u disruption.n-u dissatisfaction.n-u dissection.n-u dissemination.n-u dissension.n-u dissent.n-u dissidence.n-u dissimilarity.n-u dissipation.n-u dissociation.n-u dissolution.n-u dissonance.n-u distaste.n-u distemper.n-u distillation.n-u distinction.n-u distortion.n-u distraction.n-u distress.n-u distribution.n-u disturbance.n-u disunity.n-u disuse.n-u divergence.n-u diversification.n-u diversion.n-u diversity.n-u divestiture.n-u divination.n-u divinity.n-u division.n-u divorce.n-u dizziness.n-u djembe.n-u Djiboutian.n-u docility.n-u doctrine.n-u documentation.n-u doggerel.n-u dogma.n-u dogmatism.n-u dole.n-u domestication.n-u domesticity.n-u dominance.n-u domination.n-u Dominican.n-u dominion.n-u donation.n-u donut.n-u dopamine.n-u dope.n-u dosage.n-u dotage.n-u dough.n-u doughnut.n-u doulophone.n-u downtown.n-u drainage.n-u drama.n-u dramatization.n-u drapery.n-u draught.n-u drawing.n-u dread.n-u dressage.n-u dressmaking.n-u drinking.n-u drink.n-u drivel.n-u drizzle.n-u drone.n-u dross.n-u drought.n-u drowsiness.n-u drudgery.n-u drum.n-u drunkenness.n-u dryness.n-u duck.n-u dudgeon.n-u duffel.n-u dulcian.n-u dulzaina.n-u dung.n-u duplication.n-u duplicity.n-u durability.n-u duration.n-u duress.n-u dusk.n-u dust.n-u dutar.n-u duty.n-u dye.n-u dynamism.n-u dynamite.n-u dysentery.n-u dyslexia.n-u dyspepsia.n-u earnest.n-u earshot.n-u earthenware.n-u earth.n-u earwax.n-u ease.n-u ebony.n-u ebullience.n-u eccentricity.n-u eclecticism.n-u ecology.n-u econometrics.n-u economics.n-u ecru.n-u ecstasy.n-u ectoplasm.n-u Ecuadorian.n-u edification.n-u education.n-u effacement.n-u effectiveness.n-u effect.n-u effervescence.n-u efficacy.n-u efficiency.n-u efflorescence.n-u effluent.n-u effrontery.n-u effusiveness.n-u egalitarianism.n-u egg.n-u eggplant.n-u eggshell.n-u egoism.n-u egotism.n-u Egyptian.n-u ejaculation.n-u ejection.n-u elaboration.n-u elan.n-u elasticity.n-u elastic.n-u elation.n-u electioneering.n-u election.n-u electricity.n-u electrification.n-u electrochemistry.n-u electrocution.n-u electrolysis.n-u electrolyte.n-u electromagnetism.n-u electronics.n-u electrophoresis.n-u elegance.n-u elevation.n-u elicitation.n-u eligibility.n-u elimination.n-u elision.n-u elitism.n-u elixir.n-u elm.n-u elocution.n-u elongation.n-u elopement.n-u eloquence.n-u elucidation.n-u email.n-u emanation.n-u emancipation.n-u emasculation.n-u embarkation.n-u embarrassment.n-u embellishment.n-u embezzlement.n-u embroidery.n-u emendation.n-u emerald.n-u emergency.n-u emigration.n-u eminence.n-u emission.n-u emotion.n-u empathy.n-u emphasis.n-u empiricism.n-u employment.n-u emptiness.n-u emulation.n-u emulsion.n-u enactment.n-u enamel.n-u encephalitis.n-u enchantment.n-u encirclement.n-u enclosure.n-u encouragement.n-u encroachment.n-u encryption.n-u endive.n-u endorsement.n-u endowment.n-u endurance.n-u energy.n-u enervation.v enforcement.n-u enfranchisement.n-u engagement.n-u engineering.n-u English.n-u engraving.n-u enhancement.n-u enjoyment.n-u enlargement.n-u enlightenment.n-u enlistment.n-u enmity.n-u ennoblement.n-u ennui.n-u enormity.n-u enquiry.n-u enrichment.n-u enrolment.n-u enslavement.n-u entanglement.n-u enterprise.n-u entertainment.n-u enthusiasm.n-u enticement.n-u entirety.n-u entitlement.n-u entomology.n-u entrance.n-u entrenchment.n-u entropy entry.n-u enumeration.n-u enunciation.n-u envy.n-u epidemic.n-u epidemiology.n-u epidermis.n-u epilepsy.n-u epsilon.n-u equality.n-u equalization.n-u equanimity.n-u equation.n-u equilibrium.n-u equipment.n-u equipoise.n-u equity.n-u equivalence.n-u equivocation.n-u erasure.n-u erection.n-u Eritrean.n-u erosion.n-u eroticism.n-u error.n-u erudition.n-u eruption.n-u escalation.n-u escape.n-u escapism.n-u eschatology.n-u espionage.n-u espousal.n-u espresso.n-u esprit.n-u essence.n-u establishment.n-u estate.n-u esteem.n-u estimation.n-u Estonian.n-u estrangement.n-u eta.n-u eternity.n-u ether.n-u ethics.n-u Ethiopian.n-u ethnicity.n-u ethnography.n-u ethnology.n-u ethyl.n-u etiology.n-u etiquette.n-u etymology.n-u euphonium.n-u euphoria.n-u European.n-u euthanasia.n-u evacuation.n-u evanescence.n-u evangelism.n-u evaporation.n-u evasion.n-u evening.n-u evenness.n-u evensong.n-u eventide.n-u eviction.n-u evil.n-u evocation.n-u evolution.n-u exacerbation.n-u exactitude.n-u exactness.n-u exaggeration.n-u exaltation.n-u examination.n-u exasperation.n-u excavation.n-u excellence.n-u excelsior.n-u excess.n-u exchange.n-u excise.n-u excitability.n-u excitement.n-u exclamation.n-u exclusion.n-u exclusivity.n-u excommunication.n-u excoriation.n-u excrement.n-u excretion.n-u execution.n-u exegesis.n-u exemplification.n-u exercise.n-u exertion.n-u exhalation.n-u exhaustion.n-u exhaust.n-u exhibitionism.n-u exhibition.n-u exhilaration.n-u exhortation.n-u exile.n-u existence.n-u existentialism.n-u exoneration.n-u expansion.n-u expansiveness.n-u expectancy.n-u expediency.n-u expenditure.n-u expense.n-u experience.n-u experimentation.n-u expertise.n-u expiation.n-u expiration.n-u explicitness.n-u exploitation.n-u exploration.n-u exportation.n-u exposition.n-u exposure.n-u expressionism.n-u expression.n-u express.n-u expropriation.n-u expulsion.n-u expurgation.n-u exquisiteness.n-u extension.n-u extent.n-u extermination.n-u extinction.n-u extirpation.n-u extortion.n-u extraction.n-u extract.n-u extradition.n-u extrapolation.n-u extravagance.n-u extrication.n-u extroversion.n-u exuberance.n-u exultation.n-u eyesight.n-u eyestrain.n-u eyewash.n-u fable.n-u fabrication.n-u fabric.n-u facility.n-u faction.n-u faglong.n-u faintness.n-u fairness.n-u faithfulness.n-u faith.n-u falafel.n-u falconry.n-u fallibility.n-u fallout.n-u fall.n-u falsehood.n-u falsetto.n-u falsification.n-u falsity.n-u fame.n-u familiarity.n-u family.n-u famine.n-u fanaticism.n-u fancy.n-u fanfare.n-u fantasy.n-u farce.n-u fare.n-u farmland.n-u fascination.n-u fascism.n-u fashion.n-u fastidiousness.n-u fatalism.n-u fate.n-u fatherhood.n-u fatigue.n-u fat.n-u fauna.n-u favor.n-u favouritism.n-u favour.n-u fealty.n-u feasibility.n-u fecundity.n-u federalism.n-u feedback.n-u feed.n-u fegereng.n-u felicity.n-u fellowship.n-u felt.n-u femininity.n-u feminism.n-u fencing.n-u fennel.n-u fermentation.n-u ferocity.n-u fertility.n-u fertilization.n-u fertilizer.n-u fervour.n-u festivity.n-u fetch.n-u fettucini.n-u feudalism.n-u fever.n-u fianchetto.n-u fiat.n-u fiber.n-u fibreboard.n-u fibreglass.n-u fibre.n-u fiction.n-u fiddle.n-u fidelity.n-u fieldwork.n-u fife.n-u Fijian.n-u filbert.n-u filigree.n-u Filipino.n-u film.n-u filth.n-u filtration.n-u finality.n-u finance.n-u financing.n-u finery.n-u finesse.n-u Finnish.n-u firebrick.n-u fire.n-u firewood.n-u firmness.n-u fir.n-u fishing.n-u fish.n-u fission.n-u fitness.n-u fixation.n-u fizz.n-u flaccidity.n-u flageolet.n-u flair.n-u flak.n-u flamboyance.n-u flame.n-u flannel.n-u flare.n-u flatness.n-u flattery.n-u flatulence.n-u flavor.n-u flavouring.n-u flavour.n-u flax.n-u fleece.n-u flesh.n-u flexibility.n-u flex.n-u flight.n-u flimsy.n-u flint.n-u flintstone.n-u flippancy.n-u flirtation.n-u floatation.n-u flooding.n-u flooring.n-u flotation.n-u flotsam.n-u flour.n-u flow.n-u fluctuation.n-u fluency.n-u fluff.n-u flugelhorn.n-u fluidity.n-u fluid.n-u fluorescence.n-u fluoridation.n-u fluoride.n-u fluoridization.n-u fluorine.n-u flu.n-u flush.n-u flute.n-u flutter.n-u flux.n-u flypaper.n-u foam.n-u focus.n-u fodder.n-u fog.n-u foil.n-u folgerphone.n-u foliage.n-u folklore.n-u folly.n-u fondness.n-u food.n-u foolhardiness.n-u foolishness.n-u footage.n-u football.n-u footwear.n-u footwork.n-u forage.n-u forbearance.n-u force.n-u foreboding.n-u foreclosure.n-u foreknowledge.n-u fore.n-u foresight.n-u forest.n-u forestry.n-u forethought.n-u forfeiture.n-u forgery.n-u forgetfulness.n-u forgiveness.n-u formaldehyde.n-u formalism.n-u formality.n-u formation.n-u format.n-u form.n-u formulation.n-u fornication.n-u fortepiano.n-u fortification.n-u fortitude.n-u fortune.n-u fossilization.n-u foul.n-u fowl.n-u fragility.n-u fragmentation.n-u fragrance.n-u frailty.n-u frankincense.n-u frankness.n-u fraternity.n-u fraternization.n-u fratricide.n-u fraud.n-u freedom.n-u freestyle.n-u freight.n-u French.n-u frenzy.n-u frequency.n-u fresco.n-u freshness.n-u friction.n-u friendliness.n-u friendship.n-u fright.n-u frigidity.n-u frijoles.n-u frivolity.n-u frostbite.n-u frost.n-u froth.n-u frugality.n-u fruitcake.n-u fruition.n-u fruit.n-u frustration.n-u fuel.n-u fuglung.n-u fulfilment.n-u fullness.n-u fumigation.n-u functionalism.n-u functionality.n-u fundamentalism.n-u fungicide.n-u fungus.n-u fun.n-u furlough.n-u furniture.n-u fur.n-u furtherance.n-u fury.n-u fusion.n-u fuss.n-u futility.n-u futurism.n-u fuzz.n-u gab.n-u Gabonian.n-u gadgetry.n-u gaiety.n-u gallantry.n-u gall.n-u Gambian.n-u gambling.n-u gamboge.n-u game.n-u gamesmanship.n-u gamma.n-u gammon.n-u gangrene.n-u gaol.n-u garbage.n-u garb.n-u gardening.n-u garlic.n-u garnet.n-u gaslight.n-u gasoline.n-u gas.n-u gaspacho.n-u gastronomy.n-u gaudiness.n-u gauze.n-u gear.n-u gelatine.n-u gelatin.n-u gel.n-u gemshorn.n-u gender.n-u genealogy.n-u generality.n-u generalization.n-u generation.n-u generosity.n-u geniality.n-u genius.n-u genocide.n-u gentility.n-u gentleness.n-u genuflection.n-u genus.n-u geography.n-u geology.n-u geometry.n-u Georgian.n-u German.n-u germination.n-u gerontology.n-u gestation.n-u Ghanaian.n-u gibberish.n-u gilt.n-u gingerbread.n-u ginger.n-u gingham.n-u gin.n-u girlhood.n-u girth.n-u glacier.n-u gladness.n-u glamorization.n-u glamour.n-u glare.n-u glasschord.n-u glass.n-u glassware.n-u glaucoma.n-u glaze.n-u glee.n-u glitter.n-u glockenspiel.n-u gloom.n-u glorification.n-u glory.n-u glucose.n-u glue.n-u gluttony.n-u glycerine.n-u goatskin.n-u gobbledygook.n-u godspeed.n-u goldenrod.n-u gold.n-u golf.n-u gong.n-u gonorrhea.n-u gonorrhoea.n-u goodness.n-u goodwill.n-u goolash.n-u goo.n-u gore.n-u gospel.n-u gossamer.n-u gossip.n-u goulash.n-u gout.n-u governance.n-u government.n-u grace.n-u graciousness.n-u graduation.n-u graft.n-u grain.n-u grammar.n-u grandeur.n-u grandiloquence.n-u granite.n-u grapefruit.n-u grapeshot.n-u graphite.n-u grassland.n-u grass.n-u gratefulness.n-u gratification.n-u gratitude.n-u gravel.n-u gravitation.n-u gravity.n-u gravy.n-u grease.n-u greasepaint.n-u greatness.n-u greediness.n-u greed.n-u Greek.n-u greenery.n-u Grenadan.n-u grief.n-u grime.n-u gristle.n-u grist.n-u grit.n-u ground.n-u groundwater.n-u groundwork.n-u growth.n-u grub.n-u gruel.n-u guacamole.n-u guac.n-u guano.n-u Guatemalan.n-u guava.n-u guesswork.n-u guidance.n-u guile.n-u guilt.n-u Guinean.n-u guitar.n-u guitarrón.n-u guitjo.n-u gullibility.n-u gumbo.n-u gum.n-u gumption.n-u gumshoe.n-u gunfire.n-u gunmetal.n-u gunnery.n-u gunny.n-u gunpowder.n-u gunrunning.n-u gustation.n-u gusto.n-u Guyanese.n-u gynaecology.n-u gypsum.n-u gyration.n-u haberdashery.n-u habitation.n-u habitat.n-u habit.n-u habituation.n-u haddock.n-u haemoglobin.n-u haemophilia.n-u haemorrhage.n-u hail.n-u hairdressing.n-u hair.n-u hairsplitting.n-u Haitian.n-u half-time.n-u halibut.n-u hallucination.n-u hamburger.n-u ham.n-u handbells.n-u handicraft.n-u handiwork.n-u handling.n-u handwork.n-u handwriting.n-u hanging.n-u happiness.n-u harassment.n-u hardness.n-u hardship.n-u hardware.n-u hardwood.n-u harlot.n-u harm.n-u harmonica.n-u harmonico.n-u harmonium.n-u harmonization.n-u harmony.n-u harp.n-u harpsichord.n-u harrassment.n-u harshness.n-u hashish.n-u hash.n-u hatching.n-u hate.n-u hatred.n-u haven.n-u havoc.n-u hay.n-u hazard.n-u hazel.n-u haze.n-u headache.n-u headgear.n-u headroom.n-u headway.n-u health.n-u hearsay.n-u heartache.n-u heartbreak.n-u heartburn.n-u heart.n-u heather.n-u heath.n-u heating.n-u heat.n-u heatstroke.n-u heaven.n-u heaviness.n-u heckelphone.n-u hedonism.n-u heed.n-u hegemony.n-u height.n-u helium.n-u hell.n-u help.n-u hemlock.n-u hemoglobin.n-u hemophilia.n-u hemorrhage.n-u hemp.n-u hepatitis.n-u heraldry.n-u herbicide.n-u herb.n-u heredity.n-u heresy.n-u heroin.n-u heroism.n-u hero.n-u herringbone.n-u herring.n-u hesitancy.n-u hesitation.n-u hessian.n-u heterodoxy.n-u heterosexuality.n-u hibernation.n-u hibiscus.n-u hickory.n-u hide.n-u highness.n-u hilarity.n-u hindsight.n-u hiring.n-u history.n-u hocchiku.n-u hockey.n-u hock.n-u hogwash.n-u hold.n-u holiness.n-u holly.n-u homage.n-u home.n-u homesickness.n-u homework.n-u homicide.n-u homily.n-u homoeopathy.n-u homogeneity.n-u homophobia.n-u homosexuality.n-u Honduran.n-u honesty.n-u honeycomb.n-u honeydew.n-u honey.n-u honeysuckle.n-u honor.n-u honour.n-u hooey.n-u hooliganism.n-u hoop.n-u hopelessness.n-u hopscotch.n-u horror.n-u horseback.n-u horsehair.n-u horsemanship.n-u horsemeat.n-u horseplay.n-u horsepower.n-u horseracing.n-u horse-radish.n-u horseradish.n-u horticulture.n-u hose.n-u hosiery.n-u hospitality.n-u hospitalization.n-u hostility.n-u hotdog.n-u houseware.n-u housework.n-u housing.n-u hubbub.n-u hubris.n-u huckleberry.n-u humanism.n-u humanitarianism.n-u humanity.n-u humankind.n-u humidity.n-u humiliation.n-u humility.n-u hummus.n-u humor.n-u humour.n-u humus.n-u Hungarian.n-u hunger.n-u hunting.n-u hurdy_gurdy hurry.n-u husbandry.n-u hydraulophone.n-u hydrogen.n-u hydrolysis.n-u hydropathy.n-u hydrophobia.n-u hygiene.n-u hype.n-u hyperbole.n-u hypnotism.n-u hypochondria.n-u hypocrisy.n-u hysteria.n-u iceberg.n-u Icelandish.n-u ice.n-u idealism.n-u idealization.n-u identification.n-u identity.n-u ideology.n-u idiocy.n-u idiom.n-u idleness.n-u idolatry.n-u idolization.n-u ignition.n-u ignominy.n-u ignorance.n-u ilk.n-u illegality.n-u illegibility.n-u illegitimacy.n-u illiteracy.n-u ill.n-u illness.n-u illumination.n-u illusion.n-u illustration.n-u imagery.n-u imagination.n-u imbalance.n-u imbecility.n-u imitation.n-u immanence.n-u immaturity.n-u immediacy.n-u immensity.n-u immersion.n-u immigration.n-u imminence.n-u immobility.n-u immobilization.n-u immodesty.n-u immolation.n-u immorality.n-u immortality.n-u immunity.n-u immunization.n-u immunology.n-u impact.n-u impairment.n-u impartiality.n-u impassivity.n-u impatience.n-u impeachment.n-u imperialism.n-u imperiousness.n-u impermanence.n-u impersonation.n-u impertinence.n-u impiety.n-u impingement.n-u implausibility.n-u implementation.n-u importance.n-u importation.n-u imposition.n-u impossibility.n-u impotence.n-u impoverishment.n-u impracticability.n-u imprecision.n-u impregnability.n-u impressionism.n-u imprisonment.n-u improbability.n-u impropriety.n-u improvement.n-u improvisation.n-u imprudence.n-u impudence.n-u impulse.n-u impunity.n-u impurity.n-u imputation.n-u inability.n-u inaccessibility.n-u inaccuracy.n-u inaction.n-u inactivity.n-u inadequacy.n-u inadvisability.n-u inanity.n-u inaudibility.n-u inauguration.n-u inbreeding.n-u incandescence.n-u incantation.n-u incapability.n-u incapacity.n-u incarceration.n-u incense.n-u incest.n-u incineration.n-u incitement.n-u incivility.n-u inclination.n-u inclusion.n-u incoherence.n-u income.n-u incompatibility.n-u incompetence.n-u incomprehensibility.n-u incomprehension.n-u incongruity.n-u inconsistency.n-u incontinence.n-u inconvenience.n-u incorporation.n-u incorruptibility.n-u incredulity.n-u incursion.n-u indecency.n-u indecision.n-u indemnification.n-u indemnity.n-u independence.n-u indestructibility.n-u indeterminacy.n-u Indian.n-u indictment.n-u indifference.n-u indigestion.n-u indignation.n-u indigo.n-u indiscretion.n-u indispensability.n-u indisposition.n-u individualism.n-u individuality.n-u indoctrination.n-u indolence.n-u Indonesian.n-u inducement.n-u induction.n-u indulgence.n-u industrialization.n-u industry.n-u inebriation.n-u ineffectuality.n-u inefficiency.n-u inelegance.n-u ineligibility.n-u ineptitude.n-u inequality.n-u inequity.n-u inertia.n-u inevitability.n-u inexperience.n-u infallibility.n-u infamy.n-u infancy.n-u infanticide.n-u infantry.n-u infatuation.n-u infection.n-u inference.n-u inferiority.n-u infertility.n-u infestation.n-u infidelity.n-u infield.n-u infighting.n-u infiltration.n-u infinity.n-u infirmity.n-u inflammation.n-u inflation.n-u inflection.n-u inflexibility.n-u infliction.n-u inflow.n-u influence.n-u influenza.n-u info.n-u informality.n-u information.n-u infrastructure.n-u infringement.n-u infusion.n-u ingenuity.n-u ingratitude.n-u inhalation.n-u inheritance.n-u inhibition.n-u inhumanity.n-u iniquity.n-u initiation.n-u initiative.n-u injection.n-u injustice.n-u ink.n-u inlay.n-u innocence.n-u innovation.n-u innuendo.n-u inoculation.n-u input.n-u inquiry.n-u inquisition.n-u insanity.n-u insecticide.n-u insecurity.n-u insemination.n-u insensitivity.n-u insertion.n-u insight.n-u insignificance.n-u insincerity.n-u insinuation.n-u insolence.n-u insolvency.n-u insomnia.n-u inspection.n-u inspiration.n-u instability.n-u installation.n-u instigation.n-u instinct.n-u instruction.n-u instrumentation.n-u insubordination.n-u insufficiency.n-u insularity.n-u insulation.n-u insulin.n-u insult.n-u insurance.n-u insurrection.n-u intake.n-u intangibility.n-u integration.n-u integrity.n-u intellect.n-u intelligence.n-u intelligibility.n-u intemperance.n-u intensification.n-u intention.n-u interaction.n-u interception.n-u intercession.n-u interchange.n-u interconnection.n-u intercourse.n-u interest.n-u interference.n-u interim.n-u intermarriage.n-u interment.n-u internationalization.n-u internment.n-u interplay.n-u interpolation.n-u interposition.n-u interpretation.n-u interrelation.n-u interrelationship.n-u interrogation.n-u interruption.n-u intersection.n-u intervention.n-u intimacy.n-u intimation.n-u intimidation.n-u intolerance.n-u intonation.n-u intoxication.n-u intractability.n-u intransigence.n-u intricacy.n-u intrigue.n-u introduction.n-u introspection.n-u introversion.n-u intrusion.n-u intuition.n-u inundation.n-u invalidation.n-u invalidity.n-u invective.n-u invention.n-u inventory.n-u inverse.n-u inversion.n-u investigation.n-u investiture.n-u investment.n-u invincibility.n-u invisibility.n-u invocation.n-u involvement.n-u inwardness.n-u iodine.n-u ionization.n-u iota.n-u Iranian.n-u Iraqi.n-u irascibility.n-u ire.n-u iridium.n-u Irish.n-u ironmongery.n-u iron.n-u ironware.n-u irony.n-u irregularity.n-u irrelevance.n-u irrelevancy.n-u irresponsibility.n-u irreverence.n-u irreversibility.n-u irrigation.n-u irritability.n-u irritation.n-u isolationism.n-u isolation.n-u Israeli.n-u issuance.n-u Italian.n-u Ivorian.n-u ivory.n-u ivy.n-u jade.n-u jail.n-u Jamaican.n-u jam.n-u Japanese.n-u jargon.n-u jasmine.n-u jaundice.n-u jazz.n-u jealousy.n-u jean.n-u jelly.n-u jeopardy.n-u jetsam.n-u jewellery.n-u jewelry.n-u jingoism.n-u jive.n-u jocularity.n-u jogging.n-u jollity.n-u Jordanian.n-u journalese.n-u journalism.n-u joviality.n-u joy.n-u jubilation.n-u judgement.n-u judgment.n-u judiciary.n-u judo.n-u jug.n-u juice.n-u juju.n-u jumble.n-u junk.n-u jurisdiction.n-u jurisprudence.n-u justice.n-u justification.n-u juxtaposition.n-u kalimba.n-u kappa.n-u karate.n-u karma.n-u katzenklavier.n-u Kazakhi.n-u kazoo.n-u kedgeree.n-u kelp.n-u ken.n-u Kenyan.n-u kerosene.n-u ketchup.n-u keytar.n-u khaki.n-u khalam.n-u kidnapping.n-u kielbasa.n-u killing.n-u kindling.n-u kindness.n-u kindred.n-u kinship.n-u kisanji.n-u kit.n-u kleenex.n-u kleptomania.n-u knavery.n-u knighthood.n-u knitwear.n-u know-how.n-u kora.n-u Korean.n-u koto.n-u kouxian.n-u kudos.n-u Kuwaiti.n-u labor.n-u labour.n-u lace.n-u lack.n-u lacquer.n-u lacrosse.n-u lager.n-u laissez-faire.n-u lambda.n-u lamb.n-u lambskin.n-u lamellaphone.n-u lamentation.n-u lamplight.n-u land.n-u landscape.n-u language.n-u languor.n-u Laotian.n-u lap.n-u larceny.n-u larch.n-u lard.n-u largesse.n-u laryngitis.n-u lasagna.n-u lasciviousness.n-u lassitude.n-u latency.n-u latex.n-u lather.n-u latitude.n-u Latvian.n-u laudanum.n-u laughter.n-u lava.n-u lavender.n-u law.n-u laxity.n-u laziness.n-u leadership.n-u leakage.n-u lean.n-u leapfrog.n-u leasing.n-u leather.n-u Lebanese.n-u lechery.n-u lee.n-u leeway.n-u legality.n-u legalization.n-u legend.n-u legibility.n-u legislation.n-u legitimacy.n-u leisure.n-u lemonade.n-u lemon.n-u lending.n-u length.n-u lenience.n-u leniency.n-u leprosy.n-u lesbianism.n-u lethargy.n-u lettering.n-u lettuce.n-u leukaemia.n-u leukemia.n-u level.n-u leverage.n-u levitation.n-u levity.n-u lexicography.n-u liability.n-u liaison.n-u libel.n-u liberalism.n-u liberality.n-u liberalization.n-u liberation.n-u Liberian.n-u liberty.n-u libido.n-u Libyan.n-u licence.n-u licentiousness.n-u lichen.n-u lieu.n-u lifeblood.n-u life.n-u lifestyle.n-u lightness.n-u lightning.n-u light.n-u lignite.n-u likeness.n-u limbo.n-u limejuice.n-u limelight.n-u lime.n-u limestone.n-u limitation.n-u linage.n-u lineage.n-u linen.n-u lingerie.n-u linkage.n-u linoleum.n-u lint.n-u lipstick.n-u liquidation.n-u liquidity.n-u liquidizer.n-u liquorice.n-u liquor.n-u lirone.n-u literacy.n-u literature.n-u lithography.n-u Lithuanian.n-u litigation.n-u litmus.n-u litotes.n-u litter.n-u liturgy.n-u livelihood.n-u liveliness.n-u liver.n-u liverwurst.n-u livestock.n-u loan.n-u loathing.n-u lobster.n-u locality.n-u localization.n-u lockjaw.n-u locomotion.n-u loggerheads.n-u logging.n-u logic.n-u loneliness.n-u longevity.n-u longhand.n-u longing.n-u longitude.n-u loot.n-u loquaciousness.n-u lordship.n-u lore.n-u loss.n-u lotion.n-u loudness.n-u loveliness.n-u love.n-u lox.n-u loyalty.n-u lubricant.n-u lubrication.n-u lucidity.n-u luck.n-u luggage.n-u lumbago.n-u lumber.n-u luminosity.n-u lunacy.n-u luncheon.n-u lunch.n-u lunchtime.n-u luster.n-u lust.n-u lustre.n-u lute.n-u Luxembourian.n-u luxuriance.n-u luxury.n-u lye.n-u lymph.n-u lyra.n-u lyre.n-u lyricism.n-u macadam.n-u macaroni.n-u Macedonian.n-u mace.n-u machination.n-u machinery.n-u machismo.n-u mackerel.n-u Madagascan.n-u madness.n-u magazine.n-u magenta.n-u magic.n-u magnanimity.n-u magnesia.n-u magnesium.n-u magnetism.n-u magnetization.n-u magnification.n-u magnificence.n-u magnitude.n-u mahjong.n-u mahogany.n-u mail.n-u maintenance.n-u maize.n-u majesty.n-u make-up.n-u malachite.n-u maladjustment.n-u malaria.n-u Malawian.n-u Malaysian.n-u malevolence.n-u malfeasance.n-u malformation.n-u malfunction.n-u Malian.n-u malice.n-u malignancy.n-u malleability.n-u malnutrition.n-u malpractice.n-u Maltese.n-u malt.n-u maltreatment.n-u manageability.n-u management.n-u mandarin.n-u mando-bass.n-u mandocello.n-u mandola.n-u mandolin.n-u manganese.n-u mango.n-u manhood.n-u mania.n-u manipulation.n-u mankind.n-u manner.n-u manoeuvrability.n-u manpower.n-u manslaughter.n-u manufacture.n-u manure.n-u maple.n-u maracas.n-u maraschino.n-u marble.n-u margarine.n-u margin.n-u marihuana.n-u marijuana.n-u marimba.n-u marimbaphone.n-u marinade.n-u marjoram.n-u marketing.n-u marksmanship.n-u marmalade.n-u marriageability.n-u marriage.n-u marrow.n-u marshmallow.n-u marsh.n-u martyrdom.n-u maryjane.n-u marzipan.n-u mascara.n-u masculinity.n-u mash.n-u masochism.n-u masonry.n-u mastery.n-u mastication.n-u mast.n-u masturbation.n-u materialism.n-u materialization.n-u material.n-u maternity.n-u mathematics.n-u matricide.n-u matriculation.n-u matrimony.n-u matter.n-u matting.n-u maturation.n-u maturity.n-u Mauritanian.n-u Mauritian.n-u mauve.n-u maximization.n-u mayhem.n-u mayo.n-u mayonnaise.n-u mbira.n-u meadow.n-u mead.n-u mealtime.n-u meaning.n-u meanness.n-u meantime.n-u measurement.n-u meat.n-u mechanization.n-u media.n-u mediation.n-u medication.n-u medicine.n-u mediocrity.n-u meditation.n-u megalomania.n-u meiosis.n-u melancholia.n-u melancholy.n-u mellophone.n-u mellotron.n-u melodeon.n-u melodica.n-u melodrama.n-u melody.n-u membership.n-u membrane.n-u memory.n-u menace.n-u mending.n-u meningitis.n-u menstruation.n-u mensuration.n-u mentality.n-u menthol.n-u mention.n-u merchandise.n-u mercury.n-u mercy.n-u merger.n-u meringue.n-u merit.n-u merriment.n-u merrymaking.n-u mescaline.n-u mesh.n-u messaging.n-u messiness.n-u mess.n-u metabolism.n-u metallophone.n-u metallurgy.n-u metal.n-u metalware.n-u metaphor.n-u meteorology.n-u meter.n-u methane.n-u methanol.n-u methodology.n-u method.n-u methyl.n-u mettle.n-u Mexican.n-u mezzo-soprano.n-u microbiology.n-u microfiche.n-u microfilm.n-u micromanagement.n-u Micronesian.n-u microscopy.n-u midday.n-u midnight.n-u midsession.n-u midstream.n-u midsummer.n-u midtown.n-u migration.n-u mildew.n-u mildness.n-u militancy.n-u militarism.n-u milk.n-u millennium.n-u milt.n-u mime.n-u mimicry.n-u mimosa.n-u mincemeat.n-u mince.n-u mind.n-u mineralogy.n-u minestrone.n-u minesweeping.n-u miniature.n-u mining.n-u mink.n-u mint.n-u mirth.n-u misanthropy.n-u misbehaviour.n-u miscalculation.n-u miscarriage.n-u mischief.n-u misconception.n-u misconduct.n-u misery.n-u misfortune.n-u misgovernment.n-u mishap.n-u misinformation.n-u misinterpretation.n-u mismanagement.n-u misquotation.n-u misrepresentation.n-u misrule.n-u mistletoe.n-u mist.n-u mistranslation.n-u mistrust.n-u misuse.n-u mitigation.n-u mixture.n-u mobility.n-u mobilization.n-u mocha.n-u mockery.n-u modeling.n-u moderation.n-u modernism.n-u modernity.n-u modernization.n-u modesty.n-u modification.n-u modulation.n-u mohair.n-u moisture.n-u molasses.n-u Moldovan.n-u mole.n-u molestation.n-u molybdenum.n-u momentum.n-u monarchism.n-u monarchy.n-u monasticism.n-u money.n-u Mongolian.n-u monogamy.n-u monotheism.n-u monotony.n-u monoxide.n-u monstrosity.n-u moonlight.n-u moonshine.n-u moorland.n-u morale.n-u morality.n-u morbidity.n-u morning.n-u Moroccan.n-u morphine.n-u morphology.n-u morsing.n-u mortality.n-u mortar.n-u moss.n-u motherhood.n-u motion.n-u motivation.n-u motley.n-u mountaineering.n-u mourning.n-u mousse.n-u movement.n-u Mozambican.n-u muck.n-u muckraking.n-u mucus.n-u mud.n-u muesli.n-u multiplex.n-u multiplication.n-u multiplicity.n-u munificence.n-u mu.n-u murder.n-u muscle.n-u musete.n-u mush.n-u mushroom.n-u musicianship.n-u music.n-u musketry.n-u musk.n-u mustard.n-u mutability.n-u mutation.n-u mutilation.n-u mutiny.n-u mutton.n-u myelitis.n-u myopia.n-u myrrh.n-u myrtle.n-u mystery.n-u mysticism.n-u mythology.n-u nadaswaram.n-u naivete.n-u naivety.n-u Namibian.n-u napalm.n-u narcissism.n-u narration.n-u narrative.n-u narrowness.n-u nationalism.n-u nationality.n-u nationalization.n-u naturalization.n-u nature.n-u naught.n-u Nauruan.n-u nausea.n-u navigability.n-u navigation.n-u neatness.n-u necessity.n-u neckwear.n-u nectar.n-u needlecraft.n-u needlework.n-u negation.n-u neglect.n-u negligence.n-u negotiation.n-u neocolonialism.n-u neon.n-u nephritis.n-u nepotism.n-u nerve.n-u netball.n-u net.n-u neufchatel.n-u neuralgia.n-u neurasthenia.n-u neurology.n-u neutrality.n-u neutralization.n-u newsprint.n-u ney.n-u Nicaraguan.n-u nickel.n-u nicotine.n-u Nigerian.n-u Nigerien.n-u nightfall.n-u nihilism.n-u nil.n-u nirvana.n-u nitrate.n-u nitrogen.n-u nitroglycerine.n-u nitroglycerin.n-u nix.n-u nobility.n-u nohkan.n-u noise.n-u nominative.n-u nonaggression.n-u nonalignment.n-u nonchalance.n-u nonconformity.n-u nonfiction.n-u nonintervention.n-u nonpayment.n-u nonsense.n-u nonviolence.n-u noon.n-u normalcy.n-u normality.n-u normalization.n-u Norwegian.n-u nosh.n-u nostalgia.n-u notation.n-u notepaper.n-u nothingness.n-u notice.n-u notoriety.n-u nougat.n-u nourishment.n-u novella.n-u novelty.n-u nuance.n-u nudism.n-u nudity.n-u nullification.n-u numbness.n-u numeracy.n-u nu.n-u nursing.n-u nurture.n-u nutmeg.n-u nutrition.n-u nylon.n-u nymphomania.n-u oak.n-u oarsmanship.n-u oatcake.n-u oatmeal.n-u oatn-u oat.n-u obduracy.n-u obedience.n-u obeisance.n-u obesity.n-u objectivity.n-u obliteration.n-u oblivion.n-u obnoxiousness.n-u oboe.n-u obscenity.n-u obscurantism.n-u obscurity.n-u observance.n-u observation.n-u obsession.n-u obsolescence.n-u obstinacy.n-u obstructionism.n-u obstruction.n-u ocarina.n-u occurrence.n-u ocean.n-u ochre.n-u octane.n-u octapad.n-u octavin.n-u odour.n-u offence.n-u offense.n-u officialdom.n-u officialese.n-u offset.n-u oilcloth.n-u oil.n-u ointment.n-u okra.n-u olestra.n-u oligarchy.n-u olive.n-u olivine.n-u Omani.n-u omega.n-u omelet.n-u omelette.n-u omicron.n-u omission.n-u omnipotence.n-u omniscience.n-u onion.n-u onomatopoeia.n-u ontology.n-u oomph.n-u ooze.n-u opacity.n-u opal.n-u openness.n-u opera.n-u operation.n-u ophicleide.n-u opiate.n-u opium.n-u opportunism.n-u opposition.n-u oppression.n-u opprobrium.n-u optics.n-u optimism.n-u opulence.n-u opus.n-u orangeade.n-u orange.n-u oratory.n-u orchestration.n-u ordination.n-u ore.n-u organization.n-u organ.n-u orientation.n-u originality.n-u origin.n-u ornamentation.n-u ornament.n-u ornithology.n-u orthodoxy.n-u orthography.n-u oscillation.n-u ossification.n-u ostentation.n-u osteopathy.n-u ostracism.n-u otter.n-u outcry.n-u outlay.n-u output.n-u outrage.n-u ovenware.n-u overcollection.n-u overconfidence.n-u overdrive.n-u overemphasis.n-u overexertion.n-u overexposure.n-u overgrowth.n-u overkill.n-u overlap.n-u overpayment.n-u overpopulation.n-u overproduction.n-u oversight.n-u overstatement.n-u overstrain.n-u overtime.n-u overwork.n-u ownership.n-u oxidation.n-u oxide.n-u oxidization.n-u oxyacetylene.n-u oxygen.n-u oyster.n-u oystershell.n-u ozone.n-u pacification.n-u pacifism.n-u packaging.n-u padding.n-u paederasty.n-u paella.n-u paganism.n-u pageantry.n-u pagination.n-u pain.n-u paint.n-u paisley.n-u paixiao.n-u Pakistani.n-u palaeontology.n-u palendag.n-u paleness.n-u paleontology.n-u pallor.n-u palsy.n-u panache.n-u Panamanian.n-u pancake.n-u pandemonium.n-u panelling.n-u panic.n-u pan_pipen-u pantheism.n-u pantomime.n-u papadam.n-u paper.n-u paperwork.n-u paprika.n-u papyrus.n-u paradise.n-u paraffin.n-u Paraguayan.n-u parallelism.n-u paralysis.n-u paranoia.n-u paraphernalia.n-u parchment.n-u pardon.n-u parentage.n-u parity.n-u parochialism.n-u parody.n-u parole.n-u par.n-u parquet.n-u parricide.n-u parsimony.n-u parsley.n-u parsnip.n-u participation.n-u partisanship.n-u partition.n-u partnership.n-u partridge.n-u passage.n-u passion.n-u passivity.n-u pasta.n-u paste.n-u pasteurization.n-u pastry.n-u pasture.n-u patchwork.n-u pate.n-u paté.n-u paternalism.n-u paternity.n-u pathology.n-u pathos.n-u patience.n-u patricide.n-u patriotism.n-u patronage.n-u patter.n-u paucity.n-u pause.n-u paydirt.n-u payment.n-u pay.n-u payout.n-u peace.n-u peacetime.n-u peach.n-u peanut.n-u pea.n-u pearl.n-u pear.n-u peat.n-u pecan.n-u pectin.n-u peculiarity.n-u pedagogy.n-u pedantry.n-u pederasty.n-u pedigree.n-u peel.n-u pee.n-u penalty.n-u penance.n-u penetration.n-u penicillin.n-u penitence.n-u penmanship.n-u pentamidine.n-u penury.n-u peonage.n-u pep.n-u peppermint.n-u pepper.n-u perceptibility.n-u perch.n-u percussion.n-u perfectibility.n-u perfection.n-u perfidy.n-u perforation.n-u performance.n-u perfume.n-u peril.n-u periwinkle.n-u perjury.n-u permafrost.n-u permanence.n-u permeability.n-u permission.n-u permissiveness.n-u permutation.n-u peroxide.n-u perpetration.n-u perpetuation.n-u perpetuity.n-u perplexity.n-u persecution.n-u perseverance.n-u persimmon.n-u persistence.n-u personality.n-u personification.n-u perspective.n-u perspicacity.n-u perspicuity.n-u perspiration.n-u persuasion.n-u pertinence.n-u perusal.n-u Peruvian.n-u perversion.n-u perversity.n-u pessimism.n-u pesticide.n-u pestilence.n-u petroleum.n-u petrol.n-u pettiness.n-u petulance.n-u pewter.n-u peyote.n-u pharmacology.n-u pheasant.n-u philanthropy.n-u philology.n-u phi.n-u phlegm.n-u phonology.n-u phosphate.n-u phosphorescence.n-u phosphorus.n-u photography.n-u photosynthesis.n-u phraseology.n-u phrenology.n-u phylogeny.n-u phylum.n-u physics.n-u physiognomy.n-u physiology.n-u physiotherapy.n-u physique.n-u pianoforte.n-u piano.n-u pibgorn.n-u piccolo.n-u pickle.n-u pico_de_gaillo pico_de_gallo pide.n-u pidgin.n-u piecework.n-u pie.n-u piety.n-u piffle.n-u pigmentation.n-u pigment.n-u pigskin.n-u pilaf.n-u pimento.n-u pinball.n-u pineapple.n-u pine.n-u pingpong.n-u pi.n-u pipe.n-u piping.n-u piquancy.n-u pique.n-u piracy.n-u piss.n-u pistachio.n-u pitch.n-u pith.n-u pity.n-u pizza.n-u placement.n-u placenta.n-u placidity.n-u plagiarism.n-u plaice.n-u plaid.n-u planking.n-u plankton.n-u planning.n-u plaque.n-u plasma.n-u plaster.n-u plasticine.n-u plasticity.n-u plastic.n-u platinum.n-u plausibility.n-u playback.n-u play.n-u playtime.n-u pleasure.n-u pliancy.n-u pluck.n-u plumage.n-u plumbing.n-u plunder.n-u pluralism.n-u plurality.n-u plush.n-u plutocracy.n-u plutonium.n-u plywood.n-u pneumonia.n-u podiatry.n-u poetry.n-u poignancy.n-u poinsettia.n-u poise.n-u poison.n-u poker.n-u polarity.n-u polarization.n-u police.n-u policy.n-u poliomyelitis.n-u polio.n-u Polish.n-u polish.n-u politeness.n-u politics.n-u pollen.n-u pollination.n-u pollo_con_oregano pollo_con_queso pollo_frito pollo.n-u pollution.n-u polo.n-u polska_kielbasa polygamy.n-u polyphony.n-u polytheism.n-u polythene.n-u pomp.n-u pomposity.n-u popcorn.n-u popery.n-u poplar.n-u pop.n-u poppycock.n-u popularity.n-u popularization.n-u population.n-u populism.n-u porcelain.n-u pork.n-u porn.n-u pornography.n-u porosity.n-u porridge.n-u portability.n-u port.n-u portraiture.n-u Portugese.n-u positivism.n-u possession.n-u postage.n-u posterity.n-u post.n-u postponement.n-u posture.n-u potash.n-u potassium.n-u potato.n-u potency.n-u potentiality.n-u potential.n-u pot.n-u pottery.n-u poultry.n-u poverty.n-u powder.n-u power.n-u practicability.n-u practicality.n-u practice.n-u pragmatism.n-u praise.n-u prattle.n-u prawn.n-u prayer.n-u preachiness.n-u precedence.n-u precipitation.n-u precision.n-u precocity.n-u predestination.n-u predictability.n-u prediction.n-u predominance.n-u preference.n-u preferment.n-u pregnancy.n-u prehistory.n-u prejudice.n-u premeditation.n-u preoccupation.n-u preparation.n-u prep.n-u prescience.n-u prescription.n-u presence.n-u presentation.n-u preservation.n-u press.n-u prestige.n-u presumption.n-u pretence.n-u pretense.n-u pretension.n-u prettiness.n-u prevalence.n-u prevarication.n-u prevention.n-u prevision.n-u price.n-u pride.n-u primacy.n-u prime.n-u primogeniture.n-u principal.n-u printing.n-u print.n-u priority.n-u prison.n-u privacy.n-u privatization.n-u privilege.n-u probate.n-u probation.n-u probity.n-u procedure.n-u procession.n-u procrastination.n-u procurement.n-u produce.n-u production.n-u productivity.n-u profanity.n-u professionalism.n-u proficiency.n-u profile.n-u profitability.n-u profiteering.n-u profit.n-u profligacy.n-u profundity.n-u profusion.n-u prognostication.n-u programming.n-u progression.n-u progress.n-u prohibition.n-u prolixity.n-u prolongation.n-u prominence.n-u promiscuity.n-u promptness.n-u promulgation.n-u pronunciation.n-u propaganda.n-u propagation.n-u propane.n-u propellant.n-u propellent.n-u property.n-u prophecy.n-u prophylaxis.n-u proportion.n-u propriety.n-u propulsion.n-u proscription.n-u prosecution.n-u prose.n-u prosody.n-u prosperity.n-u prostitution.n-u prostration.n-u protectionism.n-u protection.n-u protein.n-u protest.n-u protocol.n-u protoplasm.n-u provenance.n-u providence.n-u provincialism.n-u provocation.n-u prowess.n-u proximity.n-u proxy.n-u prudence.n-u prudery.n-u prurience.n-u psalmody.n-u psaltery.n-u psi.n-u psoriasis.n-u psychiatry.n-u psychoanalysis.n-u psychology.n-u psychotherapy.n-u puberty.n-u publicity.n-u publishing.n-u puce.n-u pudding.n-u pugnacity.n-u puke.n-u pulalu.n-u pulp.n-u pulsation.n-u pumpernickel.n-u pumpkin.n-u punch.n-u punctuality.n-u punctuation.n-u pungency.n-u punishment.n-u punk.n-u purchase.n-u purchasing.n-u purgation.n-u purgatory.n-u purification.n-u puritanism.n-u purity.n-u purpose.n-u pursuit.n-u pusillanimity.n-u pus.n-u putty.n-u puzzlement.n-u Qatari.n-u quackery.n-u qualification.n-u quality.n-u quantity.n-u quarantine.n-u quartz.n-u quatro.n-u queasiness.n-u queso_blanco queso.n-u quiche.n-u quicksand.n-u quicksilver.n-u quietism.n-u quince.n-u quinine.n-u quinticlave.n-u quotation.n-u rabbit.n-u rabies.n-u race.n-u racing.n-u racism.n-u racketeering.n-u racket.n-u radar.n-u radiance.n-u radiation.n-u radicalism.n-u radioactivity.n-u radiography.n-u radiology.n-u radio.n-u radiotherapy.n-u radium.n-u radius.n-u rage.n-u ragtime.n-u rainfall.n-u rain.n-u rainstick.n-u rainwater.n-u ranch.n-u rancour.n-u range.n-u rank.n-u ransom.n-u rapacity.n-u rape.n-u rapidity.n-u rap.n-u rapport.n-u rapture.n-u rarebit.n-u rarity.n-u ratchet.n-u rationalism.n-u rationality.n-u rationalization.n-u rattle.n-u ravioli.n-u rayon.n-u reach.n-u reaction.n-u readability.n-u reading.n-u readjustment.n-u readmission.n-u realignment.n-u realism.n-u reality.n-u reallocation.n-u rearmament.n-u rearrangement.n-u reasonableness.n-u reassessment.n-u rebec.n-u recalcitrance.n-u recall.n-u recapitulation.n-u reception.n-u receptiveness.n-u receptivity.n-u recession.n-u recidivism.n-u reciprocation.n-u reciprocity.n-u recitation.n-u recitative.n-u recklessness.n-u reclamation.n-u recognition.n-u recollection.n-u recompense.n-u reconciliation.n-u reconnaissance.n-u reconsideration.n-u reconstruction.n-u recorder.n-u record.n-u recourse.n-u recovery.n-u recreation.n-u recrimination.n-u recruiting.n-u rectification.n-u rectitude.n-u recuperation.n-u recurrence.n-u redemption.n-u redeployment.n-u redevelopment.n-u rediscovery.n-u redistribution.n-u redness.n-u redress.n-u reduction.n-u redundancy.n-u reduplication.n-u redwood.n-u reed.n-u reek.n-u re-election.n-u reelection.n-u reference.n-u referral.n-u refinancing.n-u refinement.n-u reflection.n-u reforestation.n-u reformation.n-u reform.n-u refraction.n-u refreshment.n-u refrigeration.n-u refuge.n-u refund.n-u refuse.n-u refutation.n-u regard.n-u regeneration.n-u reggae.n-u regicide.n-u regimentation.n-u registration.n-u registry.n-u regression.n-u regret.n-u regularity.n-u regulation.n-u rehabilitation.n-u rehearsal.n-u reimbursement.n-u reimposition.n-u reincarnation.n-u reinforcement.n-u reinstatement.n-u reinterpretation.n-u reiteration.n-u rejection.n-u rejuvenation.n-u relation.n-u relativity.n-u relaxation.n-u relegation.n-u relevancy.n-u reliability.n-u reliance.n-u religion.n-u relish.n-u relocation.n-u remarriage.n-u remembrance.n-u remilitarization.n-u reminiscence.n-u remission.n-u remittance.n-u remonstrance.n-u remorse.n-u removal.n-u remuneration.n-u renewal.n-u renovation.n-u renown.n-u rent.n-u renunciation.n-u reorganization.n-u reorientation.n-u repair.n-u reparation.n-u repartee.n-u repatriation.n-u repayment.n-u repellent.n-u repentance.n-u repetition.n-u replacement.n-u replenishment.n-u reportage.n-u repose.n-u representation.n-u repression.n-u reprisal.n-u reproach.n-u reproduction.n-u reproof.n-u republicanism.n-u repugnance.n-u repulsion.n-u repurchase.n-u reputation.n-u repute.n-u requisition.n-u resale.n-u rescue.n-u research.n-u resemblance.n-u resentment.n-u reservation.n-u reserve.n-u residence.n-u resignation.n-u resilience.n-u resiliency.n-u resin.n-u resistance.n-u resolvability.n-u resolvableness.n-u resolve.n-u resonance.n-u resort.n-u respectability.n-u respect.n-u respiration.n-u respite.n-u resplendence.n-u restitution.n-u restlessness.n-u restoration.n-u rest.n-u restraint.n-u restructuring.n-u resumption.n-u resurrection.n-u resuscitation.n-u retaliation.n-u retardation.n-u retention.n-u reticence.n-u retirement.n-u retraction.n-u retreat.n-u retrenchment.n-u retribution.n-u retrieval.n-u retrogression.n-u retrospect.n-u return.n-u reunification.n-u reunion.n-u revaluation.n-u revelation.n-u revel.n-u revelry.n-u revenge.n-u revenue.n-u reverberation.n-u reverence.n-u reverie.n-u reversal.n-u reverse.n-u reversibility.n-u reversion.n-u review.n-u revisionism.n-u revision.n-u revitalization.n-u revival.n-u revocation.n-u revolt.n-u revolution.n-u revulsion.n-u reward.n-u rhetoric.n-u rheumatism.n-u rho.n-u rhubarb.n-u rhyme.n-u rhythm.n-u ribaldry.n-u riboflavin.n-u rice.n-u richness.n-u riddance.n-u ridicule.n-u rigging.n-u righteousness.n-u right.n-u rightness.n-u rigidity.n-u rigmarole.n-u rigour.n-u rioting.n-u riot.n-u risotto.n-u ritual.n-u rivalry.n-u roast.n-u robbery.n-u rock.n-u roe.n-u romance.n-u Romanian.n-u romanticism.n-u roofing.n-u room.n-u rope.n-u rosemary.n-u rosewood.n-u rosin.n-u rotation.n-u rotgut.n-u rotini.n-u rot.n-u rouge.n-u roughage.n-u roulette.n-u routine.n-u royalty.n-u rubber.n-u rubbish.n-u rubble.n-u rudeness.n-u rue.n-u rugby.n-u rugger.n-u ruin.n-u rummy.n-u rum.n-u rumour.n-u rupture.n-u rush.n-u russet.n-u Russian.n-u rustle.n-u rust.n-u Rwandan.n-u rye.n-u ryuteki.n-u sable.n-u sabotage.n-u saccharin.n-u sackbut.n-u sack.n-u sacrifice.n-u sacrilege.n-u sadism.n-u sadness.n-u sadomasochism.n-u safari.n-u safekeeping.n-u safety.n-u saffron.n-u sagacity.n-u sage.n-u sainthood.n-u sake.n-u salad.n-u salamander.n-u salami.n-u salary.n-u sale.n-u salesmanship.n-u salience.n-u saline.n-u salinity.n-u saliva.n-u salmon.n-u salsa_mexicana salsa.n-u salsa_rojo salsa_verde salt.n-u saltpetre.n-u saltwater.n-u Salvadoran.n-u salvage.n-u salvation.n-u salve.n-u sameness.n-u Samoan.n-u samponia.n-u sanction.n-u sanctity.n-u sanctuary.n-u sandalwood.n-u sand.n-u sandpaper.n-u sandstone.n-u sandwich.n-u sangria.n-u sanitation.n-u sanity.n-u sap.n-u sapphire.n-u sarcasm.n-u sardine.n-u sarrusophone.n-u satiety.n-u satin.n-u satire.n-u satisfaction.n-u saturation.n-u sauce.n-u sauerkraut.n-u sausage.n-u savagery.n-u savory.n-u savoy.n-u savvy.n-u sawdust.n-u saxhorn.n-u saxonette.n-u saxophone.n-u scaffolding.n-u scandal.n-u scansion.n-u scarcity.n-u scarlet.n-u scenery.n-u scent.n-u scepticism.n-u schizophrenia.n-u schmaltz.n-u schmalz.n-u schmear.n-u schnapps.n-u schnitzel.n-u scholarship.n-u scholasticism.n-u schooling.n-u school.n-u schooltime.n-u sciatica.n-u science.n-u scintillation.n-u sclerosis.n-u scone.n-u scope.n-u scorn.n-u scotch.n-u Scottish.n-u scrabble.n-u scrap.n-u scruple.n-u scrutiny.n-u scud.n-u sculpture.n-u scum.n-u scurvy.n-u seafood.n-u seamanship.n-u sea.n-u seasickness.n-u seasoning.n-u seaweed.n-u secession.n-u seclusion.n-u secrecy.n-u secretion.n-u sectarianism.n-u secularism.n-u security.n-u sedation.n-u sediment.n-u sedition.n-u seduction.n-u seepage.n-u seersucker.n-u segmentation.n-u segregation.n-u seismology.n-u seizure.n-u selection.n-u selectivity.n-u self-confidence.n-u self-consciousness.n-u self-control.n-u self-determination.n-u self-esteem.n-u self-examination.n-u self-help.n-u self-indulgence.n-u self-interest.n-u self-pity.n-u self-preservation.n-u self-respect.n-u self-rule.n-u self-sacrifice.n-u self-sufficiency.n-u self-will.n-u semaphore.n-u semblance.n-u semen.n-u semolina.n-u Senegalese.n-u senility.n-u seniority.n-u sensationalism.n-u sensation.n-u sensibility.n-u sensitivity.n-u sensuality.n-u sentimentality.n-u sentiment.n-u separation.n-u sepia.n-u sequence.n-u Serbian.n-u serendipity.n-u serenity.n-u serfdom.n-u serge.n-u seriousness.n-u serum.n-u service.n-u servitude.n-u sesame.n-u set.n-u settlement.n-u severance.n-u severity.n-u sewage.n-u sexism.n-u sex.n-u sexuality.n-u shade.n-u shading.n-u shag.n-u shakuhachi.n-u shale.n-u shampoo.n-u shandy.n-u shape.n-u share.n-u sheen.n-u sheepskin.n-u sheet.n-u shehnai.n-u shekere.n-u shellac.n-u shellfire.n-u shelter.n-u sheng.n-u sherbet.n-u sherry.n-u shimmer.n-u shingle.n-u shinobue.n-u shipbuilding.n-u shipment.n-u shipping.n-u shipwreck.n-u shit.n-u shock.n-u shoemaking.n-u shopping.n-u shortage.n-u shortbread.n-u shortcake.n-u shortening.n-u shorthand.n-u shortness.n-u showbiz.n-u showjumping.n-u showmanship.n-u shrapnel.n-u shrift.n-u shrimp.n-u shrinkage.n-u shuteye.n-u shyness.n-u Sicilian.n-u sickness.n-u siege.n-u sienna.n-u sight.n-u sight-seeing.n-u sightseeing.n-u sigma.n-u significance.n-u signification.n-u siku.n-u silence.n-u silica.n-u silicone.n-u silicon.n-u silk.n-u silliness.n-u silt.n-u silver.n-u similarity.n-u simile.n-u similitude.n-u simplicity.n-u simplification.n-u simulation.n-u simultaneity.n-u sincerity.n-u sin.n-u sirloin.n-u sirup.n-u sisterhood.n-u sitar.n-u size.n-u skateboarding.n-u skepticism.n-u skill.n-u skim.n-u skin.n-u sky.n-u skywriting.n-u slack.n-u slander.n-u slang.n-u slapstick.n-u slate.n-u slaughter.n-u slavery.n-u slaw.n-u sleep.n-u sleet.n-u slew.n-u slime.n-u slippage.n-u sloe.n-u slope.n-u sloth.n-u Slovakian.n-u Slovenian.n-u sludge.n-u slush.n-u smallpox.n-u smalt.n-u smog.n-u smoke.n-u smoking.n-u smuggling.n-u smut.n-u snail.n-u snap.n-u snare.n-u snobbery.n-u snooker.n-u snort.n-u snot.n-u snow.n-u snuff.n-u soap.n-u sobriety.n-u soccer.n-u sociability.n-u socialism.n-u socialization.n-u society.n-u sociology.n-u soda.n-u sodium.n-u sodomy.n-u sod.n-u softness.n-u software.n-u soil.n-u solace.n-u solder.n-u solemnity.n-u solicitation.n-u solicitude.n-u solidarity.n-u solidification.n-u solidity.n-u solipsism.n-u solitaire.n-u solitude.n-u solubility.n-u solvency.n-u Somalian.n-u somnolence.n-u sonority.n-u soot.n-u sophistication.n-u sophistry.n-u soprano.n-u sorbet.n-u sorcery.n-u soreness.n-u sorghum.n-u sorrel.n-u sorrow.n-u soul.n-u sound.n-u soup.n-u sousaphone.n-u sovereignty.n-u soy.n-u space.n-u spaghetti.n-u spam.n-u Spanish.n-u spawn.n-u spearmint.n-u specialization.n-u specie.n-u specification.n-u specificity.n-u spectroscopy.n-u speech.n-u speed.n-u spelling.n-u spending.n-u spermicide.n-u sperm.n-u spice.n-u spillage.n-u spillover.n-u spinach.n-u spin.n-u spinsterhood.n-u spirit.n-u spirituality.n-u spite.n-u spittle.n-u spleen.n-u splendour.n-u spoil.n-u sponge.n-u sponsorship.n-u spontaneity.n-u sport.n-u sportsmanship.n-u sprawl.n-u spray.n-u spring.n-u springtime.n-u spruce.n-u spunk.n-u squalor.n-u squirrel.n-u stability.n-u stabilization.n-u staff.n-u stagecraft.n-u stagflation.n-u staging.n-u stagnation.n-u stain.n-u stalemate.n-u stamina.n-u standardization.n-u standing.n-u starch.n-u stardom.n-u stardust.n-u starlight.n-u starvation.n-u statecraft.n-u statesmanship.n-u stationery.n-u statuary.n-u stature.n-u status.n-u stead.n-u steak.n-u stealth.n-u steam.n-u steelmaking.n-u steel.n-u steelpan.n-u stenography.n-u stereotype.n-u sterility.n-u sterilization.n-u sterling.n-u stewardship.n-u stew.n-u stiffness.n-u stillness.n-u stimulation.n-u stock.n-u stoicism.n-u stone.n-u stoneware.n-u storage.n-u stout.n-u strain.n-u strategy.n-u stratification.n-u straw.n-u strength.n-u stress.n-u stretch.n-u strife.n-u stringency.n-u string.n-u striptease.n-u strontium.n-u structure.n-u strudel.n-u struggle.n-u strychnine.n-u stubble.n-u stubbornness.n-u stucco.n-u study.n-u stuffing.n-u stuff.n-u stupefaction.n-u stupidity.n-u stupor.n-u sturgeon.n-u style.n-u stylization.n-u suavity.n-u subconsciousness.n-u subdivision.n-u subjection.n-u subjectivity.n-u subjugation.n-u subjunctive.n-u sublimation.n-u submergence.n-u submersion.n-u submission.n-u subordination.n-u subscription.n-u subservience.n-u subsidization.n-u subsistence.n-u subsoil.n-u substance.n-u substantiation.n-u substitution.n-u subterfuge.n-u subtlety.n-u subtraction.n-u suburbia.n-u subversion.n-u succession.n-u success.n-u suction.n-u Sudanese.n-u suede.n-u suet.n-u suffering.n-u sufficiency.n-u suffocation.n-u suffrage.n-u sugar.n-u suicide.n-u suitability.n-u sulphate.n-u sulphide.n-u sulphur.n-u summer.n-u summertime.n-u sunburn.n-u sundown.n-u sunlight.n-u sun.n-u sunrise.n-u sunset.n-u sunshine.n-u sunstroke.n-u superconductivity.n-u superego.n-u superficiality.n-u superfluity.n-u superiority.n-u superstition.n-u supervision.n-u supper.n-u supplication.n-u supply.n-u support.n-u suppression.n-u supremacy.n-u surgery.n-u Surinamese.n-u surprise.n-u surrealism.n-u surveillance.n-u surveying.n-u survival.n-u susceptibility.n-u sushi.n-u suspense.n-u suspension.n-u sustenance.n-u swamp.n-u sway.n-u sweat.n-u Swedish.n-u sweetbread.n-u sweetening.n-u sweetmeat.n-u sweetness.n-u swelling.n-u swill.n-u swimsuit.n-u Swiss.n-u swordplay.n-u swordsmanship.n-u sycamore.n-u symbiosis.n-u symbolism.n-u symbolization.n-u symmetry.n-u sympathy.n-u synchronization.n-u synchrony.n-u synclavier.n-u syncopation.n-u syndication.n-u syntax.n-u synthesizer.n-u syphilis.n-u Syrian.n-u syrup.n-u systematization.n-u tabbouleh.n-u tabbouli.n-u tableware.n-u taboo.n-u taboulleh.n-u taboulli.n-u tabulation.n-u tackle.n-u tack.n-u tact.n-u taffeta.n-u taffy.n-u tag.n-u Taiwanese.n-u takeoff.n-u take-up.n-u talcum.n-u talent.n-u talk.n-u tamale.n-u tamarind.n-u tamboril.n-u tambourine.n-u tamburitza.n-u tandem.n-u tangerine.n-u Tanzanian.n-u tape.n-u tapestry.n-u tapioca.n-u tarmac.n-u tarogato.n-u tar.n-u tarragon.n-u tartar.n-u taste.n-u tau.n-u taupe.n-u tautology.n-u taxation.n-u taxidermy.n-u taxonomy.n-u teaching.n-u teak.n-u teal.n-u teamwork.n-u tea.n-u technique.n-u technocracy.n-u technology.n-u tedium.n-u telecommunications.n-u telefax.n-u telemarketing.n-u teleology.n-u telepathy.n-u teletype.n-u television.n-u temerity.n-u temperament.n-u temperance.n-u temperature.n-u temper.n-u temporality.n-u tenacity.n-u tenancy.n-u tenderloin.n-u tenderness.n-u tenné.n-u tennis.n-u tenoroon.n-u tenor.n-u tension.n-u tenure.n-u termination.n-u terminology.n-u terra_cotta terrain.n-u territory.n-u terrorism.n-u terror.n-u testimony.n-u testing.n-u tetanus.n-u Texan.n-u text.n-u texture.n-u Thai.n-u thankfulness.n-u thanksgiving.n-u theater.n-u theatre.n-u theft.n-u theocracy.n-u theology.n-u therapy.n-u theremin.n-u theta.n-u thickness.n-u thinking.n-u thirst.n-u thread.n-u thrift.n-u thrombosis.n-u throttle.n-u thrust.n-u thunderclap.n-u thunder.n-u thyme.n-u tide.n-u tightness.n-u tile.n-u timber.n-u timbre.n-u timeliness.n-u timidity.n-u timing.n-u timpani.n-u tinder.n-u tinfoil.n-u tin.n-u tinsel.n-u tiredness.n-u tissue.n-u titillation.n-u toast.n-u tobacco.n-u toffee.n-u tofu.n-u togetherness.n-u toil.n-u tolerance.n-u tomatillo.n-u tomato.n-u tomfoolery.n-u tomtom.n-u tom-tom.n-u tonality.n-u tone.n-u tonette.n-u tonnage.n-u tonsillitis.n-u toothache.n-u toothpaste.n-u topography.n-u topsoil.n-u torment.n-u torpor.n-u torque.n-u tort.n-u tortoiseshell.n-u torture.n-u totalitarianism.n-u totality.n-u touch.n-u tourism.n-u tow.n-u town.n-u toxicity.n-u toxicology.n-u toxin.n-u trace.n-u traction.n-u trade.n-u trading.n-u traditionalism.n-u tradition.n-u traffic.n-u tragedy.n-u training.n-u tranquility.n-u tranquillity.n-u transaction.n-u transcendence.n-u transcendentalism.n-u transcription.n-u transference.n-u transfer.n-u transfiguration.n-u transformation.n-u transfusion.n-u transgression.n-u transience.n-u transition.n-u transit.n-u translation.n-u translucence.n-u transmigration.n-u transmission.n-u transmutation.n-u transparency.n-u transpiration.n-u transplantation.n-u transportation.n-u transport.n-u transposition.n-u transubstantiation.n-u trash.n-u trauma.n-u travail.n-u travel.n-u treachery.n-u treacle.n-u treason.n-u treasure.n-u treatment.n-u treaty.n-u trepidation.n-u tres.n-u triangle.n-u tribalism.n-u tribute.n-u trickery.n-u trifle.n-u trigonometry.n-u trim.n-u Trinidadian.n-u tripe.n-u triplicate.n-u triumph.n-u triviality.n-u trombone.n-u tromboon.n-u trompeta.n-u trouble.n-u trout.n-u troy.n-u truancy.n-u trucking.n-u truculence.n-u trumpet.n-u trust.n-u truth.n-u trychel.n-u tuba.n-u tubax.n-u tuberculosis.n-u tubing.n-u tuck.n-u tuition.n-u tumbleweed.n-u tumult.n-u tuna.n-u tundra.n-u tungsten.n-u Tunisian.n-u turbot.n-u turbulence.n-u turf.n-u turkey.n-u Turkish.n-u turmeric.n-u turmoil.n-u turnaround.n-u turnout.n-u turpentine.n-u turpitude.n-u turquoise.n-u tutelage.n-u TV.n-u twaddle.n-u tweed.n-u twilight.n-u twine.n-u twinkle.n-u typhoid.n-u typhus.n-u typography.n-u tyranny.n-u ubiquity.n-u Ugandan.n-u ugliness.n-u Ukrainian.n-u ukulele.n-u umbrage.n-u unanimity.n-u uncertainty.n-u unconsciousness.n-u underbrush.n-u underclothing.n-u undercut.n-u underdevelopment.n-u underestimation.n-u underexposure.n-u undergrowth.n-u underpayment.n-u understatement.n-u undervaluation.n-u underwear.n-u unease.n-u uneasiness.n-u unemployment.n-u unfamiliarity.n-u unhappiness.n-u unification.n-u uniformity.n-u uniqueness.n-u unison.n-u unity.n-u universality.n-u unpleasantness.n-u unpopularity.n-u unpredictability.n-u unreality.n-u unrest.n-u unsuitability.n-u untruth.n-u upbringing.n-u upheaval.n-u upholstery.n-u upkeep.n-u uproar.n-u upsilon.n-u uptake.n-u uranium.n-u urbanity.n-u urbanization.n-u urgency.n-u urine.n-u Uruguayan.n-u usage.n-u usefulness.n-u use.n-u usurpation.n-u usury.n-u utilitarianism.n-u utility.n-u utilization.n-u utopia.n-u utterance.n-u vacancy.n-u vacation.n-u vaccination.n-u vaccine.n-u vacillation.n-u vacuity.n-u vagrancy.n-u vainglory.n-u validity.n-u valour.n-u valuation.n-u value.n-u vandalism.n-u vanilla.n-u vanity.n-u vantage.n-u vaporization.n-u vapour.n-u variability.n-u variance.n-u variation.n-u variety.n-u varnish.n-u varsity.n-u vaseline.n-u vaudeville.n-u veal.n-u vegetation.n-u vehemence.n-u velocity.n-u velour.n-u velvet.n-u vending.n-u veneer.n-u veneration.n-u Venezuelan.n-u vengeance.n-u venison.n-u venom.n-u ventilation.n-u ventriloquism.n-u veracity.n-u verbiage.n-u verbosity.n-u verdure.n-u verification.n-u verisimilitude.n-u vermicelli.n-u vermilion.n-u vermillion.n-u vermin.n-u vermouth.n-u versatility.n-u verse.n-u versification.n-u vertex.n-u vertigo.n-u verve.n-u viability.n-u vibraphone.n-u vibraslap.n-u vibration.n-u vibrato.n-u vice.n-u vicinity.n-u victimization.n-u victory.n-u video.n-u vielle.n-u Vietnamese.n-u vigilance.n-u vigor.n-u vigour.n-u vihuela.n-u vilification.n-u vim.n-u vinaigrette.n-u vindication.n-u vinegar.n-u vintage.n-u vinyl.n-u viola.n-u violation.n-u violence.n-u violin.n-u violoncello.n-u violotta.n-u viol.n-u virginity.n-u viridian.n-u virility.n-u virology.n-u virtue.n-u virtuosity.n-u virulence.n-u virus.n-u viscosity.n-u visibility.n-u vision.n-u vitality.n-u vitriol.n-u vivacity.n-u vivisection.n-u vocabulary.n-u vocation.n-u vodka.n-u volatility.n-u volition.n-u volleyball.n-u voltage.n-u volume.n-u vomit.n-u voodoo.n-u vulgarity.n-u vulnerability.n-u wallpaper.n-u walnut.n-u wanderlust.n-u warfare.n-u warmth.n-u war.n-u warpaint.n-u wartime.n-u washboard.n-u washing.n-u waste.n-u watercolour.n-u watercress.n-u watermelon.n-u water.n-u wattage.n-u wax.n-u weakness.n-u wealth.n-u weariness.n-u weather.n-u wedlock.n-u weedkiller.n-u weed.n-u weightlifting.n-u weight.n-u welfare.n-u well-being.n-u Welsh.n-u westernization.n-u whalebone.n-u wheat.n-u whereabouts.n-u wherewithal.n-u whey.n-u whimsy.n-u whip.n-u whiskey.n-u whisky.n-u whistle.n-u whiteness.n-u white.n-u whitewash.n-u whiting.n-u wholemeal.n-u wholesale.n-u wickedness.n-u wicker.n-u wick.n-u width.n-u wilderness.n-u wildfire.n-u wildlife.n-u willow.n-u willpower.n-u wind.n-u wine.n-u winter.n-u wireless.n-u wire.n-u wiring.n-u wisdom.n-u wisteria.n-u witchcraft.n-u withdrawal.n-u wit.n-u wizardry.n-u woe.n-u womanhood.n-u womankind.n-u wonder.n-u wont.n-u woodcraft.n-u woodland.n-u wood.n-u woodwork.n-u wool.n-u workmanship.n-u work.n-u worry.n-u worship.n-u worsted.n-u worthiness.n-u worth.n-u wrath.n-u wreckage.n-u wrestling.n-u writing.n-u wrongdoing.n-u xalam.n-u xenophobia.n-u xi.n-u xylophone.n-u xylorimba.n-u yam.n-u yarn.n-u yarrow.n-u yeast.n-u Yemeni.n-u yew.n-u yield.n-u yoga.n-u yoghourt.n-u yoghurt.n-u yogurt.n-u yolk.n-u yore.n-u youthfulness.n-u youth.n-u Yugoslavian.n-u Yugoslav.n-u yuletide.n-u zeal.n-u zealotry.n-u zest.n-u zeta.n-u zinc.n-u zoology.n-u link-grammar/data/en/words/words.adj.30000644000000000000000000002123012536650432014761 0ustar ablest.a-s abruptest.a-s airiest.a-s amplest.a-s angriest.a-s aptest.a-s ashiest.a-s atonalest.a-s baddest.a-s baggiest.a-s baldest.a-s balmiest.a-s barest.a-s basest.a-s battiest.a-s bawdiest.a-s beeriest.a-s best-defined.a-s biggest.a-s bitterest.a-s blackest.a-s blandest.a-s bleakest.a-s bleariest.a-s blondest.a-s bloodiest.a-s blotchiest.a-s bluest.a-s bluntest.a-s boggiest.a-s boldest.a-s boniest.a-s bossiest.a-s bounciest.a-s brainiest.a-s brashest.a-s brassiest.a-s bravest.a-s brawniest.a-s breathiest.a-s breeziest.a-s briefest.a-s brightest.a-s briskest.a-s bristliest.a-s brittlest.a-s broadest.a-s broodiest.a-s brownest.a-s bubbliest.a-s buckiest.a-s buggiest.a-s bulkiest.a-s bumpiest.a-s bunchiest.a-s burliest.a-s bushiest.a-s busiest.a-s butteriest.a-s calmest.a-s canniest.a-s catchiest.a-s chalkiest.a-s chanciest.a-s chattiest.a-s cheapest.a-s cheesiest.a-s chilliest.a-s choicest.a-s choppiest.a-s chubbiest.a-s civillest.a-s clammiest.a-s cleanest.a-s cleanliest.a-s clearest.a-s cleverest.a-s closest.a-s cloudiest.a-s clumsiest.a-s coarsest.a-s cockiest.a-s coldest.a-s coloredest.a-s colouredest.a-s commonest.a-s coolest.a-s corniest.a-s cosiest.a-s costliest.a-s courtliest.a-s coyest.a-s coziest.a-s craftiest.a-s craggiest.a-s crampiest.a-s craziest.a-s creakiest.a-s creamiest.a-s crispest.a-s crossest.a-s crudest.a-s cruellest.a-s crunchiest.a-s crustiest.a-s cuddliest.a-s curliest.a-s curtest.a-s cutest.a-s daintiest.a-s damnedest.a-s dampest.a-s dandiest.a-s darkest.a-s deadest.a-s deadliest.a-s deafest.a-s dearest.a-s deepest.a-s deftest.a-s densest.a-s dimmest.a-s dingiest.a-s dirtiest.a-s dizziest.a-s dopeyest.a-s dopiest.a-s dottiest.a-s doughiest.a-s doughtiest.a-s dowdiest.a-s downiest.a-s drabbest.a-s draftiest.a-s draughtiest.a-s dreamiest.a-s dreariest.a-s dressiest.a-s driest.a-s drowsiest.a-s drunkest.a-s dullest.a-s dumbest.a-s dumpiest.a-s duskiest.a-s dustiest.a-s earliest.a-s earthiest.a-s easternmost.a-s edgiest.a-s eeriest.a-s eldest.a-s emptiest.a-s faddiest.a-s faintest.a-s fairest.a-s fanciest.a-s fattest.a-s fattiest.a-s faultiest.a-s feeblest.a-s fewest.a-s fiercest.a-s fieriest.a-s filmiest.a-s filthiest.a-s finest.a-s firmest.a-s fishiest.a-s fittest.a-s fizziest.a-s flabbiest.a-s flakiest.a-s flashiest.a-s flattest.a-s fleshiest.a-s flimsiest.a-s flippest.a-s floppiest.a-s fluffiest.a-s foamiest.a-s foggiest.a-s fondest.a-s foulest.a-s foxiest.a-s frailest.a-s frankest.a-s freest.a-s freshest.a-s friendliest.a-s frizziest.a-s frostiest.a-s frothiest.a-s fruitiest.a-s fullest.a-s funniest.a-s furriest.a-s fussiest.a-s fuzziest.a-s gamest.a-s gassiest.a-s gauchest.a-s gaudiest.a-s gauntest.a-s gawkiest.a-s gayest.a-s gentlest.a-s giddiest.a-s gladdest.a-s glassiest.a-s glibbest.a-s gloomiest.a-s glummest.a-s goofiest.a-s gooiest.a-s goriest.a-s goutiest.a-s grainiest.a-s grandest.a-s grassiest.a-s gravest.a-s grayest.a-s greasiest.a-s greatest.a-s greediest.a-s greenest.a-s greyest.a-s grimmest.a-s grittiest.a-s groggiest.a-s grooviest.a-s grossest.a-s grubbiest.a-s gruffest.a-s grumpiest.a-s guiltiest.a-s gummiest.a-s gustiest.a-s hairiest.a-s handiest.a-s handsomest.a-s happiest.a-s hardiest.a-s harshest.a-s hastiest.a-s haughtiest.a-s haziest.a-s headiest.a-s healthiest.a-s heartiest.a-s heaviest.a-s heftiest.a-s highest.a-s highest-density.a-s highest-efficiency.a-s highest-priority.a-s highest-quality.a-s highest-resistance.a-s hilliest.a-s hoarest.a-s hoariest.a-s hoarsest.a-s holiest.a-s hollowest.a-s homeliest.a-s horniest.a-s hottest.a-s hugest.a-s humblest.a-s hungriest.a-s huskiest.a-s iciest.a-s idlest.a-s imbecilicest.a-s impurest.a-s inaptest.a-s jauntiest.a-s jerkiest.a-s jitteriest.a-s jolliest.a-s juiciest.a-s jumpiest.a-s keenest.a-s kindest.a-s kindliest.a-s kinkiest.a-s knobbiest.a-s knottiest.a-s laciest.a-s lamest.a-s lankiest.a-s largest.a-s latest.a-s laxest.a-s laziest.a-s leakiest.a-s leanest.a-s leftmost.a-s lengthiest.a-s lewdest.a-s lightest.a-s likeliest.a-s limpest.a-s littlest.a-s liveliest.a-s loamiest.a-s loftiest.a-s loneliest.a-s longest-lasting.a-s longestlasting.a-s looniest.a-s loopiest.a-s loosest.a-s lordliest.a-s loudest.a-s lousiest.a-s loveliest.a-s lowest.a-s lowest-density.a-s lowest-dose.a-s lowest-fat.a-s lowest-grade.a-s lowest-profile.a-s lowest-risk.a-s lowliest.a-s lownest.a-s loyallest.a-s luckiest.a-s lumpiest.a-s lushest.a-s lustiest.a-s maddest.a-s manliest.a-s marshiest.a-s massiest.a-s maturest.a-s mealiest.a-s meanest.a-s meatiest.a-s meekest.a-s mellowest.a-s merest.a-s merriest.a-s messiest.a-s mightiest.a-s mildest.a-s milkiest.a-s minutest.a-s mistiest.a-s moistest.a-s moldiest.a-s moodiest.a-s mossiest.a-s mouldiest.a-s mouseyest.a-s mousiest.a-s muddiest.a-s murkiest.a-s mushiest.a-s mustiest.a-s muzziest.a-s narrowest.a-s nastiest.a-s nattiest.a-s naughtiest.a-s nearest.a-s neatest.a-s neediest.a-s newest.a-s nicest.a-s noblest.a-s noisiest.a-s northernmost.a-s noseyest.a-s nosiest.a-s nudest.a-s numbest.a-s obtusest.a-s oddest.a-s oiliest.a-s oldest.a-s palest.a-s palmiest.a-s pastiest.a-s patchiest.a-s paunchiest.a-s pearliest.a-s peatiest.a-s pebbliest.a-s perkiest.a-s peskiest.a-s pettiest.a-s pickiest.a-s piggiest.a-s pinkest.a-s pithiest.a-s plainest.a-s pleasantest.a-s plumpest.a-s plushest.a-s podgiest.a-s pokiest.a-s politest.a-s poorest.a-s poshest.a-s pottiest.a-s prettiest.a-s priciest.a-s prickliest.a-s primmest.a-s profoundest.a-s pronest.a-s proudest.a-s pudgiest.a-s puffiest.a-s pulpiest.a-s puniest.a-s purest.a-s purplest.a-s quaintest.a-s queasiest.a-s queerest.a-s quickest.a-s quietest.a-s raciest.a-s rainiest.a-s randiest.a-s rarest.a-s readiest.a-s realest.a-s reddest.a-s reediest.a-s remotest.a-s richest.a-s rightmost.a-s ripest.a-s riskiest.a-s rockiest.a-s rosiest.a-s roughest.a-s roundest.a-s rowdiest.a-s ruddiest.a-s rudest.a-s runniest.a-s rustiest.a-s saddest.a-s safest.a-s saintliest.a-s saltiest.a-s sandiest.a-s sanest.a-s sauciest.a-s savviest.a-s scabbiest.a-s scaliest.a-s scantest.a-s scantiest.a-s scarcest.a-s scariest.a-s scratchiest.a-s scrawniest.a-s scurfiest.a-s scurviest.a-s securest.a-s sedatest.a-s seediest.a-s severest.a-s sexiest.a-s shabbiest.a-s shadiest.a-s shadowiest.a-s shaggiest.a-s shakiest.a-s shallowest.a-s shapeliest.a-s sharpest.a-s sheerest.a-s shiftiest.a-s shiniest.a-s shoddiest.a-s shortest.a-s showiest.a-s shrewdest.a-s shrillest.a-s shyest.a-s sickest.a-s sickliest.a-s silkiest.a-s silliest.a-s siltiest.a-s silveriest.a-s simplest.a-s sincerest.a-s sketchiest.a-s skinniest.a-s slackest.a-s slangiest.a-s sleekest.a-s sleepiest.a-s slenderest.a-s slickest.a-s sliest.a-s slightest.a-s slimiest.a-s slimmest.a-s slipperiest.a-s sloppiest.a-s slovenliest.a-s slowest.a-s slyest.a-s smallest.a-s smartest.a-s smelliest.a-s smokiest.a-s smoothest.a-s smuggest.a-s smuttiest.a-s snappiest.a-s snarkiest.a-s snazziest.a-s sneakiest.a-s snowiest.a-s snuggest.a-s soapiest.a-s soberest.a-s softest.a-s soggiest.a-s sootiest.a-s sorest.a-s sorriest.a-s soundest.a-s sourest.a-s southernmost.a-s sparest.a-s sparsest.a-s speediest.a-s spiciest.a-s spikiest.a-s spiniest.a-s spongiest.a-s spookiest.a-s sportiest.a-s spottiest.a-s sprightliest.a-s sprucest.a-s squarest.a-s stablest.a-s stalest.a-s stanchest.a-s starchiest.a-s starkest.a-s stateliest.a-s staunchest.a-s steadiest.a-s steeliest.a-s steepest.a-s sternest.a-s stickiest.a-s stiffest.a-s stillest.a-s stingiest.a-s stockiest.a-s stoniest.a-s stormiest.a-s stoutest.a-s straightest.a-s strangest.a-s streakiest.a-s strictest.a-s stringiest.a-s strongest.a-s stubbiest.a-s stuffiest.a-s stumpiest.a-s stupidest.a-s sturdiest.a-s subtlest.a-s sulkiest.a-s sunniest.a-s surest.a-s surliest.a-s swampiest.a-s sweatiest.a-s sweetest.a-s swiftest.a-s tallest.a-s tamest.a-s tannest.a-s tardiest.a-s tartest.a-s tastiest.a-s tautest.a-s tawdriest.a-s tawniest.a-s tenderest.a-s tensest.a-s tersest.a-s testiest.a-s thickest.a-s thinnest.a-s thirstiest.a-s thorniest.a-s thriftiest.a-s throatiest.a-s tidiest.a-s tightest.a-s timeliest.a-s tiniest.a-s toothiest.a-s touchiest.a-s toughest.a-s trickiest.a-s trimmest.a-s truest.a-s ugliest.a-s uneasiest.a-s unfriendliest.a-s unhappiest.a-s unhealthiest.a-s unlikeliest.a-s unruliest.a-s unsightliest.a-s unwieldiest.a-s vaguest.a-s vainest.a-s vastest.a-s vilest.a-s wannest.a-s wariest.a-s warmest.a-s wateriest.a-s waviest.a-s waxiest.a-s weakest.a-s weakliest.a-s wealthiest.a-s weariest.a-s weest.a-s weightiest.a-s weirdest.a-s westernmost.a-s wettest.a-s wheeziest.a-s whitest.a-s wickedest.a-s widest.a-s widest-angle.a-s wildest.a-s wiliest.a-s windiest.a-s wintriest.a-s wiriest.a-s wisest.a-s wispiest.a-s wittiest.a-s wobbliest.a-s woodiest.a-s wooliest.a-s woolliest.a-s wooziest.a-s wordiest.a-s worldliest.a-s worthiest.a-s wriest.a-s yellowest.a-s youngest.a-s link-grammar/data/en/words/words.v.2.10000644000000000000000000003215012536650433014632 0ustar abdicate.v abide.v abort.v abrade.v accelerate.v acclimate.v acclimatize.v acculturate.v accumulate.v acidify.v adapt.v adjourn.v adjudicate.v adjust.v advance.v advertise.v aerosolize.v affiliate.v age.v agglutinate.v aggregate.v agitate.v aglomerate.v ail.v align.v aliment.v alkalify.v ally.v alternate.v alter.v amalgamate.v Americanize.v anastomose.v anchor.v anergize.v ankylose.v antevert.v apostrophize.v appeal.v applaud.v applicate.v apply.v approach.v approximate.v arbitrate.v arborize.v arch.v articulate.v arylate.v ascend.v assemble.v assimilate.v assist.v associate.v attend.v audition.v augur.v autoactivate.v autocatalyze.v autocorrelate.v autodigest.v autolyze.v automatize.v autophosphorylate.v autosensitize.v autotransfuse.v avail.v awaken.v axenize.v bag.v band.v bank.v bargain.v barter.v bathe.v bath.v bat.v baulk.v benefit.v berth.v bicompartmentalize.v bifurcate.v bioaccumulate.v biotest.v blab.v blacken.v blackleg.v blanch.v blaspheme.v bleach.v blend.v blink.v blister.v bluff.v blur.v boggle.v bond.v bone.v bootleg.v bop.v border.v borrow.v botanize.v bottle-feed.v bowdlerize.v breastfeed.v breed.v brew.v bridle.v broaden.v broil.v bronchodilate.v brown.v brux.v budge.v buffet.v bugger.v bully.v burglarize.v burgle.v burnish.v burrow.v cable.v calcify.v calcine.v camber.v cancerize.v canvass.v capitalize.v capsize.v carp.v catabolize.v catenate.v cationize.v celebrate.v center.v centre.v chant.v char.v chelate.v circle.v circulate.v clang.v clap.v clasp.v clavelize.v cleave.v click.v clinch.v clink.v clot.v cloy.v clutch.v coacervate.v coach.v coagglutinate.v coaggregate.v coagulate.v coamplify.v coarctate.v coarsen.v coax.v codistribute.v coextract.v cofractionate.v cogitate.v coincubate.v coinject.v coinsure.v collapse.v collimate.v co-localise.v colocalise.v co-localize.v colocalize.v combine.v cometabolize.v commence.v commingle.v communicate.v commute.v compare.v compensate.v compose.v compute.v concentrate.v conceptualize.v condense.v conduct.v confederate.v confer.v confide.v congest.v conjoin.v conjugate.v consolidate.v constipate.v consult.v contest.v contrast.v contribute.v convene.v convert.v copartition.v coprecipitate.v copurify.v coregister.v correlate.v corrode.v corrugate.v corrupt.v cosediment.v costain.v co-star.v costar.v couch.v counter-attack.v counterattack.v counterindicate.v countermine.v crash-land.v crash.v crave.v crease.v creosote.v crib.v crinkle.v crisscross.v crochet.v croon.v cross-check.v crosscheck.v cross_fertilize crosslink.v cryosection.v crystallize.v cuddle.v cumulate.v curdle.v curse.v curve.v dab.v damp.v dangle.v dap.v darken.v darn.v date.v de-acidify.v deacidify.v de-adapt.v deadapt.v de-aggregate.v deaggregate.v de-alcoholize.v dealcoholize.v de-allergize.v deallergize.v debark.v debate.v de-bond.v debond.v de-branch.v debranch.v decelerate.v de-cidualize.v decidualize.v de-clamp.v declamp.v decompose.v de-condense.v decondense.v de-condition.v decondition.v de-congest.v decongest.v de-conjugate.v deconjugate.v de-construct.v deconstruct.v decrease.v de-crepitate.v decrepitate.v de-differentiate.v dedifferentiate.v deepen.v de-epithelialize.v deepithelialize.v de-fibrinogenate.v defibrinogenate.v deflect.v de-fluorinate.v defluorinate.v de-glove.v deglove.v de-glycosylate.v deglycosylate.v de-granulate.v degranulate.v de-humidify.v dehumidify.v de-iodinate.v deiodinate.v delay.v delight.v de-masculinize.v demasculinize.v democratize.v de-morphinize.v demorphinize.v de-naturate.v denaturate.v departmentalize.v de-phase.v dephase.v de-polarize.v depolarize.v de-polymerize.v depolymerize.v de-proteinize.v deproteinize.v de-quench.v dequench.v derail.v derive.v derogate.v de-saturate.v desaturate.v descend.v de-squamate.v desquamate.v de-stabilize.v destabilize.v de-synchronize.v desynchronize.v detonate.v de-toxify.v detoxify.v develop.v de-vitrify.v devitrify.v dialyze.v dichotomize.v dictate.v differentiate.v diffuse.v digest.v digitalize.v digitilize.v dilate.v dimerize.v diminish.v dim.v din.v dip.v disarm.v disarticulate.v disband.v discase.v discharge.v discolor.v discontinue.v disengage.v disentangle.v disincorporate.v disinflate.v disjoin.v dismount.v dispense.v disperse.v dissimulate.v dissipate.v dissolve.v distend.v distill.v distinguish.v disunite.v dive-bomb.v diversify.v diverticulize.v divine.v dock.v dodge.v dogmatize.v dorsalize.v dorsiflex.v double-click.v downsize.v dread.v dribble.v drill.v drip.v droop.v dull.v dynamize.v dysmyelinate.v echo.v efflux.v effuse.v ejaculate.v eject.v elaborate.v electroblot.v electrocoagulate.v electrodialyze.v electroejaculate.v electrofocus.v electrotype.v elongate.v embolize.v embrittle.v embroider.v emplane.v encapsidate.v encyst.v endocytose.v endothelialize.v endure.v end.v engage.v engorge.v enlist.v enroll.v enrol.v entertain.v enter.v entrench.v enunciate.v epimerize.v epoxidate.v erode.v escalate.v escape.v esterize.v etch.v etiolate.v euhydrate.v evacuate.v evolve.v exaggerate.v excyst.v exercise.v exfoliate.v exhale.v exogastrulate.v expand.v expectorate.v explode.v explore.v expound.v express.v extemporize.v extend.v extrapolate.v extravasate.v exuviate.v famish.v farrow.v fasten.v feast.v federate.v ferment.v ferry.v fibrillate.v fiddle.v field.v film.v fissurate.v fistulize.v fixate.v flag.v flap.v flash.v fledge.v flee.v flex.v flocculate.v floc.v floss.v fluidify.v fluorinate.v focalize.v focus.v foliate.v foot.v forbear.v force-land.v foreclose.v forgive.v form.v founder.v foveate.v fracture.v fray.v front.v frost.v fructify.v fudge.v fulgurate.v fumble.v furl.v fuse.v gag.v gain.v gamble.v gam.v gant.v gargle.v gasify.v gasp.v gazump.v gelatinize.v generalize.v germinate.v gestate.v gimp.v glance.v globalize.v gloss.v glucoronize.v glucosylate.v gnash.v gnaw.v govern.v granulate.v grasp.v grate.v grieve.v groan.v grope.v group.v growl.v grumble.v grunt.v hail.v haploidize.v harden.v harmonize.v hatch.v heave.v heckle.v hector.v hedge.v heighten.v hemagglutinate.v hemoagglutinate.v hemocoagulate.v hemolyze.v hem.v heterotransplant.v hoard.v hoe.v honk.v hoot.v howl.v hug.v humidify.v hum.v hush.v hustle.v hybridize.v hydrate.v hydrolyze.v hyperarticulate.v hypercoagulate.v hyperhydrate.v hyperinflate.v hypermodify.v hyperphosphorylate.v hyperpolarize.v hyperproliferate.v hypersensitize.v hyperventilate.v hypohydrate.v hypomethylate.v hyposecrete.v hypoventilate.v ice.v idle.v ignite.v immunomodulate.v immunoprecipitate.v implode.v imprecate.v improve.v improvise.v incept.v incline.v incorporate.v increase.v incubate.v indent.v indulge.v indurate.v industrialize.v infibulate.v infold.v infringe.v inhale.v initiate.v inosculate.v insonate.v intensify.v interbreed.v interconnect.v intercorrelate.v interlock.v intermix.v intern.v interpenetrate.v interpret.v interrelate.v interrupt.v intersect.v intertwine.v interview.v intravasate.v intrigue.v intussuscept.v invaginate.v investigate.v invest.v invigilate.v iodize.v ionize.v isograft.v isomerize.v jab.v jag.v jangle.v jeer.v jiggle.v jig.v jingle.v jolt.v jostle.v juggle.v keratinize.v kid.v kindle.v knit.v labilize.v labor.v labour.v lactonize.v lament.v land.v latch.v lateralize.v launch.v lecture.v left-click.v lengthen.v lessen.v levitate.v ligand.v liquefy.v liquidate.v litigate.v litter.v lobby.v lobulate.v localise.v localize.v locate.v lodge.v luminesce.v lunch.v luteinize.v lyse.v macerate.v mainline.v maldigest.v malrotate.v maneuver.v manoeuvre.v marbleize.v marinate.v mass.v masturbate.v mate.v medialize.v mediate.v meet.v meld.v meliorate.v mend.v merge.v mesh.v metallize.v metricize.v micellize.v microembolize.v microencapsulate.v mill.v mime.v mine.v misalign.v misarticulate.v miscalculate.v miscarry.v miscount.v misdeal.v misfold.v misjudge.v mistime.v mist.v misunderstand.v moan.v mobilize.v moderate.v modernize.v moisten.v moon.v mottle.v mould.v moult.v mount.v mourn.v mow.v muddle.v multimerize.v multiplicate.v multiply.v mumble.v munch.v murmur.v muscularize.v mutate.v myelinate.v narrow.v navigate.v near.v necrotize.v negotiate.v nephrectomize.v nibble.v nip.v nitrogenize.v nucleate.v nuzzle.v obey.v obsess.v occlude.v ogle.v opacify.v operate.v opsonize.v orbit.v originate.v ossify.v outspan.v overarch.v overbalance.v overcall.v overcharge.v overcloud.v overdraw.v overdress.v overfeed.v overfill.v overflow.v overheat.v over-indulge.v overindulge.v overlap.v overproduce.v overproliferate.v overreach.v overreplicate.v oversecrete.v overspend.v overstretch.v overtrain.v overtranscribe.v overtrump.v overturn.v overwork.v oviposit.v oxidate.v oxidize.v pace.v paddle.v parade.v park.v parse.v particularize.v part.v passivize.v pathergize.v peal.v peck.v peculate.v pedal.v peddle.v pend.v penetrate.v peptonize.v perch.v perform.v peroxidize.v petition.v petrify.v phenolize.v phlebotomize.v photodegrade.v photodissociate.v photoisomerize.v photolyze.v photooxidize.v photoreactivate.v picket.v pillage.v pinocytose.v pioneer.v pitch.v placer.v plasticize.v plunder.v poach.v poise.v poll.v pose.v power-dive.v practise.v preach.v preactivate.v precontract.v preincubate.v preplan.v presurface.v pretest.v pringle.v privatize.v programme.v project.v promenade.v pronate.v proof_read proofread.v propagate.v protonate.v prowl.v pseudonormalize.v puke.v puncture.v punt.v purl.v pustulate.v putt.v puzzle.v qualify.v quicken.v quieten.v racemize.v race.v radiate.v radio.v rally.v ramify.v rancidify.v range.v rank.v rap.v rate.v rattle.v ravel.v reactivate.v reacylate.v readapt.v readjust.v reanneal.v reapply.v rearm.v rearrest.v rear.v reassemble.v reawaken.v rebleed.v rebreathe.v rebreed.v rebuild.v recalculate.v recant.v recapitulate.v recap.v receive.v recement.v recharge.v reciprocate.v recolonize.v recommence.v recompute.v reconfirm.v reconnect.v reconvene.v reconvert.v recover.v recross.v recruit.v recrystallize.v recurve.v redden.v redifferentiate.v redissolve.v redouble.v reelevate.v reendothelialize.v reenter.v reepithelialize.v reequilibrate.v reeve.v reexpand.v refer.v refit.v reflate.v refloat.v refocus.v re-form.v reform.v refreeze.v refuel.v ref.v regenerate.v register.v regroup.v regrow.v rehearse.v rehydrate.v reincorporate.v reincubate.v reinduce.v reinflate.v reinfuse.v reinvestigate.v reinvest.v reirradiate.v rekindle.v relate.v relax.v relocate.v remarry.v remeasure.v remineralize.v remit.v remobilize.v remount.v renegotiate.v reocclude.v re-open.v reopen.v reoperate.v reorder.v reorganize.v reoxidize.v repack.v repair.v rephosphorylate.v repolarize.v reprise.v reprobe.v reproduce.v reseed.v resensitize.v resettle.v resign.v respirate.v restart.v restitute.v resume.v resuscitate.v retail.v retest.v rethrombose.v retire.v retool.v retrotranspose.v retrude.v return.v reunify.v reunite.v reventilate.v reverse.v revive.v rhyme.v ricochet.v right-click.v rigidify.v roam.v roar.v roast.v rotate.v rouse.v row.v ruffle.v rupture.v rustle.v sacrifice.v salute.v saponify.v scan.v scatter.v scissor.v sclerose.v scoff.v scold.v score.v scramble.v scrawl.v scribble.v scrub.v scull.v sculpture.v search.v seize.v senesce.v separate.v serrate.v sever.v shade.v sham.v shatter.v shell.v shop-lift.v shoplift.v short-circuit.v shorten.v shove.v shower.v shriek.v shrink.v shuffle.v sift.v singe.v sink.v sinusoidalize.v sip.v skeletonize.v skew.v slam.v slant.v sledge.v slenderize.v slosh.v smack.v smear.v smoke.v smudge.v snarl.v snip.v snort.v snuggle.v socialize.v solidify.v somatize.v sow.v spalt.v spatter.v spawn.v spiralize.v splash.v splay.v splinter.v spoil.v sponge.v sport.v spout.v spreadeagle.v spring-clean.v spy.v squash.v stabilise.v stabilize.v stain.v stall.v stammer.v stampede.v steady.v steepen.v steep.v steer.v stew.v stifle.v sting.v stint.v stipple.v stonewall.v strain.v stratify.v streak.v strengthen.v strobe.v strum.v stump.v subcontract.v subdivide.v subduct.v sublease.v submerge.v submit.v substitute.v succeed.v sue.v suffer.v suffocate.v summate.v superheat.v superinfect.v superovulate.v supervise.v supinate.v supplicate.v surrender.v survive.v swallow.v swap.v sway.v sweat.v swish.v swivel.v synchronize.v synergize.v tackle.v tan.v tap.v tarnish.v tautomerize.v telephone.v terminate.v tetramerize.v thaw.v thermalize.v thieve.v thrash.v thresh.v thrill.v thrombose.v throng.v throttle.v thrum.v thump.v thunder.v tickle.v tilt.v tine.v ting.v titivate.v titrate.v toast.v toot.v trace.v trade.v transaminate.v transcomplement.v transcytose.v transfer.v transgress.v translate.v transplant.v trawl.v treat.v treble.v triage.v trimerize.v trot.v troubleshoot.v trumpet.v trump.v tuberculize.v tug.v tum.v twang.v twirl.v ulcerate.v umpire.v unbend.v uncoat.v uncoil.v uncurl.v underbid.v undercorrect.v underfeed.v underprescribe.v underreport.v underspend.v undress.v unfasten.v unfold.v unhitch.v unify.v unionize.v unite.v unknot.v unload.v unlock.v unpack.v unravel.v unroll.v unscrew.v unstress.v untie.v untwist.v unwind.v unwrap.v upload.v urbanize.v vaporize.v varicellize.v vary.v vasodilate.v venture.v versify.v vert.v vesicate.v vesiculate.v vest.v vibrate.v visit.v vitrify.v vituperate.v vociferate.v volatilize.v volley.v vomit.v wade.v waggle.v wag.v wail.v waken.v warp.v water.v wax.v weaken.v wed.v weld.v wheal.v wheel.v whine.v whirl.v whistle.v whiten.v whittle.v whorl.v widen.v wiggle.v withdraw.v worsen.v worship.v wrestle.v wrinkle.v yell.v yield.v yodel.v link-grammar/data/en/words/words.v.1.30000644000000000000000000003366012536650433014642 0ustar abated.v-d abounded.v-d about-faced.v-d absconded.v-d abstained.v-d acceded.v-d accounted.v-d accrued.v-d ached.v-d acquiesced.v-d adenized.v-d adhered.v-d adjoined.v-d ad-libbed.v-d alighted.v-d alluded.v-d ambled.v-d ambulated.v-d amounted.v-d anteflected.v-d apologized.v-d apostatized.v-d appertained.v-d aquaplaned.v-d arose.v-d arrived.v-d assented.v-d astringed.v-d atoned.v-d atrophied.v-d attitudinized.v-d autoagglutinated.v-d autodegraded.v-d autooxidised.v-d auto-oxidized.v-d autooxidized.v-d autoproliferated.v-d autotomized.v-d autoxidized.v-d baaed.v-d babbled.v-d babysat.v-d backbited.v-d backfired.v-d backpedalled.v-d backslid.v-d backspaced.v-d bacteriolyzed.v-d balked.v-d ballooned.v-d bammed.v-d banqueted.v-d banted.v-d bantered.v-d barfed.v-d barked.v-d barnstormed.v-d basked.v-d bawled.v-d bayed.v-d beeped.v-d beetled.v-d behaved.v-d belched.v-d bellyached.v-d belonged.v-d bickered.v-d billowed.v-d biodegraded.v-d bitched.v-d blabbered.v-d blathered.v-d blazed.v-d bleated.v-d bleeped.v-d blenched.v-d blethered.v-d bloated.v-d bloomed.v-d blossomed.v-d blubbered.v-d blundered.v-d blushed.v-d boded.v-d boomed.v-d braked.v-d brawled.v-d brayed.v-d bristled.v-d brooded.v-d browsed.v-d bubbled.v-d budded.v-d bullshitted.v-d bunked.v-d burbled.v-d burgeoned.v-d burped.v-d bustled.v-d cabbed.v-d cackled.v-d calved.v-d campaigned.v-d canaliculized.v-d cantered.v-d capered.v-d capillarized.v-d capitulated.v-d careened.v-d caroled.v-d carolled.v-d caroused.v-d cascaded.v-d castled.v-d catered.v-d caterwauled.v-d caviled.v-d cavilled.v-d cavorted.v-d chafed.v-d chattered.v-d cheeped.v-d chemosensitised.v-d chimed.v-d chirped.v-d chirruped.v-d chortled.v-d chromatofocused.v-d chromatofocussed.v-d chuckled.v-d chugged.v-d chummed.v-d clacked.v-d clambered.v-d clamored.v-d clamoured.v-d clanked.v-d clashed.v-d clattered.v-d clerked.v-d climaxed.v-d clucked.v-d clung.v-d clunked.v-d clustered.v-d coalesced.v-d coasted.v-d cocirculated.v-d coevolved.v-d coexisted.v-d cohabited.v-d cohered.v-d coincided.v-d collaborated.v-d collateralized.v-d collided.v-d colluded.v-d comigrated.v-d commentated.v-d commiserated.v-d communed.v-d comodulated.v-d competed.v-d complied.v-d compromised.v-d confabbed.v-d confabulated.v-d conflicted.v-d conformed.v-d congealed.v-d congregated.v-d connived.v-d consorted.v-d conspired.v-d convalesced.v-d converged.v-d conversed.v-d cooed.v-d co-operated.v-d cooperated.v-d co-ossifyed.v-d coossifyed.v-d coped.v-d copulated.v-d corresponded.v-d coruscated.v-d counterphased.v-d covaried.v-d covaryed.v-d cowered.v-d crackled.v-d crash-dived.v-d creaked.v-d crepitated.v-d crested.v-d cringed.v-d croaked.v-d cross-dressed.v-d crossdressed.v-d crossmatched.v-d crowed.v-d crusaded.v-d culminated.v-d curtseyed.v-d curtsied.v-d cycled.v-d cyclized.v-d cytoadhered.v-d cytodifferentiated.v-d dabbled.v-d dallied.v-d dawdled.v-d dawned.v-d day-dreamed.v-d daydreamed.v-d decamped.v-d decayed.v-d deceased.v-d declutched.v-d decompensated.v-d decremented.v-d decussated.v-d de-etiolated.v-d deetiolated.v-d defasciculated.v-d defaulted.v-d defecated.v-d defected.v-d deflagrated.v-d degenerated.v-d dehisced.v-d delaminated.v-d deliberated.v-d delved.v-d demurred.v-d departed.v-d depended.v-d deplaned.v-d deplasmolyzed.v-d depreciated.v-d deputized.v-d desisted.v-d despaired.v-d deswelled.v-d deteriorated.v-d detracted.v-d detrained.v-d deviated.v-d devolved.v-d dieted.v-d differed.v-d digitated.v-d digressed.v-d dilly-dallied.v-d disagreed.v-d disappeared.v-d discoursed.v-d discriminated.v-d disembarked.v-d disintegrated.v-d disrobed.v-d dissembled.v-d dissented.v-d dissertated.v-d dithered.v-d divagated.v-d diverged.v-d doddered.v-d domineered.v-d doodled.v-d doted.v-d double-parked.v-d dovetailed.v-d dowed.v-d downshifted.v-d downslanted.v-d downsloped.v-d drawled.v-d drizzled.v-d drooled.v-d dueled.v-d duelled.v-d dwelled.v-d dwelt.v-d dwindled.v-d eavesdropped.v-d ebbed.v-d economized.v-d eddied.v-d editorialized.v-d effervesced.v-d effloresced.v-d elapsed.v-d electioneered.v-d eloped.v-d emanated.v-d embarked.v-d emerged.v-d emigrated.v-d emoted.v-d empathized.v-d encamped.v-d encroached.v-d enquired.v-d ensued.v-d equivocated.v-d erred.v-d eructed.v-d erupted.v-d evaporated.v-d eventuated.v-d excelled.v-d exflagellated.v-d existed.v-d exited.v-d exosmosed.v-d expatiated.v-d experimented.v-d expired.v-d explanted.v-d expostulated.v-d exulted.v-d fainted.v-d faltered.v-d fared.v-d farted.v-d fasted.v-d fawned.v-d feinted.v-d festered.v-d festinated.v-d fibbed.v-d fibrosed.v-d fidgeted.v-d filibustered.v-d fizzed.v-d flailed.v-d flaked.v-d flamed.v-d flickered.v-d flinched.v-d flirted.v-d flitted.v-d flopped.v-d floundered.v-d flourished.v-d flowered.v-d fluctuated.v-d fluoresced.v-d fluttered.v-d fly-fished.v-d foot-sloged.v-d foot-slogged.v-d foraged.v-d foregathered.v-d forgathered.v-d fornicated.v-d fossilized.v-d foxhunted.v-d fragmented.v-d fraternized.v-d freelanced.v-d free-wheeled.v-d freewheeled.v-d fretted.v-d frivoled.v-d froliced.v-d frothed.v-d frowned.v-d fulminated.v-d fumed.v-d functioned.v-d fundholded.v-d fungated.v-d fussed.v-d gallivanted.v-d galumphed.v-d gamboled.v-d gambolled.v-d gaped.v-d gardened.v-d gastrulated.v-d gawked.v-d gawped.v-d gazed.v-d gelated.v-d gelled.v-d genuflected.v-d gesticulated.v-d gestured.v-d gibbered.v-d gibed.v-d giggled.v-d glared.v-d gleamed.v-d glided.v-d glimmered.v-d glinted.v-d glistened.v-d glistered.v-d glitched.v-d glittered.v-d gloated.v-d globe-troted.v-d globetroted.v-d globe-trotted.v-d globetrotted.v-d gloried.v-d glowed.v-d glowered.v-d goggled.v-d golfed.v-d gormandized.v-d gossiped.v-d gossipped.v-d graduated.v-d grappled.v-d gravitated.v-d grayed.v-d grazed.v-d greyed.v-d grimaced.v-d grinned.v-d grooved.v-d grouched.v-d groused.v-d groveled.v-d grovelled.v-d guffawed.v-d gurgled.v-d gusted.v-d gybed.v-d gyrated.v-d haggled.v-d haled.v-d hallucinated.v-d hankered.v-d harked.v-d harped.v-d hawed.v-d hearkened.v-d heeled.v-d herniated.v-d heterodimerized.v-d heteromultimerized.v-d hewed.v-d hibernated.v-d hiccoughed.v-d hiccuped.v-d hiccupped.v-d hinged.v-d hissed.v-d hitchhiked.v-d hobnobbed.v-d hollered.v-d honeymooned.v-d hovered.v-d huddled.v-d huffed.v-d hungered.v-d hurtled.v-d hydroplaned.v-d hyperaggregated.v-d hyperdefecated.v-d hyperfiltered.v-d hyperluteinized.v-d hypermutated.v-d hypertrophyed.v-d hyporesonated.v-d hyporesponded.v-d ice-skated.v-d immigrated.v-d immunoreacted.v-d impinged.v-d inched.v-d infarcted.v-d innovated.v-d interacted.v-d interceded.v-d intercommunicated.v-d interdigitated.v-d interfered.v-d intermarried.v-d intermingled.v-d intervened.v-d introspected.v-d intruded.v-d intumesced.v-d inveighed.v-d involuted.v-d itched.v-d jabbered.v-d jack-knifed.v-d jaunted.v-d jawed.v-d jay-walked.v-d jaywalked.v-d jelled.v-d jested.v-d jibed.v-d jittered.v-d jived.v-d jockeyed.v-d joked.v-d journeyed.v-d jousted.v-d kemped.v-d kowtowed.v-d lacrimated.v-d lactated.v-d lagged.v-d languished.v-d lapsed.v-d lased.v-d laughed.v-d leafed.v-d leered.v-d legislated.v-d liaised.v-d lisped.v-d lived.v-d loafed.v-d locomoted.v-d loitered.v-d lolled.v-d longed.v-d loped.v-d lounged.v-d lowned.v-d lumbered.v-d lurked.v-d lusted.v-d luxuriated.v-d majored.v-d malfunctioned.v-d malignized.v-d malingered.v-d marauded.v-d marveled.v-d marvelled.v-d masqueraded.v-d materialized.v-d matriculated.v-d maturated.v-d matured.v-d maundered.v-d meandered.v-d meddled.v-d meditated.v-d menstruated.v-d meowed.v-d metamorphosed.v-d metastasized.v-d mewed.v-d miaoued.v-d miaowed.v-d micturated.v-d migrated.v-d militated.v-d mingled.v-d ministered.v-d misbehaved.v-d misfired.v-d molted.v-d monkeyed.v-d mooched.v-d mooed.v-d moped.v-d moralized.v-d moseyed.v-d motored.v-d mouldered.v-d muck-raked.v-d mushroomed.v-d mutinied.v-d name-dropped.v-d napped.v-d nattered.v-d necked.v-d necrosed.v-d neighed.v-d nested.v-d networked.v-d niggled.v-d nosedived.v-d noshed.v-d objected.v-d occured.v-d occurred.v-d officiated.v-d orated.v-d oscillated.v-d oscitated.v-d osmoregulated.v-d osmosed.v-d osseointegrated.v-d overacted.v-d overcompensated.v-d overreacted.v-d overslept.v-d overwintered.v-d ovulated.v-d paled.v-d palled.v-d palpebrated.v-d palpitated.v-d pandered.v-d panhandled.v-d panicked.v-d panted.v-d parachuted.v-d parleyed.v-d participated.v-d pattered.v-d paused.v-d peaked.v-d pearled.v-d peeped.v-d pellated.v-d perambulated.v-d percolated.v-d perished.v-d persevered.v-d persisted.v-d perspired.v-d pertained.v-d philandered.v-d philosophized.v-d picnicked.v-d piddled.v-d pimped.v-d pinged.v-d pirouetted.v-d pivoted.v-d planed.v-d play-acted.v-d plodded.v-d plummeted.v-d plummetted.v-d politicked.v-d polkaed.v-d pollocked.v-d pomed.v-d pommed.v-d pontificated.v-d pored.v-d postured.v-d pottered.v-d pounced.v-d pouted.v-d powwowed.v-d pranced.v-d prated.v-d prattled.v-d preachified.v-d preachifyed.v-d predominated.v-d pre-existed.v-d preponderated.v-d preregistered.v-d presided.v-d prevailed.v-d prevaricated.v-d preyed.v-d primped.v-d procrastinated.v-d procreated.v-d profited.v-d profiteered.v-d progressed.v-d prolapsed.v-d proliferated.v-d propagandized.v-d proselytized.v-d prospered.v-d protruded.v-d pub-crawled.v-d puled.v-d pullulated.v-d pulsated.v-d pulsed.v-d punned.v-d pupariated.v-d pupated.v-d purred.v-d pussyfooted.v-d putrefied.v-d puttered.v-d quacked.v-d quaked.v-d quarreled.v-d quarried.v-d quavered.v-d quested.v-d queued.v-d quibbled.v-d quipped.v-d quivered.v-d racketed.v-d rafted.v-d raged.v-d railed.v-d rained.v-d rambled.v-d rampaged.v-d rankled.v-d ranted.v-d rasped.v-d ratted.v-d raved.v-d reacted.v-d reappeared.v-d rebelled.v-d rebounded.v-d receded.v-d reclined.v-d recoiled.v-d reconnoitred.v-d recriminated.v-d recrudesced.v-d recuperated.v-d recurred.v-d redecussated.v-d redounded.v-d re-echoed.v-d re-emerged.v-d reemerged.v-d refected.v-d refixated.v-d reflowed.v-d refrained.v-d regressed.v-d reigned.v-d re-infarcted.v-d reinfarcted.v-d re-intervened.v-d reintervened.v-d rejoiced.v-d relapsed.v-d relented.v-d relied.v-d reminisced.v-d remonstrated.v-d renarrowed.v-d rendezvoused.v-d reneged.v-d re-occured.v-d reoccured.v-d repetatured.v-d repined.v-d resided.v-d resonated.v-d resorted.v-d resounded.v-d respired.v-d rested.v-d restenosed.v-d resulted.v-d resurfaced.v-d retaliated.v-d retched.v-d retreated.v-d retrenched.v-d retrograded.v-d retrogressed.v-d reveled.v-d revelled.v-d reverberated.v-d reverted.v-d revolted.v-d revolved.v-d rhapsodized.v-d rioted.v-d ripened.v-d riposted.v-d rippled.v-d rocketed.v-d romanced.v-d romped.v-d roomed.v-d roosted.v-d rootled.v-d rough-housed.v-d roved.v-d rubber-necked.v-d rubbernecked.v-d rumbled.v-d ruminated.v-d rummaged.v-d rusted.v-d sagged.v-d salivated.v-d sauntered.v-d scampered.v-d scar_cicatrized scavenged.v-d schemed.v-d scintillated.v-d scowled.v-d scrammed.v-d screeched.v-d scrimped.v-d scrimshanked.v-d scrolled.v-d scrounged.v-d scubaed.v-d scuffled.v-d seceded.v-d seesawed.v-d seethed.v-d sermonized.v-d seroconverted.v-d seroreverted.v-d shadow-boxed.v-d shilly-shallied.v-d shillyshallied.v-d shilly-shallyed.v-d shimmered.v-d shitted.v-d shivered.v-d shrimped.v-d shuddered.v-d sided.v-d side-sliped.v-d side-slipped.v-d sidled.v-d simmered.v-d simpered.v-d sinned.v-d sizzled.v-d skated.v-d skedaddled.v-d skimped.v-d skirmished.v-d skulked.v-d skylarked.v-d sky-rocketed.v-d skyrocketed.v-d slackened.v-d slalomed.v-d slalommed.v-d slavered.v-d sleeted.v-d slithered.v-d slobbered.v-d slogged.v-d slouched.v-d slumbered.v-d slummed.v-d slushed.v-d smarted.v-d smiled.v-d smirked.v-d smoldered.v-d smouldered.v-d snacked.v-d snaked.v-d sneered.v-d sneezed.v-d snickered.v-d sniffled.v-d sniggered.v-d sniped.v-d snitched.v-d sniveled.v-d snivelled.v-d snooped.v-d snoozed.v-d snored.v-d snowballed.v-d snowboarded.v-d snowed.v-d snowshoed.v-d snuffled.v-d sobbed.v-d softlanded.v-d sojourned.v-d soliloquized.v-d somersaulted.v-d soughed.v-d soured.v-d sparkled.v-d sparred.v-d specialised.v-d specialized.v-d speciated.v-d speechified.v-d spermiated.v-d sphacelated.v-d splurged.v-d spluttered.v-d sprawled.v-d sprinted.v-d sputtered.v-d squabbled.v-d squalled.v-d squawked.v-d squeaked.v-d squealed.v-d squinted.v-d squirmed.v-d stagnated.v-d stemmed.v-d stone-walled.v-d straggled.v-d strayed.v-d stridulated.v-d strived.v-d struggled.v-d stuttered.v-d subbed.v-d subscribed.v-d subsided.v-d subsisted.v-d subspecialized.v-d succumbed.v-d sulked.v-d summered.v-d sunbathed.v-d supercoiled.v-d supervened.v-d supped.v-d suppurated.v-d surfaced.v-d surged.v-d swaggered.v-d swarmed.v-d sweltered.v-d swerved.v-d swirled.v-d swooned.v-d sympathized.v-d tampered.v-d tap-danced.v-d tapdanced.v-d tarried.v-d tattled.v-d taxied.v-d teemed.v-d teetered.v-d teethed.v-d temporized.v-d tergiversated.v-d testated.v-d thrived.v-d throbbed.v-d thudded.v-d tingled.v-d tinkered.v-d tippled.v-d tiptoed.v-d tittered.v-d tittle-tattled.v-d toadied.v-d tobogganed.v-d toiled.v-d tolled.v-d tootled.v-d tottered.v-d touch-typed.v-d towered.v-d toyed.v-d traipsed.v-d transmigrated.v-d transpired.v-d traveled.v-d travelled.v-d trekked.v-d trembled.v-d trespassed.v-d trifled.v-d trifurcated.v-d triumphed.v-d trundled.v-d tunneled.v-d tunnelled.v-d tussled.v-d tweeted.v-d twinkled.v-d twitched.v-d twittered.v-d ululated.v-d underacted.v-d undulated.v-d uplinked.v-d urinated.v-d urticated.v-d vacationed.v-d vacillated.v-d vacuolated.v-d vamoosed.v-d vamped.v-d vanished.v-d vaulted.v-d vegetated.v-d venodilated.v-d verbigerated.v-d verged.v-d vied.v-d volvulated.v-d vouched.v-d voyaged.v-d waddled.v-d waffled.v-d wallowed.v-d waltzed.v-d wandered.v-d waned.v-d wanked.v-d warbled.v-d water-skied.v-d waterskied.v-d wavered.v-d welshed.v-d weltered.v-d wept.v-d wheezed.v-d whelped.v-d whimpered.v-d whinnied.v-d whirred.v-d wilted.v-d winced.v-d winked.v-d wiretapped.v-d wisecracked.v-d withered.v-d wobbled.v-d womanized.v-d wool-gathered.v-d woolgathered.v-d wrangled.v-d wriggled.v-d writhed.v-d yachted.v-d yaked.v-d yammered.v-d yanged.v-d yapped.v-d yawed.v-d yawned.v-d yearned.v-d yelped.v-d yenned.v-d yiped.v-d yowled.v-d zaged.v-d zagged.v-d ziged.v-d zigged.v-d zig-zagged.v-d zigzagged.v-d link-grammar/data/en/words/words.n.t0000644000000000000000000000253412536650433014570 0ustar Democrat.t Republican.t Abbé.t abbé.t abbot.t accompanist.t accountant.t administrator.t admiral.t adviser.t advisor.t agent.t aide.t ambassador.t analyst.t arbitrator.t archbishop.t archdeacon.t architect.t archivist.t assessor.t assistant.t associate.t attorney.t auditor.t bailiff.t broker.t brother.t buyer.t candidate.t captain.t cardinal.t chairman.t chairwoman.t chancellor.t chaplain.t chief.t clerk.t commander.t commissioner.t complainant.t comptroller.t congressman.t contractor.t coordinator.t coroner.t correspondent.t councillor.t counsellor.t counselor.t deacon.t deaconess.t dean.t defendant.t defender.t delegate.t deputy.t diplomat.t director.t economist.t editor.t emissary.t emperor.t empress.t engineer.t executive.t executor.t father.t foreman.t founder.t general.t governor.t head.t headmaster.t headmistress.t inspector.t intern.t justice.t lawyer.t leader.t librarian.t lobbyist.t manager.t marquise.t mayor.t minister.t mother.t officer.t owner.t partner.t pastor.t postmaster.t premier.t president.t prime_minister professor.t prosecutor.t representative.t Saint.t Sainte.t secretary.t Seigneur.t Senator.t senator.t shah.t sheriff.t sister.t solicitor.t speaker.t spokesman.t spokesperson.t spokeswoman.t sponsor.t superintendent.t treasurer.t undersecretary.t underwriter.t warden.t best_man maid_of_honor proprietor.t link-grammar/data/en/words/words.y0000644000000000000000000001212012536650433014331 0ustar 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 link-grammar/data/en/words/words.adv.40000644000000000000000000000221612536650432015001 0ustar abdominally anally ante_meridiem anteromedially arterially axially buccally buccolingually cardiovascularly centroparietally centrotemporally contiguously cutaneously dermally dorso-ventrally ectodermally endotracheally epithelially extradurally extrahepatically incisionally inferolaterally inferoposteriorly inferotemporally intercellularly interfollicularly interictally intermolecularly interoinferiorly intestinally intra-abdominally intra-amniotically intra-arterially intra-atrially intracellularly intracerebroventricularly intradermally intragastrically intralymphatically intralymphocytically intramolecularly intramuscularly intranasally intraneuronally intraocularly intraorganically intraperitonally intraperitoneally intrapleurally intrathecally intravascularly intravitreally labially lingually linguoapically medially mesially mesothoracically neonatally neurally neuroectodermally nonsimultaneously peripherally pertrochanterically postanoxically postbulbarly posteriorly postero-anteriorly postsynaptically presynaptically proximally subcutaneously subdermally supraaortically suprabasally suprapubically thereto transversely up_and_down ventrally link-grammar/data/en/words/words.v.4.50000644000000000000000000007563212536650433014654 0ustar abasing.g abbreviating.g abducting.g abetting.g abhorring.g abolishing.g abridging.g abrogating.g absorbing.g abstracting.g abusing.g abutting.g accenting.g accentuating.g accessing.g acclaiming.g accommodating.g accompanying.g accomplishing.g accosting.g accrediting.g accreting.g accustoming.g acerbating.g achieving.g acquainting.g acquiring.g activating.g addicting.g addling.g addressing.g adjudging.g administering.g admiring.g admonishing.g adoring.g adorning.g adulterating.g adumbrating.g aerating.g affecting.g affixing.g afflicting.g aggrandizing.g aggravating.g alienating.g allaying.g alleviating.g allocating.g allotting.g amassing.g ambushing.g ameliorating.g amending.g amortizing.g amplifying.g amputating.g anaesthetizing.g anathematizing.g anesthetizing.g angering.g anglicizing.g animating.g annealing.g annexing.g annihilating.g annointing.g annotating.g annulling.g anointing.g antagonizing.g antedating.g anthologizing.g anthropomorphizing.g aping.g appalling.g appeasing.g appending.g apportioning.g appraising.g apprehending.g apprenticing.g apprising.g appropriating.g arming.g arousing.g arraigning.g arraying.g arresting.g arrogating.g ascribing.g asphalting.g asphyxiating.g aspirating.g assailing.g assassinating.g assaulting.g assaying.g assuaging.g atomizing.g attacking.g attaining.g attainting.g attenuating.g attiring.g attracting.g attributing.g attuning.g auditing.g augmenting.g authenticating.g autographing.g automating.g avenging.g averring.g averting.g awaiting.g awing.g axing.g backdating.g badgering.g baffling.g baiting.g baking.g balancing.g baling.g bamboozling.g bandaging.g banishing.g bankrupting.g banning.g baptizing.g barbarizing.g barbecuing.g baring.g barrelling.g barricading.g bashing.g basing.g basting.g battering.g battling.g beaking.g beaning.g beatifying.g beautifying.g bedevilling.g befalling.g befitting.g befouling.g befriending.g begetting.g beggaring.g beguiling.g beheading.g beholding.g bejeweling.g belabouring.g belittling.g belting.g belying.g bemoaning.g benching.g bequeathing.g berating.g bereaving.g beseeching.g besieging.g besmirching.g bespeaking.g besting.g bestirring.g bestowing.g bestrewing.g bestriding.g betokening.g betraying.g bevelling.g bewailing.g bewildering.g bewitching.g biasing.g biding.g biffing.g bilking.g billeting.g billing.g birching.g bisecting.g blackballing.g blacklisting.g blackmailing.g blading.g blaming.g blanketing.g blasting.g blazoning.g blemishing.g blessing.g blighting.g blindfolding.g blinding.g blitzing.g blockading.g blow-drying.g bludgeoning.g blue-pencilling.g blunting.g bolding.g bolstering.g bombarding.g bombing.g bookending.g boosting.g bossing.g botching.g boycotting.g bracing.g bracketing.g braiding.g brainwashing.g braising.g branding.g brandishing.g braving.g breaching.g bribing.g bricking.g bridging.g briefing.g brining.g broaching.g brocading.g brokering.g bronzing.g brooking.g browbeating.g brutalizing.g budgeting.g buffing.g bugging.g bulldozing.g bunging.g bungling.g buoying.g burdening.g burlesquing.g burying.g busying.g butchering.g buttonholing.g buttressing.g by-passing.g bypassing.g cajoling.g calibrating.g camouflaging.g caning.g cannibalizing.g canonising.g canonizing.g caping.g capping.g captivating.g capturing.g carbonizing.g carbureting.g carding.g caressing.g caricaturing.g carjacking.g carpeting.g casing.g castigating.g castrating.g cataloguing.g catapulting.g categorizing.g ceding.g cementing.g censoring.g censuring.g centralising.g centralizing.g chagrining.g chaining.g chairing.g championing.g channelling.g chaperoning.g charming.g chartering.g charting.g chastening.g chastising.g cheapening.g checkmating.g cherishing.g chiding.g chiselling.g chlorinating.g chording.g christening.g chroming.g chronicling.g circularizing.g circumcising.g circumnavigating.g circumscribing.g circumventing.g citing.g civilizing.g clading.g clamping.g classifying.g clawing.g cleansing.g clenching.g clipping.g cloaking.g clobbering.g cloistering.g cloning.g closeting.g clothing.g clubbing.g coating.g co-authoring.g coauthoring.g cobbling.g cocking.g coddling.g codenaming.g codifying.g coding.g coercing.g cofounding.g coining.g cold-shouldering.g collaring.g collating.g collecting.g collectivizing.g colocating.g collocating.g colonizing.g combating.g combatting.g comforting.g commandeering.g commemorating.g commending.g commercializing.g compacting.g compartmentalizing.g compiling.g complementing.g completing.g complicating.g complimenting.g composting.g compounding.g comprehending.g compressing.g comprising.g computerizing.g concealing.g concerning.g conciliating.g concocting.g conditioning.g condoning.g configuring.g confining.g confiscating.g conflating.g confounding.g confronting.g confusing.g confuting.g congaing.g congratulating.g conjuring.g conking.g conning.g connoting.g conquering.g conscripting.g consecrating.g conserving.g consigning.g consoling.g constituting.g constraining.g constricting.g constructing.g construing.g consuming.g consummating.g contacting.g containing.g contaminating.g contenting.g contorting.g contouring.g contradicting.g contravening.g contriving.g controlling.g convecting.g conventionalizing.g conveying.g convoking.g convoying.g convulsing.g cooping.g co-opting.g coordinating.g co-producing.g copying.g copyrighting.g cording.g cordoning.g coring.g corking.g cornering.g corralling.g correcting.g corroborating.g countenancing.g counteracting.g counterbalancing.g counterfeiting.g countermanding.g countersigning.g countersuing.g coupling.g courting.g court-martialing.g coveting.g coxing.g cradling.g cramping.g craning.g crayoning.g creaming.g creating.g crediting.g cremating.g criming.g crimping.g crippling.g criticizing.g crossbreeding.g cross-examining.g cross-fertilizing.g cross-indexing.g cross-questioning.g crowning.g crucifying.g crushing.g cubing.g cudgeling.g cuffing.g culling.g cultivating.g cupping.g curbing.g curing.g currying.g curtailing.g cushioning.g damaging.g damning.g dampening.g dandling.g daubing.g daunting.g dazing.g dazzling.g deadening.g deafening.g debarring.g debasing.g debauching.g debilitating.g debiting.g debriefing.g debugging.g debunking.g decanting.g decapitating.g decarbonizing.g deceiving.g decentralizing.g decertifying.g decimalizing.g decimating.g deciphering.g decking.g declaiming.g declassifying.g decoding.g decolonizing.g decompressing.g deconsecrating.g decontaminating.g decorating.g decrying.g decrypting.g dedicating.g deducting.g deeding.g deep-freezing.g deepthroating.g de-escalating.g defacing.g defaming.g defeating.g defending.g deferring.g defiling.g defining.g deflating.g deflowering.g defoliating.g deforesting.g deforming.g defragmenting.g defrauding.g defraying.g defrocking.g defrosting.g defunding.g defusing.g defying.g degrading.g dehumanizing.g dehydrating.g de-icing.g deifying.g delegating.g deleting.g delimiting.g delineating.g delisting.g deluding.g deluging.g demagnetizing.g demarcating.g demeaning.g demerging.g demilitarizing.g demisting.g demobilizing.g demolishing.g demonizing.g demoralizing.g demoting.g demutualising.g denationalizing.g denigrating.g denominating.g denoting.g denouncing.g denting.g denting.v denuding.g deodorizing.g depleting.g deploring.g deploying.g depopulating.g deporting.g deposing.g depositing.g deprecating.g deprogramming.g deranging.g deriding.g desalinating.g desalinizing.g desecrating.g desegregating.g desensitizing.g deserting.g desiccating.g despatching.g despising.g despoiling.g destroying.g detaching.g detaining.g detecting.g deterring.g detesting.g dethroning.g detuning.g devaluating.g devaluing.g devastating.g devising.g devoting.g devouring.g dewatering.g diagnosing.g dicing.g diddling.g diffracting.g dignifying.g diluting.g directing.g disabling.g disaffiliating.g disallowing.g disappointing.g disarranging.g disassembling.g disassociating.g disavowing.g disbursing.g discarding.g disciplining.g disclaiming.g discomfiting.g disconcerting.g disconnecting.g discontenting.g discounting.g discouraging.g discrediting.g disdaining.g disembarrassing.g disembowelling.g disenchanting.g disenfranchising.g disestablishing.g disfavouring.g disfiguring.g disfranchising.g disgorging.g disgracing.g disguising.g disheartening.g dishonouring.g disillusioning.g disinfecting.g disinheriting.g disinterring.g dislocating.g dislodging.g dismantling.g dismembering.g dismissing.g disobeying.g disorientating.g disorienting.g disowning.g disparaging.g dispatching.g dispelling.g displacing.g displaying.g displeasing.g dispossessing.g disproving.g disqualifying.g disregarding.g disrupting.g dissecting.g disseminating.g dissing.g dissociating.g dissuading.g distancing.g distorting.g distracting.g distributing.g distrusting.g disturbing.g ditching.g diverting.g divesting.g divorcing.g divulging.g dizzying.g doctoring.g doffing.g domesticating.g dominating.g donating.g donning.g dooming.g doping.g dotting.g double-checking.g double-crossing.g dousing.g downgrading.g downing.g downloading.g downplaying.g dragooning.g dramatizing.g draping.g drenching.g drip-drying.g drubbing.g drugging.g dry-cleaning.g ducting.g dumbfounding.g dunking.g duping.g duplicating.g dusting.g dwarfing.g dyeing.g dynamiting.g earmarking.g earning.g eclipsing.g edifying.g editing.g effacing.g effecting.g elbowing.g electrifying.g electrocuting.g electrolyzing.g elevating.g eliciting.g eliding.g eliminating.g elucidating.g eluding.g emancipating.g emasculating.g embalming.g embargoing.g embedding.g embellishing.g embezzling.g embittering.g emblazoning.g embodying.g emboldening.g embossing.g embracing.g embroiling.g emending.g emitting.g empanelling.g empowering.g emulating.g emulsifying.g enacting.g enamelling.g encasing.g enchanting.g encircling.g enclosing.g encoding.g encompassing.g encountering.g encrypting.g encumbering.g endangering.g endearing.g endorsing.g endowing.g enervating.g enfeoffing.g enfolding.g enforcing.g enfranchising.g engendering.g engineering.g engraving.g engrossing.g engulfing.g enhancing.g enjoining.g enlarging.g enlightening.g enlivening.g enmeshing.g ennobling.g enraging.g enriching.g ensconcing.g enshrining.g enshrouding.g enslaving.g ensnaring.g ensouling.g entangling.g enthralling.g enthroning.g enthusing.g entombing.g entraining.g entrancing.g entrapping.g entreating.g entrusting.g entwining.g enumerating.g enveloping.g envying.g epitomizing.g equalizing.g equalling.g equating.g equipping.g eradicating.g erasing.g erecting.g eschewing.g escorting.g espousing.g espying.g esteeming.g eulogizing.g evading.g evicting.g evincing.g eviscerating.g evoking.g exacerbating.g exalting.g exasperating.g excavating.g exceeding.g excepting.g exchanging.g excising.g excluding.g excommunicating.g excoriating.g excreting.g exculpating.g excusing.g executing.g exemplifying.g exempting.g exerting.g exhausting.g exhibiting.g exhilarating.g exhuming.g exiling.g exorcizing.g expediting.g expelling.g expending.g experiencing.g expiating.g explicating.g exploiting.g exposing.g expropriating.g expunging.g expurgating.g extenuating.g exterminating.g externalizing.g extinguishing.g extirpating.g extolling.g extorting.g extracting.g extraditing.g extricating.g exuding.g eying.g fabricating.g facelifting.g faceting.g facilitating.g fagging.g faking.g falsifying.g familiarizing.g fancying.g fascinating.g fashioning.g fathoming.g fatiguing.g fating.g faulting.g favoriting.g favouring.g fazing.g feathering.g featuring.g feigning.g felling.g fencing.g ferreting.g fertilizing.g festooning.g feting.g fettering.g fianchettoing.g filleting.g finalizing.g financing.g fine-tuning. fingering.g firebombing.g flagellating.g flanking.g flattering.g flaunting.g flavouring.g flaying.g fleecing.g flicking.g flogging.g floodlighting.g flooring.g flouting.g fluffing.g flummoxing.g fluoridating.g flurrying.g flustering.g foiling.g foisting.g fomenting.g fonding.g fondling.g fooling.g force-feeding.g fording.g forecasting.g foregoing.g foreordaining.g foreshadowing.g foreshortening.g forestalling.g foreswearing.g foretelling.g forfeiting.g forging.g forgoing.g formalizing.g formulating.g forsaking.g forswearing.g fortifying.g forwarding.g fostering.g founding.g framing.g franking.g frazzling.g freeing.g frequenting.g frescoing.g fricasseeing.g frightening.g frisking.g frittering.g frogmarching.g frustrating.g frying.g fulfilling.g fumigating.g funding.g funnelling.g furbishing.g furnishing.g furrowing.g furthering.g gaging.g gainsaying.g galling.g galvanizing.g gaoling.g garbing.g garbling.g garnering.g garnishing.g garrisoning.g gashing.g gatecrashing.g gauging.g generating.g genericizing.g gerrymandering.g ghettoizing.g gilding.g ginning.g girding.g glaciating.g gladdening.g glamorizing.g gleaning.g glimpsing.g glorifying.g glutting.g goading.g gorging.g goring.g grabbing.g gracing.g grading.g grafting.g gratifying.g gravelling.g greasing.g greenlighting.g greeting.g grilling.g gripping.g gritting.g groining.g grooming.g grossing.g grudging.g guarding.g guiding.g guillotining.g gumming.g gunning.g gutting.g guzzling.g gypping.g hallowing.g halting.g halving.g hampering.g hamstringing.g handcrafting.g handcuffing.g handicapping.g handling.g haranguing.g harassing.g harboring.g harbouring.g harming.g harnessing.g harpooning.g harrowing.g harrying.g harvesting.g hassling.g haunting.g hawking.g hazarding.g hazing.g headquartering.g heaping.g heartening.g hearting.g heeding.g helming.g heralding.g highjacking.g highlighting.g hijacking.g hindering.g hitting.g hoaxing.g hobbling.g hocking.g hogging.g hollowing.g homesteading.g homogenizing.g honing.g honoring.g honouring.g hooding.g hoodwinking.g horrifying.g horsewhipping.g hosing.g hospitalizing.g hosting.g hotfooting.g hounding.g housing.g hulling.g humbling.g humbugging.g humiliating.g humouring.g humping.g hunching.g hurling.g husking.g hyphenating.g hypnotizing.g idealizing.g identifying.g idolizing.g ignoring.g ill-treating.g illuminating.g illumining.g illustrating.g imaging.g imbibing.g imbuing.g imitating.g immersing.g immobilizing.g immolating.g immortalizing.g immunizing.g impacting.g impairing.g impaling.g impanelling.g imparting.g impeaching.g impeding.g imperilling.g impersonating.g implanting.g implementing.g implicating.g importing.g imposing.g impounding.g impoverishing.g impregnating.g impressing.g imprinting.g imprisoning.g impugning.g imputing.g inactivating.g inaugurating.g incapacitating.g incarcerating.g incarnating.g incensing.g incinerating.g including.g inconveniencing.g incriminating.g inculcating.g incurring.g indemnifying.g indenturing.g indexing.g indicting.g individuating.g indoctrinating.g inducting.g infatuating.g infecting.g infesting.g infilling.g infiltrating.g inflaming.g inflating.g inflecting.g inflicting.g influencing.g infuriating.g infusing.g ingesting.g ingratiating.g inhabiting.g inheriting.g inhibiting.g initialling.g injecting.g injuring.g inking.g inoculating.g inscribing.g inseminating.g inserting.g inspecting.g installing.g instating.g instigating.g instilling.g instituting.g institutionalizing.g insulating.g insulting.g insuring.g integrating.g intercepting.g interchanging.g interdicting.g interesting.g interjecting.g interleaving.g internalizing.g internationalizing.g interoperating.g interpolating.g interring.g interrogating.g interspersing.g interweaving.g intimidating.g intoning.g intoxicating.g introducing.g intuiting.g inundating.g invading.g invalidating.g invaliding.g inveigling.g inventing.g inverting.g invigorating.g invoking.g irking.g irradiating.g irrigating.g isolating.g italicizing.g itemizing.g iterating.g jailing.g jarring.g jeopardizing.g jettisoning.g jilting.g jinxing.g jollying.g jugging.g juxtaposing.g kenning.g kidnapping.g kissing.g kneading.g knifing.g knighting.g lacerating.g lacing.g lacking.g lacquering.g lambasting.g laminating.g lampooning.g lancing.g landscaping.g lassoing.g lauding.g laundering.g lavishing.g leaching.g leapfrogging.g leasing.g leavening.g legalizing.g legitimatizing.g leniting.g leveraging.g levering.g levying.g libelling.g liberalizing.g liberating.g licencing.g likening.g limiting.g lionizing.g liquidizing.g listing.g loaning.g loathing.g lobbing.g lofting.g looting.g lubricating.g lugging.g lulling.g lumping.g luring.g lynching.g maddening.g magnetizing.g magnifying.g maiming.g maligning.g maltreating.g manacling.g mandating.g mangling.g manhandling.g manicuring.g manifesting.g manipulating.g manning.g manufacturing.g marginalising.g marginalizing.g marketing.g marooning.g marring.g marshalling.g martyring.g mashing.g masking.g massaging.g mass-producing.g mastering.g masterminding.g masticating.g mauling.g maximizing.g maxing.g measuring.g mechanizing.g medicating.g memorializing.g memorizing.g menacing.g meriting.g mesmerizing.g microfilming.g miffing.g milking.g mimeographing.g mimicking.g mincing.g miniaturizing.g minimizing.g minting.g miring.g mirroring.g misapplying.g misapprehending.g misappropriating.g miscastting.g misconceiving.g misconstruing.g misdating.g misdirecting.g misgoverning.g misguiding.g mishandling.g mishearing.g misinforming.g misinterpreting.g mislaying.g misleading.g mismanaging.g misnaming.g misplacing.g mispronouncing.g misquoting.g misreading.g misrepresenting.g misspelling.g misspending.g misstating.g mistaking.g mistranslating.g mistreating.g mistrusting.g misusing.g mitigating.g mobbing.g mocking.g modeling.g modifying.g modulating.g molding.g molesting.g mollifying.g mollycoddling.g monitoring.g monopolizing.g montaging.g mooring.g mooting.g morphing.g mortaring.g mortgaging.g mortifying.g mothballing.g mothproofing.g motorizing.g muddying.g muffing.g muffling.g mugging.g mulching.g multiplexing.g murdering.g mustering.g mutilating.g muting.g muzzling.g myspacing.g mystifying.g nabbing.g nagging.g namespacing.g narrating.g nationalizing.g naturalizing.g needling.g negating.g netting.g nettling.g neutering.g neutralizing.g nicking.g nicknaming.g nixing.g noogieing.g normalizing.g norming.g notarizing.g notating.g nourishing.g novelising.g novelizing.g nudging.g nullifying.g numbering.g numbing.g nursing.g nurturing.g obfuscating.g obligating.g obliterating.g obscuring.g obstructing.g obtaining.g obviating.g occasioning.g occupying.g offending.g offloading.g offsetting.g oiling.g okaying.g omening.g omitting.g oppressing.g orchestrating.g ordaining.g organizing.g orientating.g orienting.g ornamenting.g ostracizing.g ousting.g outbalancing.g outclassing.g outdistancing.g outdoing.g outfighting.g outfitting.g outflanking.g outfoxing.g outgrowing.g outlasting.g outlawing.g outlining.g outliving.g outmanoeuvring.g outnumbering.g outplaying.g outraging.g outranking.g outrideing.g outrighting.g outrunning.g outscoring.g outshining.g outsmarting.g outsourcing.g outstaying.g outvoting.g outweighing.g outwitting.g overawing.g overbearing.g overburdening.g overcoming.g overcooking.g overcrowding.g overdoing.g overdubing.g overemphasizing.g overestimating.g overexerting.g overexposing.g overgrazing.g overhauling.g overhearing.g overleaping.g overloading.g overlooking.g overpaying.g overplaying.g overpopulating.g overpowering.g overpraising.g overprinting.g overrating.g overruling.g overrunning.g overseeing.g overshadowing.g overshooting.g oversimplifying.g overstating.g overstaying.g overstepping.g overstocking.g overstraining.g oversubscribing.g overtaking.g overtaxing.g overvaluing.g overwhelming.g overwriting.g owning.g oxygenating.g pacifying.g packaging.g padding.g padlocking.g paging.g paining.g palatalizing.g pampering.g papering.g parallelizing.g parallelling.g paralysing.g paralyzing.g parametrizing.g paraphrasing.g parching.g pardoning.g paring.g parodying.g paroling.g parrying.g partitioning.g partnering.g pasteurizing.g pasting.g patenting.g patrolling.g patronizing.g patterning.g patting.g pauperizing.g pawing.g pawning.g pedestrianizing.g pegging.g pelting.g penalizing.g pencilling.g peppering.g perfecting.g perforating.g perfuming.g perfusing.g perjuring.g permeating.g perming.g permuting.g perpetrating.g perpetuating.g perplexing.g persecuting.g personalizing.g personifying.g perturbing.g perusing.g pervading.g perverting.g pestering.g petting.g photocopying.g photographing.g photosensitizing.g photostatting.g phrasing.g pickling.g picturing.g piercing.g pigeonholing.g pigmenting.g pilfering.g piloting.g pinching.g pinpointing.g piping.g pipping.g piquing.g pirating.g pitchforking.g pitting.g pitying.g placating.g placing.g plagiarizing.g plaguing.g planting.g plastering.g pleasing.g plumbing.g pluralizing.g plying.g pocketing.g podcasting.g poisoning.g polarizing.g policing.g polishing.g politicizing.g pollinating.g polluting.g pondering.g pooh-poohing.g pooling.g popularizing.g populating.g portaging.g portending.g porting.g positioning.g possessing.g postdating.g posting.g postmarking.g postponing.g powdering.g praising.g prearranging.g preceding.g precipitating.g precluding.g preconceiving.g predestining.g predetermining.g predicating.g predisposing.g pre-empting.g preempting.g preening.g prefabricating.g prefacing.g prefiguring.g preforming.g preheating.g prejudging.g prejudicing.g premeditating.g premising.g preoccupying.g preordaining.g prepaying.g prerecording.g prerendering.g presaging.g prescribing.g presenting.g preserving.g presorting.g pressurizing.g prestressing.g prettifying.g preventing.g pricing.g priding.g priming.g printing.g privileging.g prizing.g probing.g processing.g proctoring.g procuring.g prodding.g producing.g proffering.g profiling.g prognosticating.g prohibiting.g prolonging.g promoting.g promulgating.g pronouncing.g proofing.g propelling.g proportioning.g propositioning.g propounding.g proscribing.g prosecuting.g prostituting.g prostrating.g protecting.g pruning.g psychoanalysing.g psychoanalyzing.g publicizing.g publishing.g pulverizing.g pummelling.g punctuating.g punishing.g purchasing.g pureing.g purifying.g purloining.g pursing.g pursuing.g purveying.g quaffing.g qualifying.g quantifying.g quarantining.g quarterbacking.g quartering.g quashing.g quelling.g quenching.g querying.g quick-freezing.g quilting.g quoting.g radicalizing.g raffling.g raiding.g railroading.g ramming.g ramping.g ransacking.g ransoming.g raping.g ratifying.g rationalizing.g rationing.g ravaging.g ravishing.g razing.g reacquainting.g re-addressing.g readmitting.g reaping.g reappointing.g rearranging.g reassessing.g reauthorizing.g rebadging.g rebooting.g rebranding.g rebroadcasting.g rebuffing.g rebuking.g rebutting.g recapturing.g recasting.g recessing.g rechristening.g reciting.g reclaiming.g recoloring.g recommitting.g recompensing.g reconciling.g reconditioning.g reconquering.g reconsecrating.g reconsidering.g reconstructing.g reconvicting.g recouping.g recreating.g rectifying.g recusing.g recuting.g recycling.g redecorating.g redeeming.g redefining.g redeploying.g redesignating.g redesigning.g redeveloping.g rediscovering.g redistributing.g redoing.g redrafting.g redrawing.g redressing.g redshirting.g reducing.g reduplicating.g re-educating.g re-educating.v reemploying.g reenacting.g reequiping.g re-establishing.g reestablishing.g refashioning.g refilling.g refinancing.g refining.g reflexing.g reformulating.g refracting.g refreshing.g refrigerating.g refunding.g refurbishing.g refurnishing.g refuting.g regaining.g regaling.g regimenting.g regrading.g regularizing.g regulating.g regurgitating.g rehabilitating.g rehashing.g rehiring.g rehousing.g reigniting.g reimagining.g reimbursing.g reinforcing.g reinstalling.g reinstating.g reinsuring.g reintegrating.g reinterpreting.g reinventing.g reinvigorating.g reissuing.g rejecting.g rejoining.g rejuvenating.g relaunching.g relaying.g releasing.g relegating.g relieving.g relinquishing.g relishing.g relisting.g reliving.g reloading.g remanding.g remastering.g rematching.g remedying.g remilitarizing.g remixing.g remodelling.g remolding.g remoulding.g removing.g remunerating.g rending.g renewing.g renominating.g renouncing.g renovating.g renumbering.g reoccupying.g reorientating.g reorienting.g repackaging.g repainting.g repatriating.g repealing.g repelling.g rephotographing.g rephrasing.g replacing.g replanting.g replastering.g replaying.g replenishing.g replicating.g reprehending.g representing.g repressing.g reprieving.g reprimanding.g reprinting.g reproaching.g reproofing.g reproving.g repudiating.g repulsing.g repurchasing.g repurposing.g reputing.g requisitioning.g rereading.g rereleasing.g rerolling.g rerouting.g rescheduling.g rescinding.g rescuing.g researching.g reseating.g reselling.g resembling.g resenting.g reserving.g resetting.g reshaping.g reshuffling.g resiting.g resoling.g respecting.g restating.g restocking.g restoring.g restraining.g restricting.g restructuring.g restyling.g resubmiting.g resurrecting.g retaining.g retaking.g retarding.g retelling.g rethinking.g reting.g retitling.g retouching.g retracing.g retracting.g retransmitting.g retrieving.g retriing.g retrying.g revaluing.g revamping.g revering.g reveting.g reviewing.g reviling.g revising.g revisiting.g revitalizing.g revoking.g revolutionizing.g rewarding.g rewatering.g rewiring.g rewording.g rewriting.g ribbing.g ridding.g riddling.g ridiculing.g rifling.g righting.g rimming.g rivaling.g rivalling.g riveting.g romanizing.g romanticizing.g roping.g routing.g rubberizing.g rubber-stamping.g ruing.g ruining.g rumpling.g rusticating.g sabotaging.g sacking.g saddening.g saddling.g safeguarding.g salting.g salvaging.g sampling.g sanctifying.g sanctioning.g sandblasting.g sanding.g sandpapering.g sandwiching.g sapping.g satiating.g satirising.g satirizing.g satisfying.g saturating.g sauteing.g savaging.g savouring.g scalding.g scalping.g scandalizing.g scanting.g scarpering.g scarring.g scenting.g scheduling.g schooling.g scooping.g scorching.g scorning.g scotching.g scouring.g scrapping.g scrunching.g scrutinizing.g sculpting.g scuttling.g searing.g seasoning.g seating.g seconding.g secreting.g secularizing.g securing.g sedating.g seducing.g seeding.g segregating.g selecting.g sensationalizing.g sensitizing.g sentimentalizing.g sequestering.g serenading.g serializing.g servicing.g shackling.g shadowing.g shampooing.g shapeshifting.g sharing.g sharpening.g shearing.g sheathing.g shedding.g sheltering.g shelving.g shepherding.g shielding.g shingling.g shirking.g shocking.g shooing.g short-changing.g shortlisting.g shouldering.g shovelling.g showcasing.g shredding.g shrouding.g shucking.g shunning.g shunting.g shuttering.g sickening.g sicking.g sidelining.g sidestepping.g sidetracking.g sieving.g sighting.g signposting.g silencing.g silhouetting.g simplifying.g simulating.g simulcasting.g siphoning.g siring.g skewering.g skinning.g skippering.g skirting.g slaking.g slandering.g slapping.g slashing.g slating.g slaughtering.g slaying.g sleeving.g slicing.g slighting.g slinging.g slotting.g slugging.g slurring.g smelting.g smiting.g smothering.g snagging.g snaring.g snubbing.g socking.g sodomizing.g soft-pedalling.g soiling.g soldering.g soliciting.g solving.g soothing.g soundproofing.g souping.g sourcing.g sousing.g spading.g spanking.g spanning.g sparing.g spaying.g spearheading.g spearing.g specifying.g spewing.g spiking.g spin-drying.g spiriting.g spiting.g sponsoring.g spoonfeeding.g spotlighting.g spotting.g spraining.g spraying.g sprinkling.g spurning.g squandering.g squelching.g squiring.g stabbing.g staffing.g staging.g stalemating.g standardizing.g stapling.g starching.g startling.g stashing.g stationing.g staunching.g stealing.g steamrollering.g steeling.g stereotyping.g sterilizing.g stiffing.g stigmatizing.g stilling.g stimulating.g stitching.g stockading.g stoking.g stomaching.g stoning.g storing.g storyboarding.g stowing.g straddling.g strafing.g straitening.g strangling.g strapping.g streamlining.g strewing.g stroking.g structuring.g stubbing.g stuccoing.g studding.g stunning.g stunting.g styling.g stylizing.g stymieing.g subduing.g subediting.g subjecting.g subjugating.g sublimating.g subordinating.g subpoenaing.g subserving.g subsidizing.g substantiating.g subsuming.g subtending.g subtracting.g subverting.g succouring.g suckling.g suffusing.g suiciding.g suiting.g sullying.g summarizing.g summoning.g sundering.g sunning.g superimposing.g superseding.g supplanting.g supplementing.g supplying.g supporting.g suppressing.g surmounting.g surnaming.g surpassing.g surrounding.g surveying.g suspending.g sustaining.g swamping.g swathing.g swatting.g sweetening.g swigging.g swindling.g swiping.g symbolizing.g syncopating.g syndicating.g synthesizing.g syphoning.g systematizing.g tabling.g tabulating.g tailing.g tailoring.g tainting.g taming.g tamping.g tantalizing.g targeting.g tarring.g tattooing.g taunting.g taxing.g teasing.g telecasting.g teleporting.g telescoping.g televising.g tendering.g terracing.g terrifying.g terrorizing.g tessellating.g test-driving.g tethering.g thanking.g thatching.g thirsting.g threading.g thumbing.g thwarting.g ticketing.g tiering.g tiling.g tilling.g timelining.g timing.g tinting.g titillating.g toeing.g tolerating.g torching.g tormenting.g torpedoing.g torturing.g toting.g touring.g tousling.g touting.g towelling.g towing.g trademarking.g trampling.g tranquilizing.g tranquillizing.g transacting.g transcending.g transcoding.g transcribing.g transfixing.g transforming.g transfusing.g transgendering.g transistorizing.g transitioning.g transmitting.g transmuting.g transporting.g transposing.g transshipping.g trapping.g trashing.g traversing.g treasuring.g tricking.g triggering.g trivializing.g troubling.g trouncing.g truncating.g turbocharging.g tutoring.g tweaking.g twiddling.g typecasting.g typifying.g tyrannizing.g unaffiliating.g unbalancing.g unbanning.g unblocking.g unbolting.g unbuckling.g unburdening.g unbuttoning.g unclothing.g uncluttering.g uncorking.g uncoupling.g uncovering.g uncrossing.g undercharging.g undercutting.g underestimating.g underexposing.g underfunding.g undergoing.g underlining.g underlying.g undermining.g underpaying.g underpinning.g underquoting.g underrating.g underrepresenting.g underscoring.g underselling.g underserving.g undershooting.g undersigning.g understating.g understocking.g understudying.g undervaluing.g underwriteing.g undoing.g unearthing.g unencumbering.g unfettering.g unfrocking.g unfurling.g unhanding.g unhinging.g unhooking.g uninstalling.g unlearning.g unleashing.g unloosing.g unmasking.g unnerving.g unplugging.g unrecording.g unsaddling.g unscrambling.g unsettling.g unsheathing.g unveiling.g unzipping.g upbraiding.g updating.g upgrading.g upholding.g upholstering.g uplifting.g uprighting.g uprooting.g upsetting.g upstaging.g ushering.g usurping.g utilizing.g uttering.g vacating.g vaccinating.g valeting.g validating.g valuing.g vanquishing.g varnishing.g veiling.g vending.g venerating.g ventilating.g venting.g verbalizing.g vetoing.g vetting.g vexing.g victimizing.g videotaping.g vilifying.g vindicating.g violating.g visaing.g visualizing.g vitiating.g vivisecting.g vocalizing.g voicing.g voiding.g vouchsafing.g vulgarizing.g waging.g waiving.g walling.g walloping.g wangling.g warding.g warehousing.g warranting.g wasting.g waterproofing.g waylaying.g weaning.g weaponizing.g weathering.g wedging.g weighting.g welcoming.g wending.g westernizing.g wetting.g whacking.g wheedling.g whetting.g whiling.g whitewashing.g wielding.g wikiing.g winging.g winnowing.g withholding.g withstanding.g witnessing.g wolfing.g wooing.g wording.g worming.g wounding.g wreaking.g wrecking.g wrenching.g wresting.g wronging.g zapping.g zoning.g link-grammar/data/en/words/words.adj.10000644000000000000000000023353512536650432014774 0ustar inducible.a abdominal.a aberrant.a abhorrent.a abiotic.a abject.a abnormal.a abominable.a abortive.a abovementioned.a abrasive.a abrupt.a absent.a absolute.a absorbent.a absorptive.a abstemious.a abstract.a abstracted.a abstruse.a absurdist.a abundant.a abusive.a abysmal.a abyssal.a academic.a academical.a accessible.a accidental.a accredited.a accrual.a accumulative.a accurate.a accursed.a accusative.a acerbic.a acetic.a achievable.a acid.a acidic.a acoustic.a acoustical.a acquiescent.a acquisitive.a acrid.a acrimonious.a acrobatic.a acrocentric.a actionable.a active.a actual.a acute.a adagio.a adamant.a adaptable.a adaptive.a addictive.a additional.a adept.a adequate.a adhesive.a adiabatic.a adipic.a adjacent.a adjectival.a adjustable.a adjuvant.a administrative.a admissible.a adolescent.a adoptive.a adorable.a adrenal.a adrenergic.a adroit.a adulterous.a advanced.a adventitious.a adventuresome.a adventurous.a adverbial.a adversarial.a adverse.a advisory.a aerial.a aero.a aerobic.a aerodynamic.a aeronautical.a aesthetic.a aesthetical.a affable.a affectionate.a affective.a affine.a affirmative.a affliated.a affluent.a affordable.a aforementioned.a aforesaid.a agape.a aged.a ageless.a agglomerate.a aggressive.a agile.a agitated.a agnostic.a agonizing.a agrarian.a agreeable.a agricultural.a aimless.a airborn.a airborne.a airplay.a airspace.a airtight.a airworthy.a airy.a alabaster.a alcoholic.a aleatoric.a alert.a alfresco.a algal.a algebraic.a algorithmic.a alien.a alimentary.a aliphatic.a alkaline.a allegoric.a allegorical.a allegretto.a allegro.a allergic.a alliterative.a allogeneic.a allophonic.a allosteric.a allowable.a alluvial.a almighty.a aloof.a alphabetic.a alphabetical.a alpine.a alright.a alternative.a altitudinal.a altricial.a altruistic.a alumina.a alumni.a amateurish.a amatory.a ambassadorial.a ambidextrous.a ambient.a ambiguous.a ambitious.a ambivalent.a ambulatory.a amenable.a American.a amiable.a amicable.a amino.a amnesiac.a amniotic.a amoebic.a amoral.a amorous.a amorphous.a amphibious.a ample.a anabolic.a anachronistic.a anaemic.a anal.a analogical.a analogous.a analyte.a analytic.a analytical.a anamorphic.a anapaestic.a anarchic.a anatomic.a anatomical.a ancestral.a ancient.a ancillary.a andante.a andean.a androgenic.a androgynous.a anecdotal.a angelic.a angry.a anguished.a angular.a anhydrous.a animalistic.a animate.a animated.a animatronic.a animistic.a annual.a annular.a annus.a anomalous.a anonymous.a anorexic.a answerable.a antagonistic.a antarctic.a antebellum.a antediluvian.a antepenultimate.a anterior.a anthemic.a anthropogenic.a anthropological.a anthropomorphic.a anti.a antiandrogenic.a antibiotic.a anticholinergic.a anticipatory.a anticoagulant.a anticonvulsant.a antidepressant.a antidiarrhoeal.a antiemetic.a antifungal.a antihistaminergic.a antihypertensive.a antilock.a antimicrobial.a antinodal.a antipodean.a antipsychotic.a antiqua.a antiquarian.a antiquated.a antique.a antisemitic.a antisense.a antiseptic.a antislavery.a antisocial.a antitank.a antithetical.a antitrust.a antitumor.a antivirus.a anxiolytic.a aortic.a apathetic.a apelike.a apical.a aplastic.a apocalyptic.a apocryphal.a apologetic.a apoplectic.a apostolic.a appalling.a appealing.a appetizing.a applicable.a apposite.a appreciable.a approachable.a approximate.a apropos.a apsidal.a aquatic.a aqueous.a Arab.a Arabian.a Arabic.a arable.a arachidonic.a arachnoid.a arbitrary.a arboreal.a arcaded.a arcane.a arch.a archaeal.a archaeological.a archaic.a archeological.a archetypal.a archetypical.a architectural.a archival.a archrival.a arctic.a ardent.a arduous.a argumentative.a arid.a aristocratic.a arithmetical.a armored.a armorial.a armoured.a aromatic.a arresting.a arrterial.a arte.a arterial.a artesian.a artful.a arthritic.a articular.a articulate.a artifactual.a artificial.a artistic.a artless.a arty.a ascetic.a ascorbic.a asexual.a ashen.a assigned.a asinine.a assertive.a assiduous.a assistive.a associative.a assorted.a asthmatic.a astigmatic.a astral.a astringent.a astrological.a astronomical.a astute.a asymmetric.a asymmetrical.a asymptotic.a atavistic.a ataxic.a atheistic.a atheromatous.a athletic.a atmospheric.a atomic.a atonal.a atopic.a atrial.a atrocious.a atrophic.a attainable.a attendant.a attentive.a attractive.a attributable.a attributive.a atypical.a auburn.a audacious.a audible.a auditory.a august.a aural.a auspicious.a austere.a authentic.a authoritarian.a authoritative.a autistic.a autobiographical.a autocephalous.a autochthonous.a autocratic.a autofocus.a autologous.a automatic.a automotive.a autonomic.a autonomous.a autosomal.a autumnal.a auxiliary.a avaricious.a avec.a average.a averse.a aversive.a avian.a avid.a avoidable.a avuncular.a awesome.a axial.a axiomatic.a axonal.a azure.a babyish.a backhanded.a bacterial.a bactericidal.a baggy.a bailable.a bald.a baleful.a ballistic.a bally.a balmy.a banal.a baneful.a bankrupt.a baptismal.a barbaric.a barbarous.a barbed.a bardic.a bare.a barefaced.a barefooted.a bareheaded.a barelegged.a barmy.a baronial.a baroque.a barren.a barycentric.a basal.a basaltic.a base.a baseless.a bashful.a basic.a bass.a basset.a batty.a bawdy.a bay.a bayside.a beachfront.a beady.a beaked.a bearable.a bearded.a beardless.a bearish.a beastly.a beatific.a beauteous.a beautification.a beautiful.a becalmed.a bedecked.a bedraggled.a bedridden.a beefy.a beggarly.a behavioral.a behavioural.a beholden.a bejeweled.a bejewelled.a belated.a beleaguered.a believable.a bellicose.a belligerent.a beloved.a bemused.a beneficent.a beneficial.a benevolent.a benighted.a benign.a Beninese.a benthic.a benzoic.a berserk.a besotted.a bespangled.a be-spectacled.a bespectacled.a bestial.a bibical.a biblical.a Biblical.a bibliographic.a bicameral.a bicentered.a biennial.a bifocal.a big.a bigamous.a bigoted.a biharmonic.a bijective.a bilabial.a bilateral.a bilaterian.a bilingual.a bilious.a billiard.a billowy.a bimonthly.a binary.a binational.a binomial.a biochemical.a biodegradable.a biogenic.a biogeographic.a biographical.a biologic.a biological.a bioluminescent.a biometric.a biotechnological.a biotic.a bipartisan.a bipedal.a biphasic.a birdlike.a bisexual.a bitchy.a biting.a bitmapped.a bitter.a bituminous.a biweekly.a bizarre.a black.a blackish.a blackspotted.a black-taloned.a bladed.a blameless.a blanc.a bland.a blank.a blase.a blasphemous.a blatant.a bleak.a bleary.a blessed.a bleu.a blind.a blissful.a blithe.a blithering.a bloated.a blond.a blonde.a bloodcurdling.a bloodless.a bloodshot.a bloodstained.a bloodsucking.a bloodthirsty.a bloody.a blotto.a blowzy.a blue.a blueberry.a bluespotted.a bluesy.a bluff.a bluish.a blunt.a blurry.a blustery.a boastful.a bodied.a bodily.a boggy.a bogus.a bohemian.a boilered.a boisterous.a bold.a bolded.a bombastic.a boneless.a bonkers.a bonny.a bony.a bookended.a bookish.a boon.a boorish.a borderless.a bored.a boric.a bossa.a bossy.a botanic.a botanical.a bothersome.a bottomless.a bouffant.a bouncing.a bouncy.a bound.a boundless.a bounteous.a bountiful.a bourgeois.a bovine.a boyish.a brachial.a brackish.a brainless.a brainy.a brand-new.a brash.a brassy.a brawny.a brazen.a breakable.a breakneck.a breathless.a breathtaking.a breezy.a brief.a bright.a brilliant.a brined.a briny.a brisk.a bristly.a British.a brittle.a broad.a broadband.a bronchial.a broody.a brotherly.a brown.a brownish.a brusque.a brutal.a brutish.a bubbly.a bubonic.a bucolic.a Buddhist.a budgetary.a bulbous.a bulky.a bulletproof.a bullish.a bully.a bum.a bumptious.a bumpy.a buoyant.a burdensome.a bureaucratic.a burly.a bushy.a businesslike.a busy.a butch.a buxom.a bygone.a cacophonous.a cadaverous.a cagey.a calamitous.a calcareous.a calcicolous.a calculable.a calculating.a callous.a callow.a calm.a caloric.a calorific.a camp.a cancerous.a candid.a candied.a canine.a cankerous.a canned.a cannibalistic.a canny.a canonical.a cantankerous.a Cantonese.a capacious.a capacitative.a capacitive.a caped.a capitalistic.a capricious.a captive.a carbolic.a carbonaceous.a carbonated.a carbonic.a carboxylic.a carcinogenic.a cardiac.a cardinal.a cardiogenic.a cardiothoracic.a cardiovascular.a carefree.a careless.a careworn.a carmine.a carnal.a carnatic.a carnivorous.a carsick.a cartilaginous.a cartoonish.a cartoony.a casted.a castellated.a casual.a catabolic.a cataclysmic.a catalytic.a catastrophic.a catatonic.a catching.a catchy.a categorical.a catholic.a Catholic.a catty.a caudal.a causal.a causative.a causeless.a caustic.a cautionary.a cautious.a cavalier.a cavernous.a ceaseless.a celestial.a celled.a cellular.a cellulosic.a celtic.a censorious.a centenary.a centennial.a central.a centralised.a centric.a centrifugal.a centripetal.a cephalic.a ceramic.a ceratopsian.a cerebral.a ceremonial.a ceremonious.a certifiable.a cervical.a chafflike.a chalky.a challenging.a chambered.a chancy.a changeable.a chaotic.a chaotropic.a characteristic.a characterless.a chargeable.a charismatic.a charitable.a charming.a chaste.a chatty.a chauvinistic.a cheap.a cheeky.a cheerful.a cheerless.a cheery.a cheesy.a chemical.a chemotactic.a chenodeoxycholic.a cherry.a cherubic.a chewy.a chiasmal.a chic.a chichi.a chief.a childless.a childlike.a chill.a chilly.a Chinese.a chiral.a chiropractic.a chirpy.a chislic.a chitinous.a chitinozoan.a chivalric.a chivalrous.a chlamydial.a chloric.a chloroformate.a chloroformic.a chlorogenic.a chlorous.a choice.a choleric.a cholesteric.a cholinergic.a choosey.a choosy.a choppy.a choral.a chordal.a chorded.a choreographed.a chromatic.a chromed.a chromic.a chromomorphic.a chromosomal.a chromous.a chronic.a chronological.a chthonic.a chubby.a chummy.a chunky.a churched.a churlish.a ciliated.a cinematic.a cinerary.a circadian.a circuitous.a circular.a circulatory.a circumferential.a circumspect.a circumstantial.a citied.a citric.a citrous.a citywide.a civic.a civil.a civilian.a civilized.a cladistic.a clammy.a clamorous.a clandestine.a clangorous.a clannish.a classic.a classical.a classifiable.a classified.a classless.a classy.a clastic.a claustrophobic.a clean.a cleanly.a clearheaded.a clerical.a clever.a climactic.a climatic.a clinical.a cliquish.a clitic.a clonal.a close.a cloudless.a cloudy.a clueless.a clumsy.a coarse.a coastal.a coaxial.a cockeyed.a cockney.a cocksure.a cocky.a codenamed.a codeshared.a coeducational.a coeliac.a coercive.a coffered.a cofounded.a cogent.a cognitive.a cognizant.a coherent.a cohesive.a coincident.a coincidental.a cold.a collaborative.a collabrative.a collapsable.a collapsible.a collateral.a collected.a collective.a collegiate.a colloidal.a colloquial.a colonial.a colonic.a colonnaded.a colorful.a colorless.a colossal.a colourful.a colourless.a colubrid.a columnar.a comatose.a combatant.a combative.a combustible.a comely.a comfortable.a comfy.a comic.a comical.a commanding.a commemorative.a commensurable.a commensurate.a commercial.a commodious.a commonplace.a communal.a communicable.a communicative.a communist.a compact.a companionable.a comparable.a comparative.a compassionate.a compatible.a compensatory.a competent.a competitive.a complacent.a complaisant.a complementary.a complete.a complex.a compliant.a complicated.a component.a composed.a composite.a comprehensible.a comprehensive.a compulsive.a compulsory.a computable.a computational.a computerized.a concave.a concentic.a concentric.a conceptual.a concerted.a concessionary.a conciliatory.a concise.a conclusive.a concomitant.a concomittant.a concordant.a concrete.a concurrent.a concussive.a condescending.a conditional.a conditioned.a conducive.a conductive.a confederate.a confidential.a confined.a conformational.a confounded.a confrontational.a confusional.a congenial.a congenital.a congested.a congestive.a Congolese.a congratulatory.a congregational.a congressional.a congruent.a congruous.a conic.a conical.a coniferous.a conjectural.a conjugal.a conjugate.a conjunctival.a connective.a conscientious.a consecutive.a consequent.a consequential.a conservative.a considerable.a considerate.a consistent.a consonant.a consonantal.a conspecific.a conspicuous.a conspiratorial.a constant.a constipated.a constituent.a constitutional.a constitutive.a constrained.a constructive.a consular.a consultative.a consummate.a consumptive.a contagious.a contemplative.a contemporaneous.a contemporary.a contemptible.a contentious.a contextual.a contiguous.a continental.a contingent.a continual.a continuous.a contra.a contractionary.a contractual.a contradictory.a contrapuntal.a contrary.a contrasting.a contrastive.a contributory.a contrite.a controllable.a controversial.a convalescent.a convective.a convenient.a convergent.a conversant.a conversational.a converse.a convertible.a convex.a convincing.a convoluted.a convulsive.a cool.a co-operative.a cooperative.a copious.a coquettish.a coral.a cordate.a cordial.a cordless.a corked.a corneal.a corny.a coronal.a coronary.a corporal.a corporate.a corporeal.a corpulent.a correctional.a corrective.a corresponding.a corrigible.a corroborative.a corrosive.a corrupt.a corruptible.a cortical.a corymbiform.a cosmetic.a cosmic.a cosmological.a cosmopolitan.a costal.a costumed.a cosy.a coterminous.a countable.a counterproductive.a countless.a countywide.a courageous.a courteous.a courtly.a covalent.a covariant.a covert.a cowardly.a coxed.a coxless.a coy.a cozy.a crafty.a craggy.a cranial.a craniofacial.a cranky.a crass.a craven.a crazed.a creaky.a creamy.a creationist.a creative.a credible.a creditable.a credulous.a creepy.a crepuscular.a crestfallen.a criminal.a crimson.a crinkly.a crisp.a crispy.a crooked.a crosscountry.a crosseyed.a crosshead.a cross-legged.a crowded.a crowning.a cruciate.a cruciform.a crude.a crumbly.a crunchy.a crushing.a crusty.a cryogenic.a cryptic.a cryptologic.a crystalline.a cubic.a cubical.a cubital.a cuboid.a cuddly.a culinary.a culpable.a cultivable.a cultural.a cultured.a cumbersome.a cumulative.a cunning.a curable.a curative.a curatorial.a curly.a current.a curricular.a cursed.a cursiva.a cursive.a cursory.a curt.a curvy.a cushy.a custodial.a cutaneous.a cute.a cutthroat.a cutting.a cyanuric.a cyber.a cybernetic.a cyclic.a cyclical.a cyclonic.a cyclopean.a cyclotomic.a cylindrical.a cynical.a cystic.a cytoplasmic.a cytosolic.a dactylic.a daft.a daily.a dainty.a damn.a damnable.a damp.a dandy.a Danish.a dank.a dapper.a daring.a dark.a dastardly.a dative.a daunting.a dauntless.a d’Avant-Garde.a daylong.a deadlocked.a deadly.a deadpan.a deaf.a dear.a deathly.a debonair.a début.a decadent.a deceitful.a decennial.a decent.a deceptive.a deciduous.a decimal.a decipherable.a decisive.a declamatory.a declarative.a decongestant.a decorative.a decorous.a decrepit.a dedicatory.a deductible.a deductive.a deep-seated.a defamatory.a defeated.a defective.a defenceless.a defenseless.a defensible.a defensive.a deferential.a defiant.a deficient.a definable.a definitional.a definitive.a deflationary.a deft.a defunct.a degenerate.a dehiscent.a déjà.a delectable.a deleterious.a deliberate.a deliberative.a delicate.a delicious.a delightful.a delinquent.a delirious.a deliverable.a deltoid.a delusional.a demagogic.a demanding.a demented.a dementia.a demiurgic.a democratic.a démocratique.a demographic.a demoniac.a demonic.a demonstrative.a demure.a denatured.a dendritic.a deniable.a denominational.a dense.a dental.a deontic.a departmental.a dependable.a dependent.a depositary.a depressant.a depressive.a derelict.a derisive.a derisory.a derivative.a dermal.a dermoid.a derogatory.a descriptive.a deserving.a designate.a desolate.a despicable.a despondent.a despotic.a destitute.a destructible.a destructive.a desultory.a detachable.a detached.a detailed.a detectable.a detergent.a determinate.a deterministic.a deterrent.a detrimental.a detritivorous.a devastating.a developmental.a deviant.a devilish.a devious.a devoid.a devotional.a devout.a dexterous.a dextrorotatory.a dextrous.a dharmic.a diabetic.a diabolical.a diacritical.a diagnostic.a diagonal.a dialectical.a dialogical.a dialup.a diaphragmatic.a diastolic.a diatomaceous.a diatomic.a diatonic.a diauxic.a dicey.a dichotomic.a dichroic.a dictatorial.a didactic.a dielectric.a dietary.a dietetic.a differential.a diffident.a diffuse.a digestible.a digestive.a digital.a digitigrade.a dignified.a dihedral.a dilapidated.a dilatory.a diligent.a dilute.a dim.a dimensional.a dimensionful.a dimensionless.a dimeric.a diminutive.a dimorphic.a dim-witted.a dimwitted.a dingy.a diocesan.a dioecious.a diophantine.a diploic.a diplomatic.a dire.a direct.a directional.a directorial.a dirty.a disabled.a disadvantageous.a disaffected.a disaffiliated.a disagreeable.a disappointing.a disastrous.a discal.a discernible.a disciplinary.a disconnected.a disconsolate.a discontinuous.a discordant.a discouraged.a discourteous.a discreet.a discrete.a discretionary.a discriminating.a discriminatory.a discursive.a disdainful.a diseased.a disfranchised.a disgruntled.a dishevelled.a dishonourable.a dishy.a disingenuous.a disinterested.a disjointed.a disjunct.a disjunctive.a diskless.a disloyal.a dismal.a disobedient.a disorderly.a disparate.a dispassionate.a dispensable.a dispensational.a dispersive.a displeased.a displeasing.a disposable.a disproportionate.a disputable.a disputed.a disquieting.a disreputable.a disrespectful.a disruptive.a dissimilar.a dissipative.a dissociative.a dissoluble.a dissolute.a dissonant.a distal.a distasteful.a distinct.a distinctive.a distinguishable.a distinguished.a distracted.a distraught.a distributive.a distrustful.a disused.a ditrigonal.a diurnal.a divalent.a divergent.a divers.a diverse.a diversionary.a diverticular.a diverting.a divine.a divisible.a divisional.a divisive.a dizzy.a docile.a docosahexaenoic.a doctoral.a doctrinaire.a doctrinal.a documentary.a doddery.a dodecagonal.a dodgy.a dogged.a doglike.a dogmatic.a doleful.a dolomitic.a dolourous.a doltish.a domed.a domestic.a dominant.a domineering.a domoic.a donnish.a dopaminergic.a dopey.a dormant.a dorsal.a dotty.a double.a double-breasted.a doughy.a dour.a dowdy.a downcast.a downhearted.a downloadable.a downmarket.a downriver.a downstairs.a downtempo.a downtrodden.a downy.a doxastic.a drab.a draconian.a dramatic.a dramatistic.a dramaturgical.a drapey.a drastic.a dreadful.a dreamless.a dreamlike.a dreamy.a dreary.a dressy.a drinkable.a driverless.a drizzly.a droll.a drowsy.a drunk.a drunken.a dry.a dual.a dualistic.a dubious.a ducal.a duckbilled.a ducted.a due.a dull.a dumpy.a duodenal.a duplicitous.a durable.a dural.a dusky.a dusty.a dutiful.a dwarfish.a dwarven.a dynamic.a dynamical.a dynastic.a dynastical.a dyslexic.a dyspeptic.a early.a earnest.a earthen.a earthly.a earthy.a easterly.a eastwardly.a easygoing.a ebony.a ebullient.a eccentric.a ecclesiastical.a eclectic.a eco.a ecological.a econometric.a economic.a economical.a ecstatic.a ectomesenchymal.a ectopic.a ecumenical.a edgy.a edible.a editorial.a educated.a educational.a eerie.a eery.a effectual.a effeminate.a effervescent.a effete.a efficacious.a efflorescent.a effortless.a effusive.a egalitarian.a egocentric.a egoistic.a egoistical.a egotistic.a egotistical.a egregious.a eikonal.a ein.a el.a elaborate.a elastic.a elder.a elderly.a elective.a electoral.a electric.a electrical.a electro.a electrochemical.a electrodeless.a electrofax.a electrolytic.a electromagnetic.a electromechanical.a electromotive.a electronic.a electrophilic.a electrophonic.a electrophoretic.a electrophysiological.a electrostatic.a elegiac.a elemental.a elementary.a elephantine.a elfin.a elfish.a elliptic.a elliptical.a elocutionary.a eloquent.a elusive.a elven.a elvish.a emarginate.a embattled.a emblematic.a emblemmatic.a embryonic.a emergent.a emeritus.a eminent.a emotional.a emotive.a empathetic.a empathic.a emphatic.a empiric.a empirical.a employable.a empty.a encouraging.a encyclopaedic.a encyclopædic.n encyclopedic.a endemic.a endless.a endocrine.a endodontic.a endogenous.a endometrial.a endoplasmic.a endorheic.a endoscopic.a endothermic.a endotracheal.a endurable.a energetic.a enforceable.a engined.a English.a enigmatic.a enlightened.a enlightening.a enormous.a enterohepatic.a enterprising.a entheogenic.a enthused.a enthusiastic.a entire.a entomological.a entrepreneurial.a entropic.a enviable.a environmental.a enzymatic.a eosinophilic.a ephemeral.a epic.a epicanthal.a epicanthic.a epicurean.a epicyclic.a epidemic.a epidemiological.a epidural.a epigrammatic.a epileptic.a epiphytic.a episcopal.a episcopalian.a episodic.a epistemic.a epistemological.a epistolary.a epitaxial.a eponymous.a equal.a equatorial.a equestrian.a equidistant.a equilateral.a equine.a equitable.a equivalent.a equivocal.a erect.a ergodic.a ergonomic.a erogenous.a erotic.a errant.a erratic.a erroneous.a erudite.a erythroid.a eschatological.a esophageal.a esoteric.a especial.a esterification.a esthetic.a estimable.a estuarine.a eternal.a ethereal.a ethnic.a ethnocentric.a ethnographic.a ethnological.a etoposide.a etymological.a eugenic.a eukaryotic.a euphemistic.a euphoric.a eutectic.a evaluative.a evanescent.a evangelical.a evangelistic.a evaporative.a evaporitic.a evasive.a even.a eventful.a eventual.a evergreen.a everlasting.a everyday.a evidential.a evidentiary.a evil.a evocative.a evolutionary.a exact.a exacting.a exalted.a excellent.a exceptional.a excess.a excessive.a exchangeable.a excitable.a excitatory.a exclamatory.a exclusive.a excruciating.a excusable.a execrable.a executive.a exemplary.a exempt.a exhaustive.a existent.a exocrine.a exogenous.a exonuclease.a exorbitant.a exothermic.a exotic.a expansionist.a expansionistic.a expansive.a expectant.a expedient.a expeditionary.a expeditious.a expendable.a experiential.a experimental.a expert.a expiratory.a explanatory.a explicable.a explicit.a exploitative.a exploratory.a explosive.a exponential.a expressionistic.a expressionless.a expressive.a exquisite.a extant.a extemporaneous.a extemporary.a extempore.a extensive.a exterior.a external.a extinct.a extra.a extrachromosomal.a extracurricular.a extramarital.a extramural.a extraneous.a extraordinary.a extrasensory.a extravagant.a extremal.a extreme.a extrinsic.a extrusive.a exuberant.a exultant.a eyecatching.a fab.a fabled.a fabless.a fabulous.a faceless.a faceted.a facetious.a facial.a facile.a factual.a faint.a faithful.a fallacious.a fallback.a fallible.a fallopian.a fallow.a famed.a familial.a familiar.a famous.a fanatical.a fanciful.a fancy.a fantastic.a fantastical.a far.a faraway.a farcical.a fascist.a fascistic.a fast.a fastidious.a fat.a fatal.a fatalistic.a fateful.a fatherless.a fatherly.a fathomless.a fatty.a fatuous.a faultless.a faulty.a faunal.a favorable.a favourable.a fazed.a fearful.a fearless.a fearsome.a feasible.a featherbrained.a feathery.a featureless.a fecal.a feckless.a fecund.a federal.a feeble.a feldspathic.a felicitous.a feline.a felonious.a female.a feminine.a feral.a ferocious.a ferric.a ferromagnetic.a ferrous.a fertile.a fervent.a festive.a fetal.a fetching.a fetid.a feudal.a fevered.a feverish.a fey.a fianchettoed.a fiberoptic.a fibrinolytic.a fibrous.a fickle.a fictional.a fictitious.a fidgety.a fiduciary.a fiendish.a fierce.a fiery.a figurative.a filamentous.a filial.a filmy.a filtertipped.a filthy.a final.a financial.a fine.a finicky.a finitary.a finite.a finitistic.a finned.a Finnish.a fireproof.a firm.a firstborn.a first-class.a firsthand.a fiscal.a fishy.a fisted.a fit.a fitful.a fitting.a fizzy.a flabby.a flaccid.a flagrant.a flaky.a flamboyant.a flammable.a flashy.a flat.a flat-bottomed.a flattish.a flavored.a flavorful.a flavorless.a flavourless.a flawed.a flawless.a flaxen.a fleet.a fleeting.a fleshy.a flexible.a flightless.a flighty.a flimsy.a flinty.a flip.a flippant.a flirtatious.a floaty.a floorless.a floppy.a floral.a florid.a flowery.a fluent.a fluffy.a fluid.a fluorescent.a flush.a flustered.a foamy.a focal.a foetal.a foggy.a folic.a folkloric.a folksy.a follicular.a foolhardy.a foolproof.a footloose.a foppish.a forbidding.a forceful.a forcible.a fore.a foregoing.a foregone.a foreign.a foremost.a forensic.a foreseeable.a forgetful.a forgivable.a forlorn.a formal.a formative.a formic.a formidable.a formless.a formulaic.a forte.a forthcoming.a forthright.a fortissimo.a fortnightly.a fortuitous.a foul.a foundational.a foursquare.a foxy.a fractal.a fractional.a fractious.a fragile.a fragmentary.a fragrant.a frail.a frank.a frantic.a fraternal.a fratricidal.a fraudulent.a frazzled.a freakish.a freaky.a freeform.a freehand.a french.a French.a frenetic.a frenzied.a frequent.a fresh.a freshwater.a fretful.a fretless.a friable.a fricative.a frictional.a friendly.a frightened.a frightening.a frightful.a frigid.a frilly.a frisky.a frivolous.a frizzy.a frontal.a frontline.a frost-bitten.a frostbitten.a frosty.a frothy.a frugal.a fruitful.a fruitless.a fruity.a frumpish.a frumpy.a fugitive.a full-grown.a full-time.a fulsome.a functional.a fundamental.a funerary.a funereal.a fungal.a funky.a furious.a furry.a furthermost.a furtive.a fusidic.a fusiform.a fussy.a futile.a future.a futuristic.a fuzzy.a gabled.a gaelic.a gaga.a gainful.a galactic.a gallant.a galvanic.a game.a gangland.a gangrenous.a garde.a gargantuan.a garish.a garrulous.a gaseous.a gastric.a gastronomic.a gauche.a gaudy.a gaunt.a gay.a geeky.a gelatinous.a geminal.a gemological.a genealogical.a general.a generative.a generic.a genericized.a generous.a genetic.a genial.a genital.a genitive.a genomic.a genteel.a gentile.a gentle.a gentlemanly.a genuine.a geocentric.a geochronologic.a geodesic.a geodetic.a geographic.a geographical.a geologic.a geological.a geometric.a geometrical.a geophysical.a geopolitical.a geriatric.a germane.a germinal.a gestational.a ghastly.a ghostly.a ghoulish.a giddy.a gifted.a gigantic.a gingerly.a gingival.a girlish.a glacial.a gladiatorial.a glamorous.a glandular.a glassy.a glaucous.a gleeful.a glib.a glitzy.a global.a globular.a gloomy.a glorious.a glossy.a glottal.a glucuronic.a glum.a glutamatergic.a glutamic.a gluteal.a glutinous.a gluttonous.a glycemic.a glyceryl.a glycolytic.a glycosidic.a glyphic.a gnarled.a gnostic.a godfearing.a godforsaken.a godless.a godlike.a godly.a goggle-eyed.a gold.a golden.a good-looking.a goodly.a good-natured.a gooey.a goofy.a gorgeous.a gory.a gothic.a governmental.a graceful.a gracious.a gradual.a graffiti.a grammatical.a grand.a grande.a grandiloquent.a grandiose.a granitic.a granular.a granulomatous.a graphic.a graphical.a grasping.a grassy.a gratifying.a gratuitous.a grave.a gravelly.a gravitational.a gray.a grayish.a greasy.a greedy.a green.a greenfield.a greenish.a gregarious.a grey.a greyish.a grievous.a grim.a grimy.a grisly.a gritty.a groggy.a groovy.a gross.a grotesque.a grotty.a grouchy.a groundless.a grubby.a gruelling.a gruesome.a gruff.a grumpy.a grunge.a guarded.a gubernatorial.a guileless.a guiltless.a gullible.a gummy.a gustatory.a gusty.a gutless.a guttural.a Guyanese.a gymnastic.a gynaecological.a gynecological.a gyroscopic.a habitable.a habitual.a hackneyed.a haggard.a haired.a hairless.a hairy.a halcyon.a hale.a half-hearted.a halftone.a halfway.a halfwitted.a hallucinatory.a hallucinogenic.a handcrafted.a handheld.a handmade.a handsome.a handwritten.a handy.a haphazard.a hapless.a haploid.a harbourside.a hardboiled.a hardbound.a hardcore.a hardhearted.a hardhitting.a hardline.a hardwired.a hardworking.a hardy.a harebrained.a harmful.a harmless.a harmonious.a harsh.a hasty.a hatchback.a hateful.a haughty.a haulage.a haut.a haute.a hazardous.a hazy.a headless.a headlong.a head-on.a headquartered.a headstrong.a heady.a healthcare.a healthful.a heartbreaking.a heartbroken.a hearted.a heartfelt.a heartless.a heartsick.a hearty.a heavenly.a heavensent.a heavy.a hectic.a hedonistic.a heedless.a hefty.a hegemonic.a heinous.a heiroglphic.a helical.a heliocentric.a hellish.a helmeted.a helpless.a hematologic.a hematopoietic.a hemispheric.a hemolytic.a hemorrhagic.a henpecked.a hentai.a hepatic.a heptagonal.a heraldic.a herbaceous.a herbal.a herbivorous.a herculean.a hereditary.a heretical.a heritable.a hermaphroditic.a heroic.a hesperiid.a heterodox.a heterogeneous.a heterophonic.a heterosexual.a heterotopic.a heterozygous.a heuristic.a hexadecimal.a hexagonal.a hexavalent.a hideous.a hierarchical.a hieroglyphic.a high.a highbrow.a highflying.a high-pitched.a high-sounding.a high-spirited.a hilly.a hind.a hindmost.a Hindu.a hipped.a hippocampal.a hippy.a hispanic.a histologic.a histological.a historic.a historical.a historique.a histrionic.a hitless.a hoarse.a hoary.a hobnailed.a holistic.a hollow.a holomorphic.a holonomic.a holy.a homebrew.a homegrown.a homeless.a homely.a homemade.a homeomorphic.a homeopathic.a homered.a homesick.a homespun.a homeward.a homey.a homicidal.a hominid.a homofermentative.a homogeneous.a homogenous.a homolog.a homological.a homologous.a homonymous.a homophobic.a homopolar.a homosexual.a homozygous.a honest.a honey.a honeyed.a honorable.a honorary.a honourable.a hooked.a hopeless.a horizontal.a hormonal.a horned.a hornless.a horny.a horological.a horrendous.a horrible.a horrid.a horrific.a horticultural.a hospitable.a hostile.a hot.a hourly.a housebound.a houseproud.a housetrained.a howling.a huffy.a huge.a hulking.a human.a humane.a humanistic.a humanitarian.a humanoid.a humble.a humdrum.a humeral.a humid.a humorous.a humourless.a humpbacked.a hunchbacked.a hundredth.a hungry.a hurtful.a husky.a hyaenid.a hybrid.a hydration.a hydraulic.a hydrochloric.a hydroelectric.a hydrographic.a hydrolase.a hydrological.a hydrolytic.a hydropathic.a hydrophilic.a hydrophobic.a hydroponic.a hygienic.a hygroscopic.a hyperbaric.a hyperbolic.a hypercritical.a hypersensitive.a hypertensive.a hypnagogic.a hypnotic.a hypochlorous.a hypodermic.a hypoglycemic.a hypolipidemic.a hypothetical.a hysterical.a iambic.a iatrogenic.a icebound.a Icelandish.a iconic.a icy.a ideal.a idealistic.a identical.a identifiable.a ideological.a idiomatic.a idiopathic.a idiosyncratic.a idle.a idolatrous.a idyllic.a igneous.a ignoble.a ignominious.a ignorant.a ill.a illegible.a illegitimate.a ill-fated.a illicit.a illiterate.a ill-starred.a illusionary.a illusive.a illusory.a illustrative.a illustrious.a imaginable.a imaginary.a imaginative.a imitative.a immaculate.a immanent.a immature.a immeasurable.a immediate.a immemorial.a immense.a immersive.a imminent.a immobile.a immodest.a immortal.a immovable.a immune.a immunologic.a immunological.a immunosuppressive.a immutable.a impalpable.a impartial.a impassable.a impassioned.a impassive.a impeccable.a impenetrable.a imperceptible.a imperfect.a imperial.a imperialistic.a imperious.a impermeable.a impersonal.a impertinent.a imperturbable.a impervious.a impetuous.a impious.a impish.a implacable.a implausible.a implicit.a impolitic.a imponderable.a imposing.a impotent.a impracticable.a impractical.a imprecise.a impregnable.a impressionable.a impressionistic.a impromptu.a improper.a improvident.a improvisational.a imprudent.a impudent.a impulsive.a impure.a inaccessible.a inaccurate.a inactive.a inadequate.a inadmissible.a inadvertent.a inalienable.a inane.a inanimate.a inapplicable.a inarticulate.a inattentive.a inaudible.a inaugural.a inauspicious.a inboard.a inborn.a inbound.a inbred.a inbuilt.a incalculable.a incandescent.a incarnate.a incendiary.a incessant.a incestuous.a inchoate.a incidental.a incipient.a incisive.a inclement.a inclusive.a incognito.a incoherent.a incombustible.a incoming.a incommensurate.a incommunicado.a incomparable.a incompatible.a incompetent.a incomplete.a incomprehensible.a inconclusive.a incongruous.a inconsequential.a inconsiderate.a inconsistent.a inconsolable.a inconspicuous.a incontestable.a incontinent.a incontrovertible.a incorporate.a incorrigible.a incorruptible.a incredulous.a incremental.a incumbent.a incurable.a indebted.a indecent.a indecipherable.a indecisive.a indecorous.a indefatigable.a indefensible.a indefinable.a indefinite.a indegenous.a indelible.a indeniable.a independant.a independent.a independentist.a indescribable.a indestructible.a indeterminate.a indicative.a indictable.a indie.a indifferent.a indigenous.a indigent.a indigestible.a indignant.a indirect.a indiscernible.a indiscreet.a indiscriminate.a indispensable.a indisposed.a indisputable.a indistinct.a indistinguishable.a individual.a individualistic.a indivisible.a indolent.a indomitable.a indoor.a indubitable.a inductive.a indulgent.a industrial.a industrious.a industrywide.a indwelling.a inedible.a ineffable.a ineffective.a ineffectual.a inefficient.a inelastic.a inelegant.a ineligible.a ineluctable.a inept.a inequitable.a ineradicable.a inert.a inertial.a inescapable.a inessential.a inestimable.a inexact.a inexhaustible.a inexorable.a inexpensive.a inexperienced.a inexplicable.a inexpressible.a inextricable.a infallible.a infamous.a infantile.a infectious.a inferential.a inferior.a infernal.a infertile.a infinite.a infinitesimal.a infinitive.a infirm.a inflammable.a inflammatory.a inflatable.a inflational.a inflationary.a inflexible.a influential.a informal.a informational.a informative.a infrared.a infrequent.a in_gel in-gel ingenious.a ingenuous.a inglorious.a ingoing.a ingrained.a ingrowing.a inguinal.a inhabitable.a inherent.a inhibitory.a inhomogeneous.a inhospitable.a inhuman.a inhumane.a inimical.a inimitable.a initial.a initiate.a initiativeless.a injective.a injudicious.a injured.a injurious.a inky.a inland.a inline.a innagural.a innate.a inner.a innermost.a innocuous.a innovative.a innumerable.a inoffensive.a inoperable.a inoperative.a inopportune.a inordinate.a inorganic.a inotropic.a inquisitive.a inquisitorial.a insanitary.a insatiable.a inscrutable.a insecticidal.a insectivorous.a insectoid.a insecure.a insensible.a insensitive.a inseparable.a inshore.a insidious.a insightful.a insincere.a insipid.a insistent.a insolent.a insoluble.a insolvent.a inspirational.a inspiratory.a inspired.a instant.a instantaneous.a instinctive.a instinctual.a institutional.a instructional.a instructive.a instrumental.a insubordinate.a insubstantial.a insufferable.a insular.a insulting.a insuperable.a insupportable.a insurgent.a insurmountable.a intact.a intangible.a integral.a intellectual.a intelligible.a intemperate.a intense.a intensive.a intent.a intentional.a interactive.a interbank.a intercalary.a interchangeable.a intercity.a intercollegiate.a intercontinental.a intercostal.a intercountry.a intercrater.a interdenominational.a interdepartmental.a interdependent.a interdisciplinary.a interested.a interfaith.a intergalactic.a interior.a interleague.a interlibrary.a intermediate.a intermembrane.a interminable.a intermittent.a internal.a international.a internecine.a interoperable.a interpersonal.a interplanetary.a interpretative.a interpretive.a interracial.a interrogative.a interrogatory.a intersex.a interspinous.a interstate.a interstellar.a interstitial.a intertribal.a interventional.a interventionist.a intervertebral.a intestate.a intestinal.a intimate.a intimidating.a intolerable.a intolerant.a intractable.a intrafamilial.a intrahepatic.a intramural.a intransigent.a intransitive.a intrastate.a intrauterine.a intravenous.a intrepid.a intricate.a intrinsic.a introductory.a introspective.a intrusive.a intuitionistic.a intuitive.a invalid.a invaluable.a invariable.a invasive.a inventive.a inverse.a invertible.a investigational.a investigative.a inveterate.a invidious.a invincible.a inviolable.a inviolate.a invisible.a invitational.a inviting.a involuntary.a invulnerable.a ionic.a ionospheric.a irascible.a irate.a iridescent.a Irish.a irksome.a ironclad.a ironic.a ironical.a irreconcilable.a irredeemable.a irreducible.a irrefutable.a irregular.a irremediable.a irreparable.a irreplaceable.a irrepressible.a irresistible.a irresolute.a irrespective.a irretrievable.a irreverent.a irreversible.a irrevocable.a irritable.a ischemic.a Islamic.a isodicentric.a isolated.a isomeric.a isomorphic.a isosceles.a isotopic.a isotropic.a italic.a itchy.a itinerant.a jaded.a jagged.a janitorial.a Japanese.a jaunty.a jazzy.a jellied.a jerky.a jesting.a jeweled.a jewelled.a Jewish.a jingoistic.a jittery.a jobless.a jocose.a jocular.a jocund.a joint.a jolly.a journalistic.a jovial.a joyful.a joyous.a jubilant.a judicial.a judicious.a jugend.a jugular.a juicy.a jumbo.a jumpy.a junctional.a junior.a juridical.a juried.a jurisdictional.a justiciable.a justifiable.a juvenile.a kabbalistic.a kaleidoscopic.a kamikaze.a kaput.a karmic.a karstic.a keratinous.a keyless.a khaki.a kibbutz.a kind.a kindly.a kindred.a kinematic.a kinematical.a kinetic.a kinky.a kitsch.a knobbly.a knockdown.a knotty.a knowledgeable.a kosher.a labial.a laborious.a labyrinthine.a lachrymose.a lackadaisical.a lackluster.a lacklustre.a laconic.a lactic.a lacustrine.a lacy.a laden.a ladylike.a lakefront.a lakeside.a lame.a laminal.a laminar.a lamplit.a lanceolate.a landless.a landlocked.a languid.a languorous.a lanky.a laparoscopic.a large.a largemouth.a larval.a laryngeal.a lascivious.a lasting.a lat.a late.a lateen.a latent.a lateral.a laterite.a latissimus.a latitudinal.a laudable.a laudatory.a laughable.a laureate.a lavish.a lawful.a lawless.a lax.a lay.a lazy.a le.a leaded.a leaden.a leadoff.a leafy.a leaky.a lean.a learned.a leathery.a Lebanese.a lecherous.a leeward.a left.a left-handed.a lefthanded.a leftover.a legalistic.a legendary.a legible.a legislative.a legitimate.a leisurely.a lengthy.a lenient.a lenticular.a lentinan.a lento.a lepidopteran.a leprous.a les.a lesser.a lethal.a lethargic.a leucovorin.a leukemic.a level.a levorotatory.a lewd.a lexical.a liable.a libellous.a liberal.a libertarian.a libidinous.a libro.a licentious.a lifeless.a lifelike.a lifelong.a light.a light-headed.a lighthearted.a lightless.a lightweight.a likable.a likeable.a likeminded.a limber.a limbic.a limited.a limitless.a limp.a limpid.a lineal.a linear.a lineated.a lingual.a linguistic.a lipophilic.a lissom.a listless.a literal.a literary.a literate.a lithe.a lithographic.a litigious.a little.a liturgical.a livable.a live.a liveable.a lively.a livery.a livid.a loaded.a loath.a loathsome.a lobed.a local.a locomotive.a lofty.a logarithmic.a loggerhead.a logistic.a logistical.a lone.a lonely.a lonesome.a longing.a longitudinal.a long-lived.a longstanding.a longtime.a lookup.a loony.a loopy.a loose.a lopsided.a loquacious.a lordly.a lossless.a lossy.a loud.a lousy.a loutish.a louvered.a lovable.a loveless.a lovelorn.a lovesick.a low.a lowborn.a lowbred.a lowbrow.a lowercase.a lowland.a lowly.a low-pitched.a loyal.a lucid.a luckless.a lucrative.a ludicrous.a lugubrious.a lukewarm.a lumbar.a lumbosacral.a luminescent.a luminous.a lumpy.a lunar.a lurid.a luscious.a lush.a lustful.a lustrous.a lusty.a luxuriant.a luxurious.a lymphatic.a lymphocytic.a lymphoid.a lyric.a lyrical.a lysosomal.a macabre.a machiavellian.a macho.a macrobiotic.a macroscopic.a macular.a mafic.a magenta.a magetic.a maggoty.a magic.a magical.a magisterial.a maglev.a magmatic.a magna.a magnanimous.a magnesian.a magnetic.a magnificent.a maiden.a majestic.a major.a maladjusted.a maladroit.a malarial.a malcontent.a male.a malevolent.a malformed.a malicious.a malignant.a malleable.a malnourished.a malodorous.a malonate.a malonic.a Maltese.a maltose.a mammalian.a mammary.a manageable.a managerial.a mandibular.a mangy.a maniacal.a manic.a manifest.a manifold.a manipulative.a maniraptoran.a manly.a manmade.a mannered.a mannose.a manoeuvrable.a manual.a manufactory.a many-sided.a marbled.a marginal.a marginalized.a marine.a marital.a maritime.a marketable.a maroon.a marriageable.a marshy.a martial.a marvellous.a marvelous.a masculine.a masochistic.a masonic.a massive.a masted.a masterful.a masterly.a masturbatory.a matchless.a materialistic.a maternal.a matey.a mathematical.a matriarchal.a matrilineal.a matrimonial.a matronly.a matt.a mature.a maudlin.a mauve.a mawkish.a max.a maxillary.a maxillofacial.a maximal.a maximum.a mayoral.a meager.a meagre.a mealy.a mean.a meaningful.a measly.a measurable.a measured.a meatless.a meaty.a mechanical.a mechanistic.a meddlesome.a mediaeval.a mediæval.a medial.a median.a medical.a medicinal.a medieaval.a medieval.a mediocre.a meditative.a medium.a medullary.a meek.a megalithic.a meiotic.a melancholic.a melancholy.a melanistic.a mellifluous.a mellow.a melodic.a melodious.a melodramatic.a memorable.a mendacious.a menial.a meningococcal.a menstrual.a mental.a mentholated.a mercantile.a mercenary.a merciful.a merciless.a mercurial.a mercurian.a mere.a meretricious.a meritorious.a meromorphic.a merry.a mesenchymal.a mesic.a meso.a mesolimbic.a messianic.a messy.a meta.a metabolic.a metacarpal.a metacognitive.a metallic.a metallurgical.a metamorphic.a metaphoric.a metaphorical.a metaphysical.a meteoric.a meteorogical.a meteorological.a methodical.a methodological.a methylated.a meticulous.a metric.a metrical.a metropolitan.a micro.a microbial.a microchimeric.a microfluidic.a microscopic.a mid.a middlemost.a middleweight.a middling.a midfield.a midseason.a midsize.a midterm.a miffed.a mighty.a migratory.a mild.a militant.a militaristic.a military.a milky.a millennial.a millinery.a millionth.a mimetic.a min.a mindless.a mineralogical.a mini.a minimal.a minimalist.a minimum.a ministerial.a minor.a minuscule.a minute.a mirthless.a misanthropic.a misbegotten.a miscellaneous.a mischievous.a miserable.a miserly.a misguided.a misleading.a misogynistic.a misshapen.a missional.a mistrustful.a misty.a mit.a mitochondrial.a mitotic.a mnemonic.a moated.a mobile.a mock.a mod.a modal.a moderate.a moderationist.a modern.a modernistic.a modest.a modular.a modulatory.a modulo.a moist.a moldy.a molecular.a molten.a momentary.a momentous.a monarchic.a monarchical.a monastic.a monaural.a monetary.a moneyed.a monkish.a mono.a monoblock.a monochrome.a monoclinic.a monoclonal.a monocoque.a monocotyledonous.a monoecious.a monogamous.a monoidal.a monolingual.a monolithic.a monomeric.a monophyletic.a monopolistic.a monosyllabic.a monotheistic.a monotonous.a monotypic.a monstrous.a montaged.a monthly.a monumental.a moody.a moonless.a moonlit.a moonstruck.a moot.a mooted.a moral.a moralistic.a morbid.a moribund.a moronic.a morose.a morphemic.a morphogenetic.a morphological.a mortal.a mosaic.a mossy.a motherly.a mothproof.a motionless.a motivated.a motivational.a motivic.a motley.a motorized.a mouldy.a mountainous.a mournful.a mousy.a movable.a moving.a mucho.a mucosal.a mucous.a muddy.a muggy.a mullioned.a multi.a multicast.a multicolor.a multi-colored.a multicolored.a multicolour.a multi-coloured.a multicoloured.a multiethnic.a multi-faceted.a multifaceted.a multifarious.a multilateral.a multi-layered.a multilayered.a multilingual.a multimedia.a multimode.a multinational.a multiphase.a multiplayer.a multiple.a multiplex.a multiplexed.a multiplicative.a multipoint.a multiprotocol.a multipurpose.a multisport.a multi-themed.a multithemed.a multi-threaded.a multithreaded.a multi-tiered.a multitiered.a multitrack.a multitudinous.a multiwell.a mundane.a muni.a municipal.a munificent.a murderous.a murky.a muscarinic.a muscular.a mushy.a musical.a musicological.a musky.a Muslim.a musty.a mutagenic.a mutant.a mute.a mutinous.a mutual.a muy.a muzzy.a mycorrhizal.a myelogenous.a myeloid.a myocardial.a myopic.a mystic.a mystical.a mythic.a mythical.a mythological.a nagging.a naive.a naïve.a naked.a nameless.a narcotic.a narrow.a narrow-waisted.a nasal.a nascent.a natal.a national.a nationalist.a nationalistic.a nationwide.a native.a natty.a naturalistic.a naturopathic.a naughty.a nauseous.a nautical.a naval.a navicular.a navigable.a navigational.a near.a nearshore.a neat.a nebular.a nebulous.a necrotic.a née.a needless.a needy.a nefarious.a negative.a negligent.a negligible.a negotiable.a neighboring.a neighbourly.a neocritical.a neogenic.a neolithic.a nerdy.a nervous.a nervy.a net.a nether.a nethermost.a neural.a neurodegenerative.a neurofibrillary.a neurogenic.a neuroleptic.a neurologic.a neurological.a neuronal.a neurotic.a neuter.a neutral.a new.a newfangled.a newfound.a newsworthy.a nicht.a nifty.a niggardly.a niggling.a nightlong.a nightly.a nightmarish.a nighttime.a nihilistic.a nimble.a nippy.a niso.a nitric.a nitro.a nitrogenous.a nitrous.a noble.a nocturnal.a nodal.a noir.a noisy.a nom.a nomadic.a nomen.a nominal.a nominative.a nonagenarian.a nonchalant.a noncommissioned.a noncommittal.a nondescript.a nondeterministic.a nondiscretionary.a nonfat.a nonflammable.a nonhomologous.a nonlinear.a nonprofit.a nonrecurring.a nonreligious.a nonresident.a nonsensical.a nonstick.a nonstop.a nontarget.a nontraditional.a nontrinitarian.a nontrivial.a nonunion.a nonvoting.a nonzero.a nordic.a normative.a normed.a northbound.a northeasterly.a northeastwardly.a northerly.a northwardly.a northwesterly.a northwestwardly.a nos.a nosey.a nostalgic.a nostre.a nosy.a noteworthy.a noticeable.a notifiable.a notional.a notorious.a nouveau.a nova.a novel.a noxious.a nuanced.a nubile.a nuchal.a nuclear.a nucleic.a nucleophilic.a nude.a null.a numb.a numberless.a numerate.a numeric.a numerical.a numerous.a numismatic.a nuptial.a nutrient.a nutritional.a nutritious.a nutritive.a nutty.a oafish.a obdurate.a obedient.a obese.a objectionable.a objective.a obligatory.a oblique.a oblivious.a oblong.a obscene.a obscure.a obsequious.a observable.a observant.a observational.a obsessed.a obsessive.a obsolescent.a obsolete.a obstetric.a obstinate.a obstreperous.a obstructive.a obtainable.a obtrusive.a obtuse.a occasional.a occipital.a occlusal.a occupational.a oceanic.a octagonal.a octahedral.a octogenarian.a ocular.a odious.a odorless.a odourless.a offal.a offbeat.a offensive.a offhand.a officio.a officious.a offline.a offshore.a offside.a offsite.a offstage.a oiled.a oily.a olden.a old-fashioned.a oldschool.a old-time.a olfactory.a olive.a olivine.a olympic.a ominous.a omnipotent.a omnipresent.a omniscient.a omnivorous.a onboard.a oncoming.a onerous.a one-sided.a ongoing.a onomatopoeic.a onscreen.a onshore.a onsite.a onstage.a ontological.a oolong.a opalescent.a opaque.a open.a open-mouthed.a operable.a operatic.a operational.a operative.a ophthalmic.a opinionated.a opioid.a opisthobranch.a opportune.a opportunistic.a opposite.a oppressive.a optic.a optical.a optimal.a optional.a opulent.a oracular.a oral.a orange.a oratorical.a orbital.a orbium.a orchestral.a orderly.a ordinal.a ordinary.a organic.a organizational.a organized.a organometallic.a orgiastic.a orient.a oriental.a ornamental.a ornate.a ornery.a ornithischian.a ornithological.a orogenic.a ortho.a orthodontic.a orthodox.a orthogonal.a orthographic.a orthologous.a orthopaedic.a orthopedic.a orthorhombic.a osmotic.a osseous.a ostensible.a ostentatious.a osteopathic.a otherworldly.a out.a outback.a outbound.a outcast.a outcropped.a outdated.a outdoor.a outer.a outermost.a outgoing.a outlandish.a outlying.a outmoded.a out-of-the-way.a outsize.a outsourced.a outspoken.a outspread.a outstretched.a oval.a ovarian.a ovate.a overbearing.a overblown.a overbroad.a overcast.a overcautious.a overcollected.a overconfident.a overdriven.a overdue.a overexcited.a overextended.a overfull.a overgrown.a overhand.a overhead.a overladen.a overland.a overnight.a overpopulated.a overpowering.a overpriced.a overriding.a overripe.a overseas.a oversensitive.a oversexed.a oversize.a oversized.a oversubscribed.a overt.a overused.a overvalued.a overweight.a overworked.a overwrought.a oviparous.a ovuliferous.a owlish.a oxidative.a pacific.a pacifistic.a paediatric.a pagan.a painless.a painstaking.a pairwise.a palaeolithic.a palatable.a palatal.a palatial.a pale.a paleohispanic.a paleolithic.a paleontological.a pallid.a palpable.a palpebral.a paltry.a palynological.a pancreatic.a pandemic.a paneled.a panicky.a panoramic.a pantheistic.a papal.a paperbacked.a paperless.a para.a parabolic.a paracrine.a parallel.a paralytic.a paramilitary.a paramount.a paranoid.a paranormal.a paraphyletic.a paraplegic.a parasitic.a paratransit.a pardonable.a parental.a parenteral.a parenthetical.a parian.a parietal.a parkland.a parliamentary.a parlous.a parochial.a parodic.a parotoid.a parsimonious.a parte.a partial.a participative.a participatory.a participial.a particular.a partisan.a part-time.a paschal.a passable.a passe.a passerine.a passionate.a passive.a pastoral.a pastorate.a pasty.a patchy.a patent.a paternal.a paternalistic.a pathogenic.a pathologic.a pathological.a patient.a patriarchal.a patrician.a patrilineal.a patrimonial.a patriotic.a patristic.a patronizing.a paunchy.a payable.a peaceable.a peaceful.a pearlescent.a pearly.a peaty.a pebbly.a peckish.a pectoral.a peculiar.a pecuniary.a pedagogic.a pedagogical.a pedantic.a pedestrain.a pedestrian.a pediatric.a peerless.a peeved.a peevish.a pejorative.a pelagic.a pelvic.a penal.a pending.a pendulous.a penetrable.a peninsular.a penitent.a penitential.a penniless.a pensive.a pentagonal.a pentatonic.a penultimate.a peppery.a perceivable.a perceptible.a perceptive.a perceptual.a percussive.a peremptory.a perennial.a perfect.a perfectible.a perfidious.a perfunctory.a perilous.a perineal.a periodic.a periodical.a periodontal.a peripatetic.a peripheral.a periplasmic.a perishable.a peristaltic.a peritoneal.a perky.a permanent.a permeable.a permissible.a permissive.a pernicious.a pernickety.a perpendicular.a perpetual.a perplexed.a persistent.a personable.a personal.a perspicacious.a perspicuous.a persuasive.a pert.a pertinent.a pervasive.a perverse.a pesky.a petit.a petite.a petitionary.a petty.a petulant.a phallic.a pharmaceutical.a pharmacologic.a pharmacological.a phenolic.a phenomenal.a phenomenological.a phenotypic.a philanthropic.a philatelic.a philharmonic.a philhellenic.a philological.a philosophic.a philosophical.a phlegmatic.a phonemic.a phonetic.a phoney.a phonological.a phony.a phosphorescent.a phosphoric.a photoelectric.a photogenic.a photographic.a photonic.a phrasal.a phylogenetic.a physical.a physiological.a pianissimo.a pianistic.a piano.a picaresque.a picky.a picolinate.a pictorial.a picturesque.a piebald.a piecemeal.a pied.a piercing.a piezoelectric.a pigmented.a pillared.a pilonidal.a pimply.a pineal.a pink.a pinkish.a pious.a piping.a piquant.a pissed.a piteous.a pithy.a pitiable.a pitiful.a pitiless.a pituh.a pituitary.a pivotal.a pixelated.a pizzicato.a placeless.a placental.a placid.a plainchant.a plain-spoken.a plaintext.a plaintive.a planar.a planetary.a planktonic.a plantar.a plastic.a plastinate.a platitudinous.a platonic.a playable.a playful.a pleasing.a pleasurable.a plebeian.a plenary.a plentiful.a pliable.a pliant.a plucky.a plump.a plural.a pluralistic.a plus.a plush.a plutocratic.a plutonic.a pneumatic.a pockmarked.a poetic.a poignant.a pointwise.a pointy.a poison.a poisonous.a pokey.a poky.a polar.a polemical.a Polish.a polished.a politic.a political.a polyatomic.a polygamous.a polygonal.a polyhedral.a polymeric.a polymorphic.a polynomial.a polyphonic.a polysyllabic.a polytene.a polytheistic.a polyunsaturate.a polyunsaturated.a polyvinyl.a pompous.a ponderosa.a ponderous.a pontifical.a poofy.a poolside.a poor.a pop.a popish.a popular.a populous.a porcine.a pornographic.a porous.a porphyritic.a portable.a portentous.a portly.a Portugese.a posh.a positional.a positive.a possessive.a postal.a postcoital.a postdoctoral.a posterior.a postgraduate.a posthumous.a postmodern.a postmodernist.a postpartum.a postseason.a posttraumatic.a postural.a postwar.a potable.a potbellied.a potent.a potential.a potted.a potty.a poverty-stricken.a powdery.a powerful.a powerless.a practicable.a practised.a praecox.a praetorian.a pragmatic.a praiseworthy.a prayerful.a precarious.a precautionary.a précédé.a precious.a precipitate.a precipitous.a precise.a precocious.a preconditioned.a predatory.a predicative.a predictable.a predictive.a predominant.a prefatory.a prefectural.a preferential.a preformed.a pregnant.a prehensile.a prehistoric.a prejudicial.a preliminary.a premarital.a premarket.a premier.a premolar.a premotor.a prenatal.a prepacked.a preparatory.a preponderant.a prepositional.a prepossessing.a preposterous.a preproduction.a preschool.a prescient.a prescriptive.a preseason.a preselection.a present.a presentable.a presentational.a presidential.a pressing.a prestigious.a prestigous.a prestissimo.a presto.a prestressed.a presumptive.a presumptuous.a pretax.a preteen.a pretentious.a pretty.a prevalent.a preventable.a preventive.a prewar.a priceless.a pricey.a prickly.a prideful.a priggish.a prim.a primaeval.a primal.a primary.a prime.a primeval.a primitive.a primordial.a princely.a principal.a principled.a printable.a prior.a prismatic.a pristine.a private.a privileged.a privy.a probabilistic.a probationary.a probit.a problematic.a procedural.a processional.a prodigal.a prodigious.a productive.a profane.a professional.a professorial.a proficient.a profitable.a profligate.a profound.a profuse.a prognathic.a programmable.a programmatic.a progressive.a prohibitive.a projective.a prokaryotic.a proleptic.a proletarian.a prolific.a proline.a prolix.a prominent.a promiscuous.a promising.a promissory.a promotional.a prompt.a prone.a pronounceable.a proper.a propertied.a prophetic.a prophylactic.a propitious.a proportional.a proportionate.a proprietary.a proprioceptive.a propulsive.a prosaic.a prosodic.a prospective.a prosperous.a prosthetic.a prostrate.a prosy.a protean.a protective.a proteolytic.a Protestant.a prototypical.a protozoal.a protracted.a provable.a proverbial.a provident.a providential.a provincial.a provisional.a provocative.a proximal.a proximate.a prudish.a prurient.a pseudo.a pseudonymous.a psoriatic.a psychedelic.a psychiatric.a psychic.a psychical.a psychoactive.a psychoanalytic.a psychoanalytical.a psychogenic.a psychological.a psychopathic.a psychosomatic.a psychotropic.a pubic.a public.a public-spirited.a puckish.a pudgy.a puerile.a puffy.a pugilistic.a pugnacious.a puissant.a pulmonary.a pulmonate.a pulmonic.a punchy.a punctual.a pungent.a punishable.a punitive.a puny.a pure.a purebred.a puritan.a puritanical.a purple.a purplish.a purposeful.a purposeless.a purposive.a pursuant.a purulent.a pusillanimous.a putative.a putrid.a pyramidal.a pyrotechnic.a qabalistic.a quadratic.a quadriplegic.a quadrophonic.a quadrupedal.a quaint.a qualified.a qualitative.a quantitative.a quantum.a quarrelsome.a quarterly.a quartic.a quaternary.a queasy.a Québécois.a queer.a querulous.a quick.a quiescent.a quiet.a quintessential.a quirky.a quixotic.a quizzical.a quotable.a quotidian.a rabbinic.a Rabbinic.a rabbinical.a rabid.a racemic.a racial.a racist.a rackmount.a racy.a radial.a radiant.a radiative.a radical.a radicalized.a radioactive.a radiocarpal.a radiological.a raffish.a ragged.a rainy.a rakish.a rambling.a rambunctious.a rampant.a ramshackle.a rancid.a rancorous.a random.a randy.a rank.a ranking.a rapacious.a rapid.a rapt.a rapturous.a raring.a rash.a raspy.a raster.a ratable.a rateable.a rational.a rationalistic.a raucous.a raunchy.a ravenous.a raving.a raw.a rawhide.a razorbacked.a readable.a ready-made.a real.a realistic.a realtime.a rearmost.a rearward.a rebadged.a rebellious.a reborn.a recalcitrant.a receivable.a recent.a receptive.a recessive.a rechargeable.a recherche.a reciprocal.a recitativo.a reckless.a reclusive.a recognizable.a reconcilable.a recondite.a recoverable.a recreational.a rectagular.a rectal.a rectangular.a rectilinear.a recumbent.a recurrent.a recusant.a red.a reddish.a redeemable.a redemptive.a red-haired.a redhaired.a redolent.a redoubtable.a redshirted.a reducible.a redundant.a reedy.a referential.a reflective.a reflex.a reflexed.a reflexive.a reformationist.a reformatory.a reformist.a refractive.a refractory.a refreshing.a refutable.a regal.a regenerative.a regimental.a regional.a regnal.a regressive.a regristral.a regular.a regulatory.a reinvigorated.a relational.a relative.a relativistic.a relaxant.a relaxed.a relentless.a reliable.a reliant.a religious.a remastered.a rematched.a remedial.a remiss.a remorseful.a remorseless.a remote.a removable.a remunerative.a renal.a renascent.a renewable.a renowned.a rentable.a reparable.a reparative.a repayable.a repellent.a repentant.a repetitious.a repetitive.a replaceable.a replete.a replicant.a reprehensible.a representational.a representative.a repressed.a repressive.a reproachful.a reproducible.a reproductive.a reptilian.a republican.a repugnant.a repulsive.a reputable.a requisite.a resentful.a reserved.a resident.a residential.a residual.a residuary.a resigned.a resilient.a resinous.a resistant.a resistive.a resolute.a resolvable.a resolved.a resonant.a resourceful.a respectable.a respectful.a respective.a respiratory.a resplendent.a responsive.a restful.a restive.a restless.a restorative.a restrained.a restrictive.a resultant.a resurgent.a retaliatory.a retardant.a retentive.a reticent.a reticulate.a reticulum.a retinal.a retractable.a retro.a retroactive.a retrograde.a retrogressive.a retrospective.a returnable.a reusable.a reverend.a reverent.a reverential.a reversible.a revolting.a revolutionary.a rheological.a rhetorical.a rheumatic.a rheumatoid.a rhizomatous.a rhombic.a rhombohedral.a rhythmic.a rhythmical.a ribald.a ribosomal.a rich.a rickety.a riderless.a righteous.a rightful.a right-handed.a righthanded.a rigid.a rigorous.a ringworm.a riotous.a riparian.a ripe.a ripened.a risible.a risque.a risqué.a ritual.a ritualistic.a ritzy.a riverfront.a riverine.a roadless.a roan.a roast.a robotic.a robust.a rocky.a rococo.a roguish.a rollicking.a Roman.a romanesque.a Romanesque.a romanized.a romantic.a roofless.a roomy.a rootless.a rootsy.a rostral.a rosy.a rotary.a rotational.a rotten.a rotund.a rough.a round.a routine.a rowdy.a royal.a rubbery.a ruby.a ruddy.a rude.a rudimentary.a rugged.a ruinous.a rummy.a rumored.a runaway.a rundown.a runny.a runtime.a rural.a Russian.a rustic.a rusty.a ruthless.a sabbatarian.a sable.a saccharine.a sacral.a sacred.a sacrificial.a sacrilegious.a sacroiliac.a sacrosanct.a sadistic.a sagacious.a sage.a sagittal.a saintly.a salacious.a salaried.a salicylic.a salient.a saline.a salivary.a sallow.a saltmarsh.a salty.a salubrious.a salutary.a sanctimonious.a sandy.a sanguine.a sanitary.a sapient.a sappy.a saracenic.a sarcastic.a sardonic.a sartorial.a sassy.a satanic.a satin.a satiric.a satirical.a satisfactory.a satisfied.a satisfying.a saucy.a savage.a savoury.a savvy.a scalar.a scaly.a scandalous.a scant.a scanty.a scapular.a scarce.a scarlet.a scathing.a scatterbrained.a scenic.a scentless.a sceptical.a sceptred.a schematic.a schismatic.a schizoid.a schizophrenic.a schmaltzy.a scholarly.a scholastic.a schoolyear.a sciatic.a scientific.a sciurognathous.a scoreless.a Scottish.a scrappy.a scratchy.a scrawny.a screwball.a screwy.a scribal.a scriptural.a scrubby.a scruffy.a scrumptious.a scrupulous.a sculptural.a scummy.a scurrilous.a seaborne.a seafaring.a seagoing.a seamless.a seamy.a sear.a searchable.a seasick.a seasonable.a seasonal.a seater.a seaward.a seaworthy.a secant.a secluded.a secondary.a secondhand.a second-rate.a secret.a secretarial.a secretive.a secretory.a sectarian.a sectional.a secular.a sedate.a sedentary.a sedimentary.a seditious.a seductive.a seedless.a seedy.a seemly.a seigneurial.a seismic.a select.a selective.a self-conscious.a self-contained.a self-imposed.a selfless.a self-sufficient.a semantic.a semi.a semicircular.a semiconducting.a semiconscious.a semidetached.a seminal.a semiotic.a senatorial.a Senegalese.a senile.a senior.a sensational.a sensitive.a sensory.a sensual.a sensuous.a sentient.a sentimental.a separable.a separate.a septic.a sepulchral.a sequential.a serendipitous.a serene.a serial.a serious.a serological.a serotonergic.a serpentine.a serrated.a serviceable.a servile.a sesquipedalian.a severe.a sexagenarian.a sexagesimal.a sexist.a sexual.a sexy.a shabby.a shadowy.a shady.a shaggy.a shaky.a shallow.a shamanistic.a shamefaced.a shameless.a shapeless.a shapely.a sharp.a sharp-witted.a shatterproof.a sheepish.a sheer.a shiftless.a shifty.a shiny.a shipboard.a shipshape.a shoddy.a shogunal.a shopworn.a shorthaired.a shorthanded.a short-lived.a shortlived.a showy.a shrewd.a shrewish.a shrill.a shrubby.a shy.a sickening.a sickly.a sidelong.a sightless.a sigmoid.a silent.a silicic.a silken.a silky.a silver.a silvery.a similar.a simple-minded.a simplistic.a simultaneous.a sincere.a sinewy.a sinful.a singable.a single.a singlet.a singular.a sinister.a sinless.a sinuous.a sinusoidal.a situational.a sizable.a sizeable.a ska.a skeletal.a sketchy.a skilful.a skilled.a skillful.a skimpy.a skinny.a skittish.a sky-high.a slack.a slanderous.a slapdash.a slavic.a Slavic.a slavish.a sleazy.a sleek.a sleepless.a sleepy.a sleeveless.a slender.a slick.a slight.a slim.a slimy.a slippery.a slipshod.a slithery.a sloppy.a slothful.a slovenly.a slow.a sluggish.a slushy.a sluttish.a sly.a small.a smalltime.a smarmy.a smelly.a smokeless.a smoky.a smooth.a smug.a smutty.a snappy.a snarky.a snazzy.a sneaking.a sneaky.a snide.a snobbish.a snobby.a snooty.a snotty.a snowbound.a snowcapped.a snowy.a soapy.a sober.a so-called.a sociable.a social.a socialist.a socialistic.a societal.a socioeconomic.a sociological.a sociopathic.a sodden.a soft.a softcore.a soggy.a solar.a solemn.a solicitous.a solid.a solitary.a soluble.a solvable.a solvent.a somatic.a somber.a sombre.a somnolent.a sonic.a sonorant.a sonorous.a sooth.a sooty.a sophisticated.a soporific.a sopping.a soppy.a sorcerous.a sordid.a sore.a sorrel.a sorrowful.a soulful.a soulless.a sound.a soundproof.a sour.a sous.a soused.a southbound.a southeasterly.a southeastwardly.a southerly.a southside.a southwardly.a southwesterly.a southwestwardly.a sovereign.a spacial.a spacious.a spanish.a Spanish.a spare.a sparse.a spasmodic.a spastic.a spatial.a specfic.a special.a specifiable.a specific.a specious.a speckled.a spectacled.a spectacular.a spectral.a spectroscopic.a specular.a speculative.a speechless.a speedy.a spellbound.a spherical.a spicy.a spiky.a spinal.a spindly.a spineless.a spinocerebellar.a spinous.a spiny.a spiral.a spirited.a spiritual.a spiteful.a splendid.a splintered.a spongy.a spontaneous.a spooky.a sporadic.a sporting.a sportsmanlike.a spotless.a spotted.a spotty.a spousal.a sprawling.a sprightly.a springlike.a springy.a spruce.a spry.a spunky.a spurious.a squalid.a squamous.a square.a squashy.a squat.a squeaky.a squeamish.a squiggly.a stable.a staccato.a stagnant.a stagy.a staid.a stainless.a stale.a stalinist.a stalwart.a standalone.a standardbred.a standoffish.a starchy.a stark.a starless.a starlit.a starry.a stateless.a stately.a statesmanlike.a statewide.a static.a stationary.a statist.a statistical.a statuary.a statuesque.a statutory.a staunch.a steadfast.a steady.a stealthy.a steamy.a steely.a steep.a stellar.a stellate.a stentorian.a stepwise.a stereogenic.a stereophonic.a stereoscopic.a stereotypical.a steric.a sterile.a sterling.a stern.a steroidal.a sticky.a stiff.a still.a stillborn.a stilted.a stimulating.a stingy.a stipendiary.a stochastic.a stockinged.a stocky.a stodgy.a stolid.a stony.a storied.a stormproof.a stormy.a stout.a stouthearted.a straight.a straightforward.a strained.a strait.a strapping.a strategic.a strategical.a strenuous.a streptococcal.a stressful.a stretchered.a strident.a stringent.a stringy.a striped.a stroboscopic.a strong.a structural.a stubbly.a stubborn.a stubby.a stuck-up.a studious.a stuffy.a stupendous.a stupifying.a sturdy.a stylish.a stylistic.a suave.a subarachnoid.a subatomic.a subclavian.a subconscious.a subcutaneous.a subdermal.a subglacial.a subhuman.a subject.a subjective.a subjunctive.a sublimate.a sublime.a subliminal.a submandibular.a submarine.a submerged.a submissive.a subnational.a subnormal.a subordinate.a subsea.a subsequent.a subservient.a subsidiary.a subsonic.a substandard.a substantial.a substantive.a subterranean.a subtle.a subtropical.a suburban.a subversive.a successful.a successional.a successive.a succinct.a succulent.a Sudanese.a sudden.a sugary.a suggestive.a suicidal.a suitable.a sulfuric.a sulfurous.a sulky.a sullen.a sulphuric.a sulphurous.a sultry.a summa.a summary.a summery.a sumptuous.a sunbaked.a sunburned.a sunburnt.a sundry.a sunken.a sunless.a sunlit.a sunny.a super.a superabundant.a superb.a supercharged.a supercilious.a supercritical.a superficial.a superfluous.a superhuman.a superior.a superlative.a superluminal.a supernatural.a supernormal.a superscalar.a supersonic.a superstitious.a supervisory.a supine.a supple.a supplementary.a supportive.a suppressant.a suppressive.a supraventricular.a supreme.a sur.a surgical.a Surinamese.a surjective.a surly.a surmountable.a surnamed.a surpassing.a surreal.a surrealistic.a surreptitious.a susceptible.a suspect.a suspenseful.a suspensory.a sustainable.a svelte.a swampy.a swanky.a swarthy.a swashbuckling.a sweaty.a Swedish.a sweeping.a sweet.a swell.a swift.a Swiss.a swollen.a sycophantic.a syllabic.a syllogistic.a symbiotic.a symbolic.a symmetric.a symmetrical.a sympathetic.a symphonic.a symplectic.a symptomatic.a synaptic.a synchronous.a syncretic.a synergistic.a synonymous.a synoptic.a synovial.a syntactic.a synthetic.a syphilitic.a syrupy.a systematic.a systemic.a systolic.a tabbed.a tabby.a taboo.a tabular.a tacit.a taciturn.a tacky.a tactical.a tactile.a tactual.a tailor-made.a tailwheel.a Taiwanese.a takeaway.a talented.a talkative.a taloned.a tame.a tan.a tangential.a tangible.a tangy.a tannic.a tantamount.a tantric.a tardy.a tart.a tartaric.a tasselled.a tasteful.a tasteless.a tasty.a tattered.a tatty.a tauberian.a taut.a tautological.a tawdry.a tawny.a taxable.a taxonomic.a tearful.a technical.a techno.a technological.a tectonic.a tedious.a teenage.a teenaged.a teeny.a telegraphic.a teleological.a telepathic.a telephoto.a teleporter.a telescopic.a telestial.a telling.a telluric.a temperamental.a temperate.a tempestuous.a temporal.a temporary.a temporomandibular.a temporoparietal.a tenable.a tenacious.a tendentious.a tender.a tenderhearted.a tense.a tensile.a tensor.a tentacled.a tentative.a tenuous.a tepid.a teratogenic.a terminal.a terminological.a ternary.a terrestrial.a terrific.a territorial.a terse.a tertian.a tertiary.a tessellated.a testicular.a testy.a tetchy.a tetrahedral.a textile.a textual.a textural.a textured.a Thai.a thankful.a thankless.a theatrical.a theistic.a thematic.a themed.a theocratic.a theological.a theoretical.a theosophical.a therapeutic.a thermal.a thermic.a thermochromic.a thermodynamic.a thermoelectric.a thermonuclear.a thermophilic.a thermostatic.a thick.a thin.a thirsty.a thoracic.a thorny.a thorough.a thoroughbred.a thoroughgoing.a thoughtful.a thoughtless.a threadbare.a threadlike.a threonine.a thriftless.a thrifty.a throaty.a thumping.a thunderous.a thy.a ticklish.a tidal.a tidy.a tiered.a tight.a tiltrotor.a timbered.a timeless.a timelike.a timely.a timesaving.a timid.a timorous.a tinny.a tiny.a tipsy.a tireless.a tiresome.a titanic.a titled.a titular.a tolerable.a tolerant.a tom.a tonal.a toothed.a toothless.a top.a topical.a topless.a topmost.a topnotch.a topographic.a topographical.a topological.a topping.a toroidal.a torrential.a torrid.a tortuous.a torturous.a total.a totalitarian.a touched.a touching.a touchy.a touristic.a touristical.a touristy.a toxic.a traceable.a tractable.a tractive.a trademarked.a tragicomic.a traitorous.a tranquil.a transalpine.a transatlantic.a transcendent.a transcendental.a transcontinental.a transcriptional.a transferable.a transformational.a transgendered.a transgenic.a transient.a transistorized.a transitional.a transitive.a transitory.a translatable.a translational.a translucent.a transomed.a transparent.a transverse.a trapezoidal.a trashed.a trashy.a traumatic.a treacherous.a treacly.a treble.a tremendous.a trenchant.a trendy.a triangular.a tribal.a tricky.a triennial.a trifling.a trigonal.a trilateral.a trilingual.a trim.a tri-masted.a trimasted.a trinitarian.a tripartite.a triple.a tripping.a trite.a triumphal.a triumphant.a trivalent.a trochaic.a trophic.a trophoblastic.a tropical.a troublesome.a truculent.a trustful.a trustworthy.a trusty.a truthful.a trying.a tsarist.a tubby.a tubercular.a tuberous.a tubular.a tumultuous.a tuneful.a turbo.a turbocharged.a turbulent.a turgid.a Turkish.a Tuscan.a twee.a twin-lobed.a twinlobed.a twin-masted.a twinmasted.a twisty.a typewritten.a typographic.a typological.a tyrannical.a ubiquitous.a ugly.a ulcerous.a ulnar.a ulterior.a ultimate.a ultra.a ultraconservative.a ultrafine.a ultramarine.a ultramontane.a ultrashort.a ultrasonic.a ultraviolet.a umber.a umbilical.a umpteenth.a unabashed.a unabated.a unabridged.a unaccented.a unaccommodating.a unaccompanied.a unaccountable.a unaccounted.a unaccredited.a unaccustomed.a unacknowledged.a unacquainted.a unaddressed.a unadorned.a unadulterated.a unaffected.a unaffiliated.a unaided.a unaired.a unaltered.a unambiguous.a unanimous.a unannounced.a unanswerable.a unanswered.a unanticipated.a unappealing.a unappetizing.a unappreciated.a unappreciative.a unapproachable.a unarmed.a unarmored.a unarmoured.a unarticulated.a unary.a unasked.a unassailable.a unassigned.a unassisted.a unassuming.a unattached.a unattainable.a unattended.a unattractive.a unauthorised.a unauthorized.a unavailable.a unavoidable.a unbalanced.a unbearable.a unbeatable.a unbeaten.a unbecoming.a unbeknown.a unbeknownst.a unbending.a unbiased.a unborn.a unbounded.a unbowed.a unbreakable.a unbridled.a unbroken.a unburied.a unburnt.a unbuttoned.a uncanny.a unceasing.a uncensored.a unceremonious.a unchallenged.a unchanged.a unchanging.a uncharacteristic.a uncharged.a uncharitable.a uncharted.a unchecked.a unchristian.a uncivilized.a unclaimed.a unclassed.a unclassified.a unclean.a uncleaned.a unclothed.a unclouded.a uncluttered.a uncomfortable.a uncommitted.a uncommon.a uncommunicative.a uncompleted.a uncompromising.a unconcealed.a unconcerned.a unconditional.a unconfirmed.a unconjugated.a unconnected.a unconquered.a unconscionable.a unconscious.a unconstitutional.a unconstrained.a unconsummated.a uncontaminated.a uncontested.a uncontrollable.a uncontrolled.a uncontroversial.a unconventional.a unconverted.a unconvincing.a uncooked.a uncoordinated.a uncorrected.a uncorroborated.a uncounted.a uncountered.a uncouth.a uncowled.a uncredited.a uncritical.a uncrossed.a unctuous.a uncultivated.a uncut.a undamaged.a undated.a undaunted.a undecided.a undeciphered.a undeclared.a undecorated.a undefeated.a undefended.a undefined.a undemocratic.a underage.a underarm.a undercover.a underdeveloped.a underdone.a underemployed.a underfed.a underfunded.a underhanded.a undermanned.a undernourished.a underpaid.a underpowered.a underpriveleged.a underprivileged.a underproduced.a underrepresented.a undersampled.a undersea.a underserved.a undersize.a undersized.a understaffed.a understanding.a undervalued.a underwater.a underweight.a undescribed.a undeserved.a undeserving.a undesirable.a undesired.a undesputable.a undetected.a undetermined.a undeterred.a undeveloped.a undiagnosed.a undifferentiated.a undigested.a undignified.a undiluted.a undiminished.a undimmed.a undiplomatic.a undisciplined.a undisclosed.a undiscovered.a undiscriminating.a undisplaced.a undisputed.a undistinguished.a undistorted.a undisturbed.a undivided.a undocumented.a undoubted.a undrafted.a undrained.a undrinkable.a undue.a undying.a unearned.a unearthly.a uneasy.a uneaten.a uneconomic.a uneconomical.a unedifying.a unedited.a uneducated.a unelected.a unemotional.a unemployed.a unencrypted.a unencumbered.a unending.a unenthusiastic.a unentrenched.a unenviable.a unequal.a unequalled.a unequipped.a unequivocal.a unerring.a unescorted.a uneven.a uneventful.a unexceptionable.a unexceptional.a unexercised.a unexpected.a unexpired.a unexplained.a unexploded.a unexplored.a unexpressed.a unexpurgated.a unfailing.a unfaithful.a unfamiliar.a unfashionable.a unfathomable.a unfathomed.a unfavorable.a unfavourable.a unfazed.a unfed.a unfeeling.a unfertilized.a unfiltered.a unfinished.a unfit.a unflappable.a unflavored.a unflinching.a unflooded.a unforeseeable.a unforeseen.a unforgettable.a unforgivable.a unforgiving.a unformed.a unfounded.a unfranked.a unfree.a unfretted.a unfriendly.a unfulfilled.a unfurnished.a ungainly.a unglazed.a ungodly.a ungracious.a ungrammatical.a ungrateful.a ungrudging.a unguarded.a unguided.a unhampered.a unhandled.a unharmed.a unhealthy.a unheard.a unheated.a unheeded.a unhelpful.a unhesitating.a unhindered.a unhurried.a unhurt.a unhygienic.a unicameral.a unidentifiable.a unidentified.a uniform.a uniformed.a unilateral.a unimaginable.a unimaginative.a unimpaired.a unimpeachable.a unimpeded.a unimportant.a unimpressed.a unimpressive.a unimproved.a unincorporated.a uninformative.a uninformed.a uninhabitable.a uninhabited.a uninhabitted.a uninhibited.a uninitiated.a uninjured.a uninspired.a uninspiring.a uninstalled.a uninsured.a unintelligent.a unintelligible.a unintended.a unintentional.a uninterested.a uninteresting.a uninterrupted.a uninvited.a uninviting.a unique.a unisex.a unitary.a univalent.a universal.a unjustifiable.a unjustified.a unkempt.a unkept.a unknowable.a unlabelled.a unladylike.a unlatched.a unlawful.a unleaded.a unleavened.a unlicensed.a unlimited.a unlined.a unlisted.a unlit.a unlockable.a unloved.a unmade.a unmaintained.a unmanageable.a unmanned.a unmarked.a unmarried.a unmatched.a unmemorable.a unmentionable.a unmentioned.a unmerited.a unmistakable.a unmitigated.a unmixed.a unmodified.a unmolested.a unmotivated.a unmoved.a unmusical.a unnamed.a unnatural.a unneeded.a unnoticeable.a unnoticed.a unnumbered.a unobjectionable.a unobservant.a unobserved.a unobstructed.a unobtainable.a unobtrusive.a unoccupied.a unofficial.a unopened.a unopposed.a unoriginal.a unorthodox.a unpaid.a unpainted.a unpaired.a unpalatable.a unparalleled.a unpardonable.a unparished.a unpasteurized.a unpatriotic.a unpaved.a unpegged.a unperformed.a unpersuaded.a unperturbed.a unplaced.a unplanned.a unplayable.a unpolished.a unpolluted.a unpopular.a unpopulated.a unpowered.a unprecedented.a unpredictable.a unpredicted.a unprejudiced.a unprepared.a unpressurized.a unpretentious.a unprincipled.a unprintable.a unproduced.a unproductive.a unprofessional.a unprofitable.a unpromising.a unprompted.a unpronounceable.a unprotected.a unproved.a unproven.a unprovoked.a unpublished.a unpunished.a unqualified.a unquestionable.a unquestioned.a unquestioning.a unranked.a unrated.a unread.a unreadable.a unready.a unreal.a unrealised.a unrealistic.a unrealized.a unrecognised.a unrecognizable.a unrecognized.a unrecorded.a unrefined.a unregenerate.a unregistered.a unregulated.a unrelated.a unreleased.a unrelenting.a unreliable.a unrelieved.a unremarkable.a unremitting.a unrepaired.a unrepentant.a unreported.a unrepresentative.a unrequited.a unreserved.a unresolved.a unrestrained.a unrestricted.a unrevealed.a unrewarded.a unripe.a unrivaled.a unrivalled.a unruffled.a unruly.a unsafe.a unsaid.a unsalted.a unsanctioned.a unsatisfactory.a unsatisfied.a unsatisfying.a unsaturated.a unsavory.a unsavoury.a unscathed.a unscheduled.a unscientific.a unscripted.a unscrupulous.a unsealed.a unseasonable.a unseasoned.a unsecured.a unseeded.a unseemly.a unseen.a unselfconscious.a unselfish.a unset.a unshakable.a unshaved.a unshaven.a unsightly.a unsigned.a unsinkable.a unskilled.a unsmiling.a unsociable.a unsold.a unsolicited.a unsolved.a unsophisticated.a unsound.a unsparing.a unspeakable.a unspecified.a unspoiled.a unspoilt.a unspoken.a unsponsored.a unsporting.a unsportsmanlike.a unspotted.a unstable.a unstaffed.a unstandardized.a unstated.a unstatesmanlike.a unsteady.a unstoppable.a unstressed.a unstructured.a unstrung.a unstuck.a unstudied.a unsubstantiated.a unsubtle.a unsuccessful.a unsuitable.a unsuited.a unsulfated.a unsullied.a unsung.a unsupervised.a unsupported.a unsurpassed.a unsuspected.a unsuspecting.a unswayed.a unsweetened.a unswept.a unsympathetic.a unsynchronized.a untainted.a untamed.a untapped.a untenable.a untended.a untenured.a untested.a unthinkable.a unthinking.a untidy.a untimely.a untiring.a untitled.a untold.a untouchable.a untouched.a untoward.a untraditional.a untrained.a untranslatable.a untranslated.a untreated.a untricked.a untried.a untroubled.a untrustworthy.a untruthful.a untucked.a untuned.a untutored.a unused.a unutterable.a unvarnished.a unvarying.a unverified.a unversed.a unvoiced.a unwalled.a unwanted.a unwarranted.a unwary.a unwashed.a unwavering.a unwed.a unwelcome.a unwell.a unwieldy.a unwilling.a unwitnessed.a unwitting.a unworkable.a unworn.a unworried.a unwounded.a unwritten.a unyielding.a upbeat.a upcoming.a upcountry.a upfront.a uphill.a upmarket.a upmost.a upper.a uppermost.a uppity.a upright.a upriver.a uproarious.a upscale.a upstairs.a upstanding.a upstate.a uptempo.a uptight.a upturned.a upward.a urban.a urbane.a urbanistic.a urethral.a urinary.a usable.a useless.a usurious.a uterine.a utilitarian.a utmost.a utter.a uvular.a vacant.a vacuous.a vagabond.a vagal.a vaginal.a vague.a vain.a valedictory.a valent.a valiant.a valid.a valueless.a vampiric.a vapid.a vaporous.a variable.a variant.a variational.a varicose.a varied.a variegated.a varietal.a various.a varsity.a vascular.a vast.a vaudevillian.a vegan.a vegetative.a vehement.a vehicular.a velar.a velvety.a venal.a venerable.a venereal.a vengeful.a venial.a venomous.a venous.a ventral.a verbal.a verbatim.a verbose.a verdant.a verifiable.a veritable.a vermilion.a vernacular.a vernal.a versatile.a versed.a vertebral.a vertical.a vestal.a vestigial.a veterinary.a vexatious.a viable.a vibrant.a vibratory.a vicarious.a vicinal.a vicious.a victorious.a Vietnamese.a viewless.a vigilant.a vigorous.a vile.a villainous.a vindictive.a vinegary.a vinified.a violent.a viral.a virgin.a virile.a virtual.a virtuosic.a virtuous.a virulent.a visceral.a viscous.a visible.a visionary.a visual.a vitreous.a vitriolic.a vituperative.a vivacious.a vivid.a vocal.a vocational.a vociferous.a voiceless.a void.a volatile.a volcanic.a volitional.a voltaic.a voluble.a voluminous.a voluntary.a voluptuous.a voracious.a votive.a voyeuristic.a vulgar.a vulnerable.a wacky.a waggish.a waisted.a wakeful.a waking.a wan.a wanton.a warehoused.a warlike.a warm.a wary.a washable.a waspish.a wasteful.a watchful.a waterborne.a waterlogged.a waterproof.a watertight.a watery.a wavy.a waxen.a waxy.a wayfaring.a waymarked.a wayward.a weak.a weakly.a wealthy.a weaponized.a wearable.a wearing.a wearisome.a weary.a weatherproof.a webbed.a wee.a weedy.a weeklong.a weekly.a weeny.a weightless.a weighty.a weird.a welcome.a well-meaning.a well-to-do.a Welsh.a welter.a westerly.a westwardly.a wet.a whatsoever.a whimsical.a whiny.a whiskered.a white.a whitish.a whole.a wholehearted.a wholesale.a wholesome.a whopping.a wiccan.a Wiccan.a wicked.a widepread.a widespread.a widowed.a wigged.a wild.a wilful.a willful.a wilted.a wily.a windblown.a windowed.a windowless.a windswept.a windward.a windwardly.a windy.a winged.a wingless.a winless.a winningest.a wintery.a wintry.a wirldwide.a wiry.a wishful.a wispy.a wistful.a witless.a witty.a wizard.a wizened.a wobbly.a woeful.a womanly.a wondrous.a wont.a wooded.a wooden.a woody.a woogie.a woolen.a woollen.a woolly.a wooly.a wordy.a workable.a workaday.a workaholic.a workmanlike.a worldly.a world-wide.a worldwide.a worried.a worrisome.a worrying.a worshipful.a worthless.a worthwhile.a wrathful.a wretched.a wrinkly.a wrongful.a wry.a xenophobic.a yearlong.a yearly.a yellow.a yellowish.a yogic.a yon.a yonder.a young.a youngish.a youthful.a yummy.a zany.a zealous.a zestful.a zombified.a zoological.a zoomorphic.a zygomatic.a link-grammar/data/en/words/words.adj.20000644000000000000000000001723612536650432014773 0ustar abler.a-c abrupter.a-c airier.a-c ampler.a-c angrier.a-c apter.a-c ashier.a-c atonaler.a-c badder.a-c baggier.a-c balder.a-c balmier.a-c barer.a-c baser.a-c battier.a-c bawdier.a-c beerier.a-c better-defined.a-c bigger.a-c bitterer.a-c blacker.a-c blander.a-c bleaker.a-c blearier.a-c blonder.a-c bloodier.a-c blotchier.a-c bluer.a-c blunter.a-c boggier.a-c bolder.a-c bonier.a-c bossier.a-c bouncier.a-c brainier.a-c brasher.a-c brassier.a-c braver.a-c brawnier.a-c breathier.a-c breezier.a-c briefer.a-c brighter.a-c brisker.a-c bristlier.a-c brittler.a-c broader.a-c broodier.a-c browner.a-c bubblier.a-c buckier.a-c buggier.a-c bulkier.a-c bumpier.a-c bunchier.a-c burlier.a-c bushier.a-c busier.a-c butterier.a-c calmer.a-c cannier.a-c catchier.a-c chalkier.a-c chancier.a-c chattier.a-c cheaper.a-c cheesier.a-c chillier.a-c choicer.a-c choppier.a-c chubbier.a-c clammier.a-c cleaner.a-c cleanlier.a-c clearer.a-c cleverer.a-c closer.a-c cloudier.a-c clumsier.a-c coarser.a-c cockier.a-c colder.a-c commoner.a-c cooler.a-c cornier.a-c cosier.a-c costlier.a-c courtlier.a-c coyer.a-c cozier.a-c craftier.a-c craggier.a-c crampier.a-c crazier.a-c creakier.a-c creamier.a-c crisper.a-c crosser.a-c cruder.a-c crueller.a-c crunchier.a-c crustier.a-c cuddlier.a-c curlier.a-c curter.a-c cuter.a-c daintier.a-c damneder.a-c damper.a-c dandier.a-c darker.a-c deader.a-c deadlier.a-c deafer.a-c dearer.a-c defter.a-c denser.a-c dimmer.a-c dingier.a-c dirtier.a-c dizzier.a-c dopeyer.a-c dopier.a-c dottier.a-c doughier.a-c doughtier.a-c dowdier.a-c downier.a-c drabber.a-c draftier.a-c draughtier.a-c dreamier.a-c drearier.a-c dressier.a-c drier.a-c drowsier.a-c drunker.a-c duller.a-c dumber.a-c dumpier.a-c duskier.a-c dustier.a-c earthier.a-c edgier.a-c eerier.a-c emptier.a-c faddier.a-c fainter.a-c fairer.a-c fatter.a-c fattier.a-c faultier.a-c feebler.a-c fiercer.a-c fierier.a-c filmier.a-c filthier.a-c finer.a-c firmer.a-c fishier.a-c fizzier.a-c flabbier.a-c flakier.a-c flashier.a-c fleshier.a-c flimsier.a-c floppier.a-c fluffier.a-c foamier.a-c foggier.a-c fonder.a-c fouler.a-c foxier.a-c frailer.a-c franker.a-c freer.a-c fresher.a-c friendlier.a-c frizzier.a-c frostier.a-c frothier.a-c fruitier.a-c fuller.a-c funnier.a-c furrier.a-c fussier.a-c fuzzier.a-c gassier.a-c gaucher.a-c gaudier.a-c gaunter.a-c gawkier.a-c gayer.a-c gentler.a-c giddier.a-c gladder.a-c glassier.a-c glibber.a-c gloomier.a-c glummer.a-c goofier.a-c gooier.a-c gorier.a-c goutier.a-c grainier.a-c grander.a-c grassier.a-c graver.a-c grayer.a-c greasier.a-c greater.a-c greedier.a-c greener.a-c greyer.a-c grimmer.a-c grittier.a-c groggier.a-c groovier.a-c grosser.a-c grubbier.a-c gruffer.a-c grumpier.a-c guiltier.a-c gummier.a-c gustier.a-c hairier.a-c handier.a-c handsomer.a-c happier.a-c hardier.a-c harsher.a-c hastier.a-c haughtier.a-c hazier.a-c headier.a-c healthier.a-c heartier.a-c heavier.a-c heftier.a-c higher-density.a-c higher-efficiency.a-c higher-priority.a-c higher-quality.a-c higher-resistance.a-c hillier.a-c hoarer.a-c hoarier.a-c hoarser.a-c holier.a-c hollower.a-c homelier.a-c hornier.a-c hotter.a-c huger.a-c humbler.a-c hungrier.a-c huskier.a-c icier.a-c idler.a-c impurer.a-c inepter.a-c jauntier.a-c jerkier.a-c jitterier.a-c jollier.a-c juicier.a-c jumpier.a-c keener.a-c kinder.a-c kindlier.a-c kinkier.a-c knobbier.a-c knottier.a-c lacier.a-c lamer.a-c lankier.a-c larger.a-c laxer.a-c lazier.a-c leakier.a-c leaner.a-c lengthier.a-c lewder.a-c lighter.a-c likelier.a-c limper.a-c littler.a-c livelier.a-c loamier.a-c loftier.a-c lonelier.a-c longer-lasting.a-c longerlasting.a-c loonier.a-c loopier.a-c looser.a-c lordlier.a-c louder.a-c lousier.a-c lovelier.a-c lower-density.a-c lower-dose.a-c lower-fat.a-c lower-grade.a-c lower-profile.a-c lower-risk.a-c lowlier.a-c lowner.a-c loyaller.a-c luckier.a-c lumpier.a-c lusher.a-c lustier.a-c madder.a-c manlier.a-c marshier.a-c massier.a-c maturer.a-c mealier.a-c meaner.a-c meatier.a-c meeker.a-c mellower.a-c merrier.a-c messier.a-c mightier.a-c milder.a-c milkier.a-c minuter.a-c mistier.a-c moister.a-c moldier.a-c moodier.a-c mossier.a-c mouldier.a-c mouseyer.a-c mousier.a-c muddier.a-c murkier.a-c mushier.a-c mustier.a-c muzzier.a-c narrower.a-c nastier.a-c nattier.a-c naughtier.a-c nearer.a-c neater.a-c needier.a-c newer.a-c nobler.a-c noisier.a-c noseyer.a-c nosier.a-c nuder.a-c obtuser.a-c odder.a-c oilier.a-c older.a-c paler.a-c palmier.a-c pastier.a-c patchier.a-c paunchier.a-c pearlier.a-c peatier.a-c pebblier.a-c perkier.a-c peskier.a-c pettier.a-c pickier.a-c piggier.a-c pinker.a-c pithier.a-c plainer.a-c pleasanter.a-c plumper.a-c plusher.a-c podgier.a-c pokier.a-c politer.a-c poorer.a-c posher.a-c pottier.a-c prettier.a-c pricier.a-c pricklier.a-c primmer.a-c profounder.a-c proner.a-c prouder.a-c pudgier.a-c puffier.a-c pulpier.a-c punier.a-c purer.a-c purpler.a-c quainter.a-c queasier.a-c queerer.a-c quieter.a-c racier.a-c rainier.a-c randier.a-c rarer.a-c readier.a-c realer.a-c redder.a-c reedier.a-c remoter.a-c richer.a-c riper.a-c riskier.a-c rockier.a-c rosier.a-c rougher.a-c rounder.a-c rowdier.a-c ruddier.a-c ruder.a-c runnier.a-c rustier.a-c sadder.a-c safer.a-c saintlier.a-c saltier.a-c sandier.a-c saner.a-c saucier.a-c savvier.a-c scabbier.a-c scalier.a-c scanter.a-c scantier.a-c scarcer.a-c scarier.a-c scratchier.a-c scrawnier.a-c scurfier.a-c scurvier.a-c securer.a-c sedater.a-c seedier.a-c severer.a-c sexier.a-c shabbier.a-c shadier.a-c shadowier.a-c shaggier.a-c shakier.a-c shallower.a-c shapelier.a-c sharper.a-c sheerer.a-c shiftier.a-c shinier.a-c shoddier.a-c shorter.a-c showier.a-c shrewder.a-c shriller.a-c shyer.a-c sicker.a-c sicklier.a-c silkier.a-c sillier.a-c siltier.a-c silverier.a-c simpler.a-c sincerer.a-c sketchier.a-c skinnier.a-c slacker.a-c slangier.a-c sleeker.a-c sleepier.a-c slenderer.a-c slicker.a-c slier.a-c slighter.a-c slimier.a-c slimmer.a-c slipperier.a-c sloppier.a-c slovenlier.a-c slower.a-c slyer.a-c smaller.a-c smellier.a-c smokier.a-c smoother.a-c smugger.a-c smuttier.a-c snappier.a-c snarkier.a-c snazzier.a-c sneakier.a-c snowier.a-c snugger.a-c soapier.a-c soberer.a-c softer.a-c soggier.a-c sootier.a-c sorer.a-c sorrier.a-c sounder.a-c sourer.a-c sparer.a-c sparser.a-c speedier.a-c spicier.a-c spikier.a-c spinier.a-c spongier.a-c spookier.a-c sportier.a-c spottier.a-c sprightlier.a-c sprucer.a-c squarer.a-c stabler.a-c staler.a-c stancher.a-c starchier.a-c starker.a-c statelier.a-c stauncher.a-c steadier.a-c steelier.a-c steeper.a-c sterner.a-c stickier.a-c stiffer.a-c stiller.a-c stingier.a-c stockier.a-c stonier.a-c stormier.a-c stouter.a-c straighter.a-c stranger.a-c streakier.a-c stricter.a-c stringier.a-c stronger.a-c stubbier.a-c stuffier.a-c stumpier.a-c stupider.a-c sturdier.a-c subtler.a-c sulkier.a-c sunnier.a-c surer.a-c surlier.a-c swampier.a-c sweatier.a-c sweeter.a-c swifter.a-c taller.a-c tamer.a-c tardier.a-c tarter.a-c tastier.a-c tauter.a-c tawdrier.a-c tawnier.a-c tenderer.a-c tenser.a-c terser.a-c testier.a-c thicker.a-c thinner.a-c thirstier.a-c thornier.a-c thriftier.a-c throatier.a-c tidier.a-c tighter.a-c timelier.a-c tinier.a-c toothier.a-c touchier.a-c tougher.a-c trickier.a-c truer.a-c uglier.a-c uneasier.a-c unfriendlier.a-c unhappier.a-c unhealthier.a-c unlikelier.a-c unrulier.a-c unsightlier.a-c unwieldier.a-c vaguer.a-c vainer.a-c vaster.a-c viler.a-c wanner.a-c warier.a-c warmer.a-c waterier.a-c wavier.a-c waxier.a-c weaker.a-c weaklier.a-c wealthier.a-c wearier.a-c weer.a-c weightier.a-c weirder.a-c wetter.a-c wheezier.a-c whiter.a-c wickeder.a-c wider.a-c wider-angle.a-c wilder.a-c wilier.a-c windier.a-c wintrier.a-c wirier.a-c wiser.a-c wispier.a-c wittier.a-c wobblier.a-c woodier.a-c woolier.a-c woollier.a-c woozier.a-c wordier.a-c worldlier.a-c worthier.a-c wrier.a-c yellower.a-c younger.a-c link-grammar/data/en/words/words.v.5.20000644000000000000000000000153512536650433014641 0ustar agonizes.v barges.v bottoms.v bows.v breezes.v brims.v caves.v caws.v clams.v clowns.v craps.v crawls.v creeps.v crops.v crouchs.v cruises.v darts.v dives.v dozes.v drifts.v drones.v drowses.v fades.v fizzles.v flocks.v flows.v foams.v gangs.v gears.v goofs.v gushes.v hurries.v jets.v jogs.v juts.v keels.v kneels.v knuckles.v lies.v limps.v lingers.v listens.v looms.v lunges.v lurchs.v mellows.v nestles.v opts.v peeks.v peers.v perks.v peters.v pigs.v pines.v plonks.v plops.v puffs.v riffles.v rots.v rucks.v sallies.v scoots.v screams.v scurries.v seeps.v shacks.v shies.v shines.v shops.v shrivels.v skids.v slacks.v slaves.v sleeps.v slims.v slinks.v slopes.v slumps.v soars.v soldiers.v spurts.v squats.v steps.v stoops.v streams.v strolls.v struts.v stumbles.v swoops.v teams.v tenses.v toddles.v tramps.v trickles.v trudges.v veers.v wafts.v zooms.v link-grammar/data/en/words/words.v.10.10000644000000000000000000000155712536650433014720 0ustar acknowledge.q add.q admit.q affirm.q agree.q announce.q argue.q ascertain.q assert.q assume.q believe.q brag.q calculate.q charge.q claim.q command.q comment.q complain.q concede.q conclude.q confess.q confirm.q contend.q decide.q declare.q deduce.q determine.q discern.q disclose.q discover.q emphasize.q envision.q exclaim.q explain.q figure.q guess.q hint.q hope.q imply.q inquire.q insist.q intimate.q learn.q maintain.q muse.q mutter.q note.q observe.q order.q pledge.q postulate.q predict.q presume.q proclaim.q promise.q propose.q prove.q realize.q reason.q recall.q reckon.q recognize.q recount.q reflect.q remark.q remember.q repeat.q reply.q report.q resolve.q respond.q retort.q reveal.q rule.q shout.q sigh.q speculate.q state.q stipulate.q stress.q suggest.q testify.q theorize.q think.q threaten.q warn.q whisper.q wonder.q write.q relate.q continue.q link-grammar/data/en/words/words.adv.10000644000000000000000000004246112536650432015004 0ustar abjectly ably abnormally abortively abruptly absently absent-mindedly abusively abysmally accidentally accordingly accurately accusingly actively acutely adamantly adequately admirably admiringly adoringly adroitly adversely advisedly affably affectionately afield aggressively agreeably aimlessly airily alarmingly allegretto.e alphabetically ambiguously ambitiously amiably amicably amidships amorously amply amusingly.e analogously analytically anciently.e andante.e angelically angrily anon anonymously anticlockwise anxiously anyplace apace apathetically apologetically appreciably appreciatively approvingly aptly arbitrarily archly ardently arduously arrogantly artfully articulately artificially asexually.e asleep.e assertively assiduously astutely asymmetrically asymptotically atrociously attentively attractively attributively audaciously audibly auspiciously austerely authentically authoritatively autocratically automatically avariciously avidly awake.e awesomely.e awkwardly backstage badly baldly barbarously bareback barebacked barefacedly barefooted.e bashfully beautifully becomingly beforehand begrudgingly.e belatedly belligerently beneficially benevolently benignly biennially bilaterally bitterly blandly blankly blasphemously blatantly bleakly blindly blissfully blithely bloodily.e bluntly boastfully boisterously boldly bombastically boundlessly boyishly bravely brazenly.e breathlessly breezily bright.e brightly brilliantly briskly brusquely brutally buoyantly busily callously calmly candidly cantankerously capably capriciously carefully carelessly casually categorically causally caustically cautiously cavalierly ceaselessly centrally ceremonially ceremoniously chaotically charitably charmingly chattily cheaply cheekily cheerfully cheerily childishly chivalrously chronologically classically clean.e cleanly.e cleverly clinically clockwise closely clumsily coarsely coherently cohesively coldly collectively colloquially colorfully combatively comfortably comfortingly comically commercially communally comparably compassionately competently competitively complacently comprehensively compulsively conceitedly concernedly concisely conclusively concretely concurrently condescendingly conditionally confidently confidingly confusingly.e congenially conjugally conscientiously consciously consecutively conservatively considerably considerately consistently conspicuously constantly constitutionally constructively contemporaneously contemporarily.e contemptuously contentedly continually continuously contrariwise contritely controversially conventionally conversationally convincingly convulsively coolly cooperatively co-operatively copiously cordially correctly correspondingly corruptly counterclockwise courageously courteously covertly coyly craftily crassly crazily.e creatively credibly creditably credulously criminally crisply crookedly cross-legged.e crossly crudely cruelly cryptically culturally cumulatively cunningly cursorily curtly cynically daintily damnably dangerously daringly darkly dashingly deceitfully deceivingly decently deceptively decisively decorously deductively.e deeply defectively defensively deferentially defiantly deftly dejectedly deliberately delicately delightedly delightfully deliriously democratically demoniacally demonstratively demurely densely dentally dependably deplorably derisively descriptively deservedly despairingly desperately despicably despondently destructively detestably detrimentally devilishly deviously devotedly devoutly dexterously diabolically diagonally diametrically didactically differentially diffidently diffusely digitally diligently dimly diplomatically directly disagreeably disappointedly disapprovingly disastrously disconcertingly discourteously discreetly discretely discursively disdainfully disgracefully disgustedly disgustingly dishonestly dishonourably disingenuously dismally disobediently disparagingly dispassionately dispiritedly disproportionately disrespectfully distantly distinctively distinctly distractedly distressingly distrustfully disturbingly diversely divinely dizzily doggedly dogmatically dolefully domestically doubly doubtfully dourly drably drastically dreadfully dreamily drearily drily drowsily drunkenly.e dryly dubiously dumbly dutifully dynamically eagarly.e eagerly earnestly easily eastwards ebulliently ecstatically edgewise eerily efficaciously efficiently effortlessly effusively egotistically elaborately electrically electronically elegantly eloquently embarrassingly eminently emotionally emphatically encouragingly endearingly endlessly energetically engagingly enigmatically enormously enquiringly enterprisingly entertainingly enthusiastically enviously epidurally.e eponymously.e equably equitably erratically erroneously eruditely eternally euphemistically evasively evenly evermore excellently excessively excitedly excitingly exclusively excruciatingly exhaustively exorbitantly expansively expectantly experimentally expertly explicitly explosively.e exponentially expressively expressly exquisitely extemporaneously extensively externally extravagantly exuberantly exultantly facetiously facially.e faintly faithfully falsely famously fanatically fantastically fast.e fastidiously fatally fatuously faultlessly favorably favourably fearfully fearlessly feebly ferociously fervently fervidly feverishly fiendishly fiercely figuratively firmly first-class.e first-hand.e fiscally fitfully fittingly.e flagrantly flamboyantly flashily flawlessly flexibly flippantly flirtatiously fluently fondly foolishly forbiddingly forcefully forcibly forgivingly forlornly formally formidably forthwith fortissimo.e fortnightly.e fortuitously frankly frantically fraternally fraudulently freakishly freely frequently freshly fretfully frigidly friskily frivolously frostily frugally fruitfully fruitlessly full-time.e functionally funnily furiously furtively fussily gaily gainfully gallantly galore gamely garishly gaudily generously genially genteelly gently giddily girlishly gladly gleefully glibly gloatingly globally gloomily gloriously glowingly glumly gorgeously gracefully graciously grandly graphically gratefully gratis gratuitously gravely greedily gregariously grievously grimly grotesquely grudgingly gruffly grumpily guardedly guiltily gushingly habitually half-heartedly halfway.e haltingly handily.e handsomely haphazardly happily happy.e harmoniously harshly hastily hatefully haughtily headlong.e head-on.e heartily heartlessly heatedly helpfully helplessly helter-skelter henceforth hereabouts hereafter hermetically heroically hesitantly hesitatingly hideously higgledy-piggledy high-handedly hilariously hither hitherto hoarsely homeward.e homewards honestly honorably.e honourably hopelessly horizontally horribly horrifically.e hospitably hotly huffily humanely humbly humorously hungrily hurriedly huskily hypocritically hysterically icily identically ideologically idiomatically idly illegally illegibly illegitimately illicitly illustriously imaginatively immaculately immeasurably immensely imminently immodestly immorally impartially impassively impatiently impeccably imperceptibly imperfectly imperially imperiously impertinently impetuously impishly implausibly implicitly imploringly impolitely imposingly impossibly.e impractically.e imprecisely impressively improperly imprudently impudently impulsively inaccurately inadequately inadvertantly inadvertently inanely inappropriately inarticulately.e incessantly incisively inclusively incognito.e incoherently incompetently incompletely inconclusively incongruously inconsiderately inconsistently inconspicuously inconveniently incorrectly incredulously indecently indecisively indefinitely indelibly indifferently indignantly indirectly indiscreetly indiscriminately individually indolently industriously ineffably ineffectively ineffectually inefficiently inelegantly ineptly inescapably inexorably inexpensively inexplicably.e inextricably infamously.e inflexibly informally informatively infrequently ingeniously ingratiatingly inhumanely inimitably innately innocently inoffensively inordinately inorganically inquiringly inquisitively insanely insatiably insecurely insensitively insidiously insightfully insinuatingly insipidly insistently insolently instantaneously instantly instinctively insufferably insufficiently insultingly insuperably integrally intellectually intelligently intelligibly intensely intensively intentionally intently interchangeably interdepartmentally interminably intermittently internally internationally interrogatively intimately intransitively intravenously intrepidly intricately intrinsically intuitively inventively inversely invisibly.e invitingly involuntarily inwardly irately irmly irrationally irregularly irrelevantly irreparably.e irresistibly irresponsibly.e irretrievably irreverently irreversibly irritably jarringly jauntily jealously jerkily jestingly jocosely jocularly jokingly jovially joyfully joyously jubilantly judiciously justly keenly knowingly laboriously lackadaisically laconically lamely landward languidly languorously lasciviously laterally latterly.e laudably laughingly lavishly lawfully lazily learnedly legally legibly legislatively legitimately lengthily lengthways leniently lento.e lethargically lewdly lexically liberally licentiously lifelessly light-headedly light-heartedly lightheartedly.e lightly limply linearly listlessly locally loftily logarithmically longingly longitudinally longways loosely loquaciously loudly lovingly loyally lucidly ludicrously lugubriously lukewarmly luridly lustfully lustily luxuriantly luxuriously lyrically magically magisterially magnanimously magnetically magnificently majestically malevolently maliciously malignantly manageably manfully maniacally manifestly manually markedly marvellously marvelously massively masterfully maternally maturely maximally meagrely meaningfully meanly measurably mechanically mechanistically meditatively meekly melodiously melodramatically memorably menacingly menially mentally mercilessly merrily metaphorically methodically meticulously metrically microscopically mightily mildly militarily mindlessly minimally ministerially minorly.e minutely mirthfully mischievously miserably mistakenly mistrustfully mockingly modestly molten.e momentously monetarily monotonously monstrously moodily morosely mortally mournfully municipally musically musingly mutely mutually naively narrow-mindedly nasally nastily nationally neatly needlessly nefariously negatively negligently nervously neurotically nicely nimbly nobly noisily nonchalantly nonstop.e normally northwards nostalgically noticeably numbly numerically obdurately obediently objectionably objectively obligingly obliquely obnoxiously obscenely obscurely obsequiously observantly obsessively obstinately obstreperously obstructively obtrusively obtusely odiously offensively offhand.e offhandedly officially officiously offstage.e onerously onshore.e onward onwards opaquely openly oppressively optimally optimistically optionally opulently orally organically ornately orthogonally ostentatiously outrageously outspokenly outstandingly outwardly overbearingly overboard overtly overwhelmingly painfully painlessly painstakingly palatably palmately.e palpably parentally parenthetically parochially part-time.e passably passim passionately passively paternally pathetically pathologically patiently patriotically patronizingly peaceably peacefully peculiarly pedantically peevishly pejoratively pell-mell penetratingly pensively perceptibly perceptively perchance peremptorily perenially perennially perfectly perfunctorily perilously permanently perniciously perpetually persistently personally persuasively pervasively perversely pessimistically petulantly phenomenally physically pianissimo.e picturesquely piercingly pig-headedly piously piping.e pithily pitifully pizzicato.e placidly plaintively plausibly playfully pleadingly pleasantly ploddingly pneumatically poetically poignantly point-blank.e pointedly polemically politely pompously ponderously poorly.e popularly portentously positively possessively posthumously potently powerfully precariously precipitously pre-eminently prematurely presently prestissimo.e presumptuously pretentiously previously primitively primly privately proactively.e prodigiously productively profanely professionally proficiently profitably profoundly profusely programmatically.e progressively prohibitively prolifically.e prominently promiscuously promptly prophetically proportionally proportionately prosaically protectively proudly providently provincially.e provisionally provocatively prudently prudishly publicly punctually puritanically purportedly.e purposefully quaintly qualitatively quantitatively quick.e quickly quiescently quietly quixotically quizzically radially radiantly radically rampantly randomly rapidly rapturously rarely.a rashly rationally raucously ravenously readily reassuringly recklessly recognizably redundantly reflectively refreshingly regally regionally regretfully regularly relentlessly reliably religiously reluctantly remorsefully remorselessly remotely repeatably.e repeatedly repentantly repetitively reproachfully reprovingly resentfully resignedly resolutely resoundingly resourcefully respectfully responsibly restively restlessly reticently retroactively retrospectively reverentially reverently rhetorically richly righteously rightfully rigidly rigorously riotously robustly romantically roundly routinely rowdily royally rudely ruefully ruggedly ruthlessly sadistically safely sanctimoniously sarcastically sardonically satirically satisfactorily savagely scantily scathingly sceptically schematically scornfully scot-free scrupulously seamlessly.e seasonally seawards secretively secretly securely sedately seductively selectively selfconsciously self-consciously selfishly selflessly.e sensationally senselessly sensibly sensitively sensuously sentimentally separately sequentially serenely serially seriatim seriously severally shabbily shamefully shamelessly sharply sheepishly shockingly shrewdly shrilly shyly side-saddle silently simple-mindedly sincerely single-handed singlehandedly.e singly skeptically skilfully skillfully sky-high.e skyward skywards slavishly sleepily slickly sloppily slowly sluggishly slyly smartly smilingly smoothly smugly sneeringly.e snobbishly snootily snugly soberly sociably softly solemnly solidly somberly sombrely sonorously soothingly sorely sorrowfully soundly sourly southwards spaciously sparingly sparsely spasmodically speciously spectacularly speedily.e spiritually spitefully splendidly spontaneously sporadically spotlessly spuriously squarely staggeringly staidly starkly statically staunchly steadfastly steadily stealthily steeply sternly stiffly stirringly stochastically stoically stonily stoutly straightforwardly strategically strenuously stridently.e strikingly stringently strong.e strongly stubbornly studiously stuffily stunningly stupendously stupidly sturdily stylishly suavely subconsciously subjectively sublimely subserviently subtly successfully successively succinctly suddenly suggestively suitably sullenly summarily sumptuously superbly superciliously superfluously surgically surpassingly surreptitiously suspiciously sustainably.e sweetly swiftly symbolically symmetrically sympathetically synthetically systematically tacitly tactfully tactically tactlessly tall.e tangibly tartly tastefully tastelessly tauntingly tearfully technically tediously tellingly.e temperamentally temporarily tenaciously tenderly tensely tentatively tenuously terminally terrifically tersely testily theatrically thermally thinly thoroughly thoughtfully thoughtlessly threateningly tightly timidly tirelessly tolerably tolerantly topically transitively transparently.e treacherously tremendously trenchantly tritely triumphantly trivially truculently trustfully typographically unabashedly unambiguously unanimously unashamedly unassumingly unawares unceasingly unceremoniously uncomfortably uncommonly uncomplainingly unconditionally unconsciously uncontrollably unconventionally.e unconvincingly.e uncritically underarm.e underhand undiplomatically uneasily unemotionally unenthusiastically unequally unequivocably unequivocally unerringly unethically unevenly uneventfully unexpectedly unfailingly unfairly unfaithfully unfalteringly unfavorably unfavourably unfeelingly unflinchingly unforgivably ungraciously ungrammatically ungratefully ungrudgingly unhappily unhappy.e unhelpfully unhesitatingly unhurriedly uniformly unilaterally unimaginatively unimpressively unintelligibly unintentionally uninterruptedly uniquely unjustifiably unjustly unknowingly unlawfully unmusically unnecessarily unobtrusively unpleasantly unreliably unreservedly unsatisfactorily unscientifically unscrupulously unseasonably unselfconsciously unselfishly unsparingly unsuccessfully unsurprisingly.e unsuspectingly unthinkingly untruthfully unwaveringly unwillingly unwisely unwittingly uphill.e upright.e uproariously upstage.e upwardly urbanely urgently vacantly vaguely vainly valiantly variously varyingly.e vastly vehemently venomously verbally verbosely vertically vibrantly vicariously viciously victoriously vigilantly vigorously vindictively violently virtuously virulently.e visibly visually vivace vivaciously vividly vocally vociferously voraciously vulgarly wanly warily warmly weakly.e wearily weirdly.e westwards whereabout.e whereabouts.e whimsically wholeheartedly wickedly wildly wilfully willingly wisely wistfully wittily woefully wonderfully worriedly wrongfully wrong-headedly wrongly wryly yearningly young.e zealously zestfully link-grammar/data/en/words/words.v.8.20000644000000000000000000000176012536650433014644 0ustar auctions.v bandies.v bars.v battens.v blocks.v blots.v blurts.v boards.v books.v bottles.v bundles.v butters.v cages.v carries carts.v chalks.v chases.v chucks.v clutters.v covers.v cranks.v cuts.v dams.v dishes.v divides doles.v dredges.v dumps.v eggs.v ekes.v exports.v factors.v faxes.v fixes.v flings.v fobs.v gouges.v hams.v hashes.v hoists.v jacks.v jazzes.v jots.v kicks.v ladles.v lays.v lifts.v links.v loads.v locks.v lops.v mails.v maps.v marks.v metes.v mulls.v musses.v nails.v palms.v patches.v paves pens.v phases.v phones.v picks.v pieces.v pins.v plugs.v pricks.v props.v punches.v pushes.v racks.v reins.v rigs.v riles.v rinses.v roughens.v roughs.v saves.v scales.v scares.v screens.v shakes.v shores.v singles.v sizes.v skims.v skittles.v smuggles.v sops.v sorts.v spices.v stacks.v stakes.v staves.v strings.v stuffs.v susses.v sweeps.v tacks.v tapes.v tears.v throws.v tides.v ties.v tops.v totals.v touches.v toughens.v tracks.v wads.v washes.v waves.v wears.v wrings.v yanks.v zips.v link-grammar/data/en/words/entities.us-states.sing0000644000000000000000000000045712536650432017447 0ustar Ala. Alaska Ariz. Ark. Calif. Colo. Conn. Del.s Fla. Ga. Hawaii Idaho Ill. Ind. Iowa Kan. Ky. La. Md. Ma. Mass. Me. Mich. Minn. Miss. Mo. Mont. Neb. Nev. NH N.H. NJ N.J. NM N.M. NY N.Y. NC N.C. ND N.D. Ohio Okla. Ore. Pa. RI R.I. SC S.C. SD S.D. Tenn. Tex. Texas.s Utah Va. Vt. Wash. WV W.V. Wis. Wy. link-grammar/data/en/words/words.n.2.x.wiki0000644000000000000000000000015112536650433015667 0ustar basemen.n dodecahedra.n frontmen.n manga.n quanta.n radii.n statesmen.n subgenera.n tambon.n trivia.n link-grammar/data/en/words/words.v.4.10000644000000000000000000006065512536650433014647 0ustar abandon.v abase.v abbreviate.v abduct.v abet.v abhor.v abolish.v abridge.v abrogate.v absorb.v abstract.v abuse.v abut.v accentuate.v accent.v access.v acclaim.v accommodate.v accompany.v accomplish.v accost.v accredit.v accrete.v accustom.v acerbate.v achieve.v acquaint.v acquire.v activate.v addict.v addle.v address.v adjudge.v administer.v admire.v admonish.v adore.v adorn.v adulterate.v adumbrate.v aerate.v affect.v affix.v afflict.v aggrandize.v aggravate.v alienate.v allay.v alleviate.v allocate.v allot.v amass.v ambush.v ameliorate.v amend.v amortize.v amplify.v amputate.v anaesthetize.v anathematize.v anesthetize.v anger.v anglicize.v animate.v anneal.v annex.v annihilate.v annoint.v annotate.v annul.v anoint.v antagonize.v antedate.v anthologize.v anthropomorphize.v ape.v appease.v append.v apportion.v appraise.v apprehend.v apprentice.v apprise.v appropriate.v arm.v arouse.v arraign.v array.v arrest.v arrogate.v ascribe.v asphalt.v asphyxiate.v aspirate.v assail.v assassinate.v assault.v assay.v assuage.v atomize.v attack.v attaint.v attain.v attenuate.v attire.v attract.v attribute.v attune.v audit.v augment.v authenticate.v autograph.v automate.v avenge.v avert.v aver.v await.v awe.v axe.v ax.v backdate.v badger.v baffle.v bait.v bake.v balance.v bale.v bamboozle.v bandage.v banish.v bankrupt.v ban.v baptize.v barbarize.v barbecue.v bare.v barrel.v barricade.v base.v bash.v baste.v batter.v battle.v beak.v bean.v beatify.v beautify.v bedevil.v befall.v befit.v befoul.v befriend.v beget.v beggar.v beguile.v behead.v behold.v bejewel.v belabour.v belie.v belittle.v belt.v bemoan.v bench.v bequeath.v berate.v bereave.v beseech.v besiege.v besmirch.v bespeak.v bestir.v bestow.v bestrew.v bestride.v betoken.v betray.v bevel.v bewail.v bewilder.v bewitch.v bias.v bide.v biff.v bilk.v billet.v bill.v birch.v bisect.v blackball.v blacklist.v blackmail.v blade.v blame.v blanket.v blast.v blazon.v blemish.v bless.v blight.v blindfold.v blind.v blitz.v blockade.v blow-dry.v bludgeon.v blue-pencil.v blunt.v bold.v bolster.v bombard.v bomb.v bookend.v boost.v boss.v botch.v boycott.v brace.v bracket.v braid.v brainwash.v braise.v brandish.v brand.v brave.v breach.v bribe.v brick.v bridge.v brief.v brine.v broach.v brocade.v broker.v bronze.v brook.v browbeat.v brutalize.v budget.v buff.v bug.v bulldoze.v bungle.v bung.v buoy.v burden.v burlesque.v bury.v bus.v busy.v butcher.v buttonhole.v buttress.v by-pass.v bypass.v cajole.v calibrate.v camouflage.v cane.v cannibalize.v canonise.v canonize.v cape.v captivate.v capture.v cap.v carbonize.v carburet.v card.v caress.v caricature.v carjack.v carpet.v case.v castigate.v castrate.v catalogue.v catapult.v categorize.v cede.v cement.v censor.v censure.v centralise.v centralize.v chagrin.v chain.v chair.v champion.v channel.v chaperon.v charm.v charter.v chart.v chasten.v chastise.v cheapen.v checkmate.v cherish.v chide.v chisel.v chlorinate.v chord.v christen.v chrome.v chronicle.v circularize.v circumcise.v circumnavigate.v circumscribe.v circumvent.v cite.v civilize.v clad.v clamp.v classify.v claw.v cleanse.v clench.v clip.v cloak.v clobber.v cloister.v clone.v closet.v clothe.v club.v coat.v co-author.v coauthor.v cobble.v cock.v coddle.v codename.v code.v codify.v coerce.v cofound.v coin.v cold-shoulder.v collar.v collate.v collectivize.v collect.v collocate.v colocate.v colonize.v combat.v comfort.v commandeer.v commemorate.v commend.v commercialize.v compact.v compartmentalize.v compile.v complement.v complete.v complicate.v compliment.v compost.v compound.v comprehend.v compress.v comprise.v computerize.v conceal.v concern.v conciliate.v concoct.v condition.v condone.v configure.v confine.v confiscate.v conflate.v confound.v confront.v confuse.v confute.v conga.v congratulate.v conjure.v conk.v connote.v conquer.v conscript.v consecrate.v conserve.v consign.v console.v constitute.v constrain.v constrict.v construct.v construe.v consume.v consummate.v contact.v contain.v contaminate.v content.v contort.v contour.v contradict.v contravene.v contrive.v control.v con.v convect.v conventionalize.v convey.v convoke.v convoy.v convulse.v co-opt.v coop.v coordinate.v co-produce.v copyright.v copy.v cordon.v cord.v core.v cork.v corner.v corral.v correct.v corroborate.v countenance.v counteract.v counterbalance.v counterfeit.v countermand.v countersign.v countersue.v couple.v court-martial.v court.v covet.v cox.v cradle.v cramp.v crane.v crayon.v cream.v create.v credit.v cremate.v crimp.v cripple.v criticize.v crossbreed.v cross-examine.v cross-fertilize.v cross-index.v cross-question.v crown.v crucify.v crush.v cube.v cudgel.v cuff.v cull.v cultivate.v cup.v curb.v cure.v curry.v curtail.v cushion.v damage.v damn.v dampen.v dandle.v daub.v daunt.v daze.v dazzle.v deaden.v deafen.v debar.v debase.v debauch.v debilitate.v debit.v debrief.v debug.v debunk.v decant.v decapitate.v decarbonize.v deceive.v decentralize.v decertify.v decimalize.v decimate.v decipher.v deck.v declaim.v declassify.v decode.v decolonize.v decompress.v deconsecrate.v decontaminate.v decorate.v decrypt.v decry.v dedicate.v deduct.v deed.v deep-freeze.v deepthroat.v de-escalate.v dee.v deface.v defame.v defeat.v defend.v defer.v defile.v define.v deflate.v deflower.v defoliate.v deforest.v deform.v defragment.v defraud.v defray.v defrock.v defrost.v defund.v defuse.v defy.v degrade.v dehumanize.v dehydrate.v de-ice.v deify.v delegate.v delete.v delimit.v delineate.v delist.v delude.v deluge.v demagnetize.v demarcate.v demean.v demerge.v demilitarize.v demist.v demobilize.v demolish.v demonize.v demoralize.v demote.v demutualise.v denationalize.v denigrate.v denominate.v denote.v denounce.v dent.v denude.v deodorize.v deplete.v deplore.v deploy.v depopulate.v deport.v depose.v deposit.v deprecate.v deprogram.v derange.v deride.v desalinate.v desalinize.v desecrate.v desegregate.v desensitize.v desert.v desiccate.v despatch.v despise.v despoil.v destroy.v detach.v detain.v detect.v deter.v detest.v dethrone.v detune.v devaluate.v devalue.v devastate.v devise.v devote.v devour.v dewater.v diagnose.v dice.v diddle.v diffract.v dignify.v dilute.v direct.v disable.v disaffiliate.v disallow.v disappoint.v disarrange.v disassemble.v disassociate.v disavow.v disburse.v discard.v discipline.v disclaim.v discomfit.v disconcert.v disconnect.v discontent.v discount.v discourage.v discredit.v disdain.v disembarrass.v disembowel.v disenchant.v disenfranchise.v disestablish.v disfavour.v disfigure.v disfranchise.v disgorge.v disgrace.v disguise.v dishearten.v dishonour.v disillusion.v disinfect.v disinherit.v disinter.v dislocate.v dislodge.v dismantle.v dismember.v dismiss.v disobey.v disorientate.v disorient.v disown.v disparage.v dispatch.v dispel.v displace.v display.v displease.v dispossess.v disprove.v disqualify.v disregard.v disrupt.v dissect.v disseminate.v dissociate.v dissuade.v diss.v distance.v distil.v distort.v distract.v distribute.v distrust.v disturb.v ditch.v divert.v divest.v divorce.v divulge.v dizzy.v doctor.v doff.v domesticate.v dominate.v donate.v don.v doom.v dope.v dot.v double-check.v double-cross.v douse.v downgrade.v download.v downplay.v down.v dragoon.v dramatize.v drape.v drench.v drip-dry.v drub.v drug.v dry-clean.v duct.v dumbfound.v dunk.v dupe.v duplicate.v dust.v dwarf.v dye.v dynamite.v earmark.v earn.v eclipse.v edify.v edit.v efface.v effect.v elbow.v electrify.v electrocute.v electrolyze.v elevate.v elicit.v elide.v eliminate.v elucidate.v elude.v emancipate.v emasculate.v embalm.v embargo.v embed.v embellish.v embezzle.v embitter.v emblazon.v embody.v embolden.v emboss.v embrace.v embroil.v emend.v emit.v empanel.v empower.v emulate.v emulsify.v enact.v enamel.v encase.v enchant.v encircle.v enclose.v encode.v encompass.v encounter.v encrypt.v encumber.v endanger.v endear.v endorse.v endow.v enervate.v enfeoff.v enfold.v enforce.v enfranchise.v engender.v engineer.v engrave.v engross.v engulf.v enhance.v enjoin.v enlarge.v enlighten.v enliven.v enmesh.v ennoble.v enrage.v enrich.v ensconce.v enshrine.v enshroud.v enslave.v ensnare.v ensoul.v entangle.v enthrall.v enthral.v enthrone.v enthuse.v entomb.v entrain.v entrance.v entrap.v entreat.v entrust.v entwine.v enumerate.v envelop.v envy.v epitomize.v equalize.v equal.v equate.v equip.v eradicate.v erase.v erect.v eschew.v escort.v espouse.v espy.v esteem.v eulogize.v evade.v evict.v evince.v eviscerate.v evoke.v exacerbate.v exalt.v exasperate.v excavate.v exceed.v exchange.v excise.v exclude.v excommunicate.v excoriate.v excrete.v exculpate.v excuse.v execute.v exemplify.v exempt.v exert.v exhaust.v exhibit.v exhilarate.v exhume.v exile.v exorcize.v expedite.v expel.v expend.v experience.v expiate.v explicate.v exploit.v expose.v expropriate.v expunge.v expurgate.v extenuate.v exterminate.v externalize.v extinguish.v extirpate.v extol.v extort.v extract.v extradite.v extricate.v exude.v eye.v fabricate.v facelift.v facet.v facilitate.v fag.v fake.v falsify.v familiarize.v fancy.v fascinate.v fashion.v fate.v fathom.v fatigue.v fault.v favorite.v favour.v faze.v feather.v feature.v feign.v fence.v ferret.v fertilize.v festoon.v fete.v fetter.v fianchetto.v fillet.v finalize.v finance.v fine-tune.v finger.v firebomb.v flagellate.v flank.v flatter.v flaunt.v flavour.v flay.v fleece.v flick.v flog.v floodlight.v floor.v flout.v fluff.v flummox.v fluoridate.v flurry.v fluster.v foil.v foist.v foment.v fondle.v fond.v fool.v force-feed.v ford.v forecast.v forego.v foreordain.v foreshadow.v foreshorten.v forestall.v foreswear.v foretell.v forfeit.v forge.v forgo.v formalize.v formulate.v forsake.v forswear.v fortify.v forward.v foster.v found.v frame.v frank.v frazzle.v free.v frequent.v fresco.v fricassee.v frighten.v frisk.v fritter.v frogmarch.v frustrate.v fry.v fulfill.v fulfil.v fumigate.v fund.v funnel.v furbish.v furnish.v furrow.v further.v gage.v gainsay.v gall.v galvanize.v gaol.v garble.v garb.v garner.v garnish.v garrison.v gash.v gatecrash.v gauge.v generate.v genericize.v gerrymander.v ghettoize.v gild.v gin.v gird.v glaciate.v gladden.v glamorize.v glean.v glimpse.v glorify.v glut.v goad.v gore.v gorge.v grab.v grace.v grade.v graft.v gratify.v gravel.v grease.v greenlight.v greet.v grill.v grip.v grit.v groin.v groom.v gross.v grudge.v guard.v guide.v guillotine.v gum.v gun.v gut.v guzzle.v gyp.v hallow.v halt.v halve.v hamper.v hamstring.v handcraft.v handcuff.v handicap.v handle.v harangue.v harass.v harbor.v harbour.v harm.v harness.v harpoon.v harrow.v harry.v harvest.v hassle.v haunt.v hawk.v hazard.v haze.v headquarter.v heap.v hearten.v heart.v heed.v helm.v herald.v highjack.v highlight.v hijack.v hinder.v hoax.v hobble.v hock.v hog.v hollow.v homestead.v homogenize.v hone.v honor.v honour.v hood.v hoodwink.v horrify.v horsewhip.v hose.v hospitalize.v host.v hotfoot.v hound.v house.v hull.v humble.v humbug.v humiliate.v humour.v hump.v hunch.v hurl.v husk.v hyphenate.v hypnotize.v idealize.v identify.v idolize.v ignore.v ill-treat.v illuminate.v illumine.v illustrate.v image.v imbibe.v imbue.v imitate.v immerse.v immobilize.v immolate.v immortalize.v immunize.v impact.v impair.v impale.v impanel.v impart.v impeach.v impede.v imperil.v impersonate.v implant.v implement.v implicate.v import.v impose.v impound.v impoverish.v impregnate.v impress.v imprint.v imprison.v impugn.v impute.v inactivate.v inaugurate.v incapacitate.v incarcerate.v incarnate.v incense.v incinerate.v include.v inconvenience.v incriminate.v inculcate.v incur.v indemnify.v indenture.v index.v indict.v individuate.n indoctrinate.v induct.v infatuate.v infect.v infest.v infill.v infiltrate.v inflame.v inflate.v inflect.v inflict.v influence.v infuriate.v infuse.v ingest.v ingratiate.v inhabit.v inherit.v inhibit.v initial.v inject.v injure.v ink.v inoculate.v inscribe.v inseminate.v insert.v inspect.v install.v instate.v instigate.v instill.v instil.v institute.v institutionalize.v insulate.v insult.v insure.v integrate.v intercept.v interchange.v interdict.v interest.v interject.v interleave.v internalize.v internationalize.v interoperate.v interpolate.v interrogate.v intersperse.v inter.v interweave.v intimidate.v intone.v intoxicate.v introduce.v intuit.v inundate.v invade.v invalidate.v invalid.v inveigle.v invent.v invert.v invigorate.v invoke.v irk.v irradiate.v irrigate.v isolate.v italicize.v itemize.v iterate.v jail.v jar.v jeopardize.v jettison.v jilt.v jinx.v jolly.v jug.v juxtapose.v ken.v kidnap.v kiss.v knead.v knife.v knight.v lacerate.v lace.v lack.v lacquer.v lambaste.v laminate.v lampoon.v lance.v landscape.v lasso.v laud.v launder.v lavish.v leach.v leapfrog.v lease.v leaven.v legalize.v legitimatize.v lenite.v leverage.v lever.v levy.v libel.v liberalize.v liberate.v licence.v liken.v limit.v lionize.v liquidize.v list.v loan.v loathe.v lob.v loft.v loot.v lubricate.v lug.v lull.v lump.v lure.v lynch.v madden.v magnetize.v magnify.v maim.v malign.v maltreat.v manacle.v mandate.v mangle.v manhandle.v manicure.v manifest.v manipulate.v manufacture.v man.v marginalise.v marginalize.v market.v maroon.v marshal.v martyr.v mar.v mash.v mask.v massage.v mass-produce.v mastermind.v master.v masticate.v maul.v maximize.v max.v measure.v mechanize.v medicate.v memorialize.v memorize.v menace.v merit.v mesmerize.v microfilm.v miff.v milk.v mimeograph.v mimic.v mince.v miniaturize.v minimize.v mint.v mire.v mirror.v misapply.v misapprehend.v misappropriate.v miscast.v misconceive.v misconstrue.v misdate.v misdirect.v misgovern.v misguide.v mishandle.v mishear.v misinform.v misinterpret.v mislay.v mislead.v mismanage.v misname.v misplace.v mispronounce.v misquote.v misrepresent.v misspell.v misspend.v misstate.v mistake.v mistranslate.v mistreat.v mistrust.v misuse.v mitigate.v mob.v mock.v model.v modify.v modulate.v mold.v molest.v mollify.v mollycoddle.v monitor.v monopolize.v montage.v moor.v moot.v morph.v mortar.v mortgage.v mortify.v mothball.v mothproof.v motorize.v muddy.v muffle.v muff.v mug.v mulch.v multiplex.v murder.v muster.v mute.v mutilate.v muzzle.v myspace.v mystify.v nab.v nag.v namespace.v narrate.v nationalize.v naturalize.v needle.v negate.v nettle.v net.v neuter.v neutralize.v nickname.v nick.v nix.v noogie.v normalize.v norm.v notarize.v notate.v nourish.v novelise.v novelize.v nudge.v nullify.v number.v numb.v nurse.v nurture.v obfuscate.v obligate.v obliterate.v obscure.v obstruct.v obtain.v obviate.v occasion.v occupy.v offend.v offload.v oil.v okay.v omen.v omit.v oppress.v orchestrate.v ordain.v organize.v orientate.v orient.v ornament.v ostracize.v oust.v outbalance.v outclass.v outdistance.v outdo.v outfight.v outfit.v outflank.v outfox.v outgrow.v outlast.v outlaw.v outline.v outlive.v outmanoeuvre.v outnumber.v outplay.v outrage.v outrank.v outride.v outright.v outrun.v outscore.v outshine.v outsmart.v outsource.v outstay.v outvote.v outweigh.v outwit.v overawe.v overbear.v overburden.v overcook.v overcrowd.v overdo.v overdub.v overemphasize.v overestimate.v overexert.v overexpose.v overgraze.v overhaul.v overhear.v overleap.v overload.v overlook.v overpay.v overplay.v overpopulate.v overpower.v overpraise.v overprint.v overrate.v override.v overrule.v oversee.v overshadow.v overshoot.v oversimplify.v overstate.v overstay.v overstep.v overstock.v overstrain.v oversubscribe.v overtake.v overtax.v overvalue.v overwhelm.v overwrite.v own.v oxygenate.v pacify.v package.v padlock.v pad.v page.v pain.v palatalize.v pamper.v paper.v parallelize.v parallel.v paralyse.v paralyze.v parametrize.v paraphrase.v parch.v pardon.v pare.v parody.v parole.v parry.v partition.v partner.v pasteurize.v paste.v patent.v patrol.v patronize.v pattern.v pat.v pauperize.v pawn.v paw.v pedestrianize.v peg.v pelt.v penalize.v pencil.v pepper.v perfect.v perforate.v perfume.v perfuse.v perjure.v permeate.v permute.v perm.v perpetrate.v perpetuate.v perplex.v persecute.v personalize.v personify.v perturb.v peruse.v pervade.v pervert.v pester.v pet.v photocopy.v photograph.v photosensitize.v photostat.v phrase.v pickle.v picture.v pierce.v pigeonhole.v pigment.v pilfer.v pilot.v pinch.v pinpoint.v pipe.v pip.v pique.v pirate.v pitchfork.v pit.v pity.v placate.v place.v plagiarize.v plague.v plant.v plaster.v please.v pluralize.v ply.v pocket.v podcast.v poison.v polarize.v police.v polish.v politicize.v pollinate.v pollute.v ponder.v pooh-pooh.v pool.v popularize.v populate.v portage.v portend.v port.v position.v possess.v postdate.v postmark.v postpone.v post.v powder.v praise.v prearrange.v precede.v precipitate.v preclude.v preconceive.v predestine.v predetermine.v predicate.v predispose.v pre-empt.v preempt.v preen.v prefabricate.v preface.v prefigure.v preform.v preheat.v prejudge.v prejudice.v premeditate.v premise.v preoccupy.v preordain.v prepay.v prerecord.v prerender.v presage.v prescribe.v present.v preserve.v presort.v pressurize.v prestress.v prettify.v prevent.v price.v pride.v prime.v print.v privilege.v prize.v probe.v process.v proctor.v procure.v produce.v prod.v proffer.v profile.v prognosticate.v prohibit.v prolong.v promote.v promulgate.v pronounce.v proof.v propel.v proportion.v proposition.v propound.v proscribe.v prosecute.v prostitute.v prostrate.v protect.v prune.v psychoanalyse.v psychoanalyze.v publicize.v publish.v pulverize.v pummel.v punctuate.v punish.v purchase.v puree.v purify.v purloin.v purse.v pursue.v purvey.v quaff.v quantify.v quarantine.v quarterback.v quarter.v quash.v quell.v quench.v query.v quick-freeze.v quilt.v quote.v radicalize.v raffle.v raid.v railroad.v ramp.v ram.v ransack.v ransom.v rape.v ratify.v rationalize.v ration.v ravage.v ravish.v raze.v reacquaint.v re-address.v readmit.v reappoint.v reap.v rearrange.v reassess.v reauthorize.v rebadge.v reboot.v rebrand.v rebroadcast.v rebuff.v rebuke.v rebut.v recapture.v recast.v recess.v rechristen.v recite.v reclaim.v recolor.v recommit.v recompense.v reconcile.v recondition.v reconquer.v reconsecrate.v reconsider.v reconstruct.v reconvict.v recoup.v recreate.v rectify.v recuse.v recut.v recycle.v redecorate.v redeem.v redefine.v redeploy.v redesignate.v redesign.v redevelop.v rediscover.v redistribute.v redo.v redraft.v redraw.v redress.v redshirt.v reduce.v reduplicate.v re-educate.v reemploy.v reenact.v reequip.v re-establish.v reestablish.v refashion.v refill.v refinance.v refine.v reflex.v reformulate.v refract.v refresh.v refrigerate.v refund.v refurbish.v refurnish.v refute.v regain.v regale.v regiment.v regrade.v regularize.v regulate.v regurgitate.v rehabilitate.v rehash.v rehire.v rehouse.v reignite.v reimagine.v reimburse.v reinforce.v reinstall.v reinstate.v reinsure.v reintegrate.v reinterpret.v reinvent.v reinvigorate.v reissue.v reject.v rejoin.v rejuvenate.v relaunch.v relay.v release.v relegate.v relieve.v relinquish.v relish.v relist.v relive.v reload.v remand.v remaster.v rematch.v remedy.v remilitarize.v remix.v remodel.v remold.v remould.v remove.v remunerate.v rend.v renew.v renominate.v renounce.v renovate.v renumber.v reoccupy.v reorientate.v reorient.v repackage.v repaint.v repatriate.v repeal.v repel.v rephotograph.v rephrase.v replace.v replant.v replaster.v replay.v replenish.v replicate.v reprehend.v represent.v repress.v reprieve.v reprimand.v reprint.v reproach.v reproof.v reprove.v repudiate.v repulse.v repurchase.v repurpose.v repute.v requisition.v reread.v rerelease.v reroll.v reroute.v reschedule.v rescind.v rescue.v research.v reseat.v resell.v resemble.v resent.v reserve.v reset.v reshape.v reshuffle.v resit.v resole.v respect.v restate.v restock.v restore.v restrain.v restrict.v restructure.v restyle.v resubmit.v resurrect.v retain.v retake.v retard.v retell.v rethink.v retitle.v retouch.v retrace.v retract.v retransmit.v retrieve.v retry.v ret.v revalue.v revamp.v revere.v revet.v review.v revile.v revise.v revisit.v revitalize.v revoke.v revolutionize.v reward.v rewater.v rewire.v reword.v rewrite.v rib.v riddle.v ridicule.v rifle.v right.v rim.v rival.v rivet.v romanize.v romanticize.v rope.v route.v rout.v rubberize.v rubber-stamp.v rue.v ruin.v rumple.v rusticate.v sabotage.v sack.v sadden.v saddle.v safeguard.v salt.v salvage.v sample.v sanctify.v sanction.v sandblast.v sandpaper.v sand.v sandwich.v sap.v satiate.v satirise.v satirize.v satisfy.v saturate.v sauteH.v savage.v savour.v scald.v scalp.v scandalize.v scant.v scarper.v scar.v scent.v schedule.v school.v scoop.v scorch.v scorn.v scotch.v scour.v scrap.v scrunch.v scrutinize.v sculpt.v scuttle.v sear.v season.v seat.v second.v secrete.v secularize.v secure.v sedate.v seduce.v seed.v segregate.v select.v sensationalize.v sensitize.v sentimentalize.v sequester.v serenade.v serialize.v service.v shackle.v shadow.v shame.v shampoo.v shapeshift.v share.v sharpen.v shear.v sheathe.v shelter.v shelve.v shepherd.v shield.v shingle.v shirk.v shock.v shoo.v short-change.v shortlist.v shoulder.v shovel.v showcase.v shred.v shroud.v shuck.v shunt.v shun.v shutter.v sicken.v sick.v sideline.v sidestep.v sidetrack.v sieve.v sight.v signpost.v silence.v silhouette.v simplify.v simulate.v simulcast.v siphon.v sire.v skewer.v skin.v skipper.v skirt.v slake.v slander.v slap.v slash.v slate.v slaughter.v slay.v sleeve.v slice.v slight.v sling.v slot.v slug.v slur.v smelt.v smite.v smother.v snag.v snare.v snub.v sock.v sodomize.v soft-pedal.v soil.v solder.v solicit.v solve.v soothe.v soundproof.v soup.v source.v souse.v spade.v spank.v span.v spare.v spay.v spearhead.v spear.v specify.v spew.v spike.v spin-dry.v spirit.v spite.v sponsor.v spoonfeed.v spotlight.v spot.v sprain.v spray.v sprinkle.v spurn.v squander.v squelch.v squire.v stab.v staff.v stage.v stalemate.v standardize.v staple.v starch.v startle.v stash.v station.v staunch.v steal.v steamroller.v steel.v stereotype.v sterilize.v stiff.v stigmatize.v still.v stimulate.v stitch.v stockade.v stoke.v stomach.v stone.v store.v storyboard.v stow.v straddle.v strafe.v straiten.v strangle.v strap.v streamline.v strew.v stroke.v structure.v stub.v stucco.v stud.v stunt.v stun.v style.v stylize.v stymie.v subdue.v subedit.v subject.v subjugate.v sublimate.v subordinate.v subpoena.v subserve.v subsidize.v substantiate.v subsume.v subtend.v subtract.v subvert.v succour.v suckle.v suffuse.v suicide.v suit.v sully.v summarize.v summon.v sunder.v sun.v superimpose.v supersede.v supplant.v supplement.v supply.v support.v suppress.v surmount.v surname.v surpass.v surround.v survey.v suspend.v sustain.v swamp.v swathe.v swat.v sweeten.v swig.v swindle.v swipe.v symbolize.v syncopate.v syndicate.v synthesize.v syphon.v systematize.v table.v tabulate.v tailor.v tail.v taint.v tame.v tamp.v tantalize.v target.v tar.v tattoo.v taunt.v tax.v tease.v telecast.v teleport.v telescope.v televise.v tender.v terrace.v terrify.v terrorize.v tessellate.v test-drive.v tether.v thank.v thatch.v thirst.v thread.v thumb.v thwart.v ticket.v tier.v tile.v till.v timeline.v time.v tint.v titillate.v toe.v tolerate.v torch.v torment.v torpedo.v torture.v tote.v tour.v tousle.v tout.v towel.v tow.v trademark.v trample.v tranquilize.v tranquillize.v transact.v transcend.v transcode.v transcribe.v transfix.v transform.v transfuse.v transgender.v transistorize.v transition.v transmit.v transmute.v transport.v transpose.v transship.v trap.v trash.v traverse.v treasure.v trick.v trigger.v trivialize.v trouble.v trounce.v truncate.v turbocharge.v tutor.v tweak.v twiddle.v typecast.v typify.v tyrannize.v unaffiliate.v unbalance.v unban.v unblock.v unbolt.v unbuckle.v unburden.v unbutton.v unclothe.v unclutter.v uncork.v uncouple.v uncover.v uncross.v undercharge.v underestimate.v underexpose.v underfund.v undergo.v underlie.v underline.v undermine.v underpay.v underpin.v underquote.v underrate.v underrepresent.v underscore.v undersell.v underserve.v undershoot.v undersign.v understate.v understock.v understudy.v undervalue.v underwrite.v undo.v unearth.v unencumber.v unfetter.v unfrock.v unfurl.v unhand.v unhinge.v unhook.v uninstall.v unlearn.v unleash.v unloose.v unmask.v unnerve.v unplug.v unrecord.v unsaddle.v unscramble.v unsettle.v unsheathe.v unveil.v unzip.v upbraid.v update.v upgrade.v uphold.v upholster.v uplift.v upright.v uproot.v upstage.v usher.v usurp.v utilize.v utter.v vacate.v vaccinate.v valet.v validate.v value.v vanquish.v varnish.v veil.v vend.v venerate.v ventilate.v vent.v verbalize.v veto.v vet.v vex.v victimize.v videotape.v vilify.v vindicate.v violate.v visa.v visualize.v vitiate.v vivisect.v vocalize.v voice.v void.v vouchsafe.v vulgarize.v wage.v waive.v wallop.v wall.v wangle.v ward.v warehouse.v warrant.v waste.v waterproof.v waylay.v wean.v weaponize.v weather.v wedge.v weight.v welcome.v wend.v westernize.v wet.v whack.v wheedle.v whet.v whitewash.v wield.v wiki.v wing.v winnow.v withhold.v withstand.v witness.v wolf.v woo.v word.v worm.v wound.v wreak.v wreck.v wrench.v wrest.v wrong.v zap.v zone.v link-grammar/data/en/words/words.n.1.wiki0000644000000000000000000000540212536650433015424 0ustar acetylcholine.n activism.n actuator.n agonist.n airdate.n airlift.n airspeed.n amino.n animator.n annal.n antenna.n antidepressant.n arranger.n ataxia.n audio.n automaker.n backfill.n backpack.n bandmate.n bandwidth.n basal.n basic.n bassist.n batsman.n battlecruiser.n beamline.n benzodiazepine.n bestseller.n bible.n biodiesel.n bioinformatics.n bio.n bitmap.n blog.n bodie.n bookend.n bungee.n campsite.n capacitor.n carving.n cassava.n ceramics.n characteristic.n chargeback.n chipset.n choline.n ciliate.n citie.n coauthor.n codename.n codeshare.n collaborative.n condiment.n constructivist.n cornerback.n cowl.n crossover.n cryptography.n crystallographer.n cytokine.n deede.n deformation.n dehydrogenase.n deliriant.n demographic.n département.n desertification.n desktop.n dhimmi.n diagnostic.n diazepam.n dielectric.n diode.n dipole.n disambiguation.n dissociative.n disulfide.n divi.n docodont.n dodecahedron.n do.n dongle.n dropkick.n duo.n dysplasia.n ed.n el.n em.n emulsifier.n endgame.n enrollment.n epiphyte.n escudo.n ester.n ethanol.n euro.n exorcism.n facelift.n factsheet.n fansite.n fanzine.n favorite.n fenestra.n fibrosis.n filmmaker.n firefighter.n fond.n fonds.n frontline.n gamer.n genome.n geophyte.n gluten.n grating.n guan.n habitant.n haire.n handcraft.n haploid.n headlock.n hearte.n herbivore.n herbology.n homepage.n homer.n homeworld.n homolog.n housemate.n hydrolase.n hydroxyl.n hypertension.n indie.n inductee.n infill.n international.n intro.n jetway.n kasbah.n kinase.n lat.n layout.n lentinan.n linebacker.n lipid.n lob.n login.n logistic.n louver.n mafia.n maréchal.n mater.n melanogaster.n metro.n microarray.n midfielder.n miff.n minimalist.n mini.n moat.n mollusk.n moot.n morphe.n morph.n mort.n mullion.n multicast.n multilayer.n mutant.n myspace.n namespace.n nanotube.n noogie.n nutrient.n offload.n omnivore.n outtake.n overdub.n panchayat.n para.n parlay.n particulate.n peptide.n pixel.n planting.n plesiosaur.n plugin.n podcast.n polymerase.n polysaccharide.n polyunsaturate.n porphyria.n portage.n preform.n preschool.n presenter.n promo.n purebred.n purine.n pyrimidine.n quarto.n ranking.n rapper.n reasoner.n reboot.n rebrand.n rebroadcaster.n receptor.n redraft.n redshirt.n relaxant.n renter.n replication.n rerecord.n rerelease.n resit.n retardant.n rewind.n riding.n sauropod.n screenshot.n screenwriter.n segue.n semi.n sensor.n sequestrant.n setup.n shorthair.n sidekick.n silkscreen.n simulcast.n songwriter.n specialisation.n speciation.n standardbred.n stat.n steroid.n storie.n storyboard.n storyline.n strikeout.n supervillain.n surrounding.n swear.n sweetener.n telco.n timbale.n timeline.n torsion.n torta.n transgender.n vapor.n vegan.n viral.n vocal.n vol.n wargame.n waymark.n webcam.n weblog.n webpage.n wetland.n wheelbase.n wiki.n yuan.n link-grammar/data/en/words/units.1.dot0000644000000000000000000000013612536650432015015 0ustar in.u ins.u ft.u yd.u yds.u mi.u lb.u lbs.u oz.u ozs.u tbsp.u tsp.u pt.u qt.u gal.u bbl.u sq.u link-grammar/data/en/words/entities.national.sing0000644000000000000000000001211512536650432017316 0ustar Afghanistan.l AF.l Albania.l AL.l Algeria.l AG.l Andorra.l AN.l Angola.l AO.l Anguilla.l AV.l Antigua_and_Barbuda AC.l Argentina.l AR.l Armenia.l AM.l Aruba.l AA.l Ashmore Cartier Ashmore_and_Cartier_Islands AT.l Australia.l AS.l Austria.l AU.n Azerbaijan.l AJ.l Bahamas.l the_Bahamas BF.l Bahrain.l BA.l Bangladesh.l BG.l Barbados.l BB.l Bassas_Da_India BS.l Belarus.l BO.l Belgium.l BE.l Belize.l BH.l Benin.l BN.l Bermuda.l BD.l Bhutan.l BT.l Bolivia.l BL.l Bosnia_and_Herzegovina BK.l Botswana.l BC.l Bouvet Bouvet_Island BV.l Brazil.l BR.l British_Indian_Ocean_Territory IO.l British_Virgin_Islands VI.l Brunei.l BX.l Bulgaria.l BU.l Burkina Faso Burkina_Faso UV.l Burma.l BM.l Burundi.l BY.l Cambodia.l CB.l Cameroon.l CM.l Canada.l CA.l Cape_Verde CV.l Cayman_Islands CJ.l Central_African_Republic CT.l Chad.l Chile.l CI.l China.l Christmas_Island KT.l Clipperton Clipperton_Island IP.l Cocos Cocos_Islands CK.l Colombia.l CO.l Comoros.l CN.l Congo.l CF.l CG.l Democratic_Republic_of_Congo Cook Cook_Islands CW.l Coral_Sea_Islands CR.l Costa Rica Costa_Rica CS.l Cote Cote_d'Ivoire IV.l Ivory_Coast Croatia.l HR.l Cuba.l CU.l Cyprus.l CY.l Czech_Republic EZ.l Delhi.l Denmark.l DA.l Djibouti.l DJ.l Dominica.l DO.l Dominican_Republic DR.l Timor East_Timor TT.l Ecuador.l EC.l Egypt.l EG.l El_Salvador ES.l Equatorial_Guinea EK.l Eritrea.l ER.l Estonia.l EN.l Ethiopia.l ET.l Europa_Island EU.l Falkland Islas Falkland_Islands FK.l Islas_Malvinas Faroe Faroe_Islands FO.l Fiji.l FJ.l Finland.l FI.l France.l FR.l French_Guiana FG.l French_Polynesia FP.l French_Southern_and_Antarctic_Lands FS.l Gabon.l GB.l Gambia.l GA.l Gaza Gaza_Strip GZ.l Georgia.l GG.l Germany.l GM.l Ghana.l GH.l Gibraltar.l GI.l Glorioso Glorioso_Islands GO.l Greece.l GR.l Greenland.l GL.l Grenada.l GJ.l Guadeloupe.l GP.l Guatemala.l GT.l Guernsey.l GK.l Guinea.l GV.l BISSAU.l Guyana.l GY.l Haiti.l HA.l Heard McDonald Heard_Island_and_McDonald_Islands HM.l Heard_Island McDonald_Islands Honduras.l HO.l Kong Hong_Kong HK.l Hungary.l HU.l Iceland.l IC.l India.l IN.l Indonesia.l ID.l Iran.l IR.l Iraq.l IZ.l Ireland.l EI.l Isle_of_Man IM.l Israel.l IS.l Italy.l IT.l Jamaica.l JM.l Mayen Jan_Mayen JN.l Japan.l JA.l Jersey.l JE.l Jordan.l JO.l Juan_de_Nova_Island JU.l Kazakhstan.l KZ.l Kenya.l KE.l Kiribati.l KR.l Kuwait.l KU.l Kyrgyzstan.l KG.l Laos.l LA.l Latvia.l LG.l Lebanon.l LE.l Lesotho.l LT.l Liberia.l LI.l Libya.l LY.l Liechtenstein.l LS.l Lietuva Lithuania.l LH.l Luxembourg.l LU.l Macau.l MC.l Macedonia.l MK.l Former_Yugoslav_Republic_of_Macedonia Madagascar.l MA.l Malawi.l MI.l Malaysia.l MY.l Maldives.l MV.l Mali.l ML.l Malta.l MT.l Malvinas.l Marshall_Islands RM.l Martinique.l MB.l Mauritania.l MR.l Mauritius.l MP.l Mayotte.l MF.l Mexico.l MX.l Micronesia.l FM.l Federated_States_of_Micronesia Moldova.l MD.l Monaco.l MN.l Mongolia.l MG.l Montserrat.l MH.l Morocco.l MO.l Mozambique.l MZ.l Namibia.l WA.l Nauru.l NR.l Nepal.l NP.l Netherlands.l NL.l Antilles Netherlands_Antilles NT.l Caledonia New_Caledonia Zealand New_Zealand NZ.l Nicaragua.l NU.l Niger.l NG.l Nigeria.l NI.l Niue.l NE.l No_Man's_Land Norfolk_Island NF.l North_Korea KN.l Norway.l NO.l Oceans.l OS.l Oman.l MU.l Pakistan.l PK.l Palau.l PS.l Panama.l Papua Papua_New_Guinea PP.l Paracal Paracel_Islands PF.l Paraguay.l PA.l Peru.l PE.l Philippines.l RP.l Pitcairn Pitcairn_Islands PC.l Poland.l PL.l Portugal.l PO.l Qatar.l QA.l Reunion.l RE.l Romania.l RO.l Russia.l RS.l Rwanda.l RW.l Saint_Helena SH.l Kitts Nevis Saint_Kitts_and_Nevis Saint_Lucia ST.l Miquelon Saint_Pierre_and_Miquelon SB.l Grenadines Saint_Vincent_and_the_Grenadines VC.l Samoa.l WS.l Marino San_Marino SM.l Tome Principe Sao_Tome_and_Principe TP.l São Tomé Príncipe São_Tomé_and_Príncipe Saudia Arabia Saudi_Arabia SA.l Senegal.l SG.l Serbia_and_Montenegro YI.l Serbia.l Montenegro.l Seychelles.l SE.l Sierra_Leone SL.l Singapore.l SN.l Slovakia.l LO.l Slovenia.l SI.l Solomon_Islands BP.l Somalia.l SO.l South_Africa SF.l Sandwich South_Georgia_and_the_South_Sandwich_Islands SX.l South_Georgia South_Sandwich_Islands South_Korea KS.l Spain.l SP.l Spratly Spratly_Islands PG.l Sri Lanka Sri_Lanka CE.l Sudan.l SU.l Suriname.l NS.l Svalbard.l SV.l Swaziland.l WZ.l Sweden.l SW.l Switzerland.l SZ.l Syria.l SY.l Taiwan.l TW.l Tajikistan.l TI.l Tanzania.l TZ.l Thailand.l TH.l Tobago.l Togo.l TO.l Tokelau.l TL.l Tonga.l TN.l Trinidad_and_Tobago TD.l Tromelin Tromelin_Island TE.l Tunisia.l TS.l Turkey.l TU.l Turkmenistan.l TX.l Caicos Turks_and_Caicos_Islands TK.l Caicos_Islands Tuvalu.l Uganda.l UG.l Ukraine.l UP.l Undersea_Features UF.l Emirates United_Arab_Emirates AE.l Kingdom United_Kingdom UK.l United_States_of_America United_States USA.l US.l America.l Uruguay.l UY.l Uzbekistan.l UZ.l Vanuatu.l Vatican_City VT.l Venezuela.l VE.l Vietnam.l VM.l Virgin_Islands VQ.l Wallis Futuna Wallis_and_Futuna WF.l West_Bank WE.l Sahara Western_Sahara WI.l Yemen.l YM.l Zambia.l ZA.l Zimbabwe.l ZI.l link-grammar/data/en/words/words-medical.adv.10000644000000000000000000004642312536650432016402 0ustar aberrantly abluminally abstractly a_capite_ad_calcem accelographically acceptably acoustically acronymically acrosomally actinically adaptively adaptometrically additively adenovirally adjectively adjunctively ad_nauseam adoptively adrenergically advantageously adventitiously aerobically aesthesiometrically aetiologically affectively affirmatively affordably agee agonistically algorithmically allergologically allometrically allosterically allotopically alphanumerically amblyoscopically amnioscopically amperometrically amphotropically ana anaerobically anecdotally anesthaesiologically anesthesiologically aneurysmally angiodynographically angiographically angiologically angioscopically angiospirometrically anionically anomaloscopically anomalously antagonistically ante_cibum antenatally anteriorly anterogradely antero-inferiorly anteroinferiorly antero-posteriorly anteroposteriorly antero-superiorly anterosuperiorly anthropometrically anthropomorphically antidromically antigenically antithetically antivirally any_more any_time aortographically apically archaeologically artefactually arteriographically arteriometrically arterioscopically arthrographically arthrometrically arthroscopically artifactually asymptomatically asynchronously ataxiagraphically atomistically atraumatically attentionally audiovisually auditorily aurally auscultoscopically autocatalytically autogenously autonomically autonomously autoradiographically autosomally autotrophically averagely aversively axenically axonally bacterially bacteriologically baculovirally balefully ballistocardiographically basally basolaterally biannually bibliographically bidimensionally bifunctionally bimanually bimodally binocularly biomechanically biomedically biometrically biophysically bioptically bioreductively biospecifically biosynthetically biphasically bivariately bronchoscopically bronchospirometrically calorimetrically canonically capillaroscopically capnographically capnometrically cardiodynametrically cardiointegraphically cardiologically cardiophonically cardioscopically cardiotocographically cartographically cataclysmally catalytically catastrophically caudally cavographically cellularly centrifugally centrifugationally centripetally centro-parietally centro-symmetrically centrosymmetrically centro-temporally cheerlessly chemotactically chemotaxonomically chemotrophically chirally chloridometrically cholangiographically cholangioscopically cholecystographically choledochoscopically cholinergically chromatographically chromoradiometrically chromosomally chronometrically chronomyometrically chronotropically cineangiographically cinefluoroscopically cinematographically cineradiographically circularly circumferentially circumstantially cladistically clinicopathologically clonally clonotypically coagulantly coaxially coincidently cold-bloodedly cold-heartedly collaboratively collegially colonoscopically colorimetrically colposcopically combinatorially compactly compimetrically complementarily complexly concentrically concertedly concomitantly concordantly conformally conformationally congenitally conjointly consensually constitutively contourographically contralaterally convergently convolutely coordinately coronally cortically cosmetically cotranslationally coulometrically covalently cross-reactively crossreactively cross_sectionally cross-sectionally cryometrically crystallographically curatively curvilinearly cyclically cyclonically cystically cystometrically cystoscopically cystourethroscopically cyto-architecturally cytoarchitecturally cytofluorimetrically cytofluorographically cytogenetically cytologically cytometrically cytomorphologically cytopathologically cytophotometrically cytoplasmically cytotoxically definitively deleteriously demographically de_novo densitometrically dependantly dependently dermatoscopically despitefully desultorily detectably deterministically developmentally diagnosably diagnostically dialectically dialytically diastereomerically dichotomously dihedrally dilatometrically dimensionally diopsimetrically dioptometrically diplopiometrically directionality directionally directoscopically direfully discontinuously discordantly discrepantly disparately disproportionally disquietingly distally diurnally divergently dolorimetrically dominantly dorsally dorsoventrally dosimetrically d.p. dually duodenoscopically dyadically dynographically eccentrically echocardiographically echoencephalographically echographically echoophthalmographically echotomographically eclectically econometrically ectopically edematogenically effectually egomaniacally eikonometrically ektacytometrically electively electro-acoustically electroacoustically electrobasographically electrocardiocontourographically electrocardiographically electrocardioscopically electrochemically electrocorticographically electroencephalographically electroencephaloscopically electrogastrographically electroglottographically electrogoniometrically electrographically electrohydraulically electromagnetically electromanometrically electromechanically electromicroscopically electromyographically electroneurographically electroneuromyographically electron-microscopically electronmicroscopically electronystagmographically electrooculographically electrophonocardiographically electrophorectically electrophoretically electrophysiologically electropupillographically electrostatically electrosurgically embryologically emergently empathetically empathically enantiomerically en_bloc encephalographically encephaloscopically endobronchially endocrinologically endodontically endogenously endonasally endonucleolytically endoradiographically endoscopically endosmotically endourologically en_face en_passant enterally enterically enthalpically entomologically entoptoscopically entropically enzymatically enzymically enzymocytochemically epicutaneously epidemiologically episodically episomally epistatically equipotently equivalently equivocally ergometrically ergonomically ergospirometrically esthesiometrically etiologically etiopathogenetically etymologically evolutionally evolutionarily excisionally exocyclically exogenously expandingly expectedly expeditionally expeditionaly expeditiously expensively ex_planta exploratively extra-cellularly extracellularly extrathymically ex_vivo facultatively feelingly fenestrometrically ferrokinetically fetascopically fiberscopically figurally filtrometrically firstly fluorescently fluorimetrically fluorometrically fluorophotometrically fluoroscopically focally foetascopically forensically for_ever fractally fractionally fragmentographically frictionally fro frontally futuristically gastroduodenoscopically gastroenterologically gastrographically gayly genomically genotypically geochemically geomagnetically gerontologically gerontopsychiatrically gestationally gesturally gingivally glucometrically glycosidically goniometrically gonioscopically Grad. gravitationally gustometrically gynecologically haemacytometrically haematofluorometrically haematologically haematopoetically haematopoietically haemodynamically haemoglobinometrically haemolytically haemorheologically haemorrheologically haemostatically half-maximally halfmaximally hand_to_knee haptically harmlessly head_first head-first headfirst heedfully heedlessly heel_to_knee helically hemacytometrically hematofluorometrically hematologically hematopoetically hematopoietically hemodynamically hemoglobinometrically hemolytically hemorheologically hemorrheologically hemostatically hepatically hereof hereto herniographically heterogeneously heterogenously heterologously heterosexually heterosynaptically heterotopically heterotrophically heterotypically heterozygously hierarchically histoautoradiographically histo-cytologically histocytologically histogenetically histologically histometrically histomorphologically histomorphometrically histopathologically histo-structurally histostructurally histotypically hn holographically homeostatically homogeneously homologously homosexually homotypically homozygously hormonally humanistically humorally hydrodensitometrically hydrolytically hydrophobically hydropically hydroponically hyperacutely hyperbolically hyperosmotically hyperoxically hyperreflexically hypersensitively hypoxically hysteroscopically iatrogenically iconically iconographically ictally idiotypically immunobiologically immunochemically immunocyto-chemically immunofluorometrically immunogenetically immunohistochemically immunohistologically immunologically immunomorphologically immunospecifically inaptly inaudibly incrementally indecorously in_dies indigenously inducibly inductively industrially inertially inexcusably in_extenso infero-laterally infero-medially infero-posteriorly infero-temporally infiltratively infrahepatically in_fundo inhibitorily inhomogeneously in_lieu inotropically insecticidally inseparably insertionally inside-out insignificantly insofar interactively interatomically interferometrically intergenerically intermediately interpretatively interpretively interstitially intraabdominally intra-amnionically intraamnionically intraamniotically intraaortically intraarterially intraarticularly intra-cellularly intracerebrally intracervically intracolonically intracortically intracranially intraduodenally intra-epidermally intraepidermally intra-epithelially intraepithelially intrahypothalamically intra-individually intraindividually intrajejunally intralesionally intraluminally intramurally intra-muscularly intra-operatively intraoperatively intraorally intraportally intrarenally intrasplenically intratracheally intratypically intra-venously intravitally intriguingly intrusively invasively invertedly in_vitro in_vivo iontophoretically ipsilaterally irrevocably ischemically isometrically isotachophoretically isothermally isotopically isotropically iteratively karyotypically keratoscopically kinaesthesiometrically kinematically kinesimetrically kinesthesiometrically kinetically laminagraphically laparoscopically laryngostroboscopically latently legalistically lensometrically lethally likewise limitedly linguo-apically lithometrically lithoscopically lumboscopically luminometrically lymphangiographically lymphographically lymphoscintigraphically lytically macroscopically magnetocardiographically magnocellularly mammographically manipulatively mechanographically mechanomyographically meiotically metabolically metamorphically metastatically microanalytically microanatomically microangiographically microbially microbiologically microcalorimetrically microchemically microdensitometrically microelectrophoretically microfluorometrically microgasometrically microiontophoretically microneurographically microphotometrically microradiographically microspectrofluorometrically microspectrophotometrically microsurgically midsystolically mineralogically mirthlessly mitochondrially mitotically molecularly monocularly monophasically monotonically morphologically morphometrically motorically muscularly mutagenically myeloscopically nasographically nasopharyngoscopically nasoscopically natally natively negligibly neoplastically nephrologically nephroscopically neurobiologically neurochemically neurographically neurolinguistically neuronally neuropathologically neuropsychologically neurovascularly noncompetitively nonconventionally noncovalently noncyclically nonenzymatically nongenetically nonhaematologically nonhematologically nonimmunologically non-invasively noninvasively non-isotopically nonisotopically nonmetastatically nonmetrically non-occupationally nonoccupationally non-operatively nonoperatively nonosmotically non-pharmacologically nonpharmacologically nonpolymorphically nonpsychiatrically non-randomly nonrandomly non-sexually nonsexually nonsignificantly non-simultaneously nonsurgically nosographically nuclearly nystagmographically obligatorily observerscopically occcasionally occupationally octahedrally oculographically oculoplethysmographically odynometrically oft o.h. olfactometrically o.m. om omnicardiographically omni_nocte oncometrically one-sidedly operationally operatively ophthalmodiaphanoscopically ophthalmodiastimetrically ophthalmodynamometrically ophthalmofunduscopically ophthalmographically ophthalmoleucoscopically ophthalmoleukoscopically ophthalmometrically ophthalmometroscopically ophthalmotonometrically ophthalmotropometrically oppositely optoelectronically optometrically optomyometrically orchidometrically ordinately organismically orogastrically orthotopically oscillographically oscillometrically oscillotonometrically osmometrically osmoscopically osmotically osteosynthetically otoacoustically otomicroscopically otoscopically out_of_doors over-ridingly oxidatively pachymetrically panendoscopically pantographically para-arterially paraarterially paracentrically paradigmatically paramagnetically parasitologically parasystolically parenterally pari_passu parthenogenetically parturiometrically pathomorphologically pelvimetrically pelviscopically penetrometrically pentagonally peranally per_annum per_anum per_cent per_contiguum per_continuum percutaneously per_cutem perforce perinatally periodontally perioperatively periplasmically peritoneally peritoneoscopically peritrichously perorally per_os per_primam per_primam_intentionem per_rectum per_saltum per_se per_secundam per_secundam_intentionem per_tertiam pertinently per_tubam per_vaginam per_vias_naturales petechiometrically phaneroscopically pharmaceutically pharyngoscopically phenotypically phoniatrically phonostethographically phorometrically photoacoustically photochemically photofluorometrically photofluoroscopically photomicrographically photoplethysmographically phototachometrically phototactically phototrophically phylogenetically physiologically physiotherapeutically piezoelectrically placentally planigraphically planimetrically plethysmographically pluralistically pneumatographically pneumotachographically p.o. po P.O. polycardiographically polyclonally polygraphically polysomnographically polyspermically post-catheterisation postcatheterisation post_cibos posteroanteriorly postischaemically postischemically postmetamorphically post_mortem postnatally post_operatively post-operatively post_partum postprandially post_singulas_sedes_liquidas postthrombotically posttranscriptionally post-translationally posttranslationally potentiometrically pow pre-attentively preattentively precociously preconceptionally predominately preferentially preliminarily premenopausally prenatally pre-operatively presumptively prethymically prevalently p.r.n. proctosigmoidoscopically prolately prophylactically pro_rata pro_re_nata prospectively proteolytically prototypically psychiatrically psychoanalytically psychometrically psychotically pulselessly pupillographically pupillometrically pyeloscopically pyrolytically pyrometrically pyroscopically quaque_nocte radiatively radioactively radiobiologically radiocardiographically radiochemically radiochromatographically radioenzymatically radiogenically radiographically radioimmunologically radiologically radiolytically radiotelemetrically rakishly reactively recessively reciprocally rectally reflexively regardless renographically reproducibly resectoscopically retinoscopically retrogradely retrovirally revengefully reversely rheologically rheumatologically rhinoanemometrically rhinomanometrically ritardando roentgenographically rostrally rostrocaudally rotametrically rotationally ruminally saprophytically satisfyingly scandalously scintigraphically secundum_artem secundum_naturam sedimentometrically segmentally semiautomatically semiologically semi-quantitatively semiquantitatively semispecifically serendipitously serologically serospecifically shoddily sialographically siderose sigmoidally sigmoidoscopically simplistically sinusoidally skeletally sketchily skiascopically s.l. sociodemographically sociometrically somatically some_day sonographically soundlessly spatiotemporally spectrally spectrofluorimetrically spectrographically spectrophotometrically spectroscopically speculatively spheroidally sphincteroscopically sphygmocardiographically spinally spinelessly spiritlessly spirographically stably stereologically stereometrically stereomicroscopically stereophotogrammetrically stereospecifically stereotactically stereotaxically sterically stertorously stethographically stoichiometrically stolidly subchronically subepithelially sublethally sublingually submaximally suboptimally subperiodically subserosally subtotally sudorimetrically sulkily superparamagnetically supportively supranormally supraphysiologically supratubercular symptomatically synaptically synchronously synergistically systemically tachometrically tandemly td tearlessly telediastolically telemetrically telephonically telethermometrically temporally tendentiously ter_dia tetanically tetragonally tetrahedrally thalamically thematically thence thereof therewith thermodynamically thermographically thermometrically thermostatically thioyltically thoracoscopically thrice thromboelastographically thrombometrically tid tocodynamometrically tomodensitometrically tomographically tonally tonically tonographically tonometrically tonoscopically topologically tracheally transcardially transcranially transcriptionally transcrotally transiently translaryngeally transmurally transovumly transplacentally transpylorically transrectally transstadially transtadially transtelephonically transvaginally transvenously traumatically traumatologically tremographically triadically tropometrically troposcopically typoscopically ubiquitously ultrasonically ultrasonographically ultrastructurally unaggressively unclearly uncompetitively uniparentally univalently univariately unnaturally unphysiologically unpredictably unproblematically unrealistically unsympathetically unsystematically upside_down ureterorenoscopically ureteroscopically urethrographically urethrometrically urinometrically urodynamically uroflowmetrically usefully vagally vaginally vaginometrically vaginoscopically validly variably vascularly vectorcardiographically vectorially velocimetrically venographically ventriculographically ventriculo-peritoneally ventriculoscopically vibrometrically vibrophonocardiographically vice_versa videodensitometrically videomicroscopically vilely virally viscometrically visuometrically vitreally viz. voltammetrically volubly voluptuously wastefully willfully wrathfully xenically xeromammographically xeroradiographically zygotically zymographically link-grammar/data/en/words/words.v.2.20000644000000000000000000003567112536650433014646 0ustar abdicates.v abides.v aborts.v abrades.v accelerates.v acclimates.v acclimatizes.v acculturates.v accumulates.v acidifies.v adapts.v adjourns.v adjudicates.v adjusts.v advances.v advertises.v aerosolizes.v affiliates.v ages.v agglutinates.v aggregates.v agitates.v aglomerates.v ails.v aligns.v aliments.v alkalifies.v allies.v alternates.v alters.v amalgamates.v Americanizes.v anastomoses.v anchors.v anergizes.v ankyloses.v anteverts.v apostrophizes.v appeals.v applauds.v applicates.v applies.v approaches.v approximates.v arbitrates.v arborizes.v arches.v archs.v articulates.v arylates.v ascends.v assembles.v assimilates.v assists.v associates.v attaches.v attends.v auditions.v augurs.v autoactivates.v autocatalyzes.v autocorrelates.v autodigests.v autolyzes.v automatizes.v autophosphorylates.v autosensitizes.v autotransfuses.v avails.v awakens.v axenizes.v bags.v baits.v bands.v banks.v bargains.v barters.v bathes.v baths.v bats.v baulks.v benefits.v berths.v bicompartmentalizes.v bids.v bifurcates.v bioaccumulates.v biotests.v blabs.v blackens.v blacklegs.v blanches.v blanchs.v blasphemes.v bleaches.v bleachs.v blends.v blinks.v blisters.v bluffs.v blurs.v boggles.v bonds.v bones.v bootlegs.v bops.v borders.v borrows.v botanizes.v bottle-feeds.v bowdlerizes.v breastfeeds.v breeds.v brews.v bridles.v broadcasts.v broadens.v broils.v bronchodilates.v browns.v bruxs.v budges.v buffets.v buggers.v bullies.v burglarizes.v burgles.v burnishes.v burnishs.v burrows.v cables.v calcifiess.v calcifies.v calcines.v cambers.v cancerizes.v canvasses.v capitalizes.v capsizes.v carps.v catabolizes.v catenates.v cationizes.v celebrates.v centers.v centres.v chants.v chars.v chelates.v circles.v circulates.v clangs.v claps.v clasps.v clavelizes.v cleaves.v clicks.v clinches.v clinchs.v clinks.v cloies.v clots.v cloys.v clutches.v clutchs.v coacervates.v coaches.v coagglutinates.v coaggregates.v coagulates.v coamplifies.v coarctates.v coarsens.v coaxes.v codistributes.v coextracts.v cofractionates.v cogitates.v coincubates.v coinjects.v coinsures.v collapses.v collimates.v co-localises.v colocalises.v co-localizes.v colocalizes.v combines.v cometabolizes.v commences.v commingles.v communicates.v commutes.v compares.v compensates.v composes.v computes.v concentrates.v conceptualizes.v condenses.v conducts.v confederates.v confers.v confides.v congests.v conjoins.v conjugates.v consolidates.v constipates.v consults.v contests.v contrasts.v contributes.v convenes.v converts.v copartitions.v coprecipitates.v copurifies.v coregisters.v correlates.v corrodes.v corrugates.v corrupts.v cosediments.v costains.v co-stars.v costars.v couches.v counter-attacks.v counterattacks.v counterindicates.v countermines.v crashes.v crash-lands.v craves.v creases.v creosotes.v cribs.v crinkles.v crisscrosses.v crochets.v croons.v cross-checks.v crosschecks.v cross_fertilizes crosslinks.v cryosections.v crystallizes.v cuddles.v cumulates.v curdles.v curses.v curves.v dabs.v damps.v dangles.v daps.v darkens.v darns.v dates.v de-acidifies.v deacidifies.v de-adapts.v deadapts.v de-aggregates.v deaggregates.v de-alcoholizes.v dealcoholizes.v de-allergizes.v deallergizes.v debarks.v debates.v de-bonds.v debonds.v de-branchs.v debranchs.v decelerates.v de-cidualizes.v decidualizes.v de-clamps.v declamps.v decomposes.v de-condenses.v decondenses.v de-conditions.v deconditions.v de-congests.v decongests.v de-conjugates.v deconjugates.v de-constructs.v deconstructs.v decreases.v de-crepitates.v decrepitates.v de-differentiates.v dedifferentiates.v deepens.v de-epithelializes.v deepithelializes.v de-fibrinogenates.v defibrinogenates.v deflects.v de-fluorinates.v defluorinates.v de-gloves.v degloves.v de-glycosylates.v deglycosylates.v de-granulates.v degranulates.v de-humidifies.v dehumidifies.v de-iodinates.v deiodinates.v delays.v delights.v de-masculinizes.v demasculinizes.v democratizes.v de-morphinizes.v demorphinizes.v de-naturates.v denaturates.v departmentalizes.v de-phases.v dephases.v de-polarizes.v depolarizes.v de-polymerizes.v depolymerizes.v de-proteinizes.v deproteinizes.v de-quenchs.v dequenchs.v derails.v derives.v derogates.v de-saturates.v desaturates.v descends.v de-squamates.v desquamates.v de-stabilizes.v destabilizes.v de-synchronizes.v desynchronizes.v detonates.v de-toxifies.v detoxifies.v develops.v de-vitrifies.v devitrifies.v dialyzes.v dichotomizes.v dictates.v differentiates.v diffuses.v digests.v digitalizes.v digitilizes.v dilates.v dimerizes.v diminishes.v diminishs.v dims.v dins.v dips.v disarms.v disarticulates.v disbands.v discases.v discharges.v discolors.v discontinues.v disengages.v disentangles.v disincorporates.v disinflates.v disjoins.v dismounts.v dispenses.v disperses.v dissimulates.v dissipates.v dissolves.v distends.v distills.v distinguishes.v distinguishs.v disunites.v dive-bombs.v diversifies.v diverticulizes.v divines.v docks.v dodges.v dogmatizes.v dorsalizes.v dorsiflexs.v double-clicks.v downsizes.v dreads.v dribbles.v drills.v drips.v droops.v dulls.v dynamizes.v dysmyelinates.v echoes.v echos.v effluxs.v effuses.v ejaculates.v ejects.v elaborates.v electroblots.v electrocoagulates.v electrodialyzes.v electroejaculates.v electrofocuses.v electrofocusses.v electrofocuss.v electrotypes.v elongates.v embolizes.v embrittles.v embroiders.v emplanes.v encapsidates.v encysts.v endocytoses.v endothelializes.v ends.v endures.v engages.v engorges.v enlists.v enrolls.v enrols.v enters.v entertains.v entrenchs.v enunciates.v epimerizes.v epoxidates.v erodes.v escalates.v escapes.v esterizes.v etches.v etchs.v etiolates.v euhydrates.v evacuates.v evolves.v exaggerates.v excysts.v exercises.v exfoliates.v exhales.v exogastrulates.v expands.v expectorates.v explodes.v explores.v expounds.v expresses.v extemporizes.v extends.v extrapolates.v extravasates.v exuviates.v famishes.v farrows.v fastens.v feasts.v federates.v ferments.v ferries.v fibrillates.v fiddles.v fields.v films.v fissurates.v fistulizes.v fits.v fixates.v flags.v flaps.v flashes.v fledges.v flees.v flexes.v flocculates.v flocs.v flosses.v fluidifies.v fluorinates.v focalizes.v focuses.v focusses.v focuss.v foliates.v foots.v forbears.v force-lands.v forecloses.v forgives.v forms.v founders.v foveates.v fractures.v frays.v fronts.v frosts.v fructifies.v fudges.v fulgurates.v fumbles.v furls.v fuses.v gags.v gains.v gambles.v gams.v gants.v gargles.v gasifies.v gasps.v gazumps.v gelatinizes.v generalizes.v germinates.v gestates.v gimps.v glances.v globalizes.v glosses.v glucoronizes.v glucosylates.v gnashes.v gnashs.v gnaws.v governs.v granulates.v grasps.v grates.v grieves.v groans.v gropes.v grounds.v groups.v growls.v grumbles.v grunts.v hails.v haploidizes.v hardens.v harmonizes.v hatches.v hatchs.v heaves.v heckles.v hectors.v hedges.v heightens.v hemagglutinates.v hemoagglutinates.v hemocoagulates.v hemolyzes.v hems.v heterotransplants.v hoards.v hoes.v honks.v hoots.v howls.v hugs.v humidifies.v hums.v hurts.v hushes.v hushs.v hustles.v hybridizes.v hydrates.v hydrolyzes.v hyperarticulates.v hypercoagulates.v hyperhydrates.v hyperinflates.v hypermodifies.v hyperphosphorylates.v hyperpolarizes.v hyperproliferates.v hypersensitizes.v hyperventilates.v hypohydrates.v hypomethylates.v hyposecretes.v hypoventilates.v ices.v idles.v ignites.v immunomodulates.v immunoprecipitates.v implodes.v imprecates.v improves.v improvises.v incepts.v inclines.v incorporates.v increases.v incubates.v indents.v indulges.v indurates.v industrializes.v infibulates.v infolds.v infringes.v inhales.v initiates.v inosculates.v insonates.v intensifies.v interbreeds.v interconnects.v intercorrelates.v interlocks.v intermixes.v intermixs.v interns.v interpenetrates.v interprets.v interrelates.v interrupts.v intersects.v intertwines.v interviews.v intravasates.v intrigues.v intussuscepts.v invaginates.v investigates.v invests.v invigilates.v iodizes.v ionizes.v isografts.v isomerizes.v jabs.v jags.v jangles.v jeers.v jiggles.v jigs.v jingles.v jolts.v jostles.v juggles.v keratinizes.v kids.v kindles.v knits.v labilizes.v labors.v labours.v lactonizes.v laments.v lands.v latches.v latchs.v lateralizes.v launches.v launchs.v lectures.v left-clicks.v lengthens.v lessens.v levitates.v ligands.v liquefies.v liquidates.v litigates.v litters.v lobbies.v lobulates.v localises.v localizes.v locates.v lodges.v luminesces.v lunches.v lunchs.v luteinizes.v lyses.v macerates.v mainlines.v maldigests.v malrotates.v maneuvers.v manoeuvres.v marbleizes.v marinates.v masses.v masturbates.v mates.v medializes.v mediates.v meets.v melds.v meliorates.v mends.v merges.v meshes.v meshs.v metallizes.v metricizes.v micellizes.v microembolizes.v microencapsulates.v mills.v mimes.v mines.v misaligns.v misarticulates.v miscalculates.v miscarries.v miscounts.v misdeals.v misfolds.v misjudges.v mistimes.v mists.v misunderstands.v moans.v mobilizes.v moderates.v modernizes.v moistens.v moons.v mottles.v moulds.v moults.v mounts.v mourns.v mows.v muddles.v multimerizes.v multiplicates.v multiplies.v mumbles.v munches.v munchs.v murmurs.v muscularizes.v mutates.v myelinates.v narrows.v navigates.v nears.v necrotizes.v negotiates.v nephrectomizes.v nibbles.v nips.v nitrogenizes.v nucleates.v nuzzles.v obeys.v obsesses.v occludes.v ogles.v opacifies.v operates.v opsonizes.v orbits.v originates.v ossifies.v outbids.v outspans.v overarchs.v overbalances.v overcalls.v overcharges.v overclouds.v overdraws.v overdresses.v overfeeds.v overfills.v overflows.v overheats.v over-indulges.v overindulges.v overlaps.v overproduces.v overproliferates.v overreaches.v overreachs.v overreplicates.v oversecretes.v overspends.v overstretchs.v overtrains.v overtranscribes.v overtrumps.v overturns.v overworks.v oviposits.v oxidates.v oxidizes.v paces.v paddles.v parades.v parks.v parses.v particularizes.v parts.v passivizes.v pathergizes.v peals.v pecks.v peculates.v pedals.v peddles.v pends.v penetrates.v peptonizes.v perches.v perchs.v performs.v peroxidizes.v petitions.v petrifies.v phenolizes.v phlebotomizes.v photodegrades.v photodissociates.v photoisomerizes.v photolyzes.v photooxidizes.v photoreactivates.v pickets.v pillages.v pinocytoses.v pioneers.v pitches.v pitchs.v placers.v plasticizes.v plunders.v poaches.v poachs.v poises.v polls.v poses.v power-dives.v practises.v preaches.v preachs.v preactivates.v precontracts.v preincubates.v preplans.v presurfaces.v pretests.v pringles.v privatizes.v programmes.v projects.v promenades.v pronates.v proof_reads proofreads.v propagates.v protonates.v prowls.v pseudonormalizes.v pukes.v punctures.v punts.v purls.v pustulates.v putts.v puzzles.v qualifies.v quickens.v quietens.v racemizes.v races.v radiates.v radios.v rallies.v ramifies.v rancidifies.v ranges.v ranks.v raps.v rates.v rattles.v ravels.v reactivates.v reacylates.v readapts.v readjusts.v reanneals.v reapplies.v rearms.v rearrests.v rears.v reassembles.v reawakens.v rebleeds.v rebreathes.v rebreeds.v rebuilds.v recalculates.v recants.v recapitulates.v recaps.v receives.v recements.v recharges.v reciprocates.v recolonizes.v recommences.v recomputes.v reconfirms.v reconnects.v reconvenes.v reconverts.v recovers.v recrosses.v recruits.v recrystallizes.v recurves.v reddens.v redifferentiates.v redissolves.v redoubles.v reelevates.v reendothelializes.v reenters.v reepithelializes.v reequilibrates.v reeves.v reexpands.v refers.v refits.v reflates.v refloats.v refocuses.v refocusses.v refocuss.v re-forms.v reforms.v refreezes.v refs.v refuels.v regenerates.v registers.v regroups.v regrows.v rehearses.v rehydrates.v reincorporates.v reincubates.v reinduces.v reinflates.v reinfuses.v reinvestigates.v reinvests.v reirradiates.v rekindles.v relates.v relaxes.v relaxs.v relocates.v remarries.v remeasures.v remineralizes.v remits.v remobilizes.v remounts.v renegotiates.v reoccludes.v re-opens.v reopens.v reoperates.v reorders.v reorganizes.v reoxidizes.v repacks.v repairs.v rephosphorylates.v repolarizes.v reprises.v reprobes.v reproduces.v reseeds.v resensitizes.v resettles.v resigns.v respirates.v restarts.v restitutes.v resumes.v resuscitates.v retails.v retests.v rethromboses.v retires.v retools.v retrotransposes.v retrudes.v returns.v reunifies.v reunites.v reventilates.v reverses.v revives.v rhymes.v ricochets.v right-clicks.v rigidifies.v roams.v roars.v roasts.v rotates.v rouses.v rows.v ruffles.v ruptures.v rustles.v sacrifices.v salutes.v saponifies.v scans.v scatters.v scissors.v scleroses.v scoffs.v scolds.v scores.v scrambles.v scrawls.v scribbles.v scrubs.v sculls.v sculptures.v searches.v searchs.v seizes.v senesces.v separates.v serrates.v severs.v shades.v shams.v shatters.v shells.v shop-lifts.v shoplifts.v short-circuits.v shortens.v shoves.v showers.v shrieks.v shrinks.v shuffles.v sifts.v singes.v sinks.v sinusoidalizes.v sips.v skeletonizes.v skews.v slams.v slants.v sledges.v slenderizes.v sloshes.v sloshs.v smacks.v smears.v smokes.v smudges.v snarls.v snips.v snorts.v snuggles.v socializes.v solidifies.v somatizes.v sows.v spalts.v spatters.v spawns.v spies.v spiralizes.v splashes.v splashs.v splays.v splinters.v spoils.v sponges.v sports.v spouts.v spreadeagles.v spring-cleans.v squashes.v squashs.v stabilises.v stabilizes.v stains.v stalls.v stammers.v stampedes.v steadies.v steepens.v steeps.v steers.v stews.v stifles.v stings.v stints.v stipples.v stonewalls.v strains.v stratifies.v streaks.v strengthens.v strobes.v strums.v stumps.v subcontracts.v subdivides.v subducts.v subleases.v sublets.v submerges.v submits.v substitutes.v succeeds.v sues.v suffers.v suffocates.v summates.v superheats.v superinfects.v superovulates.v supervises.v supinates.v supplicates.v surrenders.v survives.v swallows.v swaps.v sways.v sweats.v swishes.v swishs.v swivels.v synchronizes.v synergizes.v tackles.v tans.v taps.v tarnishes.v tarnishs.v tautomerizes.v telephones.v terminates.v tetramerizes.v thaws.v thermalizes.v thieves.v thrashes.v thrashs.v threshs.v thrills.v thromboses.v throngs.v throttles.v thrums.v thumps.v thunders.v tickles.v tilts.v tines.v tings.v titivates.v titrates.v toasts.v toots.v traces.v trades.v transaminates.v transcomplements.v transcytoses.v transfers.v transgresses.v translates.v transplants.v trawls.v treats.v trebles.v triages.v trimerizes.v trots.v troubleshoots.v trumpets.v trumps.v tuberculizes.v tugs.v tums.v twangs.v twirls.v ulcerates.v umpires.v unbends.v uncoats.v uncoils.v uncurls.v underbids.v undercorrects.v underfeeds.v underprescribes.v underreports.v underspends.v undresses.v unfastens.v unfolds.v unhitches.v unhitchs.v unifies.v unionizes.v unites.v unknots.v unloads.v unlocks.v unpacks.v unravels.v unrolls.v unscrews.v unstresses.v unties.v untwists.v unwinds.v unwraps.v uploads.v urbanizes.v vaporizes.v varicellizes.v varies.v vasodilates.v ventures.v versifies.v verts.v vesicates.v vesiculates.v vests.v vibrates.v visits.v vitrifies.v vituperates.v vociferates.v volatilizes.v volleys.v vomits.v wades.v waggles.v wags.v wails.v wakens.v warps.v waters.v waxes.v waxs.v weakens.v weds.v welds.v wheals.v wheels.v whines.v whirls.v whistles.v whitens.v whittles.v whorls.v widens.v wiggles.v withdraws.v worsens.v worships.v wrestles.v wrinkles.v yells.v yields.v yodels.v link-grammar/data/en/words/words.v.1.20000644000000000000000000002632212536650433014636 0ustar abates.v abounds.v about-faces.v absconds.v abstains.v accedes.v accounts.v accrues.v aches.v acquiesces.v adenizes.v adheres.v adjoins.v ad-libs.v alights.v alludes.v ambles.v ambulates.v amounts.v anteflects.v apologizes.v apostatizes.v appertains.v aquaplanes.v arises.v arrives.v assents.v astringes.v atones.v atrophies.v attitudinizes.v autoagglutinates.v autodegrades.v autooxidises.v auto-oxidizes.v autooxidizes.v autoproliferates.v autotomizes.v autoxidizes.v baas.v babbles.v babysits.v backbites.v backfires.v backpedals.v backslides.v backspaces.v bacteriolyzes.v balks.v balloons.v bams.v banquets.v banters.v bants.v barfs.v barks.v barnstorms.v basks.v bawls.v bays.v beeps.v beetles.v behaves.v belches.v bellyaches.v belongs.v bickers.v billows.v biodegrades.v bitches.v bitchs.v blabbers.v blathers.v blazes.v bleats.v bleeps.v blenches.v blenchs.v blethers.v bloats.v blooms.v blossoms.v blubbers.v blunders.v blushes.v bodes.v booms.v brakes.v brawls.v brays.v bristles.v broods.v browses.v bubbles.v buds.v bullshits.v bunks.v burbles.v burgeons.v burps.v bustles.v cabs.v cackles.v calves.v campaigns.v canaliculizes.v canters.v capers.v capillarizes.v capitulates.v careens.v carols.v carouses.v cascades.v castles.v caters.v caterwauls.v cavils.v cavorts.v chafes.v chatters.v cheeps.v chemosensitises.v chimes.v chirps.v chirrups.v chortles.v chromatofocuses.v chromatofocusses.v chuckles.v chugs.v chums.v clacks.v clambers.v clamours.v clanks.v clashes.v clatters.v clerks.v climaxes.v clings.v clucks.v clunks.v clusters.v coalesces.v coasts.v cocirculates.v coevolves.v coexists.v cohabits.v coheres.v coincides.v collaborates.v collateralizes.v collides.v colludes.v comigrates.v commentates.v commiserates.v communes.v comodulates.v competes.v complies.v compromises.v confabs.v confabulates.v conflicts.v conforms.v congeals.v congregates.v connives.v consorts.v conspires.v convalesces.v converges.v converses.v co-operates.v cooperates.v co-ossifys.v coossifys.v coos.v copes.v copulates.v corresponds.v coruscates.v counterphases.v covaries.v covarys.v cowers.v crackles.v crash-dives.v creaks.v crepitates.v crests.v cringes.v croaks.v cross-dresses.v crossdresses.v crossmatchs.v crouches.v crows.v crusades.v culminates.v curtseys.v curtsies.v cycles.v cyclizes.v cytoadheres.v cytodifferentiates.v dabbles.v dallies.v dawdles.v dawns.v day-dreams.v daydreams.v decamps.v decays.v deceases.v declutchs.v decompensates.v decrements.v decussates.v de-etiolates.v deetiolates.v defasciculates.v defaults.v defecates.v defects.v deflagrates.v degenerates.v dehisces.v delaminates.v deliberates.v delves.v demurs.v departs.v depends.v deplanes.v deplasmolyzes.v depreciates.v deputizes.v desists.v despairs.v deswells.v deteriorates.v detracts.v detrains.v deviates.v devolves.v diets.v differs.v digitates.v digresses.v dilly-dallies.v disagrees.v disappears.v discourses.v discriminates.v disembarks.v disintegrates.v disrobes.v dissembles.v dissents.v dissertates.v dithers.v divagates.v diverges.v dodders.v domineers.v doodles.v dotes.v double-parks.v dovetails.v downshifts.v downslants.v downslopes.v dows.v drawls.v drizzles.v drools.v duels.v dwells.v dwindles.v eavesdrops.v ebbs.v economizes.v eddies.v editorializes.v effervesces.v effloresces.v elapses.v electioneers.v elopes.v emanates.v embarks.v emerges.v emigrates.v emotes.v empathizes.v encamps.v encroaches.v enquires.v ensues.v equivocates.v errs.v eructs.v erupts.v evaporates.v eventuates.v excels.v exflagellates.v exists.v exits.v exosmoses.v expatiates.v experiments.v expires.v explants.v expostulates.v exults.v faints.v falters.v fares.v farts.v fasts.v fawns.v feints.v festers.v festinates.v fibroses.v fibs.v fidgets.v filibusters.v fizzes.v flails.v flakes.v flames.v flickers.v flinches.v flirts.v flits.v flops.v flounders.v flourishes.v flowers.v fluctuates.v fluoresces.v flutters.v fly-fishes.v foot-slogs.v forages.v foregathers.v forgathers.v fornicates.v fossilizes.v foxhunts.v fragments.v fraternizes.v freelances.v free-wheels.v freewheels.v frets.v frivols.v frolics.v froths.v frowns.v fulminates.v fumes.v functions.v fundholds.v fungates.v fusses.v gallivants.v galumphs.v gambols.v gapes.v gardens.v gastrulates.v gawks.v gawps.v gazes.v gelates.v gels.v genuflects.v gesticulates.v gestures.v gibbers.v gibes.v giggles.v glares.v gleams.v glides.v glimmers.v glints.v glistens.v glisters.v glitches.v glitters.v gloats.v globe-trots.v globetrots.v glories.v glowers.v glows.v goggles.v golfs.v gormandizes.v gossips.v graduates.v grapples.v gravitates.v grays.v grazes.v greys.v grimaces.v grins.v grooves.v grouches.v grouses.v grovels.v guffaws.v gurgles.v gusts.v gybes.v gyrates.v haggles.v hales.v hallucinates.v hankers.v harks.v harps.v haws.v hearkens.v heels.v herniates.v heterodimerizes.v heteromultimerizes.v hews.v hibernates.v hiccoughs.v hiccups.v hinges.v hisses.v hitchhikes.v hobnobs.v hollers.v honeymoons.v hovers.v huddles.v huffs.v hungers.v hurtles.v hydroplanes.v hyperaggregates.v hyperdefecates.v hyperfilters.v hyperluteinizes.v hypermutates.v hypertrophys.v hyporesonates.v hyporesponds.v ice-skates.v immigrates.v immunoreacts.v impends.v impinges.v inches.v infarcts.v innovates.v interacts.v intercedes.v intercommunicates.v interdigitates.v interferes.v intermarries.v intermingles.v intervenes.v introspects.v intrudes.v intumesces.v inveighs.v involutes.v itches.v jabbers.v jack-knifes.v jaunts.v jaws.v jay-walks.v jaywalks.v jells.v jests.v jibes.v jitters.v jives.v jockeys.v jokes.v journeys.v jousts.v kemps.v kowtows.v lacrimates.v lactates.v lags.v languishes.v lapses.v lases.v laughs.v leafs.v leers.v legislates.v liaises.v lip-reads.v lisps.v lives.v loafs.v locomotes.v loiters.v lolls.v longs.v lopes.v lounges.v lowns.v lumbers.v lurches.v lurks.v lusts.v luxuriates.v majors.v malfunctions.v malignizes.v malingers.v marauds.v marvels.v masquerades.v materializes.v matriculates.v maturates.v matures.v maunders.v meanders.v meddles.v meditates.v menstruates.v meows.v metamorphoses.v metastasizes.v mews.v miaous.v miaows.v micturates.v migrates.v militates.v mingles.v ministers.v misbehaves.v misfires.v molts.v monkeys.v mooches.v moos.v mopes.v moralizes.v moseys.v motioned.v motions.v motors.v moulders.v muck-rakes.v mushrooms.v mutinies.v name-drops.v naps.v natters.v necks.v necroses.v neighs.v nests.v networks.v niggles.v nosedives.v noshes.v objects.v occurs.v officiates.v orates.v oscillates.v oscitates.v osmoregulates.v osmoses.v osseointegrates.v outgoes.v overacts.v overbids.v overcompensates.v overeats.v overlies.v overreacts.v oversleeps.v overwinters.v ovulates.v pales.v palls.v palpebrates.v palpitates.v panders.v panhandles.v panics.v pants.v parachutes.v parleys.v partakes.v participates.v patters.v pauses.v peaks.v pearls.v peeps.v pellates.v perambulates.v percolates.v perishes.v perseveres.v persists.v perspires.v pertains.v philanders.v philosophizes.v picnics.v piddles.v pimps.v pings.v pirouettes.v pivots.v planes.v play-acts.v plods.v plummets.v politicks.v polkas.v pollocks.v poms.v pontificates.v pores.v postures.v potters.v pounces.v pouts.v powwows.v prances.v prates.v prattles.v preachifys.v predominates.v pre-exists.v preponderates.v preregisters.v presides.v prevails.v prevaricates.v preys.v primps.v procrastinates.v procreates.v profiteers.v profits.v progresses.v prolapses.v proliferates.v propagandizes.v proselytizes.v prospers.v protrudes.v pub-crawls.v pules.v pullulates.v pulsates.v pulses.v puns.v pupariates.v pupates.v purrs.v pussyfoots.v putrefies.v putters.v quacks.v quakes.v quarrels.v quarries.v quavers.v quests.v queues.v quibbles.v quips.v quivers.v rackets.v rafts.v rages.v rails.v rains.v rambles.v rampages.v rankles.v rants.v rasps.v rats.v raves.v reacts.v reappears.v rebels.v rebounds.v recedes.v reclines.v recoils.v reconnoitres.v recriminates.v recrudesces.v recuperates.v recurs.v redecussates.v redounds.v re-echos.v re-emerges.v reemerges.v refects.v refixates.v reflows.v refrains.v regresses.v reigns.v re-infarcts.v reinfarcts.v re-intervenes.v reintervenes.v rejoices.v relapses.v relents.v relies.v reminisces.v remonstrates.v renarrows.v rendezvouses.v reneges.v re-occurs.v reoccurs.v repetaturs.v repines.v resides.v resonates.v resorts.v resounds.v respires.v restenoses.v rests.v results.v resurfaces.v retaliates.v retches.v retreats.v retrenches.v retrogrades.v retrogresses.v revels.v reverberates.v reverts.v revolts.v revolves.v rhapsodizes.v riots.v ripens.v ripostes.v ripples.v rockets.v romances.v romps.v rooms.v roosts.v rootles.v rough-houses.v roves.v rubber-necks.v rubbernecks.v rumbles.v ruminates.v rummages.v rusts.v sags.v salivates.v saunters.v scampers.v scar_cicatrizes scavenges.v schemes.v scintillates.v scowls.v scrams.v screeches.v scrimps.v scrimshanks.v scrolls.v scrounges.v scubas.v scuffles.v secedes.v seesaws.v seethes.v sermonizes.v seroconverts.v seroreverts.v shadow-boxes.v shadow-boxs.v shilly-shallies.v shillyshallies.v shilly-shallys.v shimmers.v shits.v shivers.v shrimps.v shudders.v side-slips.v sides.v sidles.v simmers.v simpers.v sins.v sizzles.v skates.v skedaddles.v skimps.v skirmishes.v skulks.v skylarks.v sky-rockets.v skyrockets.v slackens.v slaloms.v slavers.v sleets.v slithers.v slobbers.v slogs.v slouches.v slumbers.v slums.v slushs.v smarts.v smiles.v smirks.v smolders.v smoulders.v snacks.v snakes.v sneers.v sneezes.v snickers.v sniffles.v sniggers.v snipes.v snitches.v snivels.v snoops.v snoozes.v snores.v snowballs.v snowboards.v snowshoes.v snows.v snuffles.v sobs.v softlands.v sojourns.v soliloquizes.v somersaults.v soughs.v sours.v sparkles.v spars.v specialises.v specializes.v speciates.v speechifies.v spermiates.v sphacelates.v splurges.v splutters.v sprawls.v sprints.v sputters.v squabbles.v squalls.v squawks.v squeaks.v squeals.v squints.v squirms.v stagnates.v stems.v stone-walls.v straggles.v strays.v strides.v stridulates.v strives.v struggles.v stutters.v subscribes.v subsides.v subsists.v subspecializes.v subs.v succumbs.v sulks.v summers.v sunbathes.v supercoils.v supervenes.v suppurates.v sups.v surfaces.v surges.v swaggers.v swarms.v swelters.v swerves.v swirls.v swoons.v sympathizes.v tampers.v tap-dances.v tapdances.v tarries.v tattles.v taxis.v teems.v teeters.v teethes.v temporizes.v tergiversates.v testates.v thrives.v throbs.v thuds.v tingles.v tinkers.v tipples.v tiptoes.v titters.v tittle-tattles.v toadies.v toboggans.v toils.v tolls.v tootles.v totters.v touch-types.v towers.v toys.v traipses.v transmigrates.v transpires.v travels.v treks.v trembles.v trespasses.v trifles.v trifurcates.v triumphs.v trundles.v tunnels.v tussles.v tweets.v twinkles.v twitches.v twitters.v ululates.v underacts.v undulates.v uplinks.v urinates.v urticates.v vacations.v vacillates.v vacuolates.v vamooses.v vamps.v vanishes.v vaults.v vegetates.v venodilates.v verbigerates.v verges.v vies.v volvulates.v vouches.v voyages.v waddles.v waffles.v wallows.v waltzes.v wanders.v wanes.v wanks.v warbles.v water-skis.v waterskis.v wavers.v weeps.v welshes.v welters.v wheezes.v whelps.v whimpers.v whinnies.v whirrs.v whirs.v wilts.v winces.v winks.v wiretaps.v wisecracks.v withers.v wobbles.v womanizes.v wool-gathers.v woolgathers.v wrangles.v wriggles.v writhes.v yachts.v yaks.v yammers.v yangs.v yaps.v yawns.v yaws.v yearns.v yelps.v yens.v yips.v yowls.v zags.v zigs.v zig-zags.v zigzags.v link-grammar/data/en/words/words.n.2.s.biolg0000644000000000000000000000022012536650433016010 0ustar epsilons.n zetas.n etas.n thetas.n kappas.n lambdas.n mus.n nus.n xis.n omicrons.n pis.n rhos.n sigmas.n taus.n upsilons.n phis.n chis.n psis.n link-grammar/data/en/README0000644000000000000000000001617312536650432012536 0ustar Dictionary Data --------------- Research notes. There are currently 63 data files in the 'words' directory. Of these, 8 are not distinct (*biolg*, *medical*) and so there are effectively just 55 "clusters" here. There are 1754 semicolons in 4.0.dict and 1772 colons. This implies that there are approx 1650 to 1700 word clusters in 4.0.dict since many of the semi-colons appear in lines that merely define new classes. A better count of the contents of 4.0.dict yeilds 1430 distinct clusters. There seem to be 86863 word forms in the dicts Example cluster from Siva's dataset: cluster469 bets.n -- ../blah/words.n.2.s doubts.n -- ../blah/blah-29 excuses.n -- ../blah/blah-34 foes.n -- ../blah/words.n.2.s warnings.n -- ../blah/blah-29 Actual disjunct usage: select inflected_word, disjunct, count, log_cond_probability from disjuncts where inflected_word='bets.n' order by log_cond_probability; bets.n | Jp- Dmc- | 5.38320328295231 | 2.68897695164809 bets.n | Op- | 6.59906960930676 | 2.79728207561233 bets.n | Op- Dmc- | 4.49985344521703 | 2.94756384236018 bets.n | Jp- A- MXp+ MXp+ | 2.94644784927368 | 3.5584651263364 bets.n | Jp- A- | 2.8032719194889 | 3.63033016407109 bets.n | Op- Mv+ | 2.38083738088607 | 3.86597277463304 doubts.n | Op- | 14.7235374869777 | 2.53482148983126 doubts.n | Op- Dmc- | 12.8798744678498 | 2.75360123030737 doubts.n | Jp- A- | 3.70244218036532 | 4.39933529761974 doubts.n | Op- A- | 4.28538444498555 | 4.52871084843059 doubts.n | Opt- | 2.90120184421541 | 4.75116183218627 doubts.n | Jp- Dmc- | 2.40070396848023 | 5.02435498790713 excuses.n | Op- Dmc- | 5.50880998373031 | 2.32890577902052 excuses.n | Op- | 5.03419046103953 | 2.45888667993668 excuses.n | Jp- Dmc- | 4.23024629056454 | 2.70990481825512 excuses.n | Op- TOn+ | 1.90192013978957 | 3.86318980988967 excuses.n | Op- AN- TOn+ | 1.79344245046377 | 3.9479150280805 excuses.n | Opn- | 1.65557911992073 | 4.06331052106999 foes.n | Op- Dmc- | 7.72758442535996 | 3.08401721340472 foes.n | Jp- | 5.78156289178878 | 3.50257518460873 foes.n | Jp- Dmc- | 8.53048111009413 | 3.55652688759394 foes.n | Op- | 4.24155412614344 | 3.94944175213513 warnings.n | Op- | 13.1191083714365 | 2.73150374115749 warnings.n | Op- Dmc- | 12.4493113420905 | 2.80710747394272 warnings.n | Jp- Dmc- | 8.38247973471882 | 3.37772441764546 Here's another curious one: cluster992 banker.n fisherman.n illustrator.n lyricist.n mechanic.n periodical.n psychiatrist.n sculptor.n all from words.n.1 -- thus does not broaden coverage ... but are very nearly all a profession! mechanic.n | Js- Ds- | 13.7642659600825 | 2.88500665850946 mechanic.n | Os- Ds- AN- | 7.06177791953084 | 3.84783097573959 mechanic.n | AN+ | 6.95599334826693 | 3.86960587427955 mechanic.n | Js- Ds- AN- | 6.24886311846786 | 4.02426868916609 mechanic.n | Ost- Ds- R+ Bs+ | 5.70536887645721 | 4.15554226141072 fisherman.n | Ost- Ds- | 6.96868003904821 | 3.15873229404902 fisherman.n | Js- Ds- | 6.63831343245697 | 3.22880096148911 fisherman.n | Ost- Ds- A- | 5.21447241306305 | 3.57709641838825 fisherman.n | AN+ | 5.15915525704624 | 3.59248284744609 illustrator.n | Js- Ds- | 23.8048364557326 | 2.60514384269322 illustrator.n | Ost- Ds- | 16.1435659294952 | 3.55061043888198 illustrator.n | Ost- Ds- A- | 12.5473636660028 | 3.5717400794719 illustrator.n | Ost- Ds- R+ Bs+ | 6.37835476174951 | 4.43506613246927 illustrator.n | Ost- Ds- AN- | 6.57567423582078 | 4.43628494235792 illustrator.n | AN+ | 5.92789142578842 | 4.54073145072105 periodical.n | AN+ | 13.523933645105 | 2.25884735662492 periodical.n | Ost- Ds- R+ Bs+ | 4.69391736388206 | 3.78549785079099 periodical.n | Os- Ds- | 3.54950597882271 | 4.18867205040734 periodical.n | Os- Ds- Mv+ | 4.4908520579338 | 4.32151671611172 periodical.n | Js- Ds- | 3.46312434598804 | 4.51594109897193 Examined 1165 clusters, recorded 626 Examined 13026 words, and 2218422 disjuncts Average 11.181116 words/cluster; average 3543.805112 dj's/recored-cluster real 3m42.396s user 3m35.157s recorded 628 recorded 622 Examined 1165 clusters, recorded 622 Examined 12952 words, and 2239866 disjuncts Average 11.117597 words/cluster; average 3601.070740 dj's/recored-cluster Got 74 mismatch warnings fixes w/o: 226 w/: 225 bilog w/o: 38 w/: 38 To get the full-length list -- Disjunct *d1 = build_disjuncts_for_dict_node(dn); -- but is obsolete ... free_disjuncts(d1) instead, use build_sentence_disjuncts() which use build_disjuncts_for_X_node() make float pt: in build-disjuncts.c == done todo -- build_disjuncts_for_X_node == done build_clause == done build_disjunct == done build_sentence_disjuncts -- preparation.c but preparation.c ... prepare_to_parse from api.c sentence_parse and retry from link-parser with more null counts. ====================== Historical trends: enwiki/A: grep -- version 4.3.5 num_skipped_words= * | wc 773352 num_skipped_words="0" 388819 or 50.3% num_skipped_words="1" 148214 or 19.2% num_skipped_words="2" 83234 or 10.8% num_skipped_words="3" 43957 or 5.7% num_skipped_words="4" 28998 or 3.8% num_skipped_words="5" 19677 or 2.5% enwiki/E: grep --- version 4.3.5 or so num_skipped_words= * | wc 980218 num_skipped_words="0" 479076 or 48.9% num_skipped_words="1" 190183 or 19.4% num_skipped_words="2" 107265 or 10.9% num_skipped_words="3" 56875 or 5.8% num_skipped_words="4" 39240 or 4.0% num_skipped_words="5" 27431 or 2.8% enwiki/J: grep --- version -4.5.7 or so num_skipped_words= * | wc 1744284 num_skipped_words="0" 914187 or 52.4% num_skipped_words="1" 332653 or 19.1% num_skipped_words="2" 176185 or 10.1% num_skipped_words="3" 87241 or 5.0% num_skipped_words="4" 57509 or 3.3% num_skipped_words="5" 38483 or 2.2% link-grammar/data/en/4.0.constituent-knowledge0000644000000000000000000000307212536650432016427 0ustar DOMAIN_STARTER_LINKS: S##* S##i SF SX Ce* Cet RS O OX Js Jp J* MVp Mp R* Rn Pa TH Pg Pv I PP Cr Cs MX#* Wc Wd Wi TI BIt MVs TO Mv Mg* MVa OF ON IN QI Ma CP* CPi CPx MVt S##w MX#r Pp MVi MVg Mgp MVx SI MX#p Cc S##t S##h S##b S##q L MX#a MG JG MX#x U S##d JT MVh Mr B#w B#d MVb COq Mj OD CX S##g PF Zc MX#d Bc K NIax DOMAIN_CONTAINS_LINKS: URFL_ONLY_DOMAIN_STARTER_LINKS: LEFT_DOMAIN_STARTER_LINKS: A EA E CO#s CO* COd* YS YP Yt Yd GN DTie CO#n COp D##n ND STARTING_LINK_TYPE_TABLE: S##* v S##i v S##t v S##h v S##b v S##q v S##d z S##g v SF v SX v Wd s Wc s Wi z Ce* s Cet s TH b RS z O n OX n Js n Jp n J* n MVp p Mp p R* b Rn s Pa a A u Pg v Pv v I v PP v Cr s Cs s MX#* n TI n BIt n MVs b EA e E e TO t MVi t Mv v Mg* v CO#s f CO* g COd* g CO#n g MVa i MVb i OF p YS y YP y IN n ON n QI b Ma a CP* s CPi s CPx q MVt p MX#r b S##w z Pp p MVg z Mgp z MVx p SI n MX#p v Cc s L a MX#a a Yt y Yd y MG p JG n GN y MX#x p U n JT n MVh b Mr b MX#d b B#w s B#d s DTie e COq s Mj b OD n CX s COp c PF v Zc s Bc s K k D##n d ND d NIax h ; ---------------------------------------------------------------------- ; These links are not put in the word/link graph. They also cannot be the ; starter links for a domain. IGNORE_THESE_LINKS: Xca HA ; ---------------------------------------------------------------------- ; these links are not traced further if they point back before the root word RESTRICTED_LINKS: B#* D##w B#w B#d AFh MVt Xx HL SFsic AFd Bc CX EAh H HA PFc B#j Wd PF Z BW link-grammar/data/en/4.0.fixes.batch0000644000000000000000000025642212536650432014302 0ustar !verbosity=1 !echo !limit=1000 !batch !short=20 !constituents=1 !spell=0 !use-fat=0 % Example sentences showing BUG FIXES since link-grammar 4.1b % as well as demonstating bugs that remain to be fixed. % % Missing nouns. He picked up the game die. People use espresso to make other coffee drinks. Espresso is a coffee drink. % Pronoun fixes I'll hire whomever I can find. % Misc stuff I know which book he read. I know what book he read. Mommy loves me. Mother likes her. I am pooped. John is bigger than Dave is. John wants more cookies than Dave wants. It was covered with bites. Alice took a bite out of it. % phantom commas I have no idea, what that is. I have no idea what that is. % Phantom-and: % the comma implies an "and", which is not actually voiced: His shout had been involuntary, something anybody might have done. % gone The position we talked about is gone. The keys are gone. The popcorn is all gone. The good times are done and gone. It's now a gone desire. He slunk over to the water-fountain. % tend I tended to believe that shepherds tend sheep. I often tended, for years at a time, to believe that shepherds quietly tend sheep. % misc nouns, verbs The smelter weighs 30 tonnes. He wears a mustache on the sitcom. She's sharp-witted and funny. He resigned that post. Exxon discovers gas offshore. The line extends 10 miles offshore. Give it a shake. Take the two shakes over to table five. There was wind and rain. % "saw" w/ particle He tried to saw the wood. He tried to saw up the wood. We were sawing wood when it happened. We were sawing up the wood when it happened. % Assorted adverbial modifiers It has been unbelievably poorly managed. It has been notoriously managed. It has been notoriously badly managed. The store was poorly stocked. The play was dreadfully written. % Adverbial modifiers with EBm- There is absolutely no reason to believe American companies cannot compete overseas. There are rumours of a tightening of credit There are rumours of a collapse of credit What exactly do you want? What, exactly, do you want? What precisely do you want? % suddenly is a "manner adverb", sometimes clausal He sat up suddenly. He suddenly found soup in his lap. % double-commas on of_course It was, of course, his fault. It reduced chances that profits could equal thier earlier performance The motor ran flat out It happened during the 1988 first half % so He did not perform nearly so well. The price didn't drop nearly so fast. The price didn't drop nearly as fast. It went almost so well that we thought we won! % ready Is it ready? Do you have it ready? Do you have a more complex example ready? % enough We have quite enough work already, thank you! That'll be quite enough. That is quite enough rough-housing. That is enough rough-housing. Enough rough-housing! Enough! % other expletives What a lousy example sentence! % Proper names (entities) in the form of noun modifiers % The problem is that some of these appear in entity names % and thus must be explicitly listed in the dictionary. My name is Gilles de la Tourette. I live in New York City. I work for the First National Bank. I live near the San Gabriel River. I was born in the Armenian Soviet Socialist Republic. I was born in the Soviet Union. My insurance carrier is United Healthcare. We took the ferry to Block Island. The man from Federated Conglomerates is here. I work for the Great Southern and Western Railroad. Central Texas is hot. North Sea crude was up. Korea First Advertising Co. stock is up. Quantum shares were up in trading. The Orange Democratic Movement called for a new election. It lies in the western Pacific Ocean. It is in the Gulf Territory I live near the Orkney Islands He is the man from Syndicated Features He represents the Undersea Exploration Company He represents the Equatorial Antarctic Bank % Some given names can be proper names The late Mr. Tom will be sorely missed. % Proper name modifiers It dates back to fifteenth century France. % Biological texts commonly have adj-noun-adj-noun chains We extracted human umbilical vein endothelial cells. We extracted smooth muscle myosin heavy chain protein. We extracted peripheral blood mononuclear cells. It is located on the nuclear envelope inner membrane. We extracted simian virus large T-antigen. We collected HTLV-I infected T-cells. They are a three times defeated team. % Verbs taking prepositions He dished it out at the unsuspecting onlookers. I ladled it carefully into a bowl. You should ladle it out. He ladles it with a large wooden spoon. He was ladling the molten steel when the crucible tipped. He ladled the molten hot metal into the mold. It was molten hot. It was piping hot. It was devilishly hot. % mass nouns that were incorrectly classified as count nouns. % Nouns that can be used in an indefinite manner. I will give you a piece of armament. I will give you a piece of bagel. I will give you a bit of courtesy. Give me a piece of almond. Give me a bit of anaesthetic. Give me a piece of apple. He broke off a piece of bagel and gave it to me. A piece of asteroid broke off. Add one spoonful of avocado. I ate a bit of biscuit. She exposed a bit of bikini to us. A piece of cactus went sailing through the air. There were three cacti in front of us. Add a cup of finely shredded carrot. A length of chain was wrapped around the tree. He left town early next morning. I gave her a check for deposit. % More nouns that can be indefinite .. magazine, crisis, % musical instruments. He wrote for Playboy magazine. I know how to play guitar. The violence has thrown the country into crisis. The violence has created a crisis. % level as indefinite noun, adjective, etc. % Unfortunately, this leads to a combinatoric explostion when % 'level' is a modifier: "He keeps a level head in an emergency" The process uses abrB transcription as an indicator of Spo0A~P level The platform was at knee level. % 'family' as a mass noun They are like family to us. He is like family to us. % Test cases for noun countable/uncountable nouns: I have much furniture. *I have many furniture. % Test cases for a/an usage with vowels/consonants: *I ate a apple. I ate an apple. I ate a little apple. *I ate an little apple. I ate a banana. *I ate an banana. *He has quite a imagination. He has quite an imagination. *He has such a imagination. He has such an imagination. *That is more of an challenge. That is more of a challenge. % nouns not in words.n.1 *an majority agree a majority agree *an number agree a number agree *it's an kind of test it's a kind of test *it's an sort of test it's a sort of test there's an argument brewing *there's a argument brewing he gave me an excuse *he gave me a excuse That is an issue *That is a issue *There is an way There is a way *There is an place There is a place That bitch did it! % Special-case superlative adjectives % "favorite" can take determiner "a" Arkansas has become a favorite place for older people to retire. Global Trotter, a favorite, seems unlikely to place. % Superlatives without preceeding determiners. He likes you best. He bores you most. He bores you the most. He likes you least. He likes you plenty. Mr. Bingley may like you the best of the party. He may like you best of all. He may like you the best of all. He may like you least of all. He may like you the least of all. He may like you most of all. He may like you the most of all. % Interuptives with preps. These probably should take CO links. You, least of all, should know. You, most of all, should know. You, out of everyone, should know. You, at least, should know. This is the man who, in some ways, I would like to hire % Color names can be nouns as well as adjectives: She prefers red. Blue is the new black. % bright.e in an adverbial role: some areas appear bright red. some areas look bright red. % Verbs acting as adjectival modifiers (A+ link): % Everything in v.2.3, v.4.3, v.6.3 and v.8.3, and special cases: This has become a very politicized deal. You need to provide an ordered list. The given reference is incorrect. The provided reference is incorrect. The allied army is on the move. The adjusted balance is incorrect. The poured concrete slowly hardened. The wired connection has gone bad. The telegraphed orders never arrived. Do you have any ruled paper? I gave him some ruled paper. % Pg+ links between verbs and gerunds He imagined hitting the ball. She imagined photographing the couple. He feared hitting the wall. I emphasize hitting your targets in my lectures. He confirmed missing his targets He regretted firing the man. I regret really smashing it. He disputed punching the man. I recollect raising the bar for that team. I envision building a very tall building. He tried stopping the man. I enjoy running the show. % Here a Ce+ link is used to attach to the subject % i.e. the gerund, acting as a noun. e.g pushing, trusting He conceded pushing the button was a mistake. We concluded trusting him was a mistake. We concluded that trusting him was a mistake. % come, came with gerunds The dog came running at the master's call. The dog comes running when he's called. The ball came flying at his head. % gerunds with determiners It's a polishing of prose. It is a thinning of the herd The event features a running of the bulls % assorted mis-classified verbs. He is allied with the Reds. % Sentence openers % Some of these need to take the Z- link, when % the "I" is optional. But others take the Cs+ link. % Said, guessed do the right thing here... As guessed, he was lying. As I guessed, he was lying. As I reckon, it won't happen here. As I sensed, it was all a lie. As I said, it was all a lie. As I verified, the switch was off. As I trust, it's all over now? It's all over, I trust? Sure enough, there it was, as I had sensed. Sure enough, there it was, as I had guessed. There it was, just as I had said. % zero-subject/phantom-subject in sentence opener As mentioned before, we are creating a business service. % Buggy opening clauses Some days, the trains run on time. Some of the time, I really hate it. The rest of the time, we goof off. Part of the year, we goof off. % up as prep vs. up as verb He forced it up the stairs. He willed it up the stairs. He jammed it down his throat. He jammed it up into a corner. He upped the bid. We are planning to up the bid. Ante up! % Optionally transitive verbs taking particles that were mis-classified. Water and oil don't mix. The computer doesn't boot. The computer doesn't boot up. Canvas is for painting on. Use a piece of paper to write upon. A piece of paper can be used to write upon. Once he goes, we can clean up. He really cleaned up! I watched the bomb blow up. We pushed the button, then it blew up % stay, bite is optionally transitive The judge stayed the prisoner's execution Michael stayed his anger I stayed the week with my parents We stayed the duration of the game. Mere rain will not stay the mailman. That dog will bite! % resolve can be intranstive He resolved on a course of action He decided on a course of action % drink is optionally transitive we drank we drank up we drank up all the milk Drink up! % null-of -- "of" is sometimes elided; use the ALx link. he has drunk all of the ale. he has drunk all the ale. he has eaten all the chocolate. % Some ditransitive verbs of various complexity He poured me a glass of champagne. *He poured me. He sang me a song. *He sang me. He sung me a song. He had sung a song. *He had sang a song. He will sing you good night. She was singing me a song. She sang soprano for the Philharmonic. Oscar Peterson played piano and wrote music. He wrote for piano and flute. He plays marimba and a lot of cowbell on that track. % more ditransitive and etc. I stared him down. We shouted him down We shouted him down off the stage. He pushed him down. He shouted out. He shouted out in pain. He cried out. He cried out in pain. He was shouted off the stage. They yelled and booed him off. She stalked off. She stalked off in a huff. She stalked him all day. She stalked him day and night. *She stared him She looked him over. She carefully looked him over when he got back to London. She carefully looked him over in London. *She looked him. *She shouted him. *She cried him. She sounded him out. She sounded him out when he got back to London. He drew me a picture. She bore me a child. She bore me. I dare you. She dared me. She dared me to jump. She had written him off. She had told him off. He will draw you a check later today. He wired me the money yesterday. He telegraphed me the go-ahead. She waved me off. The policeman waved me on. We danced 'til dawn. We danced the samba 'til dawn. They danced the whole night through We danced the night away. They danced up a storm. She danced me a little dance. They danced away on a cloud. They danced off on a cloud. We danced it up. She waved me goodbye. She waved me good bye. He bid me hello He bid me goodnight He bid me farewell. He bid me welcome. She shouted him goodnight. She kissed him goodnight. She wished me a happy birthday. We will have to sit it out The waitress sat us down at the table The coach sat me out for the inning. She is going to stand you up. % More verbs taking prepositions We will party until dawn. We will party hardy until dawn. We will party on 'til dawn. Let's party! We boozed the night away. We boozed it up. We will booze it up until dawn! We clowned the night away. We dozed 'til noon. % imagine is a lot like vc-see, vc-watch. John imagines himself lost in the woods. John imagines himself singing from a mountaintop I imagined myself dozing on a sunny beach John imagined Mary as innocent as a lamb. % sit, stand must take Pa+ link ... The house now sits vacant The house now stands vacant The house now sits empty The dog sat very still The dog sat up. The dog stood still. The dog looked tired. Stay a little while. Stay a while. % More Pa+ links: He was presumed innocent He was presumed innocent of the crime He was made aware of the crime He was declared dead He was declared dead after a cursory examination. he was declared dead of suffocation. He was judged innocent we judged him as innocent as a lamb He was judged innocent of the crime % turn - ditransitive with adjective (predicative adjective) Pa**j link The thought was turning him green with envy. The cancer treatment was turning John bald. The cancer treatment was making John bald. The treatment turned him bald in an instant. Who did you turn envious today? The witch turned him green. % more Pa**j links: The doctor declared him dead on arrival. The doctor declared him insane. The doctor made him insane. After that failure, we feared him untrainable. We presumed him innocent, for now. We suspect him incompetent in such matters. The loud music drove him insane. You are driving me crazy. You are making me crazy. The thugs beat him senseless. The cold froze the mud solid. % Like the above, but can only be used with "dead" He was slain dead by the arrows. % paint, color, with color names; constructions like % "pale yellow" mean that the color names are nouns (O*n) and % not predicative adjectives (Pa**j) Just paint it white Just paint it all white Just color it black Please paint it pale yellow Paint the car bright green. The house is painted all white The house was painted pale yellow The house was painted a fading yellow The house was painted a faded yellow The house is painted a sublime shade of yellow % act out, act up He is going to act out until he gets what he wants. Call me if it acts up. The motor was acting up. He is acting out. He is acting out his fantasies. % beckon She beckoned to him. She beckoned him over. She was beckoning in that dress. % More verbs taking prepositions He pulled himself upright. He uprighted the fallen vase. It flexed once or twice in her hand. The economy weakened as prices spiraled up. Shares slid $2.66 in Big Board trading. Issues tumbled 4.2% last week. % Begin, began It began in Germany. It begins here. It begins now. It has begun in Cincinatti; it won't be long now. It really began in Chicago in the spring. It really began in Chicago last spring. % subject-verb number agreement *She are going shopping. % Assorted prepositional difficulties. A bucket of chum sat near the tackle box. It was a sad bit of commentary to read. His works disclose a mastery of composition. There's a lot of cowbell in that song. There is a bit of cowboy in him. There's a bit of creep in the mission statement. He had to eat a bit of crow. A length of cutlass gleamed in the sunlight. I had a bite of donut before going out. He had a bit of egg on his face. It was as frail as eggshell. The ice was green as emerald. He ruled by fiat. We saw a school of flounder in front of us. There was a bit of gaudiness to the show. He had a bit of gumshoe in his cleverness. There was a lot of gyration in the Senator's words. I asked for half-a-pound of hamburger. There was a tone of harlot in her voice. There was a pretense of hero in his swagger. He ladled out a bowl of homily in his sermon. We played a game of hoop. The truck carried 2 tons of nitrate. He nibbled on oatcake. Miles of ocean lay before him. It was painted in drab olive and oat. We ate omelet for lunch. He suddenly found pancake in his lap. A pinch of parsnip finished the recipe. We ate pate on crackers. It was made of pearl and oystershell. He spoke pidgin. The platter was swept with an ocean of prawn. A plate of quiche drifted by, followed by a tub of quince. Then we moved on to rabbit and rarebit and a salad drowning in ranch. We drank sake all night. A wall of shrubbery faced us. She fried breaded smelt for dinner. We went hunting squirrel. A bit of swimsuit glittered under her tank top. Thunderclap upon thunderclap rattled the windows. Waterfowl filled the sky. Some Jolly Rogers taste like watermelon. It smells like someone is smoking weed. It tastes of yam. He clutched a purseful of złoty. A chair is something you sit in. A bed is something you sleep in. He breaded the chicken in a mixture of flour and breadcrumbs. I had an off day. Kim eats pizza with chopsticks. % Somewhere is broken ... Off in the distance, a dog barked. Far in the distance, a dog barked. Somewhere in the distance, a dog barked. Somewhere, far away, a dog barked. Somewhere else, a cat meowed. The ticking came from somewhere near. We are finally getting somewhere. The record skips somewhere about halfway through. % strong.e adverb The Miami market is coming back strong His approaches were coming on strong. The party was going on strong The party is still going strong % post-verbal adjectives (really, adverbs ... ) The crisis is bleeding the bank dry He slowly bled the helium tank He bled off some speed with a sharp banking maneuver She slowly wrung the towel dry She slowly wrung the towel out She wiped it clean She wiped the table dry enough. She ironed it flat He combed his hair straight back He nailed it flat to the wall He pushed him flat against the wall He hit it flat on the head He hit me hard on the head She knocked me blind off my feet He robbed me blind. I liked her well enough % tired, fresh, refreshed in a post-verbal use We will arrive sooner than they We will arrive more tired than they. We will arrive a lot more tired than they. We will arrive a great deal more tired than they. We will arrive a little more tired than they. We will arrive less refreshed than they. We will arrive less happy than they. We will arrive less fresh than they. We will arrive tired. We will arrive exhausted. % clean.e as a bona-fide adverb She clean forgot to take it back % drug culture vocabulary It smells like someone is smoking maryjane. It smells like someone is smoking pot. We brought back a kilo of boo from Mexico. He took a gram of snort to the party. % Problems with "that" % VP that CLAUSE: The response was that there are several barriers that have to come down. % "The thing that VP is that CLAUSE" The only thing that has prevented a collapse in the dollar so far is that it is the currency reserve of the world. The thing that has prevented a collapse is that it is the currency reserve. The thing that is funny is that it is wrong. % shame commonly used as a count noun. He felt a deep shame. The shame of it is that it was a good idea. I say it's a damn shame that he left. It's a shame that the deal collapsed. The whole thing is a crying shame. The whole thing is a fucking shame. The shame of it is that it was a good idea. The shame of it is, is that it was a good idea. The shame of it is that the lynchpin failed. The crux of it is that the lynchpin doesn't do anything. The crux of the plan is to take the fort. The shame of the priest is on all our minds. The idea of it is to act first. The shame of it is that we must act first. The crux of it is that we must act first. The crux of the plan is that we must act first. The idea of it is that we must act first. % However, words.n.3 needs to be culled: *A shame is easy to understand. It demonstrated a certain aloofness. It demonstrated a certain adroitness. It demonstrated a certain aggressiveness. *It demonstrated a certain acetylene. *It demonstrated a certain aluminum. The acetylene exploded. *The adroitness exploded. % bug fixes for google-code bug tracker issue 13 John is pretty insanely stupid. John is rather excrutiatingly dull. John is rather exceptionally dull. John is rather unbearably dull. John is rather far from smart. John is rather incredibly dull. John is altogether incredibly dull. John is altogether amazingly quick. John is altogether stunningly dull. John is altogether stunningly inept. John is very atrociously gluttonous. John is rather quite dull. John is notably rather dull. John is plainly rather dull. John is obviously quite dull. John is quite fashionably late. John is so infernally frustrating. John is very unacceptably insubordinate. John is rather very insubordinate. John is rather far from dumb. John is rather quite dumb. John is altogether a bit boring, wouldn't you say? John is incomparably smarter. John is unflinchingly direct. John is undisputably the king. John is undeniably the winner. John is unarguably the winner. The car is unimaginably faster. The car is ridiculously faster. The Wehrmacht is unacceptably more dangerous. Rockefeller is fabulously richer. This computer is relatively more expensive. It's an inherently better method. It's a marginally less productive well. That one is a marginally better choice. It's a moderately faster way of doing things. John is rather incomparably smarter. It's a rather inherently better method. John is quite certainly a better choice. % Similar buggy sentences: *John is nimbly strongly dull. *John is boundlessly charmingly polite. John is boundlessly, charmingly polite. John is stupidly, insanely dull. % done, finished, started I have started working. I will start working. I am done working. I am done being angry. I am done with being angry. I am finished being angry. I am through being angry. We took a through flight. It's a done deed. % Some idiomatic expressions involving "doing" % Somewhat inconsistent, though. I am doing fine. I am doing poorly. He is doing ok. He is doing okay. He has done very well. I am doing much better, thank you. It is going terribly. It is going well. I'm feeling awful. % Expressions with direct and indirect objects I asked him a question. I told Jim a story. I want it back. I want the book back. I want it now. I want the book now. I want the book here, now. I want it green. I want it shiny. I wish it was shiny. I want it brilliant. I want the review to be brilliant. I want it done. I want the job done. I want it finished. I want the job finished. I want it over with. I want these troubles over with. I wish it was over with. I want it completed. I wish it was completed. I want it fixed. I want it fixed up. I want it cleaned up. I want it gone. I wish it was gone. I want to be rid of it. % Passive subjects with objects. I was asked a number of questions. I was told that crap, too. I was told all about it. I was told the whole story by Maybeline. He enquired my whereabouts. He inquired at the door. % threat.n singular and mass. The old system is in threat of breakdown. The area remains under severe threat of fire. He poses a threat to security. % Good sentences ... I heard a bark in the distance. % verb modifiers for talk, consist, etc. He talked quietly of revolt. He disapproved passionately of sex. He talks, mostly of revolution. It consists largely of sand. He talks mostly about the weather. He talked up a storm. he talked mostly to Ann. he talked a mean streak longer than I'd hoped He is talking up some chicks. He talks a lot. % Problems with "nightly" He eats with me nightly. He eats with me daily. He prays with me daily. He barks at me nightly. He sits near me nightly. He sits near me occasionally. My boyfriend dresses very simply. % Buggy classification of words.n.3 vs. words.n.4: There was an abundance of poverty. There was a continuity of action. There was a certain crudity to his actions. It showed a certain abundance. He had a certain panache. He sank into a delirium. It was a detriment to further action. He demonstrated a certain ignorance. We were unable to find a common ground. % Time-related verb modifier He does that sometimes. He does that some of the time. He does that all the time. He does that all of the time. He does that a lot of the time. He does it all of the time. He does it all of the day. He does it a little of the time. He does it a little bit of the time. That happens none of the time. That's what happens plenty of the time. That's what happens the rest of the time. That happens the rest of the time. That's what goes on the rest of the time. Long hair hides his eyes all of the time. Sunglasses hide his eyes all the time. Sunglasses hide her eyes a lot of the time. Sunglasses hide her eyes a bit of the time. A hat covers his head some of the time. A crown of snow covers the mountain most of the year A crown of snow covers the mountain a part of the year The trains run on time part of the day He is a part of the problem. Part of the problem is his attitude. It happens every other time. It happens every time. It happens each time. It happens each time I hit the brake. It happens not every time I hit the brake. It happens ever place I go. Let's do it some other time. Let's do it some other way. Let's do it some other place. That's what happens most other times. I see that happen most places I go. % Filler-it and the SF link: It is reasoned that the vast concentration of the business information market in EMEA resides within Europe. It is whispered that the vast concentration of the business information market in EMEA resides within Europe. it is reasoned that this statement is true. it is hoped that this statement is true. It was hinted that our actions were inappropriate. % buggy coppula and copula contractions % % Consider "Here's the ball." We have two choices: SFst+ as a filler-it, % or the more questionable [Wq- & PF+]. Note that (Wd- & PF+) is barred % by the post-processing rules. Maybe PF is reasonable.. but SFst seems % better at the moment. % Here is the ball. Here's the ball. There is the ball! Where's the ball? Here's Johnny! Nearby is another temple that honors his wife. Close by is another temple. Nearby are more ruins. There goes the neighborhood! There goes the cutest guy ever! There goes one of the strongest competitors this sport has seen. There goes the biggest loser ever. There went the cutest guy ever! Oh great, there went my ride. Here goes nothing. But for the grace of God, there go I. % copulas with verb target: All he ever does is bark. All he ever does is whine. All he ever does is complain. All he ever does is drink. All he ever does is schmooze. All he ever does is lounge. All he ever does is watch TV. All he ever does is listen to the radio. All he ever does is sit in front of the computer. All he will ever do is complain. All he will ever do is go drinking. One of the things you do when you sleep is dream. One of the things you do when you sleep is to dream. Something you might do while attending school is learn. *Something you might do while attending school is to learn. Something you need to do before you watch TV is turn on the TV. One of the things you do when you stop your bicycle is apply the brake % Copulas with noun target: All he wants is luck. All he wants is a big cigar. All he ever wants is to get lucky. All he ever touched turned to gold. % Contractions. He's out jogging. He is out jogging. He's out biking. He's out running. He's out for lunch. He's out on the town. % "I need help with that." I need help w/that. % as .... It is no longer portrayed as having the power to protect against sin. You are portrayed as having the power to make decisions. You are portrayed as wanting the power to make decisions. You are portrayed as needing the power to make decisions. Information on the Internet may come across as authoritative. You are as authoritative as he is. You come across as authoritative. He was so foolish as to lie. Ridiculous as it seems, the tale is true. % Problems with "go": Let's go shop. Let's go shopping. Let's not go shop. Let's not go shopping. Let's not go. Let's not. Let's go sailing! Let's go drinking! Let's go smoke up that joint! Let's go smoke that joint! Let's go drink up that bottle! Let's go drink that bottle! Let's go sail up that lake! Let's go swim. Let's go for a swim. Let's go for a drink. Let's go for a smoke. Let's go eat. Let's go talk to him now. Let us go, then, you and I. Why don't you go jump in a lake? Why don't you just go jump in a lake? Why don't you go fall in a lake? Oh, go jump in a lake! Let's go fall in the water! Let's go jump in the water! Let's go hike that trail. Let's go hike up that trail. Let's blow this pop-stand. Go bring me that ball. Just go bring me the paper. I'm going drinking. I'm going running. I do see it now. % Buggy parsing of "all but", "nothing but" Nothing but ocean lay before. We heard nothing but silence. Nothing but scorched earth remained. All was lost but one table. All was lost, save for one chair. All but one tree remained untouched. But for want of a nail, the shoe was lost. All but one tree was lost. Everything but one tree remained. We hoped for the best, but were disappointed. There was nothing but pain. % Prepositional difficulties It fell when the clock chimed. % Inverted subject-object The treasure lay below the ground. Below the ground lay the treasure. In Xanadu did Kubla Kahn a stately pleasure dome decree. % Confusion between K- and MVa- links -- % "He turned left." uses the MVa- link. % "He turned around", "he jumped around", "he jumped up" use "K" % as a particle link. % "He dodged sideways." uses MVp He turned left. He angled left. He angled sharply left. He angled around. He dodged left. He jumped left. % about can be particle (K- link), except that "about quickly" % and "quickly about" are both allowed, and K- only allows the first, % and not the second. He looked about. He turned about. The sailboat swung about, coming to a new bearing. He jumped about. % double-prepostion type constructions % adverbs w/ reversed preposition locations % Using MVa- seems like the only solution... People glanced fearfully around at the impassive troops. He looked around fearfully. He looked fearfully around. He looked about fearfully. He looked fearfully about. % Set phrases involving "so" -- this is an exhaustive list ! % There are no other verbs that take "so" -- should there be % a special link for this ??? I assume so I believe so I fear so I hope so I imagine so I presume so I say so. I suspect so. I think so % Third-persom -- idiomatic It seems so. % Particles w/ various optionally transitive verbs % XXX Many of these are wrong, esp the "up to" "down to" % these should be properly marked as prepositional, since % up/down/in/out really are action-direction modifiers. % constructions He walked the dog. He walked up to the counter. He walked out of the house. He sailed the boat into the pier. He sailed up to the bar. He clicked the mouse. *He clicked up the mouse. He zeroed the counter. He zeroed out the counter. He marched his prisoners through town. Elvis was all shook up. Elvis was all shaken up. He will kill again. The flu can kill. Let's kill some time on Sunday. I will kill him. The show airs on Sunday. The show will air again on Sunday. We've chosen to adopt We will adopt We will adopt again. We will adopt a child from Uruguay. % feed taking particle Horeses feed on hay. People eat but animals feed. % tell taking prep Today, we will tell about ancient structures. Yesterday, we told about ancient structures. They have told of the soldiers' fear They have talked of the soldiers' fear % More particles Your grammar should be worked on. Your grammar should be worked upon. % Transitive sports activities I biked Johnson Creek. We walked Shoal Creek. We kayaked Town Lake. We skied Big Sur. We're kayaking Shoal Creek tomorrow. Biking feels good. He wants to go surfing. He has gone to Hawaii to go surfing. We will canoe the rapids today. I will swim the sea. He swam three laps. He has swum the English Channel. We have swum out to the island before. Let's swim. Today, we will snorkel the reef. Today, we will snorkel out to the reef. Today, we will go snorkelling. Today, we will go skin-diving. He dove down to the bottom of the sea. Roselyn et al. wrote about manga. He went on and on, etc. The v.v. is true. Whenever he comes, she goes, and v.v. It was he that did it. John likes joking around. He's right, isn't he? Who am I? I don't think so. I, uhh, don't think you're right. Gosh darn it! % Rnx+ on because, only. Because I want to talk. Because I said so. Only I say so. This sentence parses badly. The bad parse was due to the improper parsing of the sentence. I would not choose to. Not that I would choose to. It sure is. It sure is great. The book sure is great. The sushi was best. How about the bubble tea? How 'bout them Cowboys? The results bear out the method The results bear looking at. It bears looking at. He talked longer than usual. He is taking longer than usual. He is working harder than usual. He hit harder. He hits hard. % verbs taking prepositions We're going to bike over. We'll jet on by. They sailed on by. Just scroll down. That just reeks. That is just the cat's meow. He stands accused of misconduct. % Awake and asleep as adverbs He was jarred awake. We shook him awake. He jerked awake at the sound. The sound left him awake. We left him asleep in the tent. We left him sleeping in the tent. % Similar to the above, but with preps We stood it upright. We stood it up. He picked up the fallen lamp and stood it up. It was obvious that he would do it. It was obvious that he'd do it. % "is" copula with mass/uncountable nouns There's barf on the seat. There is water on the table. there is a glass on the table. There is dirt on the floor. there is egg on your face there is a rumour going around. there is dirt going around. There is blood on his hands There will be blood on your hands There is a wart on his hands There are warts on his hands What the beep was that? We'll cab on over to the restaurant later. He waited in the check-out line. The wind gusted from the north. He must pee into the bottle. He'll stride up to the bar, pretending he didn't see a thing. We'll uplink tonight. That will reek tomorrow. That reeks of favoritism. Kids will frolic in the summer. He would labor over it for hours. That circuit will jitter intermittently. % Idiomatic usage of "of" You must beware of the tiger. You must be wary of the tiger. You must be afraid of the tiger. You must be cautious of the tiger. You must be cautious around this apparatus. You must be careful with this apparatus. You must be curious about the process. You just scrolled past it. What have you gotten into? What have you gotten yourself into? % Questions that want "from", "to" as prep. Where did the car come from? Where do the words come from? Who have bought your flat from? Where was she from? Where is the figure taken from? But where will you get them from? Where has this letter come from? my father asked. If the student does not recover the animal from anaesthesia, where will the experience of post-operative care come from? Where can I possibly get them from? Can you tell us where those strange ideas came from? Where are you coming from? Where were you coming from? Where is she coming from? Where am I coming from? Where does she come from? % These need R+ & Bsw+ in "where" to parse Where did they go to? Where have they gone to? *They have gone to. So, where did they come to? Where does it go to? What does it come to? What does it go to? *I want to thought about this. So, what does it all come to? So, what does it all come to, now? So, what does it all come to, brother? *Does it all come to? *Does it come from? Does it come from France? Where did that book go to? Where did that book get to? % Zappa/Grand Wazoo Where did they come from? Where did they go to? What has become of them now? How much was the leakage from the drain in the night? Who are those dudes in the back seat of Calvin's car? What did they do when they got off the car? Did they go get a sandwich? Did they eat in the dark? What did they do with the waxed-paper bundles? % Sentences ending in "to", null infinitive % i.e. "I want to infinitive" but the verb is missing/implied. % Fixed by forcing "to" to be at end of sentence I want to, also. I want to, too. Because I have to. Because I want to. But I want to. I wanted to, but I didn't. I want. Yes, I'd like to. Yes, I'd love to. No, I wouldn't. Thank you, I'd love to. I'd like to, I want to. *I like to pliers. *I like to purple. *I like to many. % Clausal complements, fairly idiomatic in form ... The emperor ordered it made The emperor suggested it sold The advisor urged compromise The advisor urged for compromise The advisor argued for compromise The advisor urged it done I assumed it done. % Hmm. Things following a comma, but in a different register ... % I think the clause needs to be its own domain ?? % Missing/implied subject He stepped forward, gun raised. He stepped forward, hand out. He stepped forward, his hand out. He looked up, heart racing. He glanced away, hands trembling. The monkey reached, stick extended, for the banana. He stepped forward, smile broadening. He stepped forward, his white teeth glittering. % Even when it does parse, the MV link looks wrong to me ... % the clause needs to be its own funky domain, I think. He glanced away, looking pale. He stepped forward, putting his hand out. % Post-nominal modifiers with TO+ link: The inability to laugh signifies trouble The inability to laugh signifies mental illness The disability of John means he is slow The inability for the rejected to laugh signifies their paranoia at being noticed. % Post-nominal modifiers, MX- link to "to be" The drill, to be provided, will be use to take soil samples. The drill, soon to be provided, will be use to take soil samples. The stock, to be purchased on the open market, will be added to assets. The parts, being obtained as we speak, will arrive this afternoon. % zero-copula (missing "to be") post-nominal MX broken-ness: The event, being historically insignificant, will soon be forgotten The event, historically insignificant, will soon be forgotten The event, historically important , will be long commemorated the argument, fundamentally flawed, was soon destroyed the argument, being fundamentally flawed, was soon destroyed % Impersonal, passive "be" linking to passive participle. It is normal that such directives be worked upon. It is normal that such directives are worked upon. It is normal that such directives be acted upon. It is normal that such directives are acted upon. It is normal that such directives be acted upon quickly. It is normal that such directives be quickly acted upon. It is normal that such actions are taken. It is normal that this action is taken. It is normal that this action be taken. % problems with "once" (once as adjective, noun) Once will have to do. You can go just this once. You can go just this one time. It was the once capital of the nation. % Archaic, idiomatic "be" Peace be unto you. % Archaic use of "be" with passive participles: Where be those roses gone which sweetened so our eyes? They be shooting and fishing out at the Forestry Lakes. % Archaic fairy-tale / children's book registers (inverted subject/object) Far out in the sea lived a fish. A fish lived far out in the sea. % old as noun The seven year old kicked me in the shins. He is a seven year old. The seven year olds ran rampant. The seven year olds ran wild. % Named days of week. The market fell 156.83, or 8%, a week after Black Monday. We'll party all night on Fat Tuesday. We'll come for dinner on Ash Wednesday. % Adverbs that typically follow a verb. The horses run free now. The horses run hard. He runs hot and cold. The engine is running very hot. The door is locked tight. The window is wedged open. The window is wedged wide open. He blew the case wide open. The door swung wide open. The door slammed shut behind me. The bolt is screwed in tight. The bolt is frozen hard in the engine block. He cranked up the volume loud. He cranked up the volume way loud. He hit the nail pretty hard. He wacked the ball pretty far. I wonder how hot the motor ran. I wonder how open he plans to be about the truth. He is very tight with his friends. Will he be free with his praise? How free will he be with his praise? How open will he be with the truth? How tight is that connection? How loose is that connection? % Measurement units There is a nineteen minute gap in the tapes. There is a 12 year gap in the records. There is a 10 millenium gap in the geological records. The explosion blew out a 12 inch hole in the side of the tank. It shoots 12 picosecond pulses. It shoots a 12 picosecond pulse. It is a 12 watt motor. She screwed in a 40 watt light bulb. She screwed in a forty watt light bulb. It is a 12 m² apartment. The rent is $150 per m² per month. The cost is $150 per meter. The cost is $150 per yard. The rate is 10nm per msec. The differential rate is 5 volts per MeV. He queued up another 45 rpm record. India is building a 450MW nuclear plant. The temperature rose by 12°C. It is 12°C outside. My El Camino gets about 12 MPG. My El Camino gets about 12 mpg. We bought a 12 pound pumpkin for Halloween. We bought a 12 dollar pumpkin for Halloween. He got himself a 50 dollar haircut. That car goes 90 MPH. Give him 5 cc's of morphine, stat. The crystal is growing at a rate of 2mm per millisecond. The slew rate is 12mV per microsecond. He raced off at 90 miles an hour. The aircraft was moving 90 miles per hour. It goes 90 miles an hour. It moves 90 miles an hour. It went 90 miles an hour. That will cost you very nearly 12 drachma. It goes for 12 to the drachma. We sell them for 12 per drachma. That will cost ¥2400. That will cost 2400 yen. We bought 200ft. of lumber. We bought the last 200ft. of lumber. We bought 200sq.ft. of plywood. It is 12ft. long. The voltage fell almost 50mV. That will cost hundreds of lira. That will cost zillions of lira. The ferrite core is wrapped with 24gauge wire. The last 50 ft. are bad. Some 50 ft. are bad. Nearly 50 ft. are bad. The last 50 ft. of the cable are bad. The leftmost 50 ft. of the cable are bad. The protein (50 kDa) is examined. The protein (20 to 50 kDa) is examined The protein (1 kDa) is examined A miner's inch is defined as 1/60 ft³/s. A miner's inch is defined as 1/60 ft³ / s. A miner's inch is defined as 1 / 60 ft³/s. A miner's inch is defined as 1 / 60 ft³ / s. A miner's inch is defined as 472 mL/s. A miner's inch is defined as 472 mL / s. % Lack of space between numbers and letters causes problems It was 10:30AM in the morning. It was 10AM in the morning. *It was 10:555:88 in the morning. Bids must be received by 1 p.m. EDT Bids must be received by 1 PM, CST Bids must be received by 1PM, CST % Poorly parsed date expressions. I saw him on January 21, 1990 I saw him on January 21st, 1990 It happened on October 17th, 1781. It happened on October seventeenth, seventeen eighty-one. It happened on October seventeenth, seventeen oh-one. It happened on October seventeenth, seventeen oh one. It was produced by 21st Century Fox It is a two cent needle That's a one dollar cigar That's a 1 dollar cigar That's a $1 cigar The IMF estimated growth at five and two-tenths percent. % XXX FIXME: % Note that the handling of prepositions is incorrect with regard to % measurements: the linkage should be to lumber, not feet. That is, % "12 feet of" is a modifier. Similarly, "hundreds of" should be a % modifier to "hours". But this can also be ambiguous: consider: % "The rate is 10 nm per one msec of time" -- here "of time" is % indeed the modifier. Hmmm ... % % Note also: parse confusion between "feet.n" and "feet.i" % and so "feet.n" should be removed/trimmed back from dict. We bought hours of time. We bought 12 feet of lumber. That will take hundreds of hours of effort. That will take hours of effort. That will take hundreds of yards of cement. It will take several inches of movement to clear the rigger. It will take several foot-pounds of strain before it cracks. That will require 10 square yards of paint. That engine generates hundreds of foot-pounds of torque. The rate is 10 nm per one msec of time. It cost US$ 14 million. It cost $14 million. % Prepositional modifiers with distances. It is 5 miles distant. It was 3 miles under. It was 3 miles east. It was about 3 miles out. It is a few miles over. % XXX These parse, but there's an explosion of parses generated. % Basically, miles.n is fucking things up -- we ned to trim it down. It is between 5 miles and 15 miles long. It is between 5 miles and 15 miles distant. % post-fixed number handling with NM link It started on day one. The experiments ended on day 22. I fear the number 13. The number 12 is a lucky number. I fear the dirty dozen. % Post-fixed numbers can act as (singular) determiners The exon is spliced with the intron. Exon 30 is spliced with the intron. * Exon is spliced with the intron. Exon 30 is spliced with intron 40. Oven two is not heating evenly. Assembly line 7 had a work stoppage this morning Flight 442 was delayed. John, age 40, is a douchebag. % Can have numerical modifier *and* a determiner simultaneously: The sigma factor sigma 35 is homologous. % Nested modifiers too: The sequence is omega 1 beta 2 alpha. % Post-posed romman numeral modifiers, and letter modifiers: The say that Pope Pious XII takes vitamin D supplements. Vitamin D supplements are good for you. William Petre was Secretary of State to Henry VIII. % Numerical ranges It takes 2 to 3 times the effort. It takes 2 - 3 times the effort. It takes 2 -- 3 times the effort. It takes 2 --- 3 times the effort. It has a 10 to 20 foot range. The account has a $1000 to $2000 limit. It will cost $10 million to $20 million to build. It will cost $10 million or $20 million to build. I have between 5 and 20 dogs. There are from 5 to 20 of them. It will cost between 5 and 10 million. It is between 5 feet and 20 feet long. A DNA segment of 15 kDa to 20 kDa was obtained. It is two to threefold more abundant. % Year date, time and number expressions: % NA, DG links The war of eighteen twelve was notable. It was all over by nineteen nineteen. The first model came out in nineteen oh five. The first model came out in nineteen oh-five. The first model came out in nineteen oh one. The first model came out in nineteen oh-one. The first model came out in nineteen zero five. The house was remodelled in two thousand three. The house was remodelled in two thousand and three. It happened in the late seventeen seventies. The movie was over by nine eighteen. The movie was over by 9:18. The movie was over by 9:18 PM. The movie was over by 9:18 pm. The movie was over by 9:18PM. The movie was over by twelve o'clock. The movie was over by twelve o'clock in the afternoon. The movie was over by midnight. We are moving out at twelve hundred hours. We are moving out at twelve hundred thirty hours. We are moving out at zero hundred hours. Zero hour is approaching. It's a fifty five gallon drum. It's a fifty-five gallon drum. It's a fifty one gallon drum. It's a one gallon can. We just got a hundred of them. We bought two hundred three of them. We bought two hundred and three of them. We bought two hundred 'n three of them. Two hundred twelve now roam wild. It's a hundred and two in the shade. What's two 'n two? press the button when the dial reads zero. % Fix/spell-check "its" Its broken. It's broken. % date ranges are simple modifiers, not numerical mods It was the 1989-90 crop that failed. % However, dashes can appear in model numbers: The plane is a Boeing 747-400 The plane is a 747-400 The 747 jumbo jet came roaring overhead. You want part no. 1234-567. You want part no 1234-567A. You want part no. 1234-567A. You want part num. 1234-567A. % Years as adjectival modifiers: He drove a souped-up '57 Chevy. He drove a souped-up 1957 Chevy. The 47 Ford came screamin' down the track. % Simple mathematical equation parsing: Phosphorylation was observed (P = 0.06). Phosphorylation was observed (probability = 0.06). The sun is distant (L = 1 AU). Bacteria with low G + C DNA content contain genes. % Ordinals as clause openers first on our list is this item. second on our list is this item. third on our list is this item. next on our list is this item. last on our list is this item. 17th on our list is this item. first is this item. second is this item. next is this item. last is this item. % Other misc ordinal usage, including dates. Today is the third of December. Today is the 3rd of December. Today is the 31st of October. Today is the thirty-first of October. He is the third to speak up. Of them all, he ranked third. Of them all, he ranked 3rd. He left on the 20th. He left on the twentieth. We are leaving on December 2nd. He is the 17th Duke of Earl. He belongs to the 43rd regiment. It's a late 19th century artifact. It's a late nineteenth century artifact. I gave him a third of the loot. He gets a twentieth part of the proceeds. He flew with the 101st airborne division. By the 1550s, he was very prosperous. By the 650’s, he was very prosperous. By the 1950's, he was very prosperous. *By the 01950's, he was very prosperous. % This fails due to a bug in tokenize.c where the leading % quote is stripped, but "50s," cannot be found in the dict. By the '50s, he was very prosperous. Mike finished in first place, and John in third. Mike finished in first place, and John in last. He finished the season in first. He finished the season in first place. He finished the season in 3rd place. He finished the season in third place. He finished the season in last. He finished the season last. He finished the season dead last. % problem with "of" in entity names. The National Voter Registration Act of 1993 makes it easy % Spell checker now does a good job of splitting words. Marywent shoppingat thestore. Mary wentshopping atthe store. % quotations can be used for grouping modifiers into an almost-idiom We ate so-called 'brain food' for lunch. % punctuation: sometimes commas are used as if they were semicolons: Sweat stood on his brow, fury was bright in his one good eye. % Sometimes colons are used as synonyms for "is": The capital of France: Paris. Einstein's birthplace: Germany. The answer to your question: yes. % % Institutionalized phrases: % We want the comma to act as a left-wall. By the way, did you have some? By the way, how was it? Since we are talking about it, how was it? Now that you mention it, what happened? While we're on the topic, was it good? Kenny sure is a bastard. % elided "that" (phantom that) Just thought you'd like to know. It was previously thought they were wrong. % elided "to be" (phantom to be) % Need a Ce+ link on "think" ?? She will think it an act of kindness. She will think it to be an act of kindness. She will think it true. She will think it common. % Phantom verbs -- the second doesn't parse, although it % implicitly should have a verb sitting there. an examination conducted when it happened revealed chicanery. an examination when it happened revealed chicanery % misc idioms Not everything looks grim. Not all is lost. % "there on" I'll introduce you to her, but you're on your own from there on. % "such that" They were assigned separate seats such that they had enough space. % Opening idioms % some of these have a phantom-that e.g. "I'm telling you that ..." Listen to me, she'll do it. Take my word, she'll do it. Trust me, she'll do it. If nothing else, she'll do it. I'm telling you, she'll do it. Didn't I tell you that she would do it? Like I said, she'll do it! It's like this, she'll do it. Dude, she'll do it. Mark my words, she'll do it. well, I'll say, she did it! Oh my God, she did it! Can you believe it? % Yes, no as openers No, it wasn't John. No, that isn't true. Surely, that can't be right. No, that can't be right. Yes, that is right. % openers, interjections, linking to infinitive, or post-verbal Yes, please do it again. Yes, please, do it again. Yes, please, I'll have one. Yeah, go fuck yourself! Yeah, dude! Yeah dude! No, please stop. Please, no, stop. No, stop. No, stop that. No, don't do that. Don't do that! No, do not do that. Okay, don't do that. Yes, go. Please, yes. Thank you, no. Yes, sir! Go, dude, go! Umm, I think he did it. That's what I think, yes. On arrival, go to the check-in window. Even so, just do it. Exactly, do it exactly like that. Roughly, it is done like this. No, please don't do that. Okay, stop that. Stop, please don't do that. Sir, please don't do that. % Single-word exclamations! Yes! No! Sure. Whatever. OK. Okay. % Given names can be openers to directives or questions. Ma'am, please don't do that. John, please don't do that. Mary, stop. Mary, can you do this for me? Mary, should I do this? Mary, would you do this for me? Mary, won't you do it? Mary, mightn't you be right? John, do you think so, too? John, do you think it, too? John, do you believe it, too? John, do you believe so, too? John, doesn't that strike you as odd? John, have you thought about it? John, is it true? On arrival, can you do it? Yes, be alert! Yes, go play ball. Yes, go play soccer. Yes, go play tennis. Yes, go play piano. John, go do it. John, please go do it. John, let's go. John, if that's true, then I don't know. John, I am going to give this to you. John, this is it! % Openers to directives First, unbutton the button. Next, pour wine on your shirt. Finally, button the button. % and, or opening coordinating conjunctions. % Currently these take Wc- to the left wall, since they "coordinate" % with previous sentences. This is different than a plain-old CO % link, since they are not 'plain-old' clause openers ... And you can do it this way. Or you can do it this way. Or, you can do it this way. But not everyone used it. And not everyone agrees. And they really loved me! Also on this list is the Colossus of Rhodes. % Broken interjections ... Enough already! Enough of that! Yeah, right. % Broken idiomatic clauses ... (phantom/zero subjects) Heard that before? Just a coincidence? % "just" takes MVa- link (just like "only") They do just that. He did just what you asked. % "so" as object of verb, object of preposition. I don't think so I don't believe so. If you think so. If you say so. I told you so! But I don't agree. Do you think so, too? Because I said so! Do it like so. Do it like this. It must be done exactly like so. How could it be so? % Requests, directives and commands. Go play. Go play ball! You and Rover go play fetch. Fetch the ball. Rover, fetch the ball. Rover, give me the ball. Go fetch the ball. Play fetch with Elena. Teach me fetch. Teach me. Teach me how. Teach me how to do it. Walk tall. Think quick. Think quickly. Act fast. Act smart. Act dumb. Act now. Shout it out. Shout loud. Stand up straight. there shall be an answer. there shall come a time. there shall verily come a time when man will be cleansed of his sins. % WH-words I do not know why I do not know how I do not know when I do not know where I do not know which I do not know who I do not know why they did that I do not know how they did that I do not know when they did that I do not know where they went. I really don't know why I did not know why until recently I did not know how until recently I did not know when until recently I did not know where until recently I did not know which until recently I did not know who until recently I did not ask why until recently I did not tell why until recently I did not say why until recently I did not assess why until recently I did not establish why until recently I did not figure out why until recently I did not find out why until recently % Questions, queries What are your questions? What are the aliases of Jim? % Registers -- Newspaper headline declarations % Missing definite articles (with definite articles, these would parse) % Perhaps a modal parse: if the ordinary parse failed, try another % with definite articles auto-inserted ? Thief invades boathouse. Burglars attack museum. Thief empties pockets of all they hold. % Registers -- Medical speech 7 month old female presents with chest congestion. John, aged 80, is ill. % Technical speech - missing definite articles. Physical Volumes (LUN) allocated from SAN pool zoned to VIOS. % Idiomatic phrases It's a good bet he did it. It's a good bet that he did it. He's not the least bit interested. Let me tell you this: it stank. Halloween is a great time of year. Christmas is a great time of year. Summer is a great time of year. % die-idioms Stay pretty, die young. I don't want to die young. You will die young if you keep smoking. You will die unhappy if you marry her. Grant me this wish and I will die happy. You will live long and happy. They lived happily in that old house. He didn't say. She wouldn't tell anyone. Stopping your bicycle requires using your brakes. You should exercise to stay fit. He is as fit as a fiddle. Watch out that you don't hit your head on the low beam. % clauses embedded parenthetically All he gave was his first name. Pete (all he gave was his first name) was still waiting. % -------------------------------------------------------------------- % Disjunction/conjunction problems % What follows is a large section of conjunction test cases: adjectives, % nouns, verbs and adverbs conjoined with "and", "or", "but", commas, etc. % This spills over to more complex constructions. % % should be disjunction of modifiers ... (disjoined modifiers) % should be (major Eurobond or foreign bond) offerings There were no major Eurobond or foreign bond offerings Friday. Messrs. Malson and Seelenfreund are directors. The effects were less severe and less prolonged % 'but' works as a fat link, leaving 'rather' out to dry ... He didn't do it, but rather went home. % conjunctions treated with thin links: % CJ link in this case. All large burial places, or tombs, became known as mausoleums. % -------------------------------------------------------------------- % conjoined adjectival/adverbial modifiers The music was soft and mellow. She ran hot and cold. The black and white cat sleeps. It was a long and narrow valley. I don't care if the outcome is good or bad. % conjoined adjectives with modifiers The river is wide The river is wide here The river is a mile wide The river is a mile wide here The river is a mile wide and 300 feet deep The river is a mile wide here and 300 feet deep The river is helf a mile wide here and 300 feet deep The river is wide here, and deep, too. Most of the 16th and 17th century leases included husbandry clauses. % Pv links... He is flighty and given to fanciful thoughts. He is thoughtful and not given to many words. He is thoughtful, and not given to many words. % Pa links with adjectives William is described as smooth, yet reserved William is described as smooth, yet thoughtful and reserved William is described as smooth and yet thoughtful William is described as smooth and obliging, yet reserved and resolved William Petre is described as smooth and obliging in manner, yet reserved and resolved, and not given to many words. % comma as a conjunction It tastes bitter, not sweet. It tastes bitter, yet sweet. % neither-nor constructions with adjectives This is neither hip nor groovy He is neither happy nor healthy He is neither very happy nor very healthy % Difficulties with determiners & adjectives According to our records, he is in either the 105th or the 106th battalion According to our records, he is either in the 105th or the 106th battalion According to our records, he is either in the 105th or in the 106th battalion According to our records, he is in neither the 105th nor the 106th battalion According to our records, he is neither in the 105th or the 106th battalion According to our records, he is neither in the 105th nor in the 106th battalion % conjoined comparatives he is bigger and badder than the Pope. he is bigger, and badder, than the Pope. he is much bigger and badder than the Pope. That is the easier but longer way of doing it That is the easier, but longer, way of doing it It will be harder and costlier than last time. This car is lower and faster than theirs. He is smarter, yet snarkier, than the others This brandy is smoother and fuller than the rest He is different, and better, than the others. We will arrive sooner than you We will arrive sooner than they They will arrive sooner than we. It will be harder, and take much longer, than before he is big and badder than the Pope. he is smart and better than the rest. he is clever and funnier than Mike. This one is bigger, yet easier to carry This one is bigger and easier to carry We will arrive sooner, yet more tired, than they. We will arrive sooner, yet more tired, than John. We will arrive much later and more tired we will arrive refreshed and rejuvenated she wiped the table clean and dry we are going farther and farther down that path There will be fewer yet larger fish as a result. There will be a lot fewer yet much larger fish as a result. % some idiomatic comparative-like expressions That will more and more be the case That will less and less be the case That will more or less be the case *That will more and less be the case *That will less or more be the case That will be more and more the case That will be less and less the case That will be more or less the case *That will be more and less the case *That will be less or more the case % conjoined superlatives he is the biggest and baddest thug in town. they are the biggest and baddest three thugs in town he is the biggest and the baddest thug in town. they are the biggest and the baddest three thugs in town it is the third largest and the fifth richest county in the state it is the hardest and worst problem on the list % ------------------------------------------------------------------------- % Conjoined question words When and where is the party? How and why did you do that? % conjoined post-nominal modifiers: MJ*a (in place of Ma and MX*a) Many Democrats unhappy about the economy but doubtful that Clinton can be elected probably won't vote at all Many Democrats, unhappy about the economy but doubtful that Clinton can be elected, probably won't vote at all Many people, unaware of the deception and unfamiliar with the details, won't care. Many people, unaware or unfamiliar with the details, won't care. Many people, unaware of or unfamiliar with the details, won't care. *Many people, unaware and unfamiliar, won't care. The director, responsible for development and accountable for engineering, resigned. The director, responsible and accountable for engineering, resigned. *The director, responsible and accountable, resigned. The car, prone to breakdown and expensive to maintain, was a white elephant. The toy, expensive and fragile, broke immediately % Note: although the first parse for the below is good, the other parses % are nonsense, -- this should be fixed ... XXX The river, ten meters wide and a meter deep, runs swiftly here. The river, ten meters wide and a meter deep here, runs swiftly. The river, dangerous to navigate but important for commerce, has many shoals. The dog, unlikely to bite but still threatening, scared the interloper away. The dog, unlikely to bite but hard to ignore, scared the interloper away. The platform, aflame and adrift on the ocean, soon sank. The platform, aflame and adrift, soon sank. % conjoined post-nominal prep-phrase modifiers: MJ*p (in place of Mp) The coverage on TV and on the radio has been terrible it is hidden somewhere in the yard or near the house. % MJ*p with clause openers By listening and by looking, we can safely cross the street. By this means, and by the shortness of the leases, the Petres managed to keep an element of control % Closely conjoined prepositions (joiner must take prep object) The new building was started about 1540 on, or very near, the old site. The prize is hidden in or near the playground. The Easter eggs are hidden in and around the house. % conjoined adverbs: RJ*v link She handled it quickly and gracefully She handled it skillfully and with compassion She handled it quickly, quietly and gracefully % conjoined that: RJ*t link I told him that I hated him and that I never wanted to see him again % conjoined dependent clauses: RJ*c link Although he likes me and he respects me, he says he needs some privacy % conjoined prep-object-relative clauses: RJ*j link (instead of Mj- & Cs+) That is the man for whom and with whom Joe works % conjoined nouns % count nouns The dog and cat ran. The dog and the cat ran. The big dog and fat cat ran. The dog, cat and mouse ran. We took my dog and cat to the vet We took my heifer and John's cow to the fair We took my heifer and goat and John's cow to the fair Where is the sickle and hammer now? where did the hammer and sickle go? % number agreement for conjoined nouns There is a dog and a cat here. *There are a dog and a cat here. There is a dog or a cat here. there are two dogs and a cat here. *there is two dogs and a cat here. % ??there (is/are) a dog and two cats here. the dog and cat run *the dog and cat runs *The either dog or cat ran % conjoined mass nouns Cost and reliability were questioned. The cost and reliability were questioned. The mounting cost and reliability were questioned. The mounting cost and faltering reliability were questioned. The cost and lack of reliability were questioned The lack of reliability and cost were questioned The mounting debt and dearth of solutions have fueled the continuing crisis He wrote for piano and flute. % conjoined gerunds He enjoyed many rewards, such as free board and lodging at court. % conjoined proper names John and Mike left the party. actress Whoopi Goldberg and singer Michael Jackson attended the ceremony. John and I are friends. *I and John are friends. He and I are friends. Sims visited Golfe Juan, France, and Gaeta, Italy. Sims visited Gaeta, Italy, and Golfe Juan, France. % differences in number agreement for and, or: Are a dog and a cat here? Is John or I invited? *Is John and I invited? Are John and I invited? *John and I is invited % conjoined nouns as objects I heard a car and a train. I heard a car or a train. I heard a car but not a train *I heard a car but a train I heard a car nor a train I heard neither car nor train I heard neither a car nor a train % conjoined pronouns, misc nouns, other oddities this one and the others got broken hers and ours were mashed. yours and mine were damaged. let me know about this one and any others these ones and those over there got mashed these and those over there got mashed these both and those over there got mashed % XXX "these both got mashed" parses, but not correctly. *these both got mashed both of those, and this one, got mashed You'll find it at the corner of Gee Ave. and First St. You'll find it at the corner of Gee Ave. and 1st St. Let me introduce John Miller, AIA and Micheal Boost, Esq. Please give me the swizzle-stick and the torque-wrench I've been to Delaware and Maryland Let me introduce you to my alter ego and nemesis I am a master of kung fu and sleight of hand The majority and a number of others agree It was my insistence and reassurance that changed his mind It was my insistence and my reassurance that changed his mind It was my insistence and my reassurances that changed his mind It was my request and recommendations that changed his mind This is the time and place for it This is the right time and place for it This is neither the time nor the place for it This is neither the time nor the place for it Neither she nor I will go It's either us or them It is hers and mine. you and it have to go We and they agree Neither we nor they will do it. Neither you nor I will ever agree Everything and everyone must leave neither yours nor mine got damaged this and the others were damaged this one and many others were damaged this one and all these were damaged this one and all of these were damaged this one and a few others were damaged There is little or none left There is very little or none left Some or all of it remains Some or most of it remains Part or all of it remains this one and the other were damaged this one and the rest were damaged this one and plenty of others were damaged this one and one other were damaged this one and another were damaged this one and another one were damaged this one and one more were damaged He talks of this and that % conjunctions of date and time expressions. These normally take NI, % but can also take SJ when used as common nouns. January and February are the coldest months I am working day and night It will happen in the weeks and months ahead % conjoined guessed nouns we went asdfing and qrwerting The howzas and the ufdahs are broken again The Howzas and the Ufdahs are in revolt The halide and chloride ions do this the stator and rotor collided % relative clauses with conjoined nouns The dog and the cat I saw were black % conjoined nouns in clauses I think John and Dave ran. % conjoined post-nominal modifiers Sue, a teacher and scholar, is here. % conjoined negations Neither Mary nor Louise are coming to the party Neither Mary Kate nor Louise Anne are coming to the party *either Mary nor Louise are coming to the party Neither Mary, Joe nor Louise are coming to the party *either Mary, Joe nor Louise are coming to the party Either Mary or Louise will come. Neither I nor John will come. neither I nor my friend knows what happened neither I nor my friend know what happened Either Mary or my friend know what happened Either Mary or my friend knows what happened Either I or my friend knows what happened Either I or my friend know what happened % Neither-nor with mass nouns Neither snow nor rain stays these couriers Neither snow nor rain nor heat stays these couriers gloom of night and heat will not stop me heat and gloom of night will not stop me Neither snow nor rain nor heat nor gloom of night stays these couriers from the swift completion of their appointed rounds % neither-nor with count nouns (verify number agreement) There is neither a dog nor a cat here *There are neither a dog nor a cat here % conjoined numbers Give me six or seven of those. Just give me six or seven. I'm only going to have one or two beers. It starts one or two hours later. % But for joining adjectives He is tired but happy. % But for joining nouns Mary, but not Louise, is coming to the party Mary Kate, but not Louise Anne, is coming to the party The plan caused not prosperity but ruin Not John, but Mary led the way % But for joining verbs She organized her work but accomplished very little No one but she saw the prowler. He would have joined the band but he couldn't spare the time The brothers would have resisted but that they lacked courage. It never rains but it pours. There is no doubt but right will prevail. There never is a tax law presented but someone will oppose it. Ten to one but the police have got them They had no sooner arrived but they turned around and left. % conjoined verbs He tried and failed. He tried but failed. He tried but failed acheive his goal. Oscar Peterson played piano and wrote music. % Conjoind verb test cases -- artificial sentences illustrating various forms. Oscar banged drums and tinkled piano Oscar really banged drums and righteously tinkled piano They banged drums and tinkled piano Oscar bangs drums and tinkles piano Oscar bangs drums and tinkled piano They bang drums and tinkled piano % conjoined transitive and intransitive verbs I idolized and idealized the man. *I idolized and grimaced the man. I grimaced and idolized the man. % correct parse is "I (saw and greeted) Sue" I saw and greeted Sue. we sang and danced the night away He shrank and withdrew from the crowd The boat lurched forward and sank She will blush and start blathering at the mention of his name She will blush and begin blathering at the mention of his name The water rises and falls with the tides Do not surprise or alarm him I went to the store and got a gallon of milk I am going to the store and will get a gallon of milk I went to the store and returned the eggs I went to the store, got a gallon of milk, and returned the eggs We ate popcorn and watched movies on TV for three days. She arrived and left on Tuesday. He broke off a piece of bagel and gave it to me. He broke off a piece and gave it to me. He breaks off a piece and gives it to me. He broke off a piece and has given it to me. He had broken off a piece and had given it to me. He is breaking off a piece and will give it to me He is breaking off a piece and should give it to me He is breaking off a piece and would give it to me if I asked. He is breaking off a piece and ought to give it to me if I asked. He ought to break off a piece and give it to me We hoped for the best, but were disappointed. We hoped for the best and were disappointed. He obtained the lease of the manor of Great Burstead Grange (near East Horndon) from the Abbey of Stratford Langthorne, and purchased the manor of Bayhouse in West Thurrock. He rose rapidly in the royal service and was knighted. He rose rapidly in the royal service and, in 1543, was knighted. He was sent abroad and resided on the continent, chiefly in France, for more than four years. John describes and analyzes literature. Chief describes and analyzes the character of the families in a village, remarking that they all act completely the same. % conjoined verbs with modifiers, negation He cannot change the beliefs of popular society as a whole. He can not change the beliefs of popular society as a whole. He can't change the beliefs of popular society as a whole. He can challenge John, but cannot change the outcome. He can challenge John, but can't change the outcome. He realizes that he and McMurphy can challenge Big Nurse, but cannot change the beliefs of popular society as a whole. % conjoined verbs in relative clauses This is not the man we know and love. *This is not the man we know and love him This is not the man we knew and loved. This is a problem Moscow created and avoided This is a problem Moscow created but avoided fixing This is a problem Moscow created and failed to solve. % conjoined ditransitive objects I gave Bob a doll and Mary a gun. I found Bob a doll and Mary a gun for Chirstmas I got Bob a doll and Mary a gun for Chirstmas I offered Bob a doll and Mary a gun as an apology I refused Bob a raise and Mary a vacation I owe Bob some money and Mary a favor I called Bob a jerk and Mary a dork I painted the living room red and the bedroom green I wrote her a love song and him a hate letter I taught these mice to freeze, and those mice to jump. % conjoined past particples the water had risen and fallen with the tides he had lain, and soon forgotten his vow % neither-nor constructions with verbs: we ate popcorn or watched movies we either ate popcorn or watched movies we neither ate popcorn nor watched movies *we either ate popcorn nor watched movies *we both ate popcorn nor watched movies *we ate popcorn nor watched movies we both ate popcorn and watched movies we not only ate popcorn but watched movies We neither ate nor drank for three days we neither saw nor heard what happened % lots of conjunctions, commas, lists mashed up ... The problem is, or rather one of the problems, for there are many, a sizeable proportion of which are continually clogging up the civil, commercial, and criminal courts in all areas of the Galaxy, and especially, where possible, the more corrupt ones, this. The problem is, or rather one of the problems, this. The problem, or rather one of the problems, is this. % idiomatic "or rather" The problem, or rather, one of the problems, is this. The problems are clogging up the courts, and, where possible, the corrupt ones The problems are clogging up the courts, and, wherever possible, the corrupt ones % lists: % List of gerunds: He has three jobs: counting, measuring and listing. % List of relative clauses: RJ*r link There are 10 kinds of people: those who understand binary, and those who don't. % Collocations with holes: XJ links you should not only ask for your money back, but demand it % broken lexical chunk recognition: % ... not only, ... but also ... The deal includes not only junk, but also crap. % Split "if .. only" idiomatic expressions If there was only more left! If there were only more! If there were only more like you! If only there was more left! If only there were more! If only there was more! % If... then ... lexical constructs are broken. % Registers: Typical language used in instruction manuals, directives. If paid weekly, bring the last six pay stubs. If paid weekly, then bring six stubs. If it is broken, then remove it. If broken, then remove. Check the lid; if cracked, then replace. Check the valve, replace if cracked. % Then is optional: If it is raining, stay inside! If you bought after the crash, you won. If you sold before the peak, you got lucky % Someone... who... Someone is outside who wants to see you. % Compound queries % Typically, the two subphrases parse correctly, but, % put together, they do not. What is a motor, and how does it work? What is a motor; how does it work? Who invented sliced bread, and when did they do it? Who invented sliced bread; when did they do it? % Coordinating conjunctions These are the snippers and those are the cutters. Grant me this wish and I will die happy. Tell me what to do and I will show him The brothers would have resisted but that they lacked courage It never rains but it pours. They had no sooner arrived but they turned around and left. % XXX Misc conjunction constructions that are still broken in the current parser: He is flighty and given to fanciful thoughts He is thoughtful, and not given to many words William Petre is described as smooth and obliging in manner, yet reserved and resolved, and not given to many words. He rose rapidly in the royal service and, in 1543, was knighted He was twice summoned before the Privy Council, first for a violent assault on Sir John Conway, then, ten years later, for fraud. From his youth he must have been a capable, pushing, insinuating man. % conjunction breakage: dangling MVp links needed to Ju They feel a "normal" person conforms to, and becomes imperceptible in, society. Grant me this wish and I will die happy. What did you tell her and what did she say *I saw John but Fred He talked to Steve and, apparently, Fred *He talked to, apparently, Fred I cannot discern any reason, other than some sort of historical blindness, for why the "fat link" mechanism was created. John; my advisor, Steve; and several other people are coming No one but she saw the prowler. % The two below are valid sentences, but they parse incorrectly just right now % so we will put a * in front of them, for now, till the parse is fixed. *Mike finished in first place, and John in third. *Mike finished in first place, and John in last % -------------------------------------------------------------------- % non-planar graph: "saw" and "yesterday" should link, but don't. % "dog" and "which" do link (and that is correct). *John saw a dog yesterday which was a Yorkshire terrier. % incorrect parses -- INCORRECT PARSES -- bad disjunct usage % These sentences typically parse just fine, but generate % incorrect linkages. % Sentence parses, but incorrectly -- "of" links to "bill", should link % to 12th. % Put a star in front of this -- the sentence is good, but the parses are bad. *Senator Johnson introduced a bill on the 12th of July. *Senator Johnson introduced a bill of July. % "one to two" should modify hours. It starts one to two hours later. It starts one or two hours later. % None of the generated parses are correct; all are garbage. % Put a star in front of this -- the sentence is good, the parses are bad. *Bill went over the river and right through the woods. % More crazy parses due to bad conjunction handling Whenever he comes, she goes, and v.v. The market fell 156.83, or 8%, a week after Black Monday. % Hmm conjunctions .. these are tricky to get right ... Mike finished in first place, and John in third. Mike finished in first place, and John in last. % Rules should select "shouting.g" gerund, not "shouting.v" (participle) % Now fixed. The teacher's shouting startled the student. % "and so" is linked with Wq, should not be. Rama ate the apple, and so did Mohan. % Automatic possesive guessing broken when entity is in the dictionary: % "to run" is a verb, this breaks identification of "Ran" as entity; % fix by adding Ran explicitly as name to dictionary. % "hooker" is a noun ... but now works. % These are all working now. Flumblqwerty's shoes are red. Run's shoes are red. Ran's shoes are red. Asdf's philosophy was to build and sell Hooker's philosophy was to build and sell John's remark was awkward. John's sudden outburst was awkward. Lady's dress was awkward. % Some plural capitalized words are singular entities. Treat them well. % e.g. last name Johns, or Hotchkiss are not actually plurals ... Johns gave it to me. Hotchkiss gave it to me. % Sue (female given name) vs. "to sue" (verb). Sue answered the door. % Tom as a mass noun interferes with far-more-likely common-name "Tom". Could we add some tom-tom to that track? % 123A, the "A" suffix is assumed to be a unit, leading to a bad parse. You want part no. 123A You want part no. 123ABC % ... or both -- drunk wants Pa link, both wants Opt link Was the man drunk or crazy or both? % Broken comparatives: He is nothing less than inspired! He is less than bright! That is a less than optimal plan He is more than capable! He is more than qualified! they report less earnings than before they report less robust earnings than before they report less robust earnings than previously they report less robust earnings than they did previously They report much less robust earnings than they did earlier. They report much less robust earnings than they did for the third quarter. It takes longer than that. It takes more than that. The crossing takes longer than Washington thought it would. This allows companies to realize revenues quicker. This allows companies to realize revenues faster. % This works, notice the TR link: The better the computer, the faster the program. The bigger they are, the harder they fall. Florida is the balmier of the two. % problems with anticipated/suggested/expected, etc. The defenses have proved more formidable than was anticipated. The defenses have proven more formidable than was expected. The defenses were designed more formidably than was suggested. The defenses were designed more formidably than was expected. The earnings were lowered more strongly than was suggested. The rates were lowered more than suggested. The bolt was tightened more than was recommended. The bolt was tightened more than recommended. % -------------------------------------------------------------------- % setences that parse, but not correctly: You are as sweet as sugar. The situation is not so bad as you suggest. I slipped on the ice as I ran home. He was so foolish as to lie. Ridiculous as it seems, the tale is true. the hotel is quite comfortable as such establishments go I don't know as I can answer your question. % -------------------------------------------------------------------- % assorted unclassified breakages, wating for a fix: Although society has excluded the patients in the ward for their unique qualities, they feel 'safer' trying to fit in because they receive approval from nurses and the representatives of society. % -------------------------------------------------------------------- % Sentence containing UTF8 chars that can lead to i/o or % word-boundary problems *Bitter gourdはにがうりだそうであってるのかはちょっと不安ですが翻訳ソフトでやくしてみました。 *Синтезируется из глюкозы в тканях и органах, например в сердце, печени, почках. % Crashes of various sorts. His convalescence was relatively brief and he was able to return and fight at The Wilderness, Spotsylvania and Cold Harbor. Hot runners usually make the mold more expensive to manufacture and run, but allow savings by reducing plastic waste and by reducing the cycle time. Dietrich A. Loeber, ‘“Socialist” Features of Soviet Copyright Law’, Columbia Journal of Transnational Law, vol. 23, pp 297--313, 1984. % Overly long sentences leading to overflow I think one of the chief differences between the main Filipino language, which is Tagalog, and English, when I hear Tagalog speakers speaking English, is that they tend to place the stress on the wrong syllable of a word or they stress the wrong word in the sentence or in the question. % long sentence leading to crash. Cortes in his various letters again and again claims the Emperor's patronage of his bold defiance of the Emperor's officers on the ground that the latter in their action were moved solely by considerations of their personal gain, whereas he, Cortes, was striving to endow his sovereign with a rich new empire and boundless treasure whilst carrying into the dark pagan land, at the sword's point, the gentle creed of the Christian God. % A no-canonical-parses error Well, say, Joe, you can be Friar Tuck or Much the miller's son, and lam me with a quarter-staff; or I'll be the Sheriff of Nottingham and you be Robin Hood a little while and kill me. % When constituent tree printing is enabled, this causes % a cascade of and-list overflow errors: I have not seen the grysbok, or the suni, or the dibitag, or the lechwi, or the aoul, or the gerenuk, or the blaauwbok, or the chevrotain, or lots of others, but who in the world could guess what they were or what they looked like, judging only from the names? % Overflow + no complete linakges. In 1608 he wrote a treatise of the Errors, False Gods, and Other Superstitions of the Indians of the Provinces of Huarochiri, Mama, and Chaclla, of which unfortunately only the first six chapters are known to exist and have been translated into English. The strongest rain ever recorded in India shut down the financial hub of Mumbai, snapped communication lines, closed airports and forced thousands of people to sleep in their offices or walk home during the night, officials said today. % No complete linkages found. New York Post: The new Mel Brooks/Susan Stroman musical extravaganza ... is nearly very good indeed - but it is not the The Producers ... this story ... does not lend itself to stage adaptation in the way of the earlier movie ... Now for the good news ... Brooks and Stroman pull out every stop. % Combinatorial explosion However, the few tracts, the poetry, and the novels that embodied the social vision of Young England were directed to a New Generation of educated, religious, and socially conscious conservatives, who, like Young Englanders, were appalled at the despiritualizing effects of industrialization and the perceived amorality of Benthamite philosophy, which they blamed equally for Victorian social injustices. In vivo studies of the activity of four of the kinases, KinA, KinC, KinD (ykvD) and KinE (ykrQ), using abrB transcription as an indicator of Spo0A~P level, revealed that KinC and KinD were responsible for Spo0A~P production during the exponential phase of growth in the absence of KinA and KinB. link-grammar/data/en/4.0.voa.batch0000644000000000000000000002070212536650432013737 0ustar !verbosity=1 !echo !limit=1000 !batch !short=20 !constituents=1 !spell=0 Finally, cover the cut with a clean bandage while it heals. As the wound heals, inspect for signs of infection including increased pain, redness and fluid around the cut. To learn more about first aid, contact a hospital or local organization like a Red Cross or Red Crescent society. King Nebuchadnezzar the Second probably built the gardens about two thousand six hundred years ago. Also on this list is the Colossus of Rhodes. Next on our list is the statue of the Greek God Zeus in a temple at Olympia, Greece. The Temple of Artemis at Ephesus is another ancient wonder of the world. Number six on our list was also built in what is now Turkey. It was so famous that all large burial places, or tombs, became known as mausoleums. The fifth Mughal emperor, Shah Jahan, ordered it built in Agra in sixteen thirty-one. They were built to honor an ancient king of Egypt, Ramses the Second, and his wife, Nefertari. In front of the main temple are four huge statues of Ramses the Second. Nearby is another temple that honors his wife, Nefertari. It too is beautifully carved out of solid rock. It, too, is beautifully carved out of solid rock. Today, we complete the story of the American Revolution against Britain in the late seventeen seventies. Washington knows that if Howe attacks, the British will be able to go all the way to Philadelphia. Washington wants to surprise the enemy early in the morning the day after the Christmas holiday, December twenty-sixth. The crossing takes longer than Washington thought it would. A few days later, he marches his captured prisoners through the streets of the city of Philadelphia. And in August, seventeen seventy-seven, General Howe captured Philadelphia. British general John Burgoyne surrenders at Saratoga, New York, in October 1777, as painted by Percy Moran. He surrendered to George Washington on October seventeenth, seventeen eighty-one. The Massachusetts Institute of Technology became an early leader with its OpenCourseWare project, first announced in two thousand one. These range from physics and linear algebra to anthropology, political science -- even scuba diving. Still, M.I.T. says the site has had forty million visits by thirty-one million visitors from almost every country. This followed a money-raising effort linked to the two hundredth anniversary of the United States. The first one airs on Sunday. Oscar Peterson played piano and wrote music. The International Monetary Fund estimated growth at five and two-tenths percent. In October the I.M.F. cut its estimate for global growth this year by almost half a percentage point, to four and eight-tenths percent. There are worries of an economic slowdown or possibly a recession in the United States. Another major issue for two thousand eight is what effect energy prices will have on economic growth. The violence this week in Kenya has thrown the usually peaceful country into crisis. On Friday Kenya's main opposition party, the Orange Democratic Movement, called for a new election. But Kikuyus have long ruled the country, both politically and financially. Kenyans on the streets feel discriminated against the equal share of the national cake and they are determined to equal the playing field in a democratic manner. After leaving the army, he worked for Playboy magazine for almost twenty years. The young man did just that, and the tree was happy. Shel Silverstein once said that he wanted to go everywhere, look at and listen to everything. Arkansas is rich in natural resources and has become a favorite place for older people to retire. Hawaii, far out in the Pacific Ocean, is the Aloha State. And in Rwanda, Engineers Without Borders is rebuilding areas destroyed during the nineteen ninety-four genocide. Her first project there was to photograph John Lennon, a member of the British band the Beatles. Leibovitz had imagined photographing the couple without clothes. Influenza is a common infection of the nose and throat, and sometimes the lungs. The virus spreads through the air when an infected person expels air suddenly. But the flu can kill. But they did not really know why until recently. American researchers say they now know why the influenza virus spreads in the winter and not in the summer. Researchers in New York carried out twenty experiments with guinea pigs to investigate how the virus spreads. A person who has suffered one kind of flu cannot develop that same kind again. The World Health Organization holds meetings in which experts discuss what kinds of flu viruses to include in the next vaccine. People in fifteenth century Italy thought sicknesses were caused by the influence of the stars. The flu spread in Asia in eighteen twenty-nine, then again in eighteen thirty-six. Experts say two hundred fifty thousand people died in Europe in that flu pandemic. The deadliest spread of influenza ever reported involved a flu that first appeared in Spain. Wild and farm birds often have a flu virus. Two hundred eight of them died. Two hundred and eight of them died. People would become infected with a virus their bodies have never before experienced. Bob Frydenlund says having a round barn means keeping alive part of the history of American farming. Last week, we told about structures built hundreds or thousands of years ago. A crown of white snow covers the top of the mountain most of the year. Or you could climb the mountain to get an even better look. In fifteen forty, Spanish explorer Garcia Lopez de Cardenas was searching this desert area for gold. The sunlight made deep shadows and seemed to change the shape of things every minute. Often, some areas of the deep canyon appeared bright red. Next we travel across the Pacific Ocean. Or doctors may misdiagnose it as asthma or another infection. It was not until after Lincoln was murdered, however, that the states approved the Thirteenth Amendment to ban slavery everywhere in the country. Another amendment proposed in the early nineteen hundreds was designed to change the method of electing United States Senators. But not everyone used it. If you look -- and smell -- carefully, you will realize that the wrapped forms contain several kilograms of spices such as cinnamon and turmeric. Mister Neto often creates works like this one that visitors can step into and explore using different senses. He shared an Emmy Award for outstanding movie made for television. Some experts say it could slow down service at McDonald's restaurants. But a year ago he warned that its fast growth had led to what he called the watering down of the Starbucks experience. Some neighborhoods have a Starbucks on every block or two. Testers from Consumer Reports thought it tasted better than Starbucks, and it cost less. Senator Hillary Clinton won the Democratic vote in the first primary state, New Hampshire, on Tuesday. The New York senator and former first lady hopes to become the country’s first female president. New Mexico Governor Bill Richardson dropped out of the Democratic race this week. Every week we tell about a person important in the history of the United States. No end to the lines of soldiers marching across the land. They have told of the soldiers’ fear and terror. How they suffered and died. And how they sang before and after battle. A woman lay asleep in her hotel room. It had just the right words for the great marching music. Illinois is The Land of Lincoln. The midwestern state of Indiana is called the Hoosier State, but nobody is quite sure why. No wonder the state legislature instead calls Indiana The Crossroads of America. North Dakota gets its nickname, The Flickertail State not from some bird, but from a little squirrel. This report says the Kenyan parliament has 126 seats and that the opposition won 95 of them in recent elections. As a young man, Jack Benny played violin in a vaudeville theater in his home state of Illinois. This week, we tell about vitamins. They are known as vitamins A, the B group, C, D, E and K. And, they said vitamin D supplements and calcium can protect the bones of older women. They said people should be sure to discuss what vitamins they take with their doctors. They found that those taking vitamin A, vitamin E or beta carotene supplements had an increased risk of dying at an early age. Grasslands need time to rest when cattle and other animals feed on them. In earlier programs, we told about ancient structures and beautiful natural places. But the cost could not be compared to the cost of a ship that had to sail from ports on the Atlantic Ocean to ports in Asia. link-grammar/data/en/4.0.batch0000644000000000000000000012516012536650432013157 0ustar !verbosity=1 !echo !limit=1000 !batch !short=20 !constituents=1 !spell=0 !use-fat=0 %NOUNS The fact that he smiled at me gives me hope *The event that he smiled at me gives me hope But my efforts to win his heart have failed *But my presents to win his heart have failed Failure to comply may result in dismissal *Absence to comply may result in dismissal The question is who we should invite *The party is who we should invite The big question on everybody's mind is who killed OJ *The big mind on everybody's question is who killed OJ Do it the way you've always done it I really like the way you do your hair *I really like the fashion you do your hair He made a request that there be an investigation *He stated the fact that there be an investigation He is the kind of person who would do that *He is the character of person who would do that An income tax increase may be necessary *A tax on income increase may be necessary Last week I saw a great movie % currently finds a parse with roman numeral I % i.e. "Last Dog the First saw a great movie" *Last dog I saw a great movie The party that night was a big success *The party that dog was a big success John Stuart Mill is an important author The Richard Milhous Nixon Library has been a big success The mystery of the Nixon tapes was never solved High income taxes are important Oil company stock prices rose in heavy trading today Metals futures prices rose in heavy trading today U.S. economic indicators fell sharply last month Columbia medical and administrative workers continued their strike today Janet, who is an expert on dogs, helped me choose one *Janet who is an expert on dogs helped me choose one The dog that we eventually bought was very expensive *The dog, that we eventually bought, was very expensive *The dog, we eventually bought, was very expensive Have you ever seen the Pacific The new David Letterman is a happy, relaxed David Letterman Actress Whoopi Goldberg and singer Michael Jackson attended the ceremony We are from the planet Gorpon This is my friend Bob John's family is renovating their kitchen *A man I know's family is renovating their kitchen The boys' bedrooms will be enlarged *The boys's bedrooms will be enlarged My uncle's mother's cousin is visiting us *Emily's my cousin is visiting us We ate at Joe's Diner last week The buy-out caused a free-for-all in the mid-afternoon Joan Smith is president of the company *Joan Smith is tourist Alfred Baird, formerly vice president of Beevil Corp., has been appointed as president *Alfred Baird, man I know, has been described as good gardener A bunch of dogs are in the yard *A picture of dogs are in the yard %DETERMINERS & PRONOUNS Many people were angered by the hearings *Many person were angered by the hearings Many were angered by the hearings My many female friends were angered by the hearings *My some female friends were angered by the hearings Many who initially supported Thomas later changed their minds The stupidity of the senators annoyed all my friends *The stupidity of the senators annoyed many my friends I need to buy a present, but I want something inexpensive *I need to buy a present, but I want a gift inexpensive Anyone who thinks this will work is crazy Their program is better than ours Those that want to come can come I read everything I could about the subject I read whatever I could about the subjetc *I read several books I could about the subject the best costumes got prizes *a best costume got prizes *some best costumes got prizes the best five costumes got prizes the five best costumes got prizes *the five best five costumes got prizes *the hundreds of best costumes got prizes *five best costumes got prizes *best costumes got prizes *best five costumes got prizes five other costumes got prizes the other five costumes got prizes *other five costumes got prizes the other candy was really disgusting *the five other candy was really disgusting other candy is really disgusting *other piece of candy was really bad other costumes were really bad some other costumes were really bad %NUMBERS 2 million attended 2863764 attended 2 million people attended *2 million person attended a million attended a million people attended about 2 million people attended about 2 million attended *about people attended a million such people attended *a million such attended 5 million of the people attended 5 thousand invited by Bob attended The 5 thousand invited by Bob attended The thousands of people who attended enjoyed it The 5 thousand people invited by Bob attended The nearly 5 million people who attended enjoyed it a few attended a few million people attended a few people attended few attended *few million people attended millions attended *5 millions attended millions of people attended hundreds of millions of people attended 5 million years ago, the earth was covered with ice millions of years ago, the earth was covered with ice *dogs of years ago, the earth was covered with ice *the five million years ago, the earth was covered with ice *the other five million years ago, the earth was covered with ice *5 million ago, the earth was covered with ice The city of New York contains over one hundred million billion brain cells Almost one third of the people in the country have no health insurance Of all the people in this country, almost one third have no health insurance Three quarters of a million people in this city have no health insurance The price of the stock rose three tenths of one point *The price of the stock rose three tenths of one dog The nearest drug store is about three quarters of a mile away The nearest drug store is about 3/4 of a mile away Every morning I walk 3 1/2 miles *Every morning I walk 1/2 3 miles Nearly 1/2 million people work here every day Nearly 1 1/4 million people work here every day *Nearly 1 million 1/4 people work here every day Between 500 and 1000 people pass through here every minute They are the Number 3 auto maker and a Fortune 500 company I live at 805 West Indiana Street %TIME EXPRESSIONS We're thinking about going to a movie this evening *We're thinking about going to a movie this theater I've been grading these stupid exams all day *I've been grading these stupid days all exam We're having a big party Tuesday *We're having a big party our house *There is going to be an important meeting January There is going to be an important meeting in January There is going to be an important meeting next January The party last week was a big success John last week threw a great party Until recently, these fossils were believed to belong to different species *Until initially, these fossils were believed to belong to different species *Until for many years, these fossils were believed to belong to different species Until last week, these fossils were believed to belong to different species *Until last meeting, these fossils were believed to belong to different species I'm quite excited about next week Monday sounds good for the meeting Tomorrow might be a good time for the meeting Last Tuesday was really fun *Three days ago was really fun Almost three years after our first date, I saw Ruth again Almost three years after I first met her, I saw Ruth again *Almost three years, I saw Ruth again Almost three years later, I saw Ruth again *Almost three years for our first date, I saw Ruth again I saw her again a year and a half later *I saw her again a year and a dog later He left here a quarter of an hour ago *He left here a quarter of a dog ago *He left here a picture of an hour ago I still remember the day I kissed him *I still remember the room I kissed him I'm going to Europe the day I graduate Clinton is expected to return to Washington Thursday morning *Clinton is expected to return to Thursday Washington office Clinton is expected to return to Washington on Thursday morning Clinton is expected to return to Washington late Thursday morning Clinton is expected to return to Washington next Thursday morning She walked out of the room the minute I saw her *She walked out of the room two minutes I saw her I was crazy about him the first time I saw him *I was crazy about him the first party I saw him In January 1990, a historic new law was passed *In Washington 1990, a historic new law was passed On January 15, 1990, a historic new law was passed *On January 320, 1990, a historic new law was passed He was convicted under an obscure 1990 law *He was convicted under an obscure 50 law I wish I could see him 100 times a day *I wish I could see him 3 meals a day *I wish I could see him 100 times a dog *I wish I could see him 100 times 2 days It's good to eat three big meals a day Someone is mugged in New York every five minutes Her career lasted almost thirty years *Her career lasted almost thirty books Every morning at 5 a.m., Ken gets up and runs for five miles At 4:52 p.m., on Monday, December 26, 1997, nothing happened %QUESTIONS AND RELATIVE CLAUSES Which dog did you chase *Which dog you chased Which dog did you say you chased *Which dog you said you chased *Which dog did you say did you chase I wonder which dog he said you chased *I wonder which dog did he say you chased *I wonder which dog did he say did you chase What did John say he thought you should do *What did John say did he think you should do *What John said he thought you should do What Alice did really annoyed me *Who Alice did really annoyed me Whoever designed this program didn't know what they were doing *Who designed this program didn't know what they were doing Invite John and whoever else you want to invite The dog which Chris bought is really ugly *The dog what Chris bought is really ugly I wonder whether we should go *Whether should we go We can't decide whether to go to the party *We can't decide who to go the party *We can't decide whether to go the the party with I am wondering who to go to the party with I am wondering who to invite to the party *I am wondering whether to invite to the party *I am wondering the people to invite to the party *Whether to go to the party *Who to invite to the party Do you think we should go to the party *What do you think we should go to the party How do you operate this machine How fast is the program How certain are you that John is coming *How tired are you that John is coming How likely is it that he will come *How likely is John that he will come How certain does he seem to be that John is coming How efficient a program is it *Efficient a program is it *How fast programs are they *How fast the program is it How fast a program does he think it is *How fast a program he thinks it is *How fast programs does he think they are *How big a dog chased you I wonder how fast a program he thinks it is *I wonder how fast a program does he think it is How much money did you earn *How much money you earn I wonder how much money you earned *I wonder how much money have you earned How much oil spilled How much do you swim *How much you swim I wonder how much you swim *I wonder how much do you swim *I don't have how much money I don't have very much money I don't have much money How much did you read *How much of the book you read How much of the book did you read I wonder how much of the book you read How many people died How many people did you see *How many people you saw I wonder how many people you saw I wonder how many of the people you saw were students How did John do it I wonder how John did it How long will it last *How big will it last How many years did it take to do it How big is the department *How big the department is *I wonder how big is the department I wonder how big the department is *I wonder how big departments they are *I wonder how a department it is I wonder how big a department it is How important is it to turn the computer off I wonder how important it is to turn off the computer *I wonder how important is it to turn off the computer How quickly did Joe run *How quickly Joe ran I know how quickly you ran *I know how quickly did you run *He ran I know how quickly *Quickly did Joe run *Very quickly did Joe run *I know very quickly did Joe run *I know quickly did John run How much more quickly did you run *How much more quickly you run *I wonder how much more quickly did he run I wonder how much more quickly he ran How much more quickly did he run than Joe How much more should we work on this How much further do you think we should drive tonight I don't know how much longer I can tolerate this How much bigger is the dog *How much bigger dogs are they *How much bigger dogs ran *How big dogs run How much further did you run How much more oil spilled How much more spilled How much more oil did they spill How much more did they spill *How much more they spilled I wonder how much oil spilled I wonder how much oil they spilled *How much more efficient programs are available How many dogs ran How many ran How many dogs did you see How many more people did you see How many more people do you think will come I wonder how many more people he thinks will come *I wonder how many more people does he think will come How many times did you do it *How many times you did it I wonder how many times you did it *How many more stupid times did you do it How many years ago did you do it *Many years ago did you do it *How many years did you do it I wonder how many years ago you did it *How many years ago you did it I'll show you the house where I met your mother *I'll show you the house which I met your mother This is the man whose dog I bought *This is the man which dog I bought I wonder where John is *I wonder where John hit The dogs, some of which were very large, ran after the man The dogs, some of which I had seen before, ran after the man *The dogs some of which were very large ran after the man The box contained many books, some of which were badly damaged *Some of which were badly damaged *The box contained many books, some were badly damaged *The box contained many books, some of the books were badly damaged The dogs, some of them very large, ran after the man *The dogs, some of the dogs very large, ran after the man *Some of them very large ran after the man The man was chased by dogs, some of them very large I believe it was John who stole the priceless documents *I believe Fred was John who stole the priceless documents It seems to have been Einstein who first came up with the idea *There seems to have been Einstein who first came up with the idea *It hopes to have been Einstein who first came up with the idea *The book discussed Einstein who first came up with the idea *Stravinsky was in Paris that Debussy first heard Balinese music It was in Paris that Debussy first heard Balinese music It must have been there that he realized his destiny *It tried to have been there that he realized his destiny *He composed some good music that he realized his destiny *It was quickly that he wrote his first symphony Wasn't it in 1955 that Sally first met Joe Whatever the outcome, I'm sure he'll still be popular *Whatever an outcome, I'm sure he'll still be popular Whatever the outcome is, I'm sure he'll still be popular *What the outcome is, I'm sure he'll still be popular %CONJUNCTIONS The man we saw when we went to Paris is here *The man we saw but we went to Paris is here You should see a play while in London *You should see a play after in London I left the party after seeing Ann there *I left the party because seeing Ann there *I left the party despite I saw Ann there Because I didn't see Ann, I left *Therefore I didn't see Ann, I left I left, therefore I didn't see Ann But I really wanted to see her *After I really wanted to see her As I suspected, he had already left *Because I suspected, he had already left *I suspected, he had already left *I suspected Some grammars are better than others, as we have proved As had been expected, the party was a big success *As had been green, the party was a big success *As had wanted to be expected, the party was a big success *As had expected the party to be a success, it was a success In the event that the case goes to trial, I'm sure Clinton will be acquitted *In the scandal that the case goes to trial, I'm sure Clinton will be acquitted He should be acquitted, on the grounds that there's no evidence The public seem to love him, no matter what he does *The public seem to love him, no matter the stupid things he does %VERBS Abrams does like programming *Abrams does be a good programmer He is being hired by another company He is looking for another job Fred has had five years of experience as a programmer *Fred has had been a programmer for five years I gave my mother the present I bought for her I gave her the present I bought for her *I gave my mother it We picked out some beautiful flowers for her We picked some beautiful flowers out for her We picked them out for her *We picked out them for her Did you put the milk in the refrigerator *Did you put the milk Where did you put the milk I hope he comes to the party tomorrow I hope that he comes to the party tomorrow *I hope him to come to the party tomorrow I expect him to come to the party tomorrow I expect to go to the party tomorrow *I expect *I expected who would come to the party I knew who would come to the party *I expected he go to the party I suggested he go to the party *He knew me how to use the program He asked me how to use the program *He disputed our program was superior He disputed that our program was superior Anne told me I would almost certainly be hired *Anne expected me I would almost certainly be hired *We argued adding new features to the program We discussed adding new features to the program *I thought terrible after our discussion I felt terrible after our discussion I made him make some changes in the program *I encouraged him make some changes in the program I helped him make some changes in the program I helped make some changes in the program *I saw make some changes in the program *I made him telling her about the party I saw him telling her about the party Phil gave me a sweater which he bought in Paris *Phil chose me a sweater which he bought in Paris Alan bet me five dollars Clinton would lose the election *Alan offered me five dollars Clinton would lose the election She said she didn't approve of my behavior *She said she didn't like of my behavior The results are in, the game is up and the truth is out *The in results show the out truth about the up game *The results became in and the truth seemed out He sold for five dollars the ring his mother had given him Clinton announced on Tuesday a bold new proposal *Clinton announced on Tuesday it I gave my brother an expensive present I gave him an expensive present I gave an expensive present I gave it *I gave my brother it I gave him for his birthday a very expensive present *I gave him for his birthday it I gave for his birthday an expensive present *I gave for his birthday it The President announced on Monday that several more bases would be closed He had attempted for years to make a career as a concert pianist *He had attempted for years I asked him when I saw him at the party yesterday what he was working on *I talked to him when I saw him at the party yesterday what he was working on I wondered for a long time why everyone liked her so much *I thought for a long time why everyone liked her so much I told Margaret that I thought she would probably be hired *I told on Tuesday Margaret that I thought she would probably be hired I told Margaret on Tuesday that I thought she would probably be hired We discussed at the meeting hiring a new secretary *We discussed at the meeting We informed the new employees that no salary increase would be possible We informed at the meeting the new employees *We informed at the meeting the new employees that no salary increase would be possible They were asked that he be allowed to go If his calculations were correct, Copernicus reasoned, the earth must revolve around the sun The earth, Copernicus reasoned, must revolve around the sun The earth must revolve around the sun, Copernicus reasoned *The earth must revolve around the sun, Copernicus was happy *The earth must revolve around the sun, Copernicus destroyed *The earth, the pope cringed when Copernicus reasoned, revolves around the sun Abortion was legal until the third month, the court ruled If the pregnancy was within the first three months, the court ruled, abortion was legal Nobody, it seems, wants to be a liberal *Nobody, John seems, wants to be a liberal Business is booming, Joe Smith, a car dealer, says Business is booming, says Joe Smith, a car dealer You can do anything you want, I told her In the last few years, it seems, nobody wants to be a liberal Also invited to the meeting were several prominent scientists *Also invited to the meeting invited several prominent scientists Also awarded the prize was Jean Smith, a prominent computer scientist Chosen to lead the commission was Fred Schultz, a former Federal judge *Chosen to lead the commission seemed likely to be Fred Schultz, a former Federal judge *Chooses to lead the investigation Fred Schultz *Choose to lead the investigation did Fred Schultz Also recommended in the report was a new initiative to combat crime *Also chosen the leader for the commission was Fred Schultz Included in our paper is a summary of the features of our program Also performing in the concert were members of the Budapest Quartet *Were performing in the concert members of the Budapest Quartet Voting in favor of the bill were 36 Republicans and 4 moderate Democrats Glaring coldly at Sarah, he walked out of the room He walked out of the room, glaring coldly at Sarah *Glaring coldly at Sarah, walking out of the room Finding that it was impossible to get work as a waiter, he worked as a janitor He had hoped to get work as a waiter, but, finding this was impossible, he worked as a janitor *He said that, finding that it was impossible to get work as a waiter, he would work as a janitor Used by some of the finest pianists in the country, Baldwin pianos are technical marvels Using specially designed parts, Baldwin pianos are technical marvels *Used specially designed parts, Baldwin pianos are technical marvels Sending a message of discontent to Washington, voters overwhelmingly rejected the Clinton administration She's a really good player John's coming to the party tonight He's usually gone to Boston for Thanksgiving *Do you know where John's Who's afraid of the big bad wolf That's just the kind of person he is *That's just the kind of person he's There's no reason to get so upset about it I didn't think he would do it, but he did *I didn't think he would invite her, but he invited If you don't want to do it, you should find someone who will If you don't want to do it, you should find someone who does Find someone who does *Find someone who wants to do I don't like programming, and someone who does may be difficult to find The price of the stock more than doubled in two days *The price of the stock more than increased in two days I finally figured out why this program is so slow *I finally flipped out why this program is so slow It turns out that Clinton didn't actually kiss Monica If you go around doing that, you're going to end up making people mad The lawyer pointed out that Clinton didn't actually kiss Monica A party is taking place, so if you'd like to show up, you should do so %PREPOSITIONS I have doubts about inviting him *I have doubts during inviting him I prevented her from doing it by praising her for not doing it From your description, I don't think I would enjoy it We had an argument over whether it was a good movie *We had an argument at whether it was a good movie Because of the rain, we decided to stay home They're having a party in front of the building The man with whom I play tennis is here The man I play tennis with is here *The man whom I play tennis is here *The man with whom I play tennis with is here With whom did you play tennis Who did you play tennis with The data on file will be used for the project at hand, which is already under way *The data on project will be used for the file at program The project was finished on schedule, as usual *The project as usual and the report on schedule were finished I told him by telephone that I was coming by car From in back of the shed, I heard a scream that seemed to come from on top of the garage The university spends $5 per student *The university spends $5 per the student They're building a gigantic mall five miles from here *They're building a gigantic mall five mistakes from here The 7-11 is half a mile up the road, but the supermarket is a long way away I'm sure things will get done with Janet running the company *I'm sure things will get done by Janet running the company *I'm sure things will get done because Janet running the company With Janet in charge, I'm sure things will get done %ADJECTIVES You are lucky that there is no exam today *You are stupid that there is no exam today You are lucky I am here *You are right I am here This is something we should be happy about *This is something we should be happy *The happy about it man kissed his wife Is he sure how to find the house *Is he correct how to find the house You should be proud of your achievement *You should be happy of your achievement He is the smartest man I know *They are some smartest men I know I've seen a lot of programs, but ours is the fastest Ours is the fastest of the programs we have seen I've seen a lot of programs, but ours runs the most quickly *This is our the fastest program Voters angry about the economy will probably vote for Clinton *Voters angry will probably vote for Clinton Many Democrats unhappy about the economy but doubtful that Clinton can be elected probably won't vote at all *Many Democrats unhappy but doubtful probably won't vote at all *Many Democrats likely that Bush will be reelected probably won't vote Hundreds of young men, furious about the verdict in the Rodney King case, looted stores in Los Angeles today *Hundreds of young men, furious, looted stores in Los Angeles today We need a programmer knowledgeable about Lisp *We need a programmer knowledgeable Any program as good as ours should be useful *Any program good should be useful Let us know if you have a program capable of parsing this sentence *Let us know if you have a program capable It is believed that even the troops loyal to Hussein will soon be forced to surrender *It is believed that even the troops loyal will soon be forced to surrender Republican policies only benefit the rich and powerful Republican policies only benefit the rich and the powerful *Republican policies only benefit a rich and a powerful *Republican policies only benefit some rich and some powerful The meek will inherit the earth, and the best is the enemy of the good They're building a skyscraper over 1000 feet tall *They're building a skyscraper tall The river is half a mile wide here and 300 feet deep *The river is half a mile beautiful and 300 feet dangerous Mr. John Smith, 66 years old, will succeed him as president *Mr. John Smith, old, will succeed him as president A big black ugly dog chased me A big, black, ugly dog chased me The former astronaut was alone and afraid *The alone astronaut was former %ADVERBS He is apparently an expert on dogs *He knows apparently an expert on dogs Mary quickly walked out of the room Mary just walked out of the room Quickly, Mary walked out of the room Mary walked out of the room quickly *Mary walked out of the room just He told them about the accident immediately *He told them about the accident presumably He told them about the accident, presumably She is very careful about her work She works very carefully *She very works carefully Is the piece easy enough for you Is the piece too easy for you *Is the piece enough easy for you She is apparently an excellent pianist *She married apparently an excellent pianist Only after the movie did he realize his mistake *After the movie did he realize his mistake I may have taken cocaine a few times, but at no time did I inhale *A few times may I have taken cocaine, but I inhaled at no time Never have I seen such a grotesque display of incompetence *Often have I seen such a grotesque display of incompetence We like to eat at restaurants, particularly on weekends We like to eat at restaurants, usually on weekends *We like to eat at restaurants, fortunately on weekends Such flowers are found mainly in Europe *Such flowers are found apparently in Europe *Such flowers are found mainly particularly in Europe *Such flowers are found mainly Many people, particularly doctors, believe there is no health care crisis *Many people, strongly doctors, believe there is no health care crisis I found a house that even John thinks we should buy He told me that even his mother likes me *He told me that even, his mother likes me We put the pie straight in the oven *We put the pie quickly in the oven We put the pie straight in *We put the pie straight He lives high in the mountains He lives over by the lake *He lives over by The apparently angry man walked out of the room The often underpaid administrators resent the invariably rude students and the understandably impatient professors The delicately lyrical tone of the cello contrasted with the fiercely percussive piano chords The always delicately lyrical tone was really beautiful *The delicately always lyrical tone was really beautiful *The delicately very lyrical tone was really beautiful Biochemically, I think the experiment has a lot of problems I think the experiment has a lot of problems biochemically It is biochemically an interesting experiment I'm not sure the results are biochemically valid %IT-THERE-THIS There is a dog in the park *There is chasing dogs *There are a dog in the park Does there seem to be a dog in the park? *Does there want to be a dog in the park? There seems to appear to have been likely to be a problem *There seems to appear to have been likely to be problems *There seems to appear to have been likely to be stupid There was an attempt to kill Rod The man there was an attempt to kill died There was a problem, but we solved it It is likely that Rod died *Joe is likely that Rod died It is clear who killed Rod *Joe is clear who killed Rod It may not be possible to fix the problem Grace may not be possible to fix the problem It is important that women be ready when they make these choices *It is clear that women be ready when they make these choices *Joe is important that women be ready when they make these choices flowers are red to attract bees I made it clear that I was angry *I made Anne clear that I was angry Dick is easy to hit *Dick is big to hit It is important to fix the problem Dick is important to fix the problem The man it is likely that John hit died *The man Joe is likely that Dick hit died Does it seem likely that Ann will come Does Ann act glad that Joe came *Does it act likely that Joe came It doesn't matter what Ted does *Joe doesn't matter what Ted does I want it to be possible to use the program I want Joe to be possible to use the program I want it to be clear that it was my idea *I asked it to be clear that it was my idea I want it to be obvious how to use the program *I want Emily to be obvious how to use the program I want Joe to be easy to hit It is likely they will come *Joe is likely they will come This is because he is extremely famous The trial is because he is extremely famous The excitement over the trial is because he is extremely famous This seems to have been because he is extremely famous %COMPARATIVES Our program works more elegantly than yours Ours works more elegantly than yours does Ours works more elegantly than yours works *Ours works more elegant than yours *Ours is more elegant than yours works Our program works more elegantly than efficiently Our program is more elegant than efficient Our program works better than yours We do this more for pleasure than for money He is more likely to go than to stay *He is more likely than to stay *He is more black to go than to stay He is more likely to go than he is to stay He is more likely to go than John is It is more likely that Joe died than that Fred died It is more likely that Joe died than it is that Fred died *John is more likely that Joe died than it is that Fred died *It is more likely that Joe died than John is that Fred died It is easier to ignore the problem than to solve it It is easier to ignore the problem than it is to solve it *Greg is easier to ignore the problem than to solve it Our program is easier to use than to understand *Our program is easier to use it than to understand I am more happy now than I was in college *I am more happy now than I earned in college He is more a teacher than a scholar I make more money in a month than John makes in a year I make more money in a month than John dies in a year I hit more the dog than the cat I have more money than John has time I have more dogs than John has five cats I have more money than John has a dog She interviewed more programmers than were hired *She interviewed more programmers than was hired I am as intelligent as John I earn as much money as John does I am as intelligent as John does I earn as much money in a month as John earns in a year *I earn as much money in a month than John earns in a year Our program was better than had been expected *Our program was better than had been argued *Our program was better than had been responded Our program was better than was expected *Our program was better than were expected More people came to the party than were expected More people came to the party than was expected Our program did not run as quickly as expected *Our program did not run as quickly as said How much faster is our program than theirs *How much faster our program is than theirs The more quickly we write the program, the more money we will earn *The more people like the program *The people like the program, the more money we will earn The better the program is, the more people will like it The better the program, the more people will like it *The better a program, the more people will like it The less likely it is that we can parse this, the easier it is to understand % "SO THAT", "SUCH...THAT" The shuttle is so big that it has to be carried on the back of a jet *The shuttle is big that it has to be carried on the back of a jet So many people attended that they spilled over into several neighboring fields *Many people attended that they spilled over into several neighboring fields The program has so many problems that you should probably just rewrite it *The program has many problems that you should probably just rewrite it I love her so much that I can't let her go *I love her very much that I can't let her go He ran home so quickly that his mother could hardly believe he had called from school *He ran home quickly that his mother could hardly believe he had called from school She presented her case with such eloquence that we could only admire her *She presented her case with eloquence that we could only admire her %"AND", ETC. I went to the store and got a gallon of milk *I got and went a gallon of milk I got a gallon of milk and some eggs I went to the store, got a gallon of milk, and returned the eggs % Sentence belwo was marked bad, but this seems arguable to me .. !? % *I went to the store, got a gallon of milk, and some eggs Mary, Joe and Louise are coming to the party Neither Mary nor Louise are coming to the party I am ready and eager to go to the party She handled it skillfully and with compassion I told him that I hated him and that I never wanted to see him again He told me why he was here and what he was doing *He told me why he was here and that he hated me Although he likes me and he respects me, he says he needs some privacy Your house and garden are very attractive I am in New York and I would like to see you This is not the man we know and love *This is not the man we know and love him The coverage on TV and on the radio has been terrible *The coverage on TV and I have seen has been terrible The sky is blue, so it is likely that Joe will come *It is blue and likely that Joe will come That is the man for whom and with whom Joe works *That is the man for whom and with Janet Joe works *When did Joe and John did leave the party % Huh ??? what's the correct parse/meaning of this sentence? % "my dog's freind came" is one of the parses !!?? wtf .. % My dog, cat, and cousin's friend came *My dog, cat, horse, mouse, and his cow left My dog, cat, horse, and mouse, and his cow left you should not only ask for your money back, but demand it I was both angry and sad at the same time %PLURALIZATION IN CONJUNCTIONS There is neither a dog nor a cat here *There are neither a dog nor a cat here There is a dog or a cat here *There are a dog or a cat here *There are a dog and a cat here There is a dog and a cat here He and I are friends neither I nor my friend knows what happened neither I nor my friend know what happened Either I or my friend knows what happened Either I or my friend know what happened The dog and cats know what happened *The dog and cats knows what happened Are a dog and a cat here *Is a dog and a cat here *Is John and I invited Are John and I invited Is John or I invited Are John or I invited Is neither John nor I invited Are neither John nor I invited %GERUNDS Playing the piano bothers John Releasing the program at this point would annoy our competitors The playing of the piano really bothers John *The playing the piano really bothers John Telling Joe about the party would create a real problem *The telling Joe about the party could create a real problem Your telling Joe about the party could create a real problem Telling Joe that Sue was coming to the party would create a real problem Telling would create a real problem I want her to know about it, but the telling won't be easy *The telling her won't be easy *Some children like to tease Teasing can be very cruel Your telling John to leave may have destroyed your relationship The graduating of Fred changes the situation The sleeping of students is becoming a big problem The sleeping of students can ruin a lecture Buying of shares was brisk on Wall Street today The sleeping in class is becoming a big problem *The telling John to leave was stupid *The inviting your mother was stupid *The showing how to use the program seemed to interest people *The attempting to go to the party angered Joe The showing of the program seemed to impress people The sleeping of students described by Fred is a big problem The sleeping of students I told you about is a big problem The frequent sleeping of students is a big problem His hitting of the dog didn't help matters Some hitting of dogs will solve the problem the drug running here has become a massive problem He made a mistake in inviting John He made a mistake in the inviting of John I should have talked to you before inviting John I should have talked to you before the inviting of John %SPECIAL SUBJECTS: INFINITIVES, CLAUSES, AND INDIRECT QUESTIONS To pretend that our program is usable in its current form would be silly *To pretend that our program is usable in its current form would be happy That our program will be immediately accepted is hardly likely *That our program will be immediately accepted wrote the program *Is that our program will be accepted likely *That our program will be accepted seems likely that our program will be accepted Whether we should go to the party is the important question *Whether we should go to the party annoys me %LONGER CONSTRUCTIONS, PUNCTUATION, AND CAPITALIZATION Using the conventional Minuet form, Beethoven produced a piece of great originality Written in 1820, the symphony shows a new level of maturity for the composer Abandoned by his friends, he left Vienna three years later In Vienna, Beethoven met someone who would later be greatly influenced by him: Franz Schubert *In Vienna, Beethoven met someone who would later be greatly influenced by him; Franz Schubert Today I did something very important: I bought a dog *The store where I did something very important: I bought a dog was closed today It has been said that Schubert ran out of the room when he met Beethoven; but we now know this is untrue An important question remains: did Beethoven know about Schubert's music She just wanted one thing: to be a professional skater She knew one thing: that she would be a professional skater I agree that, in some ways, your program is better I agree that in some ways, your program is better *I agree that, in some ways your program is better That is the man who, in Joe's opinion, we should hire *That is the man, in Joe's opinion, we should hire *That is the man who, in Joe's opinion we should hire I know you hate Bill, but why did you send him that nasty note *I know you hate Bill, because why did you send him that nasty note But why did you send him that nasty note If John was with Lisa last night, who went to the movie with Diane *Although John was with Lisa last night, who went to the movie with Diane We need a President who understands us We need a president who understands us *We need a Melvin who understand us The Zongle of Bongle Dongle resigned today % A Zongle with a bad haircut resigned today -- is valid. % A Zongle with a Mercedes Benz resigned today -- is valid. % *A Zongle with a Bongle Dongle resigned today The National Association of Linguists is meeting here *An Association that many Linguists belong to is meeting here An association that many linguists belong to is meeting here If you were a middle-class American without a job, who would you vote for Many Croats who had fled their homes are now returning to them *Many Croat who had fled their homes are now returning to them Chinese is a wonderful language, Chinese food is nice, and the Chinese are nice people *Armenian is a wonderful language, Armenian food is great, and the Armenian are nice people Armenian is a wonderful language, Armenian food is great, and the Armenians are nice people Danish is a wonderful language, Danish food is great, and the Danish are nice people The Danes are nice people Dr Jane Smith lives on Main St Dr. Jane Smith lives on Main St. *Dr. Jane. Smith. lives on Main. St. Dr. J.G.D. Smith lives on Main St. *A Dr. lives on this St Mr. Smith (a lawyer for Kodak) refused to comment Mr. Smith -- a lawyer for Kodak -- refused to comment We left (carrying the dog) and Fred followed I have $50, but I want a $50000 car 10% of the employees here do 90% of the work Zangbert stock fell 30% to $2.50 yesterday, but jumped 10% today in heavy trading *Zangbert stock fell %, but jumped to $ today With a 5% raise, I can get a $50000 car "What are you doing?" she asked. "This is what I'm going to do," he replied. "This is what I'm going to do!" he replied. *"This is what I'm going to do." he replied. *"This is what I'm doing to do" he replied. "On second thought," he said, "this is what I'm going to do". "Quotation marks" are simply "ignored" by our "program" Sometimes, people do this: They follow the colon with a capital letter. *However, they never do this; They don't follow a semi-colon with a capital letter. John said: "This is another use of colons one sometimes sees". Formerly, he had worked for Brody, McGill & Demson *He was unhappy & underpaid The rally, at 6:00 last night, was attended by 1.1 million people link-grammar/data/en/tiny.dict0000644000000000000000000001306312536650432013501 0ustar %***************************************************************************% % % % Copyright (C) 1991-1998 Daniel Sleator and Davy Temperley % % http://www.link.cs.cmu.edu/link % % % %***************************************************************************% dog cat woman man park yard bone neighbor store street bird hammer nose party friend house movie brother sister diner student exam: {@A-} & Ds- & {@M+ or (R+ & Bs+)} & (J- or Os- or (Ss+ & (({@CO-} & {C-}) or R-)) or SIs-); dogs cats women men parks yards bones neighbors stores streets birds hammers noses parties friends houses movies brothers sisters diners students exams wars winters actions laws successes: {@A-} & {Dmc-} & {@M+ or (R+ & Bp+)} & (J- or Op- or (Sp+ & (({@CO-} & {C-}) or R-)) or SIp-); water anger money politics trouble: {@A-} & {Dmu-} & {@M+ or (R+ & Bs+)} & (J- or Os- or (Ss+ & (({@CO-} & {C-}) or R-)) or SIs-); law winter action war success: {@A-} & {D*u-} & {@M+ or (R+ & Bs+)} & (J- or Os- or (Ss+ & (({@CO-} & {C-}) or R-)) or SIs-); CAPITALIZED-WORDS: J- or O- or (S+ & (({@CO-} & {C-}) or R-)) or SI-; she he: (Ss+ & (({@CO-} & {C-}) or R-)) or SIs-; me him them us: J- or O-; her: D+ or J- or O-; its my your their our: D+; his: D+; you they we I: J- or O- or (Sp+ & (({@CO-} & {C-}) or R-)) or SIp-; it: J- or O- or (Ss+ & (({@CO-} & {C-}) or R-)) or SIs-; this: (J- or O- or (Ss+ & (({@CO-} & {C-}) or R-)) or SIs-) or D*u+; these: (J- or O- or (Sp+ & (({@CO-} & {C-}) or R-)) or SIp-) or Dmc+; those: (Dmc+) or (({P+} or {{C+} & Bp+}) & (J- or O- or (Sp+ & (({@CO-} & {C-}) or R-)) or SIp- or Xb-)); the: D+; a: Ds+; did: ({Q-} & SI+ & I+) or ({@E-} & (S- or (RS- & B-)) & (((B- or O+) & {@MV+}) or I+)); do: (SIp+ & I+) or ({@E-} & (Sp- or (RS- & Bp-) or I-) & (((B- or O+) & {@MV+}) or I+)); does: ({Q-} & SIs+ & I+) or ({@E-} & (Ss- or (RS- & Bs-)) & (((B- or O+) & {@MV+}) or I+)); done: {@E-} & (Pv- or M- or (PP- & (B- or O+) & {@MV+})); doing: {@E-} & (Pg- or Mg-) & (O+ or B-) & {@MV+}; has: ({Q-} & SIs+ & PP+) or ({@E-} & (Ss- or (RS- & B-)) & (TO+ or ((B- or O+) & {@MV+}) or PP+)); have: ({Q-} & SIp+ & PP+) or ({@E-} & (Sp- or (RS- & Bp-) or I-) & (TO+ or ((B- or O+) & {@MV+}))); had: ({Q-} & SI+ & PP+) or ({@E-} & (S- or (RS- & B-) or PP-) & (TO+ or ((B- or O+) & {@MV+}) or PP+)); having: {@E-} & (M- or Pg-) & (TO+ or ((B- or O+) & {@MV+}) or PP+); is was: ((Ss- or (RS- & Bs-) or ({Q-} & SIs+)) & (((O+ or B-) & {@MV+}) or P+ or AF-)); are were am: ((Sp- or (RS- & Bp-) or ({Q-} & SIp+)) & (((O+ or B-) & {@MV+}) or P+ or AF-)); be: I- & (((O+ or B-) & {@MV+}) or P+ or AF-); been: PP- & (((O+ or B-) & {@MV+}) or P+ or AF-); being: {@E-} & (M- or Pg-) & (((O+ or B-) & {@MV+}) or P+ or AF-); will can.v may must could should would might: (({Q-} & SI+) or S- or (RS- & B-)) & I+; run come: {@E-} & (Sp- or (RS- & Bp-) or I- or W- or PP-) & {@MV+}; runs comes goes: {@E-} & (Ss- or (RS- & Bs-)) & {@MV+}; ran came went: {@E-} & (S- or (RS- & B-)) & {@MV+}; go: {@E-} & (Sp- or (RS- & Bp-) or I-) & {@MV+}; gone: {@E-} & PP- & {@MV+}; going: {@E-} & (Pg- or M-) & {TO+} & {@MV+}; running coming: {@E-} & (Pg- or M-) & {@MV+}; talk arrive die: {@E-} & (Sp- or (RS- & Bp-) or I-) & {@MV+}; talks.v arrives dies: {@E-} & (Ss- or (RS- & Bs-)) & {@MV+}; talked arrived died: {@E-} & (S- or (RS- & B-) or PP-) & {@MV+}; talking arriving dying: {@E-} & (Pg- or M-) & {@MV+}; see meet chase invite arrest: {@E-} & (Sp- or (RS- & Bp-) or I-) & (O+ or B-) & {@MV+}; sees meets chases invites arrests: {@E-} & (Ss- or (RS- & Bs-)) & (O+ or B-) & {@MV+}; met chased invited arrested: {@E-} & (M- or Pv- or ((S- or (RS- & B-) or PP-) & (B- or O+))) & {@MV+}; saw: {@E-} & (S- or (RS- & B-)) & (B- or O+) & {@MV+}; seen: {@E-} & (Pv- or M- or (PP- & (B- or O+))) & {@MV+}; seeing meeting chasing inviting arresting: {@E-} & (Pg- or M-) & (O+ or B-) & {@MV+}; tell: {@E-} & (Sp- or (RS- & Bp-) or I-) & ((O+ or B-) & {TH+ or C+ or QI+ or @MV+}); tells: {@E-} & (Ss- or (RS- & Bs-)) & ((O+ or B-) & {TH+ or C+ or QI+ or @MV+}); told: {@E-} & (M- or Pv- or ((S- or (RS- & B-) or PP-) & (O+ or B-))) & {TH+ or C+ or QI+ or @MV+}; telling: {@E-} & (Pg- or M-) & ((O+ or B-) & {TH+ or C+ or QI+ or @MV+}); recently sometimes soon gradually specifically generally initially ultimately already now sadly broadly: E+ or MV-; from with at against behind between below above without under for in across through by out up down along like.p on over into about: J+ & (Mp- or MV- or Pp-); of: J+ & Mp-; here there: MV- or Mp- or Pp-; that: (C+ & TH-) or Ds+ or (R- & (C+ or RS+)) or SIs- or (Ss+ & {{@CO-} & {C-}}) or J- or O-; to: (I+ & TO-) or ((MV- or Mp- or Pp-) & J+); who: (R- & (C+ or RS+)) or S+ or B+; what: S+ or B+; which: (R- & (C+ or RS+)) or S+ or B-; because unless though although: (C+ & (({Xc+} & CO+) or MV-)); after before since until: (C+ or J+) & (({Xc+} & CO+) or MV- or Mp-); if: C+ & (({Xc+} & CO+) or MV-); when: (QI- & C+) or Q+ or (C+ & (({Xc+} & CO+) or MV-)); where:(QI- & C+) or Q+; how: (QI- & (C+ or EA+)) or Q+ or EA+; fast slow short long black white big small beautiful ugly tired angry: {EA-} & (A+ or ((Pa- or AF+) & {@MV+})); glad afraid scared.a fortunate unfortunate lucky unlucky certain sure: {EA-} & (A+ or ((Pa- or AF+) & {@MV+} & {C+ or TO+ or TH+})); very: EA+; but and: MV- & C+; ",": Xc-; ANDABLE-CONNECTORS: S+ & S- & A+ & A- & MV+ & MV- & D- & O+ & O- & J+ & J- & C-; link-grammar/data/tools/0000755000000000000000000000000012536650433012405 5ustar link-grammar/data/tools/fix-len.pl0000755000000000000000000000116612536650433014313 0ustar #! /usr/bin/env perl # # fix-len.pl # Dictionary maintenance tool - make dictionary line lengths uniform. # Reads dictionary on stdin, prints it, with a uniform number # of words per line, to stdout. # # Example usage: # cat en/words/words.adj.2 | ./fix-len.pl # # Copyright (C) 2009 Linas Vepstas # my $linelen = 0; while (<>) { chop; my @entries = split; # Loop over the entries foreach (@entries) { my $wd = $_; $linelen += 1 + length $_; print "$_ "; # Insert a newline if the resulting line is too long. if ($linelen > 60) { print "\n"; $linelen = 0; } } } print "\n"; link-grammar/data/tools/membership.pl0000644000000000000000000000157112536650433015101 0ustar #! /usr/bin/env perl # # membership.pl # # Print cluster membership contents for Siva's clusters. # Siva's cluster seems to contain just 13506 word forms ... # $| = 1; $fileprev = ""; $cnt = 0; while(<>) { chop; if (/^cluster/) { print "$cnt\n"; print "$_\n"; $cnt = 0; next; } # XXXXXXXXXXXXXXXXXXXXXXXx Note: the grep here is buggy, # since it will return postive hits for e.g. parcel.n # vs. "parceling" rather than the intended grep where the period is # escaped. So use with caution! if (/^ (.*)$/) { $wrd = $1; $cmd = "grep \" " . $wrd . "\" ../blah/*"; $out = qx/$cmd/; chop $out; if ($out =~/^\s*$/) { $cmd = "grep \"^" . $wrd . "\" ../blah/*"; $out = qx/$cmd/; chop $out; } # print "$wrd in $out\n"; ($fn, $rest) = split /:/, $out; $cnt ++; if ($fileprev ne $fn) { print "\t$wrd -- $fn\n"; } $fileprev = $fn; } } link-grammar/data/tools/README0000644000000000000000000000056512536650433013273 0ustar Dictionary Maintenance Tools ---------------------------- This directory contains some ad-hoc, undocumented tools for maintaining the dictionaries. Here are a few documented tools: insert.pl: add words to a dictionary, in sorted alphabetical order. fix-len.pl: reformat the dictionary files to have even line-lengths link-grammar/data/tools/dict-splitter.pl0000644000000000000000000000217312536650433015534 0ustar #! /usr/bin/env perl # # dict-splitter.pl # # Split dictionary into distinct files. # # Usage: cat 4.0.dict | ./dict-splitter.pl # # Each word cluster will be written to a distinct file. # $fileno = 0; $doprt = 1; $didprt = 0; $file_prefix = "../blah/blah-"; $filename = "> " . $file_prefix . $fileno; open FOUT, $filename; while(<>) { chop; if (/^%/) { next; } if (/^ %/) { next; } if (/:/) { ($wds, $rules) = split /:/; if (($wds =~ /^<.*>$/) || ($wds =~ /^\//)) {} else { print FOUT "$wds\n"; $didprt = 1; } $doprt = 0; if ($rules =~ /;/) { $doprt = 1; if ($didprt) { $fileno ++; # print "--------------------- $fileno\n"; $filename = "> " . $file_prefix . $fileno; open FOUT, $filename; } $didprt = 0; } next; } if ($doprt) { if (/^\s*$/) { next; } # if all whitespace, skip if (/^\//) { next; } print FOUT "$_\n"; $didprt = 1; next; } if (/;/) { $doprt = 1; if ($didprt) { $fileno ++; # print "--------------------- $fileno\n"; $filename = "> " . $file_prefix . $fileno; open FOUT, $filename; } $didprt = 0; } } link-grammar/data/tools/delete.pl0000755000000000000000000000231112536650433014204 0ustar #! /usr/bin/env perl # # delete.pl # # Dictionary maintenance tool - delete words from dictionary. # Given a list of words and a dictionary file, this script # will delete the words from the file. # # It is assumed that the word-list holds one word per line, # and that the word-list is already in alphabetical order. # # Example usage: # ./delete.pl wordlist_file en/words/words.adj.1 # # Copyright (C) 2009 Linas Vepstas # if ($#ARGV < 1) { die "Usage: delete.pl wordlist-file dict-file\n"; } # Get the word-list, and the dictionary, from the command line my $wordlist_file = @ARGV[0]; my $dict_file = @ARGV[1]; open(WORDS, $wordlist_file); my @words = (); while () { # Get rid of newline at end of word. chop; push @words, $_; } close(WORDS); my $word = shift @words; open (DICT, $dict_file); while () { chop; my @entries = split; # Loop over the entries $gotone = 0; foreach (@entries) { my $entry = $_; while (($entry gt $word) && ($word ne "")) { $word = shift @words; } if ($entry ne $word) { # print "$entry "; print "$entry"; $gotone = 1; } else { $word = shift @words; } } if ($gotone) { print "\n"; } } close (DICT); link-grammar/data/tools/cluster-pop.pl0000755000000000000000000000172412536650433015226 0ustar #! /usr/bin/env perl # # cluster-pop.pl # # Populate the cluster table from Siva's clusters. # Siva's clusters seems to contain just 13506 word forms ... # # Usage: cat clusters_weka-trimmed.txt | ./cluster-pop.pl # use DBI; $| = 1; my $dbh = DBI->connect('DBI:SQLite:dbname=clusters.db', 'linas', 'asdf') or die "Couldn't connect to database: " . DBI->errstr; my $insert = $dbh->prepare( 'INSERT INTO ClusterMembers (cluster_name, inflected_word) VALUES (?,?)'); my $cluster_name = ""; my $inflected_word = ""; my $clust_cnt = 0; my $word_cnt = 0; while(<>) { chop; if (/^cluster/) { $cluster_name = $_; print "$cluster_name\n"; $clust_cnt ++; next; } if (/^ (.*)$/) { $inflected_word = $1; print "\t$inflected_word\n"; $insert->execute($cluster_name, $inflected_word) or die "Couldn't execute statement: " . $insert->errstr . "\nword was " . $inflected_word; $word_cnt ++; } } print "Added $word_cnt words to $clust_cnt clusters\n"; link-grammar/data/tools/wiktionary.pl0000755000000000000000000000243412536650433015150 0ustar #! /usr/bin/env perl # # wiktionary.pl # # Verify parts of speech on wiktionary. # # Linas vepstas August 2009 # $|=1; $urlbase = "http://en.wiktionary.org/wiki/"; # http://www.thefreedictionary.com $urlbase = "http://en.wiktionary.org/w/index.php?title="; $urltail = "&action=edit"; $word = "lycée"; $word = "school"; while (<>) { chop; $word = $_; $url = $urlbase. $word . $urltail; $output = `w3mir -drr -s \"$url\"`; # $output =~ /\{\{ni\n";en-noun\|(\w+)\}\}/; if ($output =~ /\/s) { print "NOUN- $word\n"; } elsif ($output =~ /\/s) { $plu = $1; print "PLURAL- $plu\n"; } elsif ($output =~ /\/s) { print "MASS- $word\n"; } elsif ($output =~ /\/s) { print "NOUN-XXX- $word\n"; } if ($output =~ /\/s) { print "VERB- $word\n"; } if ($output =~ /\/s) { print "ADJ- $word\n"; } if ($output =~ /\/s) { print "ADJ- $word\n"; } if ($output =~ /\/s) { print "ADV- $word\n"; } else { print "XXX- $word\n"; } `sleep 1`; } link-grammar/data/tools/insert.pl0000755000000000000000000000251712536650433014256 0ustar #! /usr/bin/env perl # # insert.pl # # Dictionary maintenance tool - insert words into dictionary. # Given a list of words and a dictionary file, this script # will insert the words into the file, in alphabetical order, # with a minimum of disruption of the file itself. # # It is assumed that the word-list holds one word per line, # and that the word-list is already in alphabetical order. # # Example usage: # ./insert.pl wordlist_file en/words/words.adj.1 # # Copyright (C) 2009 Linas Vepstas # if ($#ARGV < 1) { die "Usage: insert.pl wordlist-file dict-file\n"; } # Get the word-list, and the dictionary, from the command line my $wordlist_file = @ARGV[0]; my $dict_file = @ARGV[1]; open(WORDS, $wordlist_file); my @words = (); while () { # Get rid of newline at end of word. chop; push @words, $_; } close(WORDS); my $word = shift @words; open (DICT, $dict_file); while () { chop; my @entries = split; # Loop over the entries my $linelen = 0; foreach (@entries) { my $wd = $_; $linelen += length $_; while (($_ gt $word) && ($word ne "")) { print "$word "; $linelen += length $word; $word = shift @words; # Insert a newline if the resulting line is too long. if ($linelen > 62) { print "\n"; $linelen = 0; } } print "$_ "; } print "\n"; } close (DICT); link-grammar/data/de/0000755000000000000000000000000012537603515011635 5ustar link-grammar/data/de/Makefile.am0000644000000000000000000000015512536650432013671 0ustar DICTS= \ 4.0.affix \ 4.0.dict dictdir=$(pkgdatadir)/de dict_DATA = $(DICTS) EXTRA_DIST = $(DICTS) link-grammar/data/de/Makefile.in0000644000000000000000000003467012537603121013705 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = data/de DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dictdir)" DATA = $(dict_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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@ DICTS = \ 4.0.affix \ 4.0.dict dictdir = $(pkgdatadir)/de dict_DATA = $(DICTS) EXTRA_DIST = $(DICTS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/de/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign data/de/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dictDATA: $(dict_DATA) @$(NORMAL_INSTALL) @list='$(dict_DATA)'; test -n "$(dictdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dictdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dictdir)" || 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)$(dictdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dictdir)" || exit $$?; \ done uninstall-dictDATA: @$(NORMAL_UNINSTALL) @list='$(dict_DATA)'; test -n "$(dictdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dictdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(dictdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dictDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dictDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dictDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dictDATA # 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: link-grammar/data/de/4.0.affix0000644000000000000000000000016412536650432013155 0ustar ")" "%" "," "." ":" ";" "?" "!" "''" "'" "'s": RPUNC+; "(" "$" "``": LPUNC+; e en er.f es.f em: SUF+; xxx: PRE+; link-grammar/data/de/4.0.dict0000644000000000000000000005073412536650432013013 0ustar % NOUNS, PRONOUNS % Masculine singular Hund.n Mann.n Brief.n Stein.n Freund.n Koenig.n Punkt.n Schuh.n Mond.n Ball.n Markt.n Frosch.n Hof.n Rock.n Sohn.n Baum.n Traum.n Arzt.n Satz.n Monat.n Bericht.n Erfolg.n Versuch.n Professor.n Doktor.n Staat.n Junge.n Bauer.n Nachbar.n Name.n Lehrer.s Vater.n Bruder.n Schlussel.s Vogel.n Apfel.n Garten.n Tag.n Park.n: {GE+} & {Rm+ or @M+} & {@MX+} & (((({@Ae-} & Dnmd-) or ({@Ar-} & Dnmi-)) & (Ss+ or SIs- or (Xd- & Xc+ & MX-))) or ({@An-} & Dam- & (O- or J*a- or B+)) or ({@An-} & Ddm- & (J*d- or JB+))); % Feminine singular Katze.n Frau.n Hand.n Bank.n Nacht.n Stadt.n Wand.n Wurst.n Form.n Bahn.n Uhr.n Zahl.n Zeit.n Ansicht.n Gestalt.n Krankheit.n Bibliothek.n Blume.n Ecke.n Farbe.n Geige.n Karte.n Kueche.n Nase.n Reise.n Sache.n Strasse.n Woche.n Regel.n Schwester.n Tochter.n Mutter.n Tuer.n Geschichte.n: {GE+} & {Rf+ or @M+} & {@MX+} & (({@Ae-} & Dnf- & (Ss+ or SIs- or O- or B+ or J*a- or (Xd- & Xc+ & MX-))) or ({@An-} & ((Ddf- & (J*d- or JB+)) or (Dgf- & GE-)))); % Neuter singular Maedchen.s Haus.n Jahr.n Bein.n Stueck.n Teil.n Geschenk.n Geschaeft.n Papier.n Glas.n Land.n Wort.n Buch.n Bild.n Kind.n Bett.n Auge.n Ende.n Buero.n Auto.n Kino.n Fenster.s Messer.s Verbrechen.s Halsband.n: {GE+} & {Rn+ or @M+} & {@MX+} & (((({@Ae-} & Dnnd-) or ({@As-} & Dnni-)) & (Ss+ or SIs- or O- or J*a- or B+ or (Xd- & Xc+ & MX-))) or ({@An-} & Ddn- & (J*d- or JB+))); % Masculine genitive Hundes.n Mannes.n Briefes.n Steines.n Freundes.n Koeniges.n Punktes.n Schuhes.n Mondes.n Balles.n Marktes.n Frosches.n Hofes.n Rockes.n Sohnes.n Baumes.n Traumes.n Arztes.n Satzes.n Monates.n Berichtes.n Erfolges.n Versuches.n Professores.n Doktors.n Staates.n Junges.n Bauern.s Nachbares.n Names.n Lehrers.s Vaters.n Bruders.n Schlusseles.s Vogeles.n Apfeles.n Gartenes.n Tages.n Parkes.n: {GE+} & {Rn+ or @M+} & {@MX+} & {@An-} & Dgm- & GE-; % Neuter genitive Maedchenes.s Hauses.n Jahres.n Beines.n Stueckes.n Teiles.n Geschenkes.n Geschaeftes.n Papieres.n Glases.n Landes.n Wortes.n Buches.n Bildes.n Kindes.n Bettes.n Auges.n Endes.n Bueros.s Autos.s Kinos.s Fensters.n Messers.n Verbrechenes.n: {GE+} & {Rn+ or @M+} & {@MX+} & {@An-} & Dgn- & GE-; % Plural Maenner.n Hunde.n Katzen.n Frauen.n Hauser.n Maedchenen.n Briefe.n Steine.n Freunde.n Koenige.n Punkte.n Schuhe.n Monde.n Baelle.n Maerkte.n Froesche.n Hoefe.n Roecke.n Soehne.n Baeume.n Traeume.n Aerzte.n Saetze.n Monate.n Berichte.n Erfolge.n Versuche.n Professoren.n Doktoren.n Staaten.n Jungen.n Bauern.p Nachbarn.n Namen.n Lehrer.p Vaeter.n Brueder.n Schlussel.p Voegel.n Aepfel.n Gaerten.n Haende.n Baenke.n Naechte.n Staedte.n Waende.n Wuerste.n Kuenste.n Banken.n Formen.n Bahnen.n Uhren.n Zahlen.n Zeiten.n Ansichten.n Gestalten.n Krankheiten.n Bibliotheken.n Blumen.n Ecken.n Farben.n Geigen.n Karten.n Kuechen.n Nasen.n Reisen.n Sachen.n Strassen.n Wochen.n Regeln.n Schwestern.n Toechter.n Muetter.n Jahre.n Beine.n Stuecke.n Teile.n Geschenke.n Geschaefte.n Papiere.n Glaeser.n Laender.n Woerter.n Buecher.n Bilder.n Gelder.n Kinder.n Betten.n Augen.n Enden.n Bueros.p Autos.p Kinos.p Fenster.p Messer.p Verbrechen.p Maedchen.p Tagen.n Parke.n Tueren.n Halsbaender.n Geschichten.n: {GE+} & {Rp+ or @M+} & {@MX+} & {@An-} & ((Dnp- & (Sp+ or SIp- or O- or J*a- or B+ or (Xd- & Xc+ & MX-))) or (Ddp- & (J*d- or JB+)) or (Dgp- & GE-)); %Masculine mass Kaese.n: {GE+} & {Rm+ or @M+} & {@MX+} & ((((({@Ae-} & Dnmd-) or ({@Ar-} & {Dnmi- or Dm-}))) & (Ss+ or SIs- or (Xd- & Xc+ & MX-))) or (({@An-} & {Dam- or Dm-}) & (O- or J*a- or B+)) or ((({@An-} & Ddm-) or ({@Am-} & {Dm-})) & (J*d- or JB+))); %Feminine mass Arbeit.n Luft.n Milch.n: {GE+} & {Rf+ or @M+} & {@MX+} & ((({@Ae-} & {Dnf- or Dm-}) & (Ss+ or SIs- or O- or B+ or J*a- or (Xd- & Xc+ & MX-))) or ((({@An-} & Ddf-) or ({@Ar-} & {Dm-})) & (J*d- or JB+)) or ((({@An-} & Dgf-) or ({@Ar-} & {Dm-})) & GE-)); %Neuter mass Geld.n Wasser.n Bier.n Brot.n: {GE+} & {Rn+ or @M+} & {@MX+} & (((({@Ae-} & Dnnd-) or ({@As-} & {Dnni- or Dm-})) & (Ss+ or SIs- or O- or J*a- or B+ or (Xd- & Xc+ & MX-))) or ((({@An-} & Ddn-) or ({@Am-} & {Dm-})) & (J*d- or JB+))); %Masculine mass genitive Kaeses.n: {GE+} & {Rn+ or @M+} & {@MX+} & (({@An-} & Dgm-) or ({@As-} & {Dm-})) & GE-; %Neuter mass genitive Geldes.n Wassers.n Bieres.n Brotes.n: {GE+} & {Rn+ or @M+} & {@MX+} & (({@An-} & Dgn-) or ({@As-} & {Dm-})) & GE-; %PRONOUNS AND DETERMINERS ich: Si+ or SIi-; du: Sd+ or SId-; es.p: Ss+ or SIs- or O- or J*a- or B+; er.p: Ss+ or SIs-; wir: Sp+ or SIp-; ihr.p: Sr+ or SIr- or J*d- or JB+; sie.s: Ss+ or SIs- or O- or J*a- or B+; sie.p: Sp+ or SIp- or O- or J*a- or B+; das.p dies: Ss+ or SIp- or O- or B+ or JB+; mich dich ihn: O- or J*a- or B+; mir dir ihm: J*d- or JB+; uns: O- or J*a- or J*d- or B+ or JB+; ihnen: J*d- or JB+; der.d dieser jener: Dnmd+ or Ddf+ or Dgf+ or Dgp+; die.d diese jene: Dnf+ or Dnp+; das.d: Dnnd+; den.d diesen jenen: Dam+ or Ddp+; dem.d diesem jenem: Ddm+ or Ddn+; des.d: Dgm+ or Dgn+; dieses jenes: Dnnd+ or Dgm+; der.r: (RSs+ & {Xd- & Xc+} & Rm-); die.r: ((RSs+ or RO+) & {Xd- & Xc+} & Rf-) or (RSp+ & {Xd- & Xc+} & Rp-); das.r: ((RSs+ or RO+) & {Xd- & Xc+} & Rn-); den.r: (RO+ & {Xd- & Xc+} & Rm-); ein: Dnmi+ or Dnni+; eine: Dnf+; einen: Dam+; einer: Ddf+ or Dgf+; einem: Ddm+ or Ddn+; eines: Dgm+ or Dgn+; mein dein sein.d unser ihr.d euer: Dnmi+ or Dnni+; meine deine seine unsere ihre eure: Dnf+ or Dnp+; meinen deinen seinen unseren ihren euren: Dam+ or Ddp+ or Dgf+; meiner deiner seiner unserer ihrer eurer: Ddf+ or Dgf+ or Dgp+; meinem deinem seinem unserem ihrem eurem: Ddm+ or Ddn+; meines deines seines unseres ihres eures: Dgm+ or Dgn+; einige: Dnp+ or Sp+ or SIp- or O- or J*a- or B+; einigen: Ddp+ or J*d- or JB+; einiger: Dgp+ or GE-; etwas.d: Dm+; zwei drei vier fuenf sechs sieben acht neun zehn: D*p+; s: YS- & D+; % VERBS bin.v war.i: (((Si- or ({CO-} & SIi+)) & (O+ or P+) & W-) or ((B- or PI-) & (Si- & C-))) & {SC+}; bist.v warst.v: (((Sd- or ({CO-} & SId+)) & (O+ or P+) & W-) or ((B- or PI-) & (Sd- & C-))) & {SC+}; ist.v war.s: (((Ss- or ({CO-} & SIs+)) & (O+ or P+) & W-) or ((B- or PI-) & ((Ss- & C-) or RSs-))) & {SC+}; sind.v waren.v: (((Sp- or ({CO-} & SIp+)) & (O+ or P+) & W-) or ((B- or PI-) & ((Sp- & C-) or RSp-))) & {SC+}; seid.v wart.v: (((Sr- or ({CO-} & SIr+)) & (O+ or P+) & W-) or ((B- or PI-) & (Sr- & C-))) & {SC+}; sein.v: (B- or PI-) & (I- or II+); gewesen.v: (B- or PI-) & (Pb- or PIb+); habe.v hatte.i: (((Si- or ({CO-} & SIi+)) & (O+ or PP+) & {@MV+} & W-) or ({@MVI-} & (((B- or PPI-) & (Si- & (C- or RO-))) or (Sit- & RO-)))) & {SC+}; hast.v hattest.v: (((Sd- or ({CO-} & SId+)) & (O+ or PP+) & {@MV+} & W-) or ({@MVI-} & (((B- or PPI-) & (Sd- & (C- or RO-))) or (Sdt- & RO-)))) & {SC+}; hat.v hatte.s: (((Ss- or ({CO-} & SIs+)) & (O+ or PP+) & {@MV+} & W-) or ({@MVI-} & (((B- or PPI-) & ((Ss- & (C- or RO-)) or RSs-)) or (Sst- & RO-)))) & {SC+}; habt.v hattet.v: (((Sr- or ({CO-} & SIr+)) & (O+ or PP+) & {@MV+} & W-) or ({@MVI-} & (((B- or PPI-) & (Sr- & (C- or RO-))) or (Srt- & RO-)))) & {SC+}; hatten.v: (((Sp- or ({CO-} & SIp+)) & (O+ or PP+) & {@MV+} & W-) or ({@MVI-} & (((B- or PPI-) & ((Sp- & (C- or RO-)) or RSp-)) or (Spt- & RO-)))) & {SC+}; haben.v: (((Sp- or ({CO-} & SIp+)) & (O+ or PP+) & {@MV+} & W-) or ({@MVI-} & (((B- or PPI-) & ((Sp- & (C- or RO-)) or RSp-)) or (Spt- & RO-)))) & {SC+}; haben.i: {ZU-} & {@MVI-} & (B- or PPI-) & ((Xd- & Xc+ & SCz-) or I- or IIt+); gehabt.v: {@MVI-} & ((B- & PP-) or ({B-} & PPIt+)); muss.v soll.v will.v kann.v musste.v sollte.v wollte.v kannte.m: (((Si- or Ss- or ({CO-} & (SIi+ or SIs+))) & I+ & W-) or (II- & (((Si- or Ss-) & (C- or RO-)) or RS-))) & {SC+}; werde.v: (((Si- or ({CO-} & SIi+)) & (I+ or PV+) & W-) or ((II- or PVI-) & Si- & (C- or RO-))) & {SC+}; wird.v: (((Ss- or ({CO-} & SIs+)) & (I+ or PV+) & W-) or ((II- or PVI-) & ((Ss- & (C- or RO-)) or RSs-))) & {SC+}; wurde.v: (((Si- or Ss- or ({CO-} & (SIi+ or SIs+))) & (I+ or PV+) & W-) or ((II- or PVI-) & (((Si- or Ss-) & (C- or RO-)) or RS-))) & {SC+}; musst.v sollst.v willst.v kannst.v musstest.v solltest.v wolltest.v kanntest.m: (((Sd- or ({CO-} & SId+)) & I+ & W-) or (II- & Sd- & (C- or RO-))) & {SC+}; wirst.v wurdest.v: (((Sd- or ({CO-} & SId+)) & (I+ or PV+) & W-) or ((II- or PVI-) & Sd- & (C- or RO-))) & {SC+}; muesst.v sollt.v wollt.v koennt.v: (((Sr- or ({CO-} & SIr+)) & I+ & W-) or (II- & Sr- & (C- or RO-))) & {SC+}; werdet.v wurdet.v: (((Sr- or ({CO-} & SIr+)) & (I+ or PV+) & W-) or ((II- or PVI-) & Sr- & (C- or RO-))) & {SC+}; muessen.v sollen.v wollen.v koennen.v muessten.v sollten.v wollten.v kannten.m: (((Sp- or ({CO-} & SIp+)) & I+ & W-) or (II- & (I- or II+ or ((Sp- & (C- or RO-)) or RSp-)))) & {SC+}; werden.v wurden.v: (((Sp- or ({CO-} & SIp+)) & (I+ or PV+) & W-) or ((II- or PVI-) & (I- or II+ or ((Sp- & (C- or RO-)) or RSp-)))) & {SC+}; worden.i: PVI- & (Pb- or PIb+); muessen.i sollen.i wollen.i koennen.i werden.i: (II- & (I- or II+)); gehe.v spreche.v bleibe.v fahre.v komme.v laufe.v sterbe.v an+komme.v ging.i sprach.i blieb.i fuhr.i kam.i lief.i starb.i an+kam.i: (((Si- or ({CO-} & SIi+)) & {@MV+} & {K+} & W-) or ({KI-} & {@MVI-} & Si- & C-)) & {SC+}; gehst.v sprichst.v bleibst.v faehrst.v kommst.v laeufst.v stirbst.a an+kommst.v gingst.v sprachst.v bliebst.v fuhrst.v kamst.v liefst.v starbst.v an+kamst.v: (((Sd- or ({CO-} & SId+)) & {@MV+} & {K+} & W-) or ({KI-} & {@MVI-} & Sd- & C-)) & {SC+}; geht.v spricht.v bleibt.v faehrt.v kommt.v laeuft.v stirbt.v an+kommt.v ging.s sprach.s blieb.s fuhr.s kam.s lief.s starb.s an+kam.s: (((Ss- or Sr- or ({CO-} & (SIs+ or SIr+))) & {@MV+} & {K+} & W-) or ({KI-} & {@MVI-} & (((Ss- or Sr-) & C-) or RSs-))) & {SC+}; % Sr- gingt.v spracht.v bliebt.v fuhrt.v kamt.v lieft.v starbt.v an+kamt.v: (((Sr- or ({CO-} & SIr+)) & {@MV+} & {K+} & W-) or ({KI-} & {@MVI-} & Sr- & C-)) & {SC+}; gehen.v sprechen.v bleiben.v fahren.v kommen.v laufen.v sterben.v an+kommen.v: (((Sp- or ({CO-} & SIp+)) & {@MV+} & {K+} & W-) or ({KI-} & {@MVI-} & (((Sp- & C-) or RSp-)))) & {SC+}; gehen.i sprechen.i bleiben.i fahren.i kommen.i laufen.i sterben.i an+kommen.i: {ZU-} & {KI-} & {@MVI-} & ((Xd- & Xc+ & SCz-) or I- or IIi+); % SCz- needs an optional SC+ gingen.v sprachen.v blieben.v fuhren.v kamen.v liefen.v starben.v an+kamen.v: (((Sp- or ({CO-} & SIp+)) & {@MV+} & {K+} & W-) or ({KI-} & {@MVI-} & ((Sp- & C-) or RSp-))) & {SC+}; gesprochen.v: {KI-} & {@MVI-} & (PP- or PPIi+); gegangen.v geblieben.v gekommen.v gestorben.v gelaufen.v an+gekommen.v: {KI-} & {@MVI-} & (Pb- or PIb+); gefahren.v: {KI-} & {@MVI-} & (Pb- or PIb+ or PP- or PPIi+); spiele.v koche.v esse.v trinke.v schreibe.v lese.v spielte.i kochte.i ass.i trank.i schrieb.i las.i: (((Si- or ({CO-} & SIi+)) & {O+} & {@MV+} & W-) or ({@MVI-} & {B-} & Sio- & (C- or RO-))) & {SC+}; spielst.v kochst.v isst.d trinkst.v schreibst.v liest.d spieltest.v kochtest.v assest.i trankst.v schriebst.i lasst.v: (((Sd- or ({CO-} & SId+)) & {O+} & {@MV+} & W-) or ({@MVI-} & {B-} & Sdo- & (C- or RO-))) & {SC+}; spielt.v kocht.v isst.s trinkt.v schreibt.v liest.s spielte.s kochte.s asst.s trank.s schrieb.s las.s: (((Ss- or Sr- or ({CO-} & (SIs+ or SIr+))) & {O+} & {@MV+} & W-) or ({@MVI-} & {B-} & (((Sso- or Sro-) & (C- or RO-)) or RSs-))) & {SC+}; spieltet.v kochtet.v asset.v tranket.v schriebet.v last.v: (((Sr- or ({CO-} & SIr+)) & {O+} & {@MV+} & W-) or ({@MVI-} & {B-} & Sro- & (C- or RO-))) & {SC+}; spielen.v kochen.v essen.v schreiben.v lesen.v: (((Sp- or ({CO-} & SIp+)) & {O+} & {@MV+} & W-) or ({@MVI-} & {B-} & (((Spo- & (C- or RO-)) or RSp-)))) & {SC+}; spielen.i kochen.i essen.i schreiben.i lesen.i: {ZU-} & {@MVI-} & {B-} & ((Xd- & Xc+ & SCz-) or I- or IIo+); spielten.v kochten.v assen.i tranken.v schrieben.v lasen.v: (((Sp- or ({CO-} & SIp+)) & {O+} & {@MV+} & W-) or ({@MVI-} & {B-} & ((Spo- & (C- or RO-)) or RSp-))) & {SC+}; gespielt.v gekocht.v gegessen.v geschrieben.v gelesen.v: {@MVI-} & (PV- or PVI+ or ({B-} & (PP- or PPIo+))); sehe.v schlage.v mache.v hoere.v kenne.v brauche.v nehme.v trage.v finde.v jage.v sah.i schlug.i machte.i hoerte.i kannte.i brauchte.i nahm.i trug.i fand.i jagte.i: (((Si- or ({CO-} & SIi+)) & O+ & {@MV+} & W-) or ({@MVI-} & {B-} & Sit- & (C- or RO-))) & {SC+}; siehst.v schlaegst.v machst.v hoerst.v kennst.v brauchst.v nimmst.v traegst.v findest.v jagst.v sahst.v schlugst.v machtest.v hoertest.v kanntest.v brauchtest.v nahmst.v trugst.v fandest.i jagtest.v: (((Sd- or ({CO-} & SId+)) & O+ & {@MV+} & W-) or ({@MVI-} & {B-} & Sdt- & (C- or RO-))) & {SC+}; sieht.v schlaegt.v macht.v hoert.v kennt.v braucht.v nimmt.v traegt.v findet.v jagt.v sah.s schlug.s machte.s hoerte.s kannte.s brauchte.s nahm.s trug.s fand.s jagte.s: (((Ss- or Sr- or ({CO-} & (SIs+ or SIr+))) & O+ & {@MV+} & W-) or ({@MVI-} & {B-} & (((Sst- or Srt-) & (C- or RO-)) or RSst-))) & {SC+}; saht.v schlugt.v machtet.v hoertet.v kanntet.v brauchtet.v nahmet.v trugt.v fandet jagtet.v: (((Sr- or ({CO-} & SIr+)) & O+ & {@MV+} & W-) or ({@MVI-} & {B-} & Srt- & (C- or RO-))) & {SC+}; sehen.v schlagen.v machen.v hoeren.v kennen.v brauchen.v nehmen.v tragen.v jagen.v: (((Sp- or ({CO-} & SIp+)) & O+ & {@MV+} & W-) or ({@MVI-} & {B-} & ((Spt- & (C- or RO-)) or RSpt-))) & {SC+}; sehen.i schlagen.i machen.i hoeren.i kennen.i brauchen.i nehmen.i tragen.i jagen.i: {ZU-} & {@MVI-} & {B-} & ((Xd- & Xc+ & SCz-) or I- or IIt+); sahten.v schlugten.v machten.v hoerten.v kannten.v brauchten.v nahmen.v trugten.v fanden.v jagten.v: (((Sp- or ({CO-} & SIp+)) & O+ & {@MV+} & {SC+} & W-) or ({@MVI-} & {B-} & ((Spt- & (C- or RO-)) or RSpt-))) & {SC+}; gesehen.v geschlagt.v gemacht.v gehoert.v gekannt.v gebraucht.v genommen.v getragen.v gefunden.v gejagt.v erschreckt.v: {@MVI-} & (PV- or PVI+ or (B- & PP-) or ({B-} & PPIt+)); gebe.v bringe.v kaufe.v gab.i brachte.i kaufte.i: (((Si- or ({CO-} & SIi+)) & {J*d+} & O+ & {@MV+} & W-) or ({@MVI-} & {B-} & {JB-} & Sit- & (C- or RO-))) & {SC+}; % To handle dative relative clauses: % ...& ({@MVI-} & {B-} & {JB-} & Sit- & (C- or RO- or RJ-))) & {SC+}; % make RJ incompat with JB. When RJ is used, B will be obligatory, as it should be! gibst.v bringst.v kaufst.v gabst.v brachtest.v kauftest.v: (((Sd- or ({CO-} & SId+)) & {J*d+} & O+ & {@MV+} & W-) or ({@MVI-} & {B-} & {JB-} & Sdt- & (C- or RO-))) & {SC+}; gibt.v bringt.v kauft.v gab.s brachte.s kaufte.s: (((Ss- or Sr- or ({CO-} & (SIs+ or SIr+))) & {J*d+} & O+ & {@MV+} & W-) or ({@MVI-} & {B-} & {JB-} & (((Sst- or Srt-) & (C- or RO-)) or RSst-))) & {SC+}; gabt.v brachtet.v kauftet.v: (((Sr- or ({CO-} & SIr+)) & {J*d+} & O+ & {@MV+} & W-) or ({@MVI-} & {B-} & {JB-} & Srt- & (C- or RO-))) & {SC+}; geben.v bringen.v kaufen.v: (((Sp- or ({CO-} & SIp+)) & {J*d+} & O+ & {@MV+} & W-) or ({@MVI-} & {B-} & {JB-} & ((Spt- & (C- or RO-)) or RSpt-))) & {SC+}; geben.i bringen.i kaufen.i: {ZU-} & {@MVI-} & {B-} & {JB-} & ((Xd- & Xc+ & SCz-) or I- or IIt+); gaben.v brachten.v kauften.v: (((Sp- or ({CO-} & SIp+)) & {J*d+} & O+ & {@MV+} & {SC+} & W-) or ({@MVI-} & {B-} & {JB-} & ((Spt- & (C- or RO-)) or RSpt-))) & {SC+}; gegeben.v gebracht.v gekauft.v: {@MVI-} & (PV- or PVI+ or (B- & {JB-} & PP-) or ({B-} & {JB-} & PPIt+)); glaube.v sage.v glaubte.i sagte.i: (((Sic- or ({CO-} & SIic+)) & {O+} & {@MV+} & W-) or ({@MVI-} & B- & Sic- & (C- or RO-))) & {SC+}; glaubst.v sagst.v glaubtest.v sagtest.v: (((Sdc- or ({CO-} & SIdc+)) & {O+} & {@MV+} & W-) or ({@MVI-} & {B-} & Sdc- & (C- or RO-))) & {SC+}; glaubt.v sagt.v glaubte.s sagte.v: (((Ssc- or Src- or ({CO-} & (SIsc+ or SIrc+))) & {O+} & {@MV+} & W-) or ({@MVI-} & {B-} & (((Ssc- or Src-) & (C- or RO-)) or RSs-))) & {SC+}; glaubtet.v sagtet.v: (((Src- or ({CO-} & SIrc-)) & {O+} & {@MV+} & W-) or ({@MVI-} & {B-} & Src- & (C- or RO-))) & {SC+}; glauben.v sagen.v: (((Spc- or ({CO-} & SIpc+)) & {O+} & {@MV+} & W-) or ({@MVI-} & {B-} & ((Spc- & (C- or RO-)) or RSp-))) & {SC+}; glauben.i sagen.i: {ZU-} & {@MVI-} & {B-} & (Ic- or IIc+); glaubten.v sagten.v: (((Spc- or ({CO-} & SIpc+)) & {O+} & {@MV+} & W-) or ({@MVI-} & {B-} & ((Spc- & (C- or RO-)) or RSp-))) & {SC+}; geglaubt.v gesagt.v: {@MVI-} & {B-} & (PPc- or PPIc+); versuche.v versuchte.i: (((Siz- or ({CO-} & SIiz+)) & {O+} & {@MV+} & W-) or ({@MVI-} & {B-} & Siz- & (C- or RO-))) & {SC+}; versuchst.v versuchtest.v: (((Sdz- or ({CO-} & SIdz+)) & {O+} & {@MV+} & W-) or ({@MVI-} & {B-} & Sdz- & (C- or RO-))) & {SC+}; versucht.v versuchte.s: (((Ssz- or Srz- or ({CO-} & (SIsz+ or SIrz+))) & {O+} & {@MV+} & W-) or ({@MVI-} & {B-} & (((Ssz- or Srz-) & (C- or RO-)) or RSs-))) & {SC+}; versuchtet.v: (((Srz- or ({CO-} & SIrz-)) & {O+} & {@MV+} & W-) or ({@MVI-} & {B-} & Srz- & (C- or RO-))) & {SC+}; versuchen.i: ((Spz- or ({CO-} & SIpz+)) & {O+} & {@MV+} & {SC+} & W-) or ({@MVI-} & {B-} & (I- or II+ or ((Spz- & (C- or RO-)) or RSp-))); versuchten.v: (((Spz- or ({CO-} & SIpz+)) & {O+} & {@MV+} & W-) or ({@MVI-} & {B-} & ((Spz- & (C- or RO-)) or RSp-))) & {SC+}; versuchen.p: {@MVI-} & {B-} & (PPz- or PPIz+); helfe.v half.i: ((Si- or ({CO-} & SIi+)) & J+ & {@MV+} & {SC+} & W-) or ({@MVI-} & B- & Si- & (C- or RO-)); hilfst.v halfst.v: ((Sd- or ({CO-} & SId+)) & J+ & {@MV+} & {SC+} & W-) or ({@MVI-} & B- & Sd- & (C- or RO-)); hilft.v half.s: ((Ss- or Sr- or ({CO-} & (SIs+ or SIr+))) & J+ & {@MV+} & {SC+} & W-) or ({@MVI-} & B- & (((Ss- or Sr-) & (C- or RO-)) or RSs-)); halft.v: ((Sr- or ({CO-} & SIr+)) & J+ & {@MV+} & {SC+} & W-) or ({@MVI-} & B- & Sr- & (C- or RO-)); helfen.v: ((Sp- or ({CO-} & SIp+)) & J+ & {@MV+} & {SC+} & W-) or ({@MVI-} & B- & (I- or IIt+ or ((Sp- & (C- or RO-)) or RSp-))); halfen.v: ((Sp- or ({CO-} & SIp+)) & J+ & {@MV+} & {SC+} & W-) or ({@MVI-} & B- & ((Sp- & (C- or RO-)) or RSp-)); geholfen.v: {@MVI-} & B- & (PP- or PPI+); % CONJUNCTIONS, ADVERBS, PREPOSITIONS jetzt.e heute.e morgen.e gestern.e: MV- or MVI+ or CO+; bis durch fuer gegen ohne: J*a+ & (M- or MV- or MVI+ or Pp- or PIp+ or ({Xc+} & CO+)); aus bei mit nach: J*d+ & (M- or MV- or MVI+ or Pp- or PIp+ or ({Xc+} & CO+)); in ueber unter: J*d+ & (M- or MV- or MVI+ or Pp- or PIp+ or ({Xc+} & CO+)); an auf: (J*d+ & (M- or MV- or MVI+ or Pp- or PIp+ or ({Xc+} & CO+))) or K- or KI+; als wenn weil: C+ & ((Xc+ & CO+) or ({Xd- & Xc+} & SC-)); zu: (J*d+ & (M- or MV- or MVI+ or Pp- or PIp+ or ({Xc+} & CO+))) or ZU+; dass: C+ & Xd- & SCc- & Xc+; wann: Wq- & W+; % Post-processing needed here to enforce s-v inversion aber denn: {Xd-} & SC- & W+; % und? % ADJECTIVES gross.a klein.a alt.a jung.a rot.a blau.a gelb.a gruen.a schwarz.a weiss.a billig.a teuer.a kurz.a lang.a gut.a schlecht.a gescheit.a dumm.a froh.a erstaunt.a besorgt.a schoen.a: {FP-} & {EA-} & (Pa- or PIa+ or (FSe+ & Ae+) or (FSn+ & An+) or (FSr+ & Ar+) or (FSs+ & As+) or (FSm+ & Am+)); e: FSe-; en: FSn-; er.f: FSr-; es.f: FSs-; em: FSm-; %grosse.a kleine.a alte.a junge.a rote.a blaue.a gelbe.a gruene.a schwarze.a weisse.a %billige.a teuere.a lange.a kurze.a gute.a schlechte.a gescheite.a dumme.a frohe.a %erstaunte.a besorgte.a schoene.a: {EA-} & Ae+; %grossen.a kleinen.a alten.a jungen.a roten.a blauen.a gelben.a gruenen.a schwarzen.a %weissen.a billigen.a teuren.a kurzen.a langen.a guten.a schlechten.a gescheiten.a %dummen.a frohen.a erstaunten.a besorgten.a boesen.a schoenen.a: {EA-} & An+; boese.a: {EA-} & (Pa- or PIa+ or Ae+); ex: FP+; %grosser.a kleiner.a alter.a junger.a roter.a blauer.a gelber.a gruener.a schwarzer.a %weisser.a billiger.a teurer.a kurzer.a langer.a guter.a schlechter.a gescheiter.a dummer.a %froher.a erstaunter.a besorgter.a boeser.a schoener.a: {EA-} & Ar+; %grosses.a kleines.a altes.a junges.a rotes.a blaues.a gelbes.a gruenes.a schwarzes.a %weisses.a billiges.a teures.a kurzes.a langes.a gutes.a schlechtes.a gescheites.a dummes.a %frohes.a erstauntes.a besorgtes.a boeses.a schoenes.a: {EA-} & As+; %grossem.a kleinem.a altem.a jungem.a rotem.a blauem.a gelbem.a gruenem.a schwarzem.a %weissem.a billigem.a teurem.a kurzem.a langem.a gutem.a schlechtem.a gescheitem.a dummem.a %frohem.a erstauntem.a besorgtem.a boesem.a schoenem.a: {EA-} & Am+; sehr.e ziemlich.e: EA+ or EE+; schnell.e: {EE-} & (MV- or MVI+); und: {@XL-} & XR+ & (({GE+} & {D-} & (S+ or SI- or O- or B+ or J- or GE- or (Xd- & Xc+ & MX-))) or ({EA-} & (A+ or ({@MV-} & (P- or PI+)))) or ({@MVI-} & (I- or II+)) or (J+ & (MV- or MVI+)) or W- or ((((S- or ({CO-} & SI+)) & {@MV+} & W-) or ({@MVI-} & S- & C-)) & {SC+})); ",": Xc- or Xd+; ".": {Xc-} & Xp- & RW+; "!": {Xc-} & Xp- & RW+; "?": {Xc-} & Xp- & RW+; CAPITALIZED-WORDS NAME: {G-} & (({@MX+} & (Ss+ or SIs- or O- or B+ or J- or G+ or (Xd- & Xc+ & MX-))) or YS+); LEFT-WALL: W+ & {Xp+ or RW+}; RIGHT-WALL: RW- or (Xc- & {@Xc-}); POSTPROCESS: BOGUS+; % With the following line in the dictionary, the parser will simply skip over (null-link) % unknown words. If you remove it, the parser will output an error for any unknown words. UNKNOWN-WORD: NO+;link-grammar/data/sql/0000755000000000000000000000000012536650433012044 5ustar link-grammar/data/sql/README0000644000000000000000000001255212536650433012731 0ustar Parse Ranking and Word Sense Statistics --------------------------------------- This directory contains SQL tables that are used in computing a parse ranking, as well as a word-sense probability (based on WordNet 3.0) by looking up frequency statistics from an SQL database. The database used is the SQLite database; it has been choosen because it is "administration -free" for the user, and because its license is compatbile with the current link-grammar license. The data tables needed to operate this stuff can be downloaded from the web. See the main README file for download details. Disjuncts Table --------------- The disjuncts.db database contains two tables. The first records the probability that a given disjunct will be used for some given word. This probability was measured by parsing a large quantity of text, and simply counting disjunct frequencies. This probability can be used to rank parses, or to discriminate between alternate parses for a sentence. CREATE TABLE Disjuncts ( inflected_word TEXT NOT NULL, disjunct TEXT NOT NULL, log_cond_probability FLOAT ); CREATE INDEX ifwdj ON Disjuncts (inflected_word, disjunct); The log_cond_probability field contains the value of -log_2 p(d|w) where p(d|w) is the conditional probability of seeing the disjunct d given that the (inflected) word w was already seen. Word Senses Table ----------------- The DisjunctSenses table associates word senses to (word,disjunct) pairs. The core idea behind this table is that certain word senses are used only in certain ways in sentence constructions, and that the Link Grammar disjuncts are fine-grained enough to detect such differences, if they exist. The key idea is "if they exist" -- in most cases, grammar is insufficient to discriminate between word senses in a sentence -- but in some cases, it is. The goal here is to try to provide this info, as well as possible. CREATE TABLE DisjunctSenses ( word_sense TEXT NOT NULL, inflected_word TEXT NOT NULL, disjunct TEXT NOT NULL, log_cond_probability FLOAT ); CREATE INDEX siwdj ON DisjunctSenses (inflected_word, disjunct); The log_cond_probability field records -log_2 p(s|w,d) where s==sense, w==word, d==disjunct, so that p(s|w,d) is the probability of seeing the sense s, given the word w and the disjunct d. This probability was obtained by parsing a large quantity of text, and then applying the Radu Mihalcea word-sense disambiguation algorithm to it. Cluster Table ------------- When LG is unable to parse a sentence, one possible strategy is to increase the number of disjuncts that words can participate in, and hoping that the broadend collection of disjuncts will allow the parse to proceed. To obtain the broadened coverage, one can look up the word to see if it participates in a cluster of syntactically similar words, and then use a union of all of the disjuncts of words in the cluster. If this allows the parse to proceed, then the system will have "automatically" discovered a usable parse that is not otherwise covered by the existing dictionaries. CREATE TABLE ClusterMembers ( cluster_name TEXT NOT NULL, inflected_word TEXT NOT NULL ); CREATE INDEX iiw ON ClusterMembers (inflected_word); CREATE TABLE ClusterDisjuncts ( cluster_name TEXT NOT NULL, disjunct TEXT NOT NULL, cost FLOAT ); CREATE INDEX icn ON ClusterDisjuncts (cluster_name); To create these tables: 1) Perform clustering, a la Siva Reddy scripts. 2) Create sqlite3 database "clusters.db" in the data/sql directory 3) Create above tables and indexes 4) Run data/tools/cluster-pop.pl to populate the first table. 5) Run link-grammar/corpus/cluster-pop to populate the second table. A recent version has this table at 172MBytes. To use these tables: 1) Copy them into this directory 2) Enable the parser to the above-desribed algo, by saing !cluster at the parser prompt. Report: At this time, the results of using the above algo are underwhelming. This is somewhat surprising, as the above aglo is the "defacto" algo used manually, when debugging the dictionary: one tries "similar words" until one finds a working parse, and then modifies the dictionary appropriately. The reason for the poor experience so far may be that the clusters are too small, and not sufficiently encompassing. Note also that many failed parses are not due to the mis-categorization of a word that's already in the dictionary, but rather, because the dictionary fails to account for some particular linguistic phenomenon. Thus, even in the best case, the above algo will fail to fix all parse failures. Notes: ------ Go to http://opencog.org/ and download the source code. Then review the contents of opencog/nlp/wsd-post/README. That README explains the data processing pipleine used to create the word-senses table, and the disjunct-frequency table. To summarize, in breif: Compute the marginal and conditional probabilities for the Disjuncts table by running the opencog/nlp/wsd-post/compute-mi.scm script. Merge sysnsets by running opencog/nlp/wsd-post/synset-renorm.pl Recompute the DisjunstSenses conditional probs by: opencog/nlp/wsd-post/dj-probs.pl To populate the disjunct table: first, dump the disjuncts: pg_dump -D -O -t disjuncts lexat To populate the DisjunctSenses table: Then remove the count column, and the bogus entries, via select; run the cleanup scripts. pg_dump -D -O -t djsxxxtmp lexat ============ link-grammar/data/lt/0000755000000000000000000000000012537603515011664 5ustar link-grammar/data/lt/Makefile.am0000644000000000000000000000023512536650433013720 0ustar DICTS= \ 4.0.affix \ 4.0.constituent-knowledge \ 4.0.dict \ 4.0.knowledge dictdir=$(pkgdatadir)/lt dict_DATA = $(DICTS) EXTRA_DIST = $(DICTS) link-grammar/data/lt/.cvsignore0000644000000000000000000000004512536650433013663 0ustar Makefile.in Makefile svn-commit.tmp* link-grammar/data/lt/Makefile.in0000644000000000000000000003475012537603121013733 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = data/lt DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dictdir)" DATA = $(dict_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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@ DICTS = \ 4.0.affix \ 4.0.constituent-knowledge \ 4.0.dict \ 4.0.knowledge dictdir = $(pkgdatadir)/lt dict_DATA = $(DICTS) EXTRA_DIST = $(DICTS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/lt/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign data/lt/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dictDATA: $(dict_DATA) @$(NORMAL_INSTALL) @list='$(dict_DATA)'; test -n "$(dictdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dictdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dictdir)" || 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)$(dictdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dictdir)" || exit $$?; \ done uninstall-dictDATA: @$(NORMAL_UNINSTALL) @list='$(dict_DATA)'; test -n "$(dictdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dictdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(dictdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dictDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dictDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dictDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dictDATA # 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: link-grammar/data/lt/4.0.affix0000644000000000000000000000011412536650433013200 0ustar ")" "%" "," "." ":" ";" "?" "!" "''" "'": RPUNC+; "(" "$" "``": LPUNC+; link-grammar/data/lt/4.0.knowledge0000644000000000000000000000273312536650433014073 0ustar ; Post-processing knowledge file ; 6/96 ; ---------------------------------------------------------------------------- ; This file contains the knowledge related to post-processing, in the ; form of lists and rules. This file is read by post-process.c at run-time. ; Syntax of file: ; line starting with ";" is a comment ; commas are field delimiters ; any token beginning with the character @ is expanded to the set ; of symbols it defined. e.g. one could write ; FOO: blah1 blah2 blah3 ; thus defining a set FOO containing three strings. Then one could later write ; BAR: blah5 @FOO blah8 ; which defines a set BAR containing 5 strings. ; ; Capitalized tokens are *required*, though if you feel like providing an ; empty list afterwards, that's your right. ; ---------------------------------------------------------------------------- ; the following links start a domain. Each must be given a name in the ; table below (STARTING_LINK_TYPE_TABLE) DOMAIN_STARTER_LINKS: W ; ---------------------------------------------------------------------- ; ---------------------- LINK TYPE TABLE------------------------------- ; ---------------------------------------------------------------------- ; the following table associates a domain type with each possible ; starting link. It contains pairs: the first of each pair is a link ; type, and the second is the domain to which that link type belongs. STARTING_LINK_TYPE_TABLE: W m link-grammar/data/lt/4.0.dict0000644000000000000000000000602612536650433013036 0ustar % % ========== Lietuvių kalbos žodynas ir gramatika ============== % =========== Lithuanian link-grammar dictionary =============== % % Experimental and incomplete ... % It can parse 4.0.batch more ore less correctly. % % Copyright (c) 2008 Linas Vepstas (Vepštas) linas@linas.org % % This file uses utf-8 characater encoding. % If editing with "vi", be sure to "set encoding=utf-8" % and also be sure to configure the terminal to use utf-8 encoding. % % % Ženklai: % Ą Č Ę Ė Į Š Ų Ū Ž % ą č ė ę į š ū ų ž % % Kaip išmušti ženklus: % ą == ,a irgi ę į ų % č == , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the '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 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: link-grammar/link-grammar.pc.in0000644000000000000000000000036612536650433013653 0ustar prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: link-grammar Description: A natural language parser based on link grammar theory Version: @VERSION@ Libs: -L${libdir} -llink-grammar Cflags: -I${includedir} link-grammar/aclocal.m40000644000000000000000000014453312537603116012203 0ustar # generated automatically by aclocal 1.14.1 -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # 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|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) 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. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have 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_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) 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 AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [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])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [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 .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # PKG_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable pkgconfigdir as the location where a module # should install pkg-config .pc files. By default the directory is # $libdir/pkgconfig, but the default can be changed by passing # DIRECTORY. The user can override through the --with-pkgconfigdir # parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) dnl PKG_INSTALLDIR # PKG_NOARCH_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable noarch_pkgconfigdir as the location where a # module should install arch-independent pkg-config .pc files. By # default the directory is $datadir/pkgconfig, but the default can be # changed by passing DIRECTORY. The user can override through the # --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) dnl PKG_NOARCH_INSTALLDIR # PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------- # Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])# PKG_CHECK_VAR # Copyright (C) 2002-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.14' 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.14.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.14.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. 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. 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 Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_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-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_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-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([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([ac-helpers/binreloc.m4]) link-grammar/msvc9/0000755000000000000000000000000012537603515011375 5ustar link-grammar/msvc9/Makefile.am0000644000000000000000000000016412536650433013432 0ustar EXTRA_DIST= \ LinkGrammarExe.vcproj \ LinkGrammarJava.vcproj \ LinkGrammar.sln \ LinkGrammar.vcproj \ README link-grammar/msvc9/Makefile.in0000644000000000000000000003047212537603122013442 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = msvc9 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ LinkGrammarExe.vcproj \ LinkGrammarJava.vcproj \ LinkGrammar.sln \ LinkGrammar.vcproj \ README all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign msvc9/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign msvc9/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: link-grammar/msvc9/LinkGrammar.sln0000755000000000000000000000344012536650433014323 0ustar  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual C++ Express 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LinkGrammarJava", "LinkGrammarJava.vcproj", "{D74DF531-C18E-4988-8A8C-4F23556DEC1B}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LinkGrammar", "LinkGrammar.vcproj", "{0A6C539A-3140-48BD-865C-05F45637B93B}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LinkGrammarExe", "LinkGrammarExe.vcproj", "{532EFF4D-758A-4705-91EE-9A4AC72C017B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D74DF531-C18E-4988-8A8C-4F23556DEC1B}.Debug|Win32.ActiveCfg = Debug|Win32 {D74DF531-C18E-4988-8A8C-4F23556DEC1B}.Debug|Win32.Build.0 = Debug|Win32 {D74DF531-C18E-4988-8A8C-4F23556DEC1B}.Release|Win32.ActiveCfg = Release|Win32 {D74DF531-C18E-4988-8A8C-4F23556DEC1B}.Release|Win32.Build.0 = Release|Win32 {0A6C539A-3140-48BD-865C-05F45637B93B}.Debug|Win32.ActiveCfg = Debug|Win32 {0A6C539A-3140-48BD-865C-05F45637B93B}.Debug|Win32.Build.0 = Debug|Win32 {0A6C539A-3140-48BD-865C-05F45637B93B}.Release|Win32.ActiveCfg = Release|Win32 {0A6C539A-3140-48BD-865C-05F45637B93B}.Release|Win32.Build.0 = Release|Win32 {532EFF4D-758A-4705-91EE-9A4AC72C017B}.Debug|Win32.ActiveCfg = Debug|Win32 {532EFF4D-758A-4705-91EE-9A4AC72C017B}.Debug|Win32.Build.0 = Debug|Win32 {532EFF4D-758A-4705-91EE-9A4AC72C017B}.Release|Win32.ActiveCfg = Release|Win32 {532EFF4D-758A-4705-91EE-9A4AC72C017B}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal link-grammar/msvc9/LinkGrammar.vcproj0000755000000000000000000002267712536650433015047 0ustar  link-grammar/msvc9/README0000755000000000000000000000304112536650433012256 0ustar This directory contains project files for building Link Grammar with the Miscrosoft Visual C++ 2008 IDE. They were created and tested with the Express Edition of that product. - to compile LinkGrammar, open the solution file LinkGrammar.sln and build the LinkGrammar project. You might get compile errors about a missing link-features.h include file. If so, please go ahead and rename the file 'link-grammar/link-features.h.in' to link-features.h. This is normally done by a Unix configure script, but needs to be manually done when compiling with Visual C++. - to compile the Java bindings, you need to add Java include directories to the LinkGrammarJava project first. This is in project properties->C/C++->General-> Additional Include Directories. You need both JAVA_HOME/include and JAVA_HOME/include/win32 where JAVA_HOME is your JDK's installation directory. - the projects are configured to create a debug version by default, it's probably a good idea to switch the a "Release" configuration. You can do this at Build Menu->Configuration Manager. NOTE: The created DLLs need the MSVC9 runtime environment to run. This is normally already installed in your machine with the installation of the IDE. But to be able to run Link Grammar on other computer you need to install the Visual C++ 2008 runtime redistributable from: http://www.microsoft.com/downloads/details.aspx?FamilyID=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=en this redistributable does not contain debug version of the MSVC runtime, so only "Release" Link Grammar will work with it.link-grammar/msvc9/LinkGrammarExe.vcproj0000644000000000000000000001610212536650433015470 0ustar link-grammar/msvc9/LinkGrammarJava.vcproj0000755000000000000000000001042712536650433015637 0ustar  link-grammar/ac-helpers/0000755000000000000000000000000012536650432012356 5ustar link-grammar/ac-helpers/binreloc.m40000644000000000000000000000502312536650432014415 0ustar # Check for binary relocation support # Hongli Lai # http://autopackage.org/ AC_DEFUN([AM_BINRELOC], [ AC_ARG_ENABLE(binreloc, [ --enable-binreloc compile with binary relocation support (default=enable when available)], enable_binreloc=$enableval,enable_binreloc=auto) AC_ARG_ENABLE(binreloc-threads, [ --enable-binreloc-threads compile binary relocation with threads support (default=yes)], enable_binreloc_threads=$enableval,enable_binreloc_threads=yes) BINRELOC_CFLAGS= BINRELOC_LIBS= if test "x$enable_binreloc" = "xauto"; then AC_CHECK_FILE([/proc/self/maps]) AC_CACHE_CHECK([whether everything is installed to the same prefix], [br_cv_valid_prefixes], [ if test "$bindir" = '${exec_prefix}/bin' -a "$sbindir" = '${exec_prefix}/sbin' -a \ "$datadir" = '${prefix}/share' -a "$libdir" = '${exec_prefix}/lib' -a \ "$libexecdir" = '${exec_prefix}/libexec' -a "$sysconfdir" = '${prefix}/etc' then br_cv_valid_prefixes=yes else br_cv_valid_prefixes=no fi ]) fi AC_CACHE_CHECK([whether binary relocation support should be enabled], [br_cv_binreloc], [if test "x$enable_binreloc" = "xyes"; then br_cv_binreloc=yes elif test "x$enable_binreloc" = "xauto"; then if test "x$br_cv_valid_prefixes" = "xyes" -a \ "x$ac_cv_file__proc_self_maps" = "xyes"; then br_cv_binreloc=yes else br_cv_binreloc=no fi else br_cv_binreloc=no fi]) if test "x$br_cv_binreloc" = "xyes"; then BINRELOC_CFLAGS="-DENABLE_BINRELOC" AC_DEFINE(ENABLE_BINRELOC,,[Use binary relocation?]) if test "x$enable_binreloc_threads" = "xyes"; then AC_CHECK_LIB([pthread], [pthread_getspecific]) fi AC_CACHE_CHECK([whether binary relocation should use threads], [br_cv_binreloc_threads], [if test "x$enable_binreloc_threads" = "xyes"; then if test "x$ac_cv_lib_pthread_pthread_getspecific" = "xyes"; then br_cv_binreloc_threads=yes else br_cv_binreloc_threads=no fi else br_cv_binreloc_threads=no fi]) if test "x$br_cv_binreloc_threads" = "xyes"; then BINRELOC_LIBS="-lpthread" AC_DEFINE(BR_PTHREAD,1,[Include pthread support for binary relocation?]) else BINRELOC_CFLAGS="$BINRELOC_CFLAGS -DBR_PTHREADS=0" AC_DEFINE(BR_PTHREAD,0,[Include pthread support for binary relocation?]) fi fi AC_SUBST(BINRELOC_CFLAGS) AC_SUBST(BINRELOC_LIBS) ]) link-grammar/COPYING0000644000000000000000000000354512536650432011375 0ustar LICENSE ------- Copyright (c) 2003,2004 Daniel Sleator, David Temperley, and John Lafferty. All rights reserved. Copyright (c) 2007 Mike Ross. Copyright (c) 2008,2009,2010 Linas Vepstas, Borislav Iordanov. Copyright (c) 2011 Linas Vepstas Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The names "Link Grammar" and "Link Parser" must not be used to endorse or promote products derived from this software without prior written permission. To obtain permission, contact sleator@cs.cmu.edu THIS SOFTWARE IS PROVIDED BY DANIEL SLEATOR, DAVID TEMPERLEY, JOHN LAFFERTY AND OTHER CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. link-grammar/msvc6/0000755000000000000000000000000012537603515011372 5ustar link-grammar/msvc6/Makefile.am0000644000000000000000000000015712536650433013431 0ustar SUBDIRS= \ link_grammar_dll \ link_grammar_exe \ link_grammar_java_dll EXTRA_DIST= \ Link_Grammar_All.dsw link-grammar/msvc6/Makefile.in0000644000000000000000000004503612537603122013441 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = msvc6 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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 = \ link_grammar_dll \ link_grammar_exe \ link_grammar_java_dll EXTRA_DIST = \ Link_Grammar_All.dsw all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign msvc6/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign msvc6/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: link-grammar/msvc6/link_grammar_java_dll/0000755000000000000000000000000012537603515015671 5ustar link-grammar/msvc6/link_grammar_java_dll/Makefile.am0000644000000000000000000000005112536650433017721 0ustar EXTRA_DIST= \ link_grammar_java_dll.dsp link-grammar/msvc6/link_grammar_java_dll/Makefile.in0000644000000000000000000003045412537603122017736 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = msvc6/link_grammar_java_dll DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ link_grammar_java_dll.dsp all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign msvc6/link_grammar_java_dll/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign msvc6/link_grammar_java_dll/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: link-grammar/msvc6/link_grammar_java_dll/link_grammar_java_dll.dsp0000644000000000000000000001115312536650433022701 0ustar # Microsoft Developer Studio Project File - Name="link_grammar_java_dll" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=link_grammar_java_dll - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "link_grammar_java_dll.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "link_grammar_java_dll.mak" CFG="link_grammar_java_dll - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "link_grammar_java_dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "link_grammar_java_dll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "link_grammar_java_dll - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LINK_GRAMMAR_JAVA_DLL_EXPORTS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /I ".." /I "..\.." /I "..\..\.." /I "C:\java\jdk1.6.0_13\include\\" /I "C:\java\jdk1.6.0_13\include\win32\\" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LINK_GRAMMAR_JAVA_DLL_EXPORTS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x419 /d "NDEBUG" # ADD RSC /l 0x419 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/link-grammar-java.dll" !ELSEIF "$(CFG)" == "link_grammar_java_dll - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LINK_GRAMMAR_JAVA_DLL_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".." /I "..\.." /I "..\..\.." /I "C:\java\jdk1.6.0_13\include\\" /I "C:\java\jdk1.6.0_13\include\win32\\" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LINK_GRAMMAR_JAVA_DLL_EXPORTS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x419 /d "_DEBUG" # ADD RSC /l 0x419 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Debug/link-grammar-java.dll" /pdbtype:sept !ENDIF # Begin Target # Name "link_grammar_java_dll - Win32 Release" # Name "link_grammar_java_dll - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE="..\..\link-grammar\jni-client.c" # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE="..\..\link-grammar\jni-client.h" # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project link-grammar/msvc6/Link_Grammar_All.dsw0000644000000000000000000000232312536650433015244 0ustar Microsoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "link_grammar_dll"=".\link_grammar_dll\link_grammar_dll.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Project: "link_grammar_exe"=".\link_grammar_exe\link_grammar_exe.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name link_grammar_dll End Project Dependency }}} ############################################################################### Project: "link_grammar_java_dll"=".\link_grammar_java_dll\link_grammar_java_dll.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name link_grammar_dll End Project Dependency }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### link-grammar/msvc6/link_grammar_exe/0000755000000000000000000000000012537603515014676 5ustar link-grammar/msvc6/link_grammar_exe/Makefile.am0000644000000000000000000000004412536650433016730 0ustar EXTRA_DIST= \ link_grammar_exe.dsp link-grammar/msvc6/link_grammar_exe/Makefile.in0000644000000000000000000003043012537603122016735 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = msvc6/link_grammar_exe DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ link_grammar_exe.dsp all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign msvc6/link_grammar_exe/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign msvc6/link_grammar_exe/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: link-grammar/msvc6/link_grammar_exe/link_grammar_exe.dsp0000644000000000000000000001124612536650433020716 0ustar # Microsoft Developer Studio Project File - Name="link_grammar_exe" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=link_grammar_exe - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "link_grammar_exe.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "link_grammar_exe.mak" CFG="link_grammar_exe - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "link_grammar_exe - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "link_grammar_exe - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "link_grammar_exe - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /W3 /GX /O2 /I ".." /I "..\.." /I "..\..\.." /I "F:\ETCETERA\JAVA\jdk1.6.0\include\\" /I "F:\ETCETERA\JAVA\jdk1.6.0\include\win32\\" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE RSC /l 0x419 /d "NDEBUG" # ADD RSC /l 0x419 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"Release/link-parser.exe" !ELSEIF "$(CFG)" == "link_grammar_exe - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I ".." /I "..\.." /I "..\..\.." /I "F:\ETCETERA\JAVA\jdk1.6.0\include\\" /I "F:\ETCETERA\JAVA\jdk1.6.0\include\win32\\" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD BASE RSC /l 0x419 /d "_DEBUG" # ADD RSC /l 0x419 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"Debug/link-parser.exe" /pdbtype:sept !ENDIF # Begin Target # Name "link_grammar_exe - Win32 Release" # Name "link_grammar_exe - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE="..\..\link-grammar\link-parser.c" # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project link-grammar/msvc6/link_grammar_dll/0000755000000000000000000000000012537603515014670 5ustar link-grammar/msvc6/link_grammar_dll/Makefile.am0000644000000000000000000000004412536650433016722 0ustar EXTRA_DIST= \ link_grammar_dll.dsp link-grammar/msvc6/link_grammar_dll/link_grammar_dll.dsp0000644000000000000000000002440712536650433020705 0ustar # Microsoft Developer Studio Project File - Name="link_grammar_dll" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=link_grammar_dll - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "link_grammar_dll.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "link_grammar_dll.mak" CFG="link_grammar_dll - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "link_grammar_dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "link_grammar_dll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "link_grammar_dll - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LINK_GRAMMAR_DLL_EXPORTS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /I ".." /I "..\.." /I "..\..\.." /I "F:\ETCETERA\JAVA\jdk1.6.0\include\\" /I "F:\ETCETERA\JAVA\jdk1.6.0\include\win32\\" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LINK_GRAMMAR_DLL_EXPORTS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x419 /d "NDEBUG" # ADD RSC /l 0x419 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib C:\opencog\lg_svn1\gnuwin32_regex\lib\regex.lib /nologo /dll /machine:I386 /out:"Release/link-grammar.dll" !ELSEIF "$(CFG)" == "link_grammar_dll - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LINK_GRAMMAR_DLL_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".." /I "..\.." /I "..\..\.." /I "F:\ETCETERA\JAVA\jdk1.6.0\include\\" /I "F:\ETCETERA\JAVA\jdk1.6.0\include\win32\\" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LINK_GRAMMAR_DLL_EXPORTS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x419 /d "_DEBUG" # ADD RSC /l 0x419 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib C:\opencog\lg_svn1\gnuwin32_regex\lib\regex.lib /nologo /dll /debug /machine:I386 /out:"Debug/link-grammar.dll" /pdbtype:sept !ENDIF # Begin Target # Name "link_grammar_dll - Win32 Release" # Name "link_grammar_dll - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE="..\..\link-grammar\analyze-linkage.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\and.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\api.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\build-disjuncts.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\command-line.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\constituents.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\count.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\disjuncts.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\error.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\extract-links.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\fast-match.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\idiom.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\malloc-dbg.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\massage.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\post-process.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\pp_knowledge.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\pp_lexer.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\pp_linkset.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\prefix.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\preparation.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\print-util.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\print.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\prune.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\read-dict.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\read-regex.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\regex-morph.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\resources.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\spellcheck-hun.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\string-set.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\tokenize.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\utilities.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\word-file.c" # End Source File # Begin Source File SOURCE="..\..\link-grammar\word-utils.c" # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE="..\..\link-grammar\analyze-linkage.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\and.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\api-structures.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\api-types.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\api.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\build-disjuncts.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\command-line.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\constituents.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\count.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\error.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\externs.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\extract-links.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\fast-match.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\idiom.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\link-features.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\link-includes.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\massage.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\post-process.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\pp_knowledge.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\pp_lexer.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\pp_linkset.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\prefix.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\preparation.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\print-util.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\print.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\prune.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\read-dict.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\read-regex.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\regex-morph.h" # End Source File # Begin Source File SOURCE=..\..\..\gnuwin32_regex\include\regex.h # End Source File # Begin Source File SOURCE="..\..\link-grammar\resources.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\spellcheck-hun.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\string-set.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\structures.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\tokenize.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\utilities.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\word-file.h" # End Source File # Begin Source File SOURCE="..\..\link-grammar\word-utils.h" # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project link-grammar/msvc6/link_grammar_dll/Makefile.in0000644000000000000000000003043012537603122016727 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = msvc6/link_grammar_dll DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ link_grammar_dll.dsp all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign msvc6/link_grammar_dll/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign msvc6/link_grammar_dll/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: link-grammar/config.status0000755000000000000000000021334112537603144013053 0ustar #! /bin/bash # Generated by configure. # 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-/bin/bash} export SHELL ## -------------------- ## ## 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. ## ## ----------------------------------- ## # 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 $as_me, 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` " # Files that config.status was made for. config_files=" Makefile build.xml link-grammar.pc link-grammar.spec link-grammar/Makefile link-grammar/corpus/Makefile link-grammar/minisat/Makefile link-grammar/sat-solver/Makefile link-grammar/link-features.h data/Makefile data/de/Makefile data/en/Makefile data/en/words/Makefile data/lt/Makefile man/Makefile autopackage/default.apspec link-grammar.xcode/Makefile msvc6/Makefile msvc6/link_grammar_dll/Makefile msvc6/link_grammar_exe/Makefile msvc6/link_grammar_java_dll/Makefile msvc9/Makefile" config_commands=" depfiles libtool" 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 Configuration files: $config_files Configuration commands: $config_commands Report bugs to the package provider." ac_cs_config="'--enable-maintainer-mode'" ac_cs_version="\ config.status configured by ./configure, 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='/home/wookey/debian/NMU/git/link-grammar' srcdir='.' INSTALL='/usr/bin/install -c' MKDIR_P='/bin/mkdir -p' AWK='gawk' test -n "$AWK" || AWK=awk # 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;; --he | --h | --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 if $ac_cs_recheck; then set X /bin/bash './configure' '--enable-maintainer-mode' $ac_configure_extra_args --no-create --no-recursion shift $as_echo "running CONFIG_SHELL=/bin/bash $*" >&6 CONFIG_SHELL='/bin/bash' export CONFIG_SHELL exec "$@" fi 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 # # INIT-COMMANDS # AMDEP_TRUE="" ac_aux_dir="." # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='s/\(["`$\\]\)/\\\1/g' double_quote_subst='s/\(["`\\]\)/\\\1/g' delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' AS='as' DLLTOOL='dlltool' OBJDUMP='objdump' macro_version='2.4.2' macro_revision='1.3337' enable_shared='yes' enable_static='yes' pic_mode='default' enable_fast_install='yes' SHELL='/bin/bash' ECHO='printf %s\n' PATH_SEPARATOR=':' host_alias='' host='x86_64-unknown-linux-gnu' host_os='linux-gnu' build_alias='' build='x86_64-unknown-linux-gnu' build_os='linux-gnu' SED='/bin/sed' Xsed='/bin/sed -e 1s/^X//' GREP='/bin/grep' EGREP='/bin/grep -E' FGREP='/bin/grep -F' LD='/usr/bin/ld -m elf_x86_64' NM='/usr/bin/nm -B' LN_S='ln -s' max_cmd_len='1572864' ac_objext='o' exeext='' lt_unset='unset' lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' lt_cv_to_host_file_cmd='func_convert_file_noop' lt_cv_to_tool_file_cmd='func_convert_file_noop' reload_flag=' -r' reload_cmds='$LD$reload_flag -o $output$reload_objs' deplibs_check_method='pass_all' file_magic_cmd='$MAGIC_CMD' file_magic_glob='' want_nocaseglob='no' sharedlib_from_linklib_cmd='printf %s\n' AR='ar' AR_FLAGS='cru' archiver_list_spec='@' STRIP='strip' RANLIB='ranlib' old_postinstall_cmds='chmod 644 $oldlib~$RANLIB $tool_oldlib' old_postuninstall_cmds='' old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $tool_oldlib' lock_old_archive_extraction='no' CC='gcc' CFLAGS='-g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE' compiler='g++' GCC='yes' lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\''' lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\''' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\''' nm_file_list_spec='@' lt_sysroot='' objdir='.libs' MAGIC_CMD='file' lt_prog_compiler_no_builtin_flag=' -fno-builtin' lt_prog_compiler_pic=' -fPIC -DPIC' lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' lt_cv_prog_compiler_c_o='yes' need_locks='no' MANIFEST_TOOL=':' DSYMUTIL='' NMEDIT='' LIPO='' OTOOL='' OTOOL64='' libext='a' shrext_cmds='.so' extract_expsyms_cmds='' archive_cmds_need_lc='no' enable_shared_with_static_runtimes='no' export_dynamic_flag_spec='${wl}--export-dynamic' whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' compiler_needs_object='no' old_archive_from_new_cmds='' old_archive_from_expsyms_cmds='' archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' module_cmds='' module_expsym_cmds='' with_gnu_ld='yes' allow_undefined_flag='' no_undefined_flag='' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator='' hardcode_direct='no' hardcode_direct_absolute='no' hardcode_minus_L='no' hardcode_shlibpath_var='unsupported' hardcode_automatic='no' inherit_rpath='no' link_all_deplibs='no' always_export_symbols='no' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' include_expsyms='' prelink_cmds='' postlink_cmds='' file_list_spec='' variables_saved_for_relink='PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH' need_lib_prefix='no' need_version='no' version_type='linux' runpath_var='LD_RUN_PATH' shlibpath_var='LD_LIBRARY_PATH' shlibpath_overrides_runpath='no' libname_spec='lib$name' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' install_override_mode='' postinstall_cmds='' postuninstall_cmds='' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' finish_eval='' hardcode_into_libs='yes' sys_lib_search_path_spec='/usr/lib/gcc/x86_64-linux-gnu/4.9 /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib ' sys_lib_dlsearch_path_spec='/lib /usr/lib /usr/lib/x86_64-linux-gnu/libfakeroot /usr/local/lib /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /lib32 /usr/lib32 /libx32 /usr/libx32 ' hardcode_action='immediate' enable_dlopen='unknown' enable_dlopen_self='unknown' enable_dlopen_self_static='unknown' old_striplib='strip --strip-debug' striplib='strip --strip-unneeded' compiler_lib_search_dirs='' predep_objects='' postdep_objects='' predeps='' postdeps='' compiler_lib_search_path='' LD_CXX='/usr/bin/ld -m elf_x86_64' reload_flag_CXX=' -r' reload_cmds_CXX='$LD$reload_flag -o $output$reload_objs' old_archive_cmds_CXX='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $tool_oldlib' compiler_CXX='g++' GCC_CXX='yes' lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' lt_prog_compiler_pic_CXX=' -fPIC -DPIC' lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' lt_cv_prog_compiler_c_o_CXX='yes' archive_cmds_need_lc_CXX='no' enable_shared_with_static_runtimes_CXX='no' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' compiler_needs_object_CXX='no' old_archive_from_new_cmds_CXX='' old_archive_from_expsyms_cmds_CXX='' archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' module_cmds_CXX='' module_expsym_cmds_CXX='' with_gnu_ld_CXX='yes' allow_undefined_flag_CXX='' no_undefined_flag_CXX='' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX='' hardcode_direct_CXX='no' hardcode_direct_absolute_CXX='no' hardcode_minus_L_CXX='no' hardcode_shlibpath_var_CXX='unsupported' hardcode_automatic_CXX='no' inherit_rpath_CXX='no' link_all_deplibs_CXX='no' always_export_symbols_CXX='no' export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' include_expsyms_CXX='' prelink_cmds_CXX='' postlink_cmds_CXX='' file_list_spec_CXX='' hardcode_action_CXX='immediate' compiler_lib_search_dirs_CXX='/usr/lib/gcc/x86_64-linux-gnu/4.9 /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /usr/lib/gcc/x86_64-linux-gnu/4.9/../../..' predep_objects_CXX='/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.9/crtbeginS.o' postdep_objects_CXX='/usr/lib/gcc/x86_64-linux-gnu/4.9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/crtn.o' predeps_CXX='' postdeps_CXX='-lstdc++ -lm -lgcc_s -lc -lgcc_s' compiler_lib_search_path_CXX='-L/usr/lib/gcc/x86_64-linux-gnu/4.9 -L/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.9/../../..' LTCC='gcc' LTCFLAGS='-g -O2' compiler='gcc' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # Quote evaled strings. for var in AS DLLTOOL OBJDUMP SHELL ECHO PATH_SEPARATOR SED GREP EGREP FGREP LD NM LN_S lt_SP2NL lt_NL2SP reload_flag deplibs_check_method file_magic_cmd file_magic_glob want_nocaseglob sharedlib_from_linklib_cmd AR AR_FLAGS archiver_list_spec STRIP RANLIB CC CFLAGS compiler lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl lt_cv_sys_global_symbol_to_c_name_address lt_cv_sys_global_symbol_to_c_name_address_lib_prefix nm_file_list_spec lt_prog_compiler_no_builtin_flag lt_prog_compiler_pic lt_prog_compiler_wl lt_prog_compiler_static lt_cv_prog_compiler_c_o need_locks MANIFEST_TOOL DSYMUTIL NMEDIT LIPO OTOOL OTOOL64 shrext_cmds export_dynamic_flag_spec whole_archive_flag_spec compiler_needs_object with_gnu_ld allow_undefined_flag no_undefined_flag hardcode_libdir_flag_spec hardcode_libdir_separator exclude_expsyms include_expsyms file_list_spec variables_saved_for_relink libname_spec library_names_spec soname_spec install_override_mode finish_eval old_striplib striplib compiler_lib_search_dirs predep_objects postdep_objects predeps postdeps compiler_lib_search_path LD_CXX reload_flag_CXX compiler_CXX lt_prog_compiler_no_builtin_flag_CXX lt_prog_compiler_pic_CXX lt_prog_compiler_wl_CXX lt_prog_compiler_static_CXX lt_cv_prog_compiler_c_o_CXX export_dynamic_flag_spec_CXX whole_archive_flag_spec_CXX compiler_needs_object_CXX with_gnu_ld_CXX allow_undefined_flag_CXX no_undefined_flag_CXX hardcode_libdir_flag_spec_CXX hardcode_libdir_separator_CXX exclude_expsyms_CXX include_expsyms_CXX file_list_spec_CXX compiler_lib_search_dirs_CXX predep_objects_CXX postdep_objects_CXX predeps_CXX postdeps_CXX compiler_lib_search_path_CXX; do case `eval \\$ECHO \\""\\$$var"\\"` in *[\\\`\"\$]*) eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED \"\$sed_quote_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\$$var\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds old_postinstall_cmds old_postuninstall_cmds old_archive_cmds extract_expsyms_cmds old_archive_from_new_cmds old_archive_from_expsyms_cmds archive_cmds archive_expsym_cmds module_cmds module_expsym_cmds export_symbols_cmds prelink_cmds postlink_cmds postinstall_cmds postuninstall_cmds finish_cmds sys_lib_search_path_spec sys_lib_dlsearch_path_spec reload_cmds_CXX old_archive_cmds_CXX old_archive_from_new_cmds_CXX old_archive_from_expsyms_cmds_CXX archive_cmds_CXX archive_expsym_cmds_CXX module_cmds_CXX module_expsym_cmds_CXX export_symbols_cmds_CXX prelink_cmds_CXX postlink_cmds_CXX; do case `eval \\$ECHO \\""\\$$var"\\"` in *[\\\`\"\$]*) eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\$$var\\\"" ;; esac done ac_aux_dir='.' xsi_shell='yes' lt_shell_append='yes' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='link-grammar' VERSION='4.7.4' TIMESTAMP='' RM='rm -f' ofile='libtool' # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "build.xml") CONFIG_FILES="$CONFIG_FILES build.xml" ;; "link-grammar.pc") CONFIG_FILES="$CONFIG_FILES link-grammar.pc" ;; "link-grammar.spec") CONFIG_FILES="$CONFIG_FILES link-grammar.spec" ;; "link-grammar/Makefile") CONFIG_FILES="$CONFIG_FILES link-grammar/Makefile" ;; "link-grammar/corpus/Makefile") CONFIG_FILES="$CONFIG_FILES link-grammar/corpus/Makefile" ;; "link-grammar/minisat/Makefile") CONFIG_FILES="$CONFIG_FILES link-grammar/minisat/Makefile" ;; "link-grammar/sat-solver/Makefile") CONFIG_FILES="$CONFIG_FILES link-grammar/sat-solver/Makefile" ;; "link-grammar/link-features.h") CONFIG_FILES="$CONFIG_FILES link-grammar/link-features.h" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "data/de/Makefile") CONFIG_FILES="$CONFIG_FILES data/de/Makefile" ;; "data/en/Makefile") CONFIG_FILES="$CONFIG_FILES data/en/Makefile" ;; "data/en/words/Makefile") CONFIG_FILES="$CONFIG_FILES data/en/words/Makefile" ;; "data/lt/Makefile") CONFIG_FILES="$CONFIG_FILES data/lt/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "autopackage/default.apspec") CONFIG_FILES="$CONFIG_FILES autopackage/default.apspec" ;; "link-grammar.xcode/Makefile") CONFIG_FILES="$CONFIG_FILES link-grammar.xcode/Makefile" ;; "msvc6/Makefile") CONFIG_FILES="$CONFIG_FILES msvc6/Makefile" ;; "msvc6/link_grammar_dll/Makefile") CONFIG_FILES="$CONFIG_FILES msvc6/link_grammar_dll/Makefile" ;; "msvc6/link_grammar_exe/Makefile") CONFIG_FILES="$CONFIG_FILES msvc6/link_grammar_exe/Makefile" ;; "msvc6/link_grammar_java_dll/Makefile") CONFIG_FILES="$CONFIG_FILES msvc6/link_grammar_java_dll/Makefile" ;; "msvc9/Makefile") CONFIG_FILES="$CONFIG_FILES msvc9/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_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" && cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && S["am__EXEEXT_FALSE"]="" S["am__EXEEXT_TRUE"]="#" S["LTLIBOBJS"]="" S["LIBOBJS"]="" S["HAVE_JAVA_FALSE"]="" S["HAVE_JAVA_TRUE"]="#" S["LINK_CFLAGS"]=" -Wall -Wextra -Wsign-compare -Werror-implicit-function-declaration -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmiss"\ "ing-declarations -Wnested-externs -Wpacked -Wswitch-enum -Wmissing-format-attribute -Wstrict-aliasing=2 -Winit-self -Wunsafe-loop-optimizations -Wde"\ "claration-after-statement -Wold-style-definition -Wno-missing-field-initializers -Wno-unused-parameter -Wno-attributes -Wno-long-long -Winline -fno-"\ "strict-aliasing" S["REGEX_LIBS"]="" S["HAVE_EDITLINE_FALSE"]="" S["HAVE_EDITLINE_TRUE"]="#" S["LIBEDIT_LIBS"]="" S["LIBEDIT_CFLAGS"]="" S["HAVE_HUNSPELL_FALSE"]="" S["HAVE_HUNSPELL_TRUE"]="#" S["HUNSPELL_LIBS"]="" S["HUNSPELL_CFLAGS"]="" S["HAVE_ASPELL_FALSE"]="" S["HAVE_ASPELL_TRUE"]="#" S["ASPELL_LIBS"]="" S["ASPELL_CFLAGS"]="" S["SQLITE3_LIBS"]="" S["SQLITE3_CFLAGS"]="" S["HAVE_SQLITE_FALSE"]="" S["HAVE_SQLITE_TRUE"]="#" S["WITH_HUNSPELL_FALSE"]="#" S["WITH_HUNSPELL_TRUE"]="" S["WITH_ASPELL_FALSE"]="#" S["WITH_ASPELL_TRUE"]="" S["WITH_CORPUS_FALSE"]="" S["WITH_CORPUS_TRUE"]="#" S["WITH_SAT_SOLVER_FALSE"]="" S["WITH_SAT_SOLVER_TRUE"]="#" S["WITH_PTHREADS_FALSE"]="" S["WITH_PTHREADS_TRUE"]="#" S["WITH_BINRELOC_FALSE"]="" S["WITH_BINRELOC_TRUE"]="#" S["OS_WIN32_FALSE"]="" S["OS_WIN32_TRUE"]="#" S["PKG_CONFIG_LIBDIR"]="" S["PKG_CONFIG_PATH"]="" S["PKG_CONFIG"]="/usr/bin/pkg-config" S["BINRELOC_LIBS"]="" S["BINRELOC_CFLAGS"]="" S["CXXCPP"]="g++ -E" S["OTOOL64"]="" S["OTOOL"]="" S["LIPO"]="" S["NMEDIT"]="" S["DSYMUTIL"]="" S["MANIFEST_TOOL"]=":" S["RANLIB"]="ranlib" S["ac_ct_AR"]="ar" S["AR"]="ar" S["NM"]="/usr/bin/nm -B" S["ac_ct_DUMPBIN"]="" S["DUMPBIN"]="" S["LD"]="/usr/bin/ld -m elf_x86_64" S["FGREP"]="/bin/grep -F" S["SED"]="/bin/sed" S["LIBTOOL"]="$(SHELL) $(top_builddir)/libtool" S["OBJDUMP"]="objdump" S["DLLTOOL"]="dlltool" S["AS"]="as" S["host_os"]="linux-gnu" S["host_vendor"]="unknown" S["host_cpu"]="x86_64" S["host"]="x86_64-unknown-linux-gnu" S["build_os"]="linux-gnu" S["build_vendor"]="unknown" S["build_cpu"]="x86_64" S["build"]="x86_64-unknown-linux-gnu" S["EGREP"]="/bin/grep -E" S["GREP"]="/bin/grep" S["LN_S"]="ln -s" S["CPP"]="gcc -E" S["am__fastdepCXX_FALSE"]="#" S["am__fastdepCXX_TRUE"]="" S["CXXDEPMODE"]="depmode=gcc3" S["ac_ct_CXX"]="g++" S["CXXFLAGS"]="-g -O2" S["CXX"]="g++" S["am__fastdepCC_FALSE"]="#" S["am__fastdepCC_TRUE"]="" S["CCDEPMODE"]="depmode=gcc3" S["am__nodep"]="_no" S["AMDEPBACKSLASH"]="\\" S["AMDEP_FALSE"]="#" S["AMDEP_TRUE"]="" S["am__quote"]="" S["am__include"]="include" S["DEPDIR"]=".deps" S["OBJEXT"]="o" S["EXEEXT"]="" S["ac_ct_CC"]="gcc" S["CPPFLAGS"]="" S["LDFLAGS"]="" S["CFLAGS"]="-g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE" S["CC"]="gcc" S["MAINT"]="" S["MAINTAINER_MODE_FALSE"]="#" S["MAINTAINER_MODE_TRUE"]="" S["AM_BACKSLASH"]="\\" S["AM_DEFAULT_VERBOSITY"]="1" S["AM_DEFAULT_V"]="$(AM_DEFAULT_VERBOSITY)" S["AM_V"]="$(V)" S["am__untar"]="$${TAR-tar} xf -" S["am__tar"]="$${TAR-tar} chof - \"$$tardir\"" S["AMTAR"]="$${TAR-tar}" S["am__leading_dot"]="." S["SET_MAKE"]="" S["AWK"]="gawk" S["mkdir_p"]="$(MKDIR_P)" S["MKDIR_P"]="/bin/mkdir -p" S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" S["STRIP"]="strip" S["install_sh"]="${SHELL} /home/wookey/debian/NMU/git/link-grammar/install-sh" S["MAKEINFO"]="${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing makeinfo" S["AUTOHEADER"]="${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing autoheader" S["AUTOMAKE"]="${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing automake-1.14" S["AUTOCONF"]="${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing autoconf" S["ACLOCAL"]="${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing aclocal-1.14" S["VERSION"]="4.7.4" S["PACKAGE"]="link-grammar" S["CYGPATH_W"]="echo" S["am__isrc"]="" S["INSTALL_DATA"]="${INSTALL} -m 644" S["INSTALL_SCRIPT"]="${INSTALL}" S["INSTALL_PROGRAM"]="${INSTALL}" S["LINK_MICRO_VERSION"]="4" S["LINK_MINOR_VERSION"]="7" S["LINK_MAJOR_VERSION"]="4" S["VERSION_INFO"]="11:4:7" S["target_alias"]="" S["host_alias"]="" S["build_alias"]="" S["LIBS"]="" S["ECHO_T"]="" S["ECHO_N"]="-n" S["ECHO_C"]="" S["DEFS"]="-DPACKAGE_NAME=\\\"\\\" -DPACKAGE_TARNAME=\\\"\\\" -DPACKAGE_VERSION=\\\"\\\" -DPACKAGE_STRING=\\\"\\\" -DPACKAGE_BUGREPORT=\\\"\\\" -DPACKAGE_URL=\\\"\\\" -DPACKAGE=\\\"link"\ "-grammar\\\" -DVERSION=\\\"4.7.4\\\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAV"\ "E_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\\\".libs/\\\" -DHAVE_TOWUPPER=1 -DDEBUG_MEMORY=0 -DH"\ "AVE_LOCALE_H=1 -DHAVE_LC_MESSAGES=1 -DHAVE_REGEXEC=1" S["mandir"]="${datarootdir}/man" S["localedir"]="${datarootdir}/locale" S["libdir"]="${exec_prefix}/lib" S["psdir"]="${docdir}" S["pdfdir"]="${docdir}" S["dvidir"]="${docdir}" S["htmldir"]="${docdir}" S["infodir"]="${datarootdir}/info" S["docdir"]="${datarootdir}/doc/${PACKAGE}" S["oldincludedir"]="/usr/include" S["includedir"]="${prefix}/include" S["localstatedir"]="${prefix}/var" S["sharedstatedir"]="${prefix}/com" S["sysconfdir"]="${prefix}/etc" S["datadir"]="${datarootdir}" S["datarootdir"]="${prefix}/share" S["libexecdir"]="${exec_prefix}/libexec" S["sbindir"]="${exec_prefix}/sbin" S["bindir"]="${exec_prefix}/bin" S["program_transform_name"]="s,x,x," S["prefix"]="/usr/local" S["exec_prefix"]="${prefix}" S["PACKAGE_URL"]="" S["PACKAGE_BUGREPORT"]="" S["PACKAGE_STRING"]="" S["PACKAGE_VERSION"]="" S["PACKAGE_TARNAME"]="" S["PACKAGE_NAME"]="" S["PATH_SEPARATOR"]=":" S["SHELL"]="/bin/bash" _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 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 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES :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 # 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;} ac_datarootdir_hack=' s&@datadir@&${datarootdir}&g s&@docdir@&${datarootdir}/doc/${PACKAGE}&g s&@infodir@&${datarootdir}/info&g s&@localedir@&${datarootdir}/locale&g s&@mandir@&${datarootdir}/man&g s&\${datarootdir}&${prefix}/share&g' ;; esac ac_sed_extra="/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// } :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 ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # 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 # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 link-grammar/m4/0000755000000000000000000000000012537603111010644 5ustar link-grammar/m4/libtool.m40000644000000000000000000106011112537603110012551 0ustar # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*) 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-*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ 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 $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; 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*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; 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*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | 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 "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; 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 "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; 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 "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | 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 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi _LT_TAGVAR(link_all_deplibs, $1)=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd* | 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*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS link-grammar/m4/ltversion.m40000644000000000000000000000126212537603111013134 0ustar # ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) link-grammar/m4/ltsugar.m40000644000000000000000000001042412537603110012567 0ustar # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) link-grammar/m4/ltoptions.m40000644000000000000000000003007312537603110013143 0ustar # Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) link-grammar/m4/lt~obsolete.m40000644000000000000000000001375612537603111013474 0ustar # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) link-grammar/FindLinkGrammar.cmake0000644000000000000000000000371212536650432014345 0ustar # - Try to find the link-grammar library; Once done this will define # # LINK_GRAMMAR_FOUND - system has the link-grammar library # LINK_GRAMMAR_INCLUDE_DIRS - the link-grammar include directory # LINK_GRAMMAR_LIBRARIES - The libraries needed to use link-grammar # LINK_GRAMMAR_DATA_DIR - the dir where you will find the dictionaries # Copyright (c) 2008, OpenCog.org (http://opencog.org) # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # Look for the header file FIND_PATH(LINK_GRAMMAR_INCLUDE_DIR link-grammar/link-includes.h) FIND_PATH(LINK_GRAMMAR_DATA_DIR 4.0.dict PATHS /usr/share/link-grammar/en/ /usr/local/share/link-grammar/en/) # Look for the library FIND_LIBRARY(LINK_GRAMMAR_LIBRARY NAMES link-grammar PATHS /usr/lib /usr/local/lib /opt/local/lib) # Copy the results to the output variables. IF (LINK_GRAMMAR_INCLUDE_DIR AND LINK_GRAMMAR_LIBRARY AND LINK_GRAMMAR_DATA_DIR) SET(LINK_GRAMMAR_FOUND 1) SET(LINK_GRAMMAR_LIBRARIES ${LINK_GRAMMAR_LIBRARY}) SET(LINK_GRAMMAR_INCLUDE_DIRS ${LINK_GRAMMAR_INCLUDE_DIR}) ELSE (LINK_GRAMMAR_INCLUDE_DIR AND LINK_GRAMMAR_LIBRARY AND LINK_GRAMMAR_DATA_DIR) SET(LINK_GRAMMAR_FOUND 0) SET(LINK_GRAMMAR_LIBRARIES) SET(LINK_GRAMMAR_INCLUDE_DIRS) ENDIF (LINK_GRAMMAR_INCLUDE_DIR AND LINK_GRAMMAR_LIBRARY AND LINK_GRAMMAR_DATA_DIR) # Report the results. IF (NOT LINK_GRAMMAR_FOUND) SET(LINK_GRAMMAR_DIR_MESSAGE "link-grammar was not found. Make sure LINK_GRAMMAR_LIBRARY, LINK_GRAMMAR_INCLUDE_DIR and LINK_GRAMMAR_DATA_DIR are set.") IF (NOT LINK_GRAMMAR_FIND_QUIETLY) MESSAGE(STATUS "${LINK_GRAMMAR_DIR_MESSAGE}") ELSE (NOT LINK_GRAMMAR_FIND_QUIETLY) IF (LINK_GRAMMAR_FIND_REQUIRED) MESSAGE(FATAL_ERROR "${LINK_GRAMMAR_DIR_MESSAGE}") ENDIF (LINK_GRAMMAR_FIND_REQUIRED) ENDIF (NOT LINK_GRAMMAR_FIND_QUIETLY) ENDIF (NOT LINK_GRAMMAR_FOUND) MARK_AS_ADVANCED( LINK_GRAMMAR_INCLUDE_DIR LINK_GRAMMAR_LIBRARY ) link-grammar/config.guess0000755000000000000000000012355012537603120012652 0ustar #! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-03-23' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-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." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; 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=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-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.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${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 '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-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:*:*) eval $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 ;; 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 ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-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 ;; 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}-unknown-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.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-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 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-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 ;; esac cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: link-grammar/build.xml.in0000644000000000000000000000276212536650432012570 0ustar link-grammar/README0000644000000000000000000011363012536650432011217 0ustar Link Grammar Parser ------------------- Version 4.7.4 The Link Grammar Parser implements the Sleator/Temperley/Lafferty theory of natural language parsing. This version of the parser is an extended, expanded version of the last official CMU release, and includes many enhancements and fixes created by many different developers. This latest version incorporates a substantial part (but not all) of the BioLG project. This code is released under the BSD license (which is GPL compatible), making it freely available for private and commercial use, with few restrictions. The terms of the license are given in the LICENSE file included with this software, and also available at http://www.link.cs.cmu.edu/link/license.html. Please see the web page http://www.abisource.com/projects/link-grammar/ for more information. This version is a continuation of the original parser posted at http://www.link.cs.cmu.edu/link CONTENTS of this directory: --------------------------- LICENSE The license describing terms of use link-grammar/*.c The program. (Written in ANSI-C) link-grammar/corpus/*.c Optional corpus statistics database. link-grammar/java/* Optional Java language bindings. link-grammar/minisat/* Optional SAT Solver. (Written in C++) link-grammar/sat-solver Optional SAT Solver. (Written in C++) data/en/* English language dictionaries. data/en/4.0.dict The file containing the dictionary definitions. data/en/4.0.knowledge The post-processing knowledge file. data/en/4.0.constituents The constituent knowledge file. data/en/4.0.affix The affix file. data/en/4.0.regex Regex-based morphology guesser. data/en/tiny.dict A small sample dictionary. data/en/words/* A directory full of word lists. data/en/4.0*.batch These files contain sentences (both grammatical and ungrammatical ones) that are handled correctly by this release of the system. These can be run through the parser with the command "./link-parser < 4.0.*.batch" COPYING The license for this code and data ChangeLog A compendium of recent changes. configure The GNU configuration script autogen.sh Developer's configure maintenance tool msvc6, msvc9 Microsoft Visual-C project files UNPACKING and signature verification: ------------------------------------- The system is distributed using the normal tar.gz format; it can be extracted using the "tar -zxf link-grammar.tar.gz" command at the command line. The files have been digitally signed to make sure that there was no corruption of the dataset during download, and to help ensure that no malicious changes were made to the code internals by third parties. The signatures can be checked with the gpg command: gpg --verify link-grammar-4.7.4.tar.gz.asc which should generate output identical to (except for the date): gpg: Signature made Tue Feb 26 19:41:07 2008 CST using RSA key ID C0389241 gpg: Good signature from "Linas Vepstas (current active email; others are inactive) " Alternately, the md5 checksums can be verified. These do not provide cryptographic security, but they can detect simple corruption. To verify the checksums, issue "md5sum -c MD5SUM" at the command line. CREATING the system: -------------------- To compile the link-grammar shared library and demonstration program, at the command line, type: ./configure make To install, change user to "root" and say make install ldconfig This will install the lib-link-grammar.so library into /usr/local/lib, the header files in /usr/local/include/link-grammar, and the dictionaries into /usr/local/share/link-grammar. Running 'ldconfig' will rebuild the shared library cache. By default, the Makefiles attempt to build the Java bindings. The use of the Java bindings is *OPTIONAL*; you do not need these if you do not plan to use link-grammar with Java. You can skip building the Java bindings by disabling as follows: ./configure --disable-java-bindings The /usr/local install target can be over-ridden using the standard GNU configure --prefix option, so for example: ./configure --prefix=/opt/link-grammar By using pkg-config (see below), non-standard install locations can be automatically detected. Additional config options are printed by ./configure --help The system has been tested and works well on 32 and 64-bit Linux systems, FreeBSD, MacOSX, as well as on many Microsoft Windows systems, under various different Windows development environments. Specific OS-dependent notes follow. BUILDING on MacOS: ------------------ Apple MacOSX users will probably need to obtain missing packages from MacPorts in order to successfully build on MacOS. See http://www.macports.org/ for details. See also: http://trac.macports.org/browser/trunk/dports/textproc/link-grammar/Portfile Users who intend to use the java bindings with java6 will need to make sure to compile link-grammar to produce a 64-bit binary, as this is not automatic on OSX. Do this during configure: ./configure CFLAGS="-arch x86_64" BUILDING on Windows ------------------- There are three different ways in which link-grammr can be compiled on Windows. One way is to use Cygwin, which provides a Linux compatibility layer for Windows. Unfortunately, the Cygwin system is not compatible with Java for Windows. Another way is use the MSVC system. A third way is to use the MinGW system, which uses the Gnu toolset to compile windows programs. Link-grammar now requires a working version of POSIX-standard regex libraries. Since these are not provided by Microsoft, a copy must be obtained elsewhere. One possibility is from the gnuwin32 system: http://gnuwin32.sourceforge.net/packages/regex.htm http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/regex.README These different build methods are NOT regularly tested, and some linkgrammar versions may have build issues. If you experience these, please submit patches that fix the problem to the mailing list. BUILDING on Windows (Cygwin) ---------------------------- The easiest way to have link-grammar working on MS Windows is to use Cygwin, a Linux-like environment for Windows making it possible to port software running on POSIX systems to Windows. Download and install Cygwin from http://www.cygwin.com/ Unfortunately, the Cygwin system is not compatible with Java, so if you need the Java bindings, you must use MSVC or MinGW, below. BUILDING on Windows (MinGW) --------------------------- Another way to build link-grammar is to use the MinGW/MSYS, which uses the Gnu toolset to compile Windows programs for Windows. This is probably the easiest way to obtain workable Java bindings for Windows. Download and install MinGW, MSYS and MSYS-DTK from http://mingw.org. Then build and install link-grammar with ./configure make make install If you used the standard installation paths, the directory /usr/ is mapped to C:\msys\1.0, so after 'make install', the libraries and executable will be found at C:\msys\1.0\local\bin and the dictionary files at C:\msys\1.0\local\share\link-grammar. In order to use the Java bindings you'll need to build two extra DLLs, by running the following commands from the link-grammar base directory: cd link-grammar gcc -g -shared -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at \ .libs/analyze-linkage.o .libs/and.o .libs/api.o \ .libs/build-disjuncts.o .libs/constituents.o \ .libs/count.o .libs/disjuncts.o .libs/disjunct-utils.o \ .libs/error.o .libs/expand.o .libs/extract-links.o \ .libs/fast-match.o .libs/idiom.o .libs/massage.o \ .libs/post-process.o .libs/pp_knowledge.o .libs/pp_lexer.o \ .libs/pp_linkset.o .libs/prefix.o .libs/preparation.o \ .libs/print-util.o .libs/print.o .libs/prune.o \ .libs/read-dict.o .libs/read-regex.o .libs/regex-morph.o \ .libs/resources.o .libs/spellcheck-aspell.o \ .libs/spellcheck-hun.o .libs/string-set.o .libs/tokenize.o \ .libs/utilities.o .libs/word-file.o .libs/word-utils.o \ -o /usr/local/bin/link-grammar.dll gcc -g -shared -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at \ .libs/jni-client.o /usr/local/bin/link-grammar.dll \ -o /usr/local/bin/link-grammar-java.dll This will create link-grammar.dll and link-grammar-java.dll in the directory c:\msys\1.0\local\bin . These files, together with link-grammar-*.jar, will be used by Java programs. Make sure that this directory is in the %PATH setting, as otherwise, the DLL's will not be found. BUILDING on Windows (MSVC) -------------------------- Microsoft Visual C/C++ project files can be found in the msvc6 and msvc9 directories. Please note that the regex package, which includes libraries and header files, must be seperately downloaded and installed, as described above. The MSVC project files *MUST* be modified to indicate the correct location of the regex libraries. The build files make use of two environment variables, GNUREGEX and JAVA_HOME. -- GNUREGEX must be pointing to an unzipped gnuwin32-regex distribution. -- JAVA_HOME must be pointing to a locally installed JDK. Those two can be set either as system environment variables (Windows users are supposed to know how to do this :) or as MSVC9 user macros. But just in case you don't, here's how: 1) Start > Control Panel > System (remember in Vista or 7 you need to switch to "Classic View" or "Large icons" respectively to see the System icon). 2) "Advanced system settings" (or "Advanced" tab under XP) 3) On all versions you will see a button with the caption "Environment Variables", press it.... (ALL REMAINING STEPS CORRELATE ON XP, VISTA, AND 7) 4) You now see two lists of environment variables... the top one says "User variables for " and is localized to your user account, the other says "System variables" and applies to ALL user accounts on that computer. 5) Press the "New ..." button corresponding to whether or not you want the variables to be valid on ALL accounts or just your own (either way the following steps remain the same) 6) In the "Variable name:" box, enter "GNUREGEX". 7) In the "Variable value" box, enter the path to your installation of GNUREGEX (on my system this is "C:\Program Files (x86)\GnuWin32" as I am on Windows 7 Ultimate x64) then press "OK" 8) Press the same "New ..." button and this time in the "Variable name" box enter "JAVA_HOME", and in the "Variable value" box enter the path to your Java SDK root folder. (IMPORTANT NOTE: On some systems this variable may already be defined automatically by the JAVA SDK installation! You should check the variables lists before creating a new one to avoid any conflict). 9) Press "OK" and close all Windows opened during the above steps. If you were running MSVC++ or your chosen development environment whilst performing the above steps, you should restart it! Once restarted you should be able to build the latest version of the code. RUNNING the program: -------------------- To run the program issue the Unix command: ./link-parser This starts the program. The program has many user-settable variables and options. These can be displayed by entering !var at the link-parser prompt. Entering !help will display some additional commands. The dictionaries contain some utf-8 punctuation. These may generate errors for users in a non-utf-8 locale, such as the "C" locale. The locale can be set, for example, by saying export LANG=en_US.UTF-8 at the shell prompt. By default, the parser will use dictionaries at the installed location (typically in /usr/local/share). Other locations can be specified on the command line; for example: link-parser ../path/to-my/modified/data/en When accessing dictionaries in non-standard locations, the standard filenames are still assumed (i.e. 4.0.dict, 4.0.affix, etc.) If you see errors similar to this: Warning: The word "encyclop" found near line 252 of en/4.0.dict matches the following words: encyclop This word will be ignored. then your UTF-8 locales are either not installed or not configured. The shell command `locale -a` should list en_US.utf8 as a locale. If not, then you need to `dpkg-reconfigure locales` and/or run `update-locale` or possibly `apt-get install locales`, or combinations or variants of these, depending on your operating system. TESTING the program: -------------------- The program can run in batch mode for testing the system on a large number of sentences. The following command runs the parser on a file called 4.0.batch ./link-parser < 4.0.batch The line "!batch" near the top of 4.0.batch turns on batch mode. In this mode sentences labeled with an initial "*" should be rejected and those not starting with a "*" should be accepted. The current batch file does report some errors, as do the files "4.0.biolg.batch" and "4.0.fixes.batch". Work is ongoing to fix these. The "4.0.fixes.batch" file contains sentences that have been fixed since the original 4.1 release of link-grammar. The "4.0.biolg.batch" contains biology/medical-text sentences from the BioLG project. USING the parser in your own applications: ------------------------------------------ There is an API (application program interface) to the parser. This makes it easy to incorporate it into your own applications. The API is documented on the web site. USING pkg-config: ----------------- To make compiling and linking easier, the current release uses the pkg-config system. To determine the location of the link-grammar header files, say `pkg-config --cflags link-grammar` To obtain the location of the libraries, say `pkg-config --libs link-grammar` Thus, for example, a typical makefile might include the targets: .c.o: cc -O2 -g -Wall -c $< `pkg-config --cflags link-grammar` $(EXE): $(OBJS) cc -g -o $@ $^ `pkg-config --libs link-grammar` JAVA bindings: -------------- This release includes Java bindings. Their use is optional. The bindings will be built automatically if jni.h can be found. Some common java JVM distributions (most notably, the ones from Sun) place this file in unusual locations, where it cannot be automatically found. To remedy this, make sure that JAVA_HOME is set. The configure script looks for jni.h in $JAVA_HOME/Headers and in $JAVA_HOME/include; it also examines corresponding locations for $JDK_HOME. If jni.h still cannot be found, specify the location with the CPPFLAGS variable: so, for example, export CPPFLAGS="-I/opt/jdk1.5/include/:/opt/jdk1.5/include/linux" or export CPPFLAGS="-I/c/java/jdk1.6.0/include/ -I/c/java/jdk1.6.0/include/win32/" Please note that the use of /opt is non-standard, and most system tools will fail to find packages installed there. The building of the Java bindings can be disabled by configuring as below: ./configure --disable-java-bindings Spell Checking: --------------- The parser will run a spell-checker at an early stage, if it encounters a word that it does not know, and cannot guess, based on morphology. The configure script looks for the aspell or hunspell spell-checkers; if the aspell devel environment is found, then aspell is used, else hunspell is used. Spell checking may be disabled at runtime, in the link-parser client with the !spell flag. Enter !help for more details. Corpus Statistics: ------------------ The parser now contains some experimental code for using corpus statistics to provide a parse ranking, and to assign WordNet word senses to word, based on their grammatical usage. An overview of the idea is given on the OpenCog blog, here: http://brainwave.opencog.org/2009/01/12/determining-word-senses-from-grammatical-usage/ It is planned that the Corpus statistics database will be used to guide the SAT solver. To enable the corpus statistics, specify ./configure --enable-corpus-stats prior to compiling. The database itself can be downloaded from http://www.abisource.com/downloads/link-grammar/sense-dictionary/ or http://gnucash.org/linas/nlp/data/linkgrammar-wsd/ The data is contained in an sqlite3 database file, disjuncts.20090430.db.bz2 Unzip this file (using bunzip2) rename it to "disjuncts.db", and place it in the subdirectory "sql", in the same directory that contains the "en" directory. For default unix installations, the final location would be /usr/local/share/link-grammar/sql/disjuncts.db where, by comparison, the usual dictionary would be at /usr/local/share/link-grammar/en/4.0.dict After this is installed, parse ranking scores should be printed automatically, as floating-point numbers: for example: Unique linkage, cost vector = (CORP=4.4257 UNUSED=0 DIS=1 AND=0 LEN=5) Lower numbers are better. The scores can be interpreted as -log_2 of a certain probability, so the lower the number, the higher the probability. The display of disjunct scores can be enabled with the !disjuncts flag, and senses with the !senses flag, at the link-parser prompt. Entering !var and !help will show all flags. Multiple parses are sorted and displayed in order from lowest to highest cost; the sort of can be set by saying !cost=1 for the traditional sort, and !cost=2 for corpus-based cost. Output similar to the below should be printed: linkparser> !disjunct Showing of disjunct used turned on. linkparser> !cost=2 cost set to 2 linkparser> !sense Showing of word senses turned on. linkparser> this is a test Found 1 linkage (1 had no P.P. violations) Unique linkage, cost vector = (CORP=4.4257 UNUSED=0 DIS=1 AND=0 LEN=5) +--Ost--+ +-Ss*b+ +-Ds-+ | | | | this.p is.v a test.n 2 is.v dj=Ss*b- Ost+ sense=be%2:42:02:: score=2.351568 2 is.v dj=Ss*b- Ost+ sense=be%2:42:05:: score=2.143989 2 is.v dj=Ss*b- Ost+ sense=be%2:42:03:: score=1.699292 4 test.n dj=Ost- Ds- sense=test%1:04:00:: score=0.000000 this.p 0.0 0.695 Wd- Ss*b+ is.v 0.0 7.355 Ss*b- Ost+ a 0.0 0.502 Ds+ test.n 1.0 9.151 Ost- Ds- Note that the sense labels are not terribly accurate; the verb "to be" is particularly hard to tag correctly. MULTI-THREADED USE: ------------------- The link-grammar library should be thread-safe as of version 4.3.6, although this has not yet been tested very well, and may possibly be buggy. To enable the thread-safe version of the library, run ./configure like so: ./configure --enable-pthreads The resulting library is thread-safe for all parsing and general use, with the exception of the startup/initialization code. That is, the initial open/creation of the parser dictionary should be done only once, from a single thread, and parsing should not be started until after the dictionary has been read and initialized. Parse options can be set on a per-thread basis, with the exception of verbosity, which is treated as a global. The library uses pthreads for the few spots where it needs to manage per-thread storage. It is possibly quite reasonable to abolish these few spots, thus making the library not only thread-safe, but thread agnostic (i.e. not require pthreads). The following exceptions and special notes apply: error.c -- uses pthreads to access error message area. utilities.c -- has global "verbosity". Uses pthreads for tracking memory usage. The memory usage code is just about obsolete, and could probably be discarded. jni-client.c - uses per-thread struct, but needs to be attached to JNIEnv somehow. malloc-dbg.c - not thread safe, not normally used; only for debugging. prefix.c - not thread-safe, but doesn't need to be; used only during initialization, and only if binreloc turned on. pp_lexer.c -- autogened code, original lex sources lost. This is only used when reading dictionaries, during initialization, and so doesn't need to be thread safe. utilities.h -- Windows doesn't have a thread-safe random-number generator, which means link-grammar for Windows is not currently thread-safe. BioLG merger: ------------- Much of the BioLG project changes have been merged into this version. The current version of link-grammar has superior parse coverage to BioLG on all texts, including biomedical texts. The original BioLG test suite can be found in data/en/4.0.biolg.batch. The following changes in BioLG have NOT been merged: -- Part of speech hinting. The BioLG code can accept part-of-speech hints for unknown words. -- XML I/O. The BioLG code can output parsed text in a certain idiosyncratic XML format. -- "term support". Link-grammar does support "entity placeholders", which provides an equivalant function. -- The link type CH. This was a large, intrusive, incompatible change to the dictionary, and it is not strictly required -- there is a better, alternative way of handling adj-noun-adj-noun chains commonly seen in biomedical text, and this has been implemented. All other BioLG changes, and in particular, extensive dictionary fixes, as well as regex morphology handling, have been incorporated. Performance issues: ------------------- The current parser experiences significant performance problems for long sentences that contain many conjunctions (and, or, but, etc.) This is primarily due to a combinatorial explosion of linkage possibilities for the conjunctions; the culprit is the indiscriminate processing done by the "fat linkage" algorithm. Work is underway to replace the "fat linkage" mechanism by a set of more tightly-focused linkage rules for conjunctions; this work is far from complete. The use of fat linkages is turned on by default; it can be disabled by specifying the !use-fat flag at the command-line, or by calling parse_options_use_fat_links(FALSE) from programs. SAT solver: ----------- The current parser uses an algorithm that runs in O(N^3) time, for a sentence containing N words. This algorithm is more or less a chart parser, a variant of the Earley parser. The SAT solver aims to replace the chart parser with an algorithm based on Boolean Satisfiability Theory; specifically using the MiniSAT solver. The SAT solver has a bit more overhead for shorter sentences, but is significantly faster for long sentences. To work properly, it needs to be attached to a parse ranking system. This work is incomplete, although the prototype works. it is not yet well-integrated with the system, and needs cleanup. The SAT solver is enabled by specifying ./configure --enable-sat-solver prior to compiling. COMMERCIAL use: --------------- The original authors would be pleased to discuss alternate licensing terms and/or additional research work, with those wanting to use this system under a paid contract. Academic products or papers should reference the various link grammar publications. ADDRESSES --------- If you have any questions, or find any bugs, please feel free to send a note to the mailing list: link-grammar@googlegroups.com Although all messages should go to the mailing list, the current maintainers can be contacted at: Dom Lachowicz - Linas Vepstas - The original authors of the Link Grammar parser are: Daniel Sleator sleator@cs.cmu.edu Computer Science Department 412-268-7563 Carnegie Mellon University www.cs.cmu.edu/~sleator Pittsburgh, PA 15213 Davy Temperley dtemp@theory.esm.rochester.edu Eastman School of Music 716-274-1557 26 Gibbs St. www.link.cs.cmu.edu/temperley Rochester, NY 14604 John Lafferty lafferty@cs.cmu.edu Computer Science Department 412-268-6791 Carnegie Mellon University www.cs.cmu.edu/~lafferty Pittsburgh, PA 15213 TODO -- Working Notes: ---------------------- Some working notes. Bad grammar: When a sentence fails to parse, look for: * confused words: its/it's, there/their, to/too, your/you're ... * missing apostrophes in possessives: "the peoples desires" * determiner agreement errors: "a books" * aux verb agreement errors: "to be hooks up" A/An determiners before consonants/vowels: fix this. Just adding linkages in a naive way is not enough, because there's no restriction on neighboring words: "I ate an apple." vs. "I ate a green apple". Should this be done in post-processing? or in pre-processing? (maybe easier to post-process, but more biologically natural as a pre-process step.) Conjunction cleanup: parser has some special-case code for dealing with conjunctions. Unfortunately, some of this code has hard-wired English words in them. These are in construct_either() and in set_is_conjunction(). Actually, all of massage.c Grep for XXX FIXME. These need to be refactored. Poor linkage choices: Compare "she will be happier than before" to "she will be more happy than before." Current parser makes "happy" the head word, and "more" a modifier w/EA link. I beleive the correct solution would be to make "more" the head (link it as a comparative), and make "happy" the dependent. This would harmonize rules for comparatives... and would eliminate/simplify rules for less,more. Repulsive parses: Sometimes, the existance of one parse should suggest that another parse must surely be wrong: if one parse is possible, then the other parses must surely be unlikely. For example: the conjunction and.j-g allows the "The Great Southern and Western Railroad" to be parsed as the single name of an entity. However, it also provides a pattern match for "John and Mike" as a single entity, which is almost certainly wrong. But "John and Mike" has an alternative parse, as a conventional-and -- a list of two people, and so the existance of this alternaive (and correct) parse suggests that perhaps the entity-and is really very much the wrong parse. That is, the mere possibility of certain parses should strongly disfavour other possible parses. (Exception: Ben & Jerry's ice cream; however, in this case, we could recognize Ben & Jerry as the name of a proper brand; but this is outside of the "normal" dictionary (?) (but maybe should be in the dictionary!)) More examples: "high water" can have A joining high.a and AN joining high.n; these two should either be collapsed into one, or one should be eliminated. incremental parsing: to avoid a combinatorial explosion of parses, it would be nice to have an incremental parsing, phrase by phrase, using a Viterbi-like algorithm to obtain the parse. Thus, for example, the parse of the last half of a long, run-on sentence should not be sensitive to the parse of the beginning of the sentence. Doing so would help with combinatorial explosion. So, for example, if the first half of a sentence has 4 plausible parses, and the last half has 4 more, then link-grammar reports 16 parses total. It would be much, much more useful to instead be given the factored results: i.e. the four plausible parses for the first half, and the four plausible parses for the last half. The lower combinatoric stress would ease the burden on downstream users of link-grammar. (This somewhat resembles the application of construction grammar ideas to the link-grammar dictionary). Caution: watch out for garden-path sentences: The horse raced past the barn fell. The old man the boat. The cotton clothing is made of grows in Mississippi. The current parser parses these perfectly; a viterbi parsr could trip on these. Registers: Consider the sentence "Thieves rob bank" -- a typical newspaper headline. LG currently fails to parse this, because the determiner is missing ("bank" is a count noun, not a mass noun, and thus requires a determiner. By contrast, "thieves rob water" parses just fine.) A fix for this would be to replace mandatory determiner links by (D- or {[[()]] & headline-flag}) which allows the D link to be ommitted if the headline-flag bit is set. Here, "headline-flag" could be a new link-type, but one that is not subject to planarity constraints. Note that this is easier said than done: if one simply adds a high-cost null link, and no headline-flag, then all sorts of ungrammatical sentences parse, with strange parses; while some grammatical sentences, which should parse, but currently don't, become parseable, but with crazy results. Assorted minor cleanup: -- Should provide a query that returns compile-time consts, e.g. the max number of characters in a word, or max words in a sentence -- Should remove compile-time constants, e.g. max words, max length etc. -- Split out parse-options, so that the command-line client options are not in the parse-options struct. Hand-refining verb patterns: A good reference for refining verb usage patterns is: COBUILD GRAMMAR PATTERNS 1: VERBS from THE COBUILD SERIES /from/ THE BANK OF ENGLISH HARPER COLLINS online at https://arts-ccr-002.bham.ac.uk/ccr/patgram/ http://www.corpus.bham.ac.uk/publications/index.shtml Quotations: Currently, tokenize.c ignores all ASCII double-quotes (grep for "quote_found" in the source). However, it does not do this for the various "curly" UTF8 quotes, such as ‘these’ and “these”. This results is some ugly parsing for sentences containing such quotes. (Note that these are in 4.0.affix). no-links-cross: Link Grammar uses a constraint that all linkages must be planar graphs. While this is mostly correct, it would probably be more correct to use "landmark transitivity" as articulated by Hudson in the Word Grammar theory. This might allow the elimination of most or all post-processing rules. This is done by making each link directional: one end of the link is the parent. (e.g. noun, noun-modifier: the noun is the parent). Parents are landmarks for children. Transitivity is applied to parent-child relationships. Specifically, the no-links-cross rule is replaced by two landmark transitivity rules: -- If B is a landmark for C, then A is also a type-L landmark for C -- If A is a landmark for C, then B is also a landmark for C where type-L means either a right-going or left-going link. See http://goertzel.org/ProwlGrammar.pdf for details. See also: http://www.phon.ucl.ac.uk/home/dick/enc/syntax.htm "to be fishing": Link grammar offers four parses of "I was fishing for evidence", two of which are given low scores, and two are given high scores. Of the two with high scores, one parse is clearly bad. Its links "to be fishing.noun" as opposed to the correct "to be fishing.gerund". That is, I can be happy, healthy and wise, but I certainly cannot be fishing.noun. This is perhaps not just a bug in the structure of the dictionary, but is perhaps deeper: link-grammar has little or no concept of lexical units (i.e. collocations, idioms, institutional phrases), which thus allows parses with bad word-senses to sneak in. The goal is to introduce more knowledge of lexical units into LG. Different word senses can have different grammar rules (and thus, the links employed reveal the sense of the word): for example: "I tend to agree" vs. "I tend to the sheep" -- these employ two different meanings for the verb "tend", and the grammatical constructions allowed for one meaning are not the same as those allowed for the other. Yet, the link rules for "tend.v" have to accommodate both senses, thus making the rules rather complex. Worse, it potentially allows for non-sense constructions. If, instead, we allowed the dictionary to contain different rules for "tend.meaning1" and "tend.meaning2", the rules would simplify (at the cost of inflating the size of the dictionary). Another example: "I fear so" -- the word "so" is only allowed with some, but not all, lexical senses of "fear". So e.g. "I fear so" is in the same semantic class as "I think so" or "I hope so", although other meanings of these verbs are otherwise quite different. [Sin2004] "New evidence, new priorities, new attitudes" in J. Sinclair, (ed) (2004) How to use corpora in language teaching, Amsterdam: John Benjamins See also: Pattern Grammar: A Corpus-Driven Approach to the Lexical Grammar of English Susan Hunston and Gill Francis (University of Birmingham) Amsterdam: John Benjamins (Studies in corpus linguistics, edited by Elena Tognini-Bonelli, volume 4), 2000 "holes" in collocations (aka "set phrases" of "phrasemes"): The link-grammar provides several mechanisms to support circumpositions or even more complicated multi-word structures. One mechanism is by ordinary links; see the V, XJ and RJ links. The other mechanism is by means of post-processing rules. However, rules for many common forms have not yet been written. The general problem is of supporting structures that have "holes" in the middle. For example, the adposition: ... from [xxx] on. "He never said another word from then on." "I promise to be quiet from now on." "Keep going straight from that point on." "We went straight from here on." ... from there on. "We went straight, from the house on to the woods." "We drove straight, from the hill onwards." Note that multiple words can fit in the slot [xxx]. Note the tangling of another prepositional phrase: "... from [xxx] on to [yyy]" More complicated collocations with holes include "First.. next..." "If ... then ..." 'Then' is optional, for example: "If it is raining, stay inside!" "if ... only ..." "If there were only more like you!" "... not only, ... but also ..." "Either ... or ..." "Both ... and ..." "Both June and Tom are coming" "ought ... if ..." "That ought to be the case, if John is not lying" "Someone ... who ..." "Someone is outside who wants to see you" The above are not currently supported. An example that is supported is the "non-referential it", e.g. "It ... that ..." "It seemed likely that John would go" The above is supported by means of special disjuncts for 'it' and 'that', which must occur in the same post-processing domain. See also: http://www.phon.ucl.ac.uk/home/dick/enc/syntax.htm#relative-clause http://www.phon.ucl.ac.uk/home/dick/enc/syntax.htm#extraposition "...from X and from Y" "By X, and by Y, ..." Here, X and Y might be rather long phrases, containing other prepositions. In this case, the usual link-grammar linkage rules will typically conjoin "and from Y" to some preposition in X, instead of the correct link to "from X". Although adding a cost to keep the lengths of X and Y approximately equal can help, it would be even better to recognize the "...from ... and from..." pattern. One possible way to implement this would be to give preference to and-links that have the same word on either end. More idiomatic than the above examples: "...the chip on X's shoulder" "to do X a favour" "to give X a look" The above are all examples of "set phrases" or "phrasemes", and are most commonly discussed in the context of MTT or Meaning-Text Theory of Igor Mel'cuk et al (search for "MTT Lexical Function" for more info). Mel'cuk treats set phrases as lexemes, and, for parsing, this is not directly relevent. However, insofar as phrasemes have a high mutual information content, they can dominate the syntactic structure of a sentence. MTT suggests that perhaps the correct way to understand the contents of the post-processing rules is as an implementation of 'lexical functions' projected onto syntax. That is, the post-processing rules allow only certain syntactical constructions, and these are the kinds of constructions one typically sees in certain kinds of lexical functions. Alternately, link-grammar suffers from a combinatoric explosion of possible parses of a given sentence. It would seem that lexical functions could be used to rule out many of these parses. On the other hand, the results are likely to be similar to that of statistical pare ranking (which presumably captures such quasi-idiomatic collocations at least weakly). Ref. I. Mel'cuk: "Collocations and Lexical Functions", in ''Phraseology: theory, analysis, and applications'' Ed. Anthony Paul Cowie (1998) Oxford University Press pp. 23-54. link-grammar/link-grammar.xcode/0000755000000000000000000000000012537603515014016 5ustar link-grammar/link-grammar.xcode/Makefile.am0000644000000000000000000000003712536650433016052 0ustar EXTRA_DIST = project.pbxproj link-grammar/link-grammar.xcode/.cvsignore0000644000000000000000000000002512536650433016013 0ustar Makefile.in Makefile link-grammar/link-grammar.xcode/Makefile.in0000644000000000000000000003040312537603121016054 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = link-grammar.xcode DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = project.pbxproj all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign link-grammar.xcode/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign link-grammar.xcode/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: link-grammar/link-grammar.xcode/project.pbxproj0000644000000000000000000011450712536650433017102 0ustar // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 39; objects = { 014CEA520018CE5811CA2923 = { buildSettings = { COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; ZERO_LINK = YES; }; isa = PBXBuildStyle; name = Development; }; 014CEA530018CE5811CA2923 = { buildSettings = { COPY_PHASE_STRIP = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; ZERO_LINK = NO; }; isa = PBXBuildStyle; name = Deployment; }; //010 //011 //012 //013 //014 //080 //081 //082 //083 //084 08FB7793FE84155DC02AAC07 = { buildSettings = { }; buildStyles = ( 014CEA520018CE5811CA2923, 014CEA530018CE5811CA2923, ); hasScannedForEncodings = 1; isa = PBXProject; mainGroup = 08FB7794FE84155DC02AAC07; projectDirPath = ""; targets = ( D2AAC0620554660B00DB518D, ); }; 08FB7794FE84155DC02AAC07 = { children = ( 08FB7795FE84155DC02AAC07, 3002DCE708A228360049B4B3, 1AB674ADFE9D54B511CA2CBB, ); isa = PBXGroup; name = "link-grammar"; refType = 4; sourceTree = ""; }; 08FB7795FE84155DC02AAC07 = { children = ( 3002DBB708A220010049B4B3, 3002DB7F08A21FF80049B4B3, 3002DB8008A21FF80049B4B3, 3002DB8108A21FF80049B4B3, 3002DB8208A21FF80049B4B3, 3002DB8308A21FF80049B4B3, 3002DB8408A21FF80049B4B3, 3002DB8508A21FF80049B4B3, 3002DB8608A21FF80049B4B3, 3002DB8708A21FF80049B4B3, 3002DB8808A21FF80049B4B3, 3002DB8908A21FF80049B4B3, 3002DB8A08A21FF80049B4B3, 3002DB8B08A21FF80049B4B3, 3002DB8C08A21FF80049B4B3, 3002DB8D08A21FF80049B4B3, 3002DB8E08A21FF80049B4B3, 3002DB8F08A21FF80049B4B3, 3002DB9008A21FF80049B4B3, 3002DB9108A21FF80049B4B3, 3002DB9208A21FF80049B4B3, 3002DB9308A21FF80049B4B3, 3002DB9408A21FF80049B4B3, 3002DB9508A21FF80049B4B3, 3002DB9608A21FF80049B4B3, 3002DB9708A21FF80049B4B3, 3002DB9808A21FF80049B4B3, 3002DB9908A21FF80049B4B3, 3002DB9A08A21FF80049B4B3, ); isa = PBXGroup; name = Source; refType = 4; sourceTree = ""; }; //080 //081 //082 //083 //084 //1A0 //1A1 //1A2 //1A3 //1A4 1AB674ADFE9D54B511CA2CBB = { children = ( D2AAC0630554660B00DB518D, ); isa = PBXGroup; name = Products; refType = 4; sourceTree = ""; }; //1A0 //1A1 //1A2 //1A3 //1A4 //300 //301 //302 //303 //304 3002DB7F08A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "analyze-linkage.c"; path = "link-grammar/analyze-linkage.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB8008A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = and.c; path = "link-grammar/and.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB8108A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = api.c; path = "link-grammar/api.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB8208A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "build-disjuncts.c"; path = "link-grammar/build-disjuncts.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB8308A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "command-line.c"; path = "link-grammar/command-line.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB8408A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = constituents.c; path = "link-grammar/constituents.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB8508A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = count.c; path = "link-grammar/count.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB8608A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = error.c; path = "link-grammar/error.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB8708A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "extract-links.c"; path = "link-grammar/extract-links.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB8808A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "fast-match.c"; path = "link-grammar/fast-match.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB8908A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = idiom.c; path = "link-grammar/idiom.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB8A08A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = linkset.c; path = "link-grammar/linkset.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB8B08A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = massage.c; path = "link-grammar/massage.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB8C08A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "post-process.c"; path = "link-grammar/post-process.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB8D08A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pp_knowledge.c; path = "link-grammar/pp_knowledge.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB8E08A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pp_lexer.c; path = "link-grammar/pp_lexer.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB8F08A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pp_linkset.c; path = "link-grammar/pp_linkset.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB9008A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = prefix.c; path = "link-grammar/prefix.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB9108A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = preparation.c; path = "link-grammar/preparation.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB9208A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "print-util.c"; path = "link-grammar/print-util.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB9308A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = print.c; path = "link-grammar/print.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB9408A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = prune.c; path = "link-grammar/prune.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB9508A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "read-dict.c"; path = "link-grammar/read-dict.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB9608A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = resources.c; path = "link-grammar/resources.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB9708A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "string-set.c"; path = "link-grammar/string-set.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB9808A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = tokenize.c; path = "link-grammar/tokenize.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB9908A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = utilities.c; path = "link-grammar/utilities.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB9A08A21FF80049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "word-file.c"; path = "link-grammar/word-file.c"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DB9B08A21FF80049B4B3 = { fileRef = 3002DB7F08A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DB9C08A21FF80049B4B3 = { fileRef = 3002DB8008A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DB9D08A21FF80049B4B3 = { fileRef = 3002DB8108A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DB9E08A21FF80049B4B3 = { fileRef = 3002DB8208A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DB9F08A21FF80049B4B3 = { fileRef = 3002DB8308A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBA008A21FF80049B4B3 = { fileRef = 3002DB8408A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBA108A21FF80049B4B3 = { fileRef = 3002DB8508A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBA208A21FF80049B4B3 = { fileRef = 3002DB8608A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBA308A21FF80049B4B3 = { fileRef = 3002DB8708A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBA408A21FF80049B4B3 = { fileRef = 3002DB8808A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBA508A21FF80049B4B3 = { fileRef = 3002DB8908A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBA608A21FF80049B4B3 = { fileRef = 3002DB8A08A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBA708A21FF80049B4B3 = { fileRef = 3002DB8B08A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBA808A21FF80049B4B3 = { fileRef = 3002DB8C08A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBA908A21FF80049B4B3 = { fileRef = 3002DB8D08A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBAA08A21FF80049B4B3 = { fileRef = 3002DB8E08A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBAB08A21FF80049B4B3 = { fileRef = 3002DB8F08A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBAC08A21FF80049B4B3 = { fileRef = 3002DB9008A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBAD08A21FF80049B4B3 = { fileRef = 3002DB9108A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBAE08A21FF80049B4B3 = { fileRef = 3002DB9208A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBAF08A21FF80049B4B3 = { fileRef = 3002DB9308A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBB008A21FF80049B4B3 = { fileRef = 3002DB9408A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBB108A21FF80049B4B3 = { fileRef = 3002DB9508A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBB208A21FF80049B4B3 = { fileRef = 3002DB9608A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBB308A21FF80049B4B3 = { fileRef = 3002DB9708A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBB408A21FF80049B4B3 = { fileRef = 3002DB9808A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBB508A21FF80049B4B3 = { fileRef = 3002DB9908A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBB608A21FF80049B4B3 = { fileRef = 3002DB9A08A21FF80049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBB708A220010049B4B3 = { children = ( 3002DBB808A220AD0049B4B3, 3002DBB908A220AD0049B4B3, 3002DBBA08A220AD0049B4B3, 3002DBBB08A220AD0049B4B3, 3002DBBC08A220AD0049B4B3, 3002DBBD08A220AD0049B4B3, 3002DBBE08A220AD0049B4B3, 3002DBBF08A220AD0049B4B3, 3002DBC008A220AD0049B4B3, 3002DBC108A220AD0049B4B3, 3002DBC208A220AD0049B4B3, 3002DBC308A220AD0049B4B3, 3002DBC408A220AD0049B4B3, 3002DBC508A220AD0049B4B3, 3002DBC608A220AD0049B4B3, 3002DBC708A220AD0049B4B3, 3002DBC808A220AD0049B4B3, 3002DBC908A220AD0049B4B3, 3002DBCA08A220AD0049B4B3, 3002DBCB08A220AD0049B4B3, 3002DBCC08A220AD0049B4B3, 3002DBCD08A220AD0049B4B3, 3002DBCE08A220AD0049B4B3, 3002DBCF08A220AD0049B4B3, 3002DBD008A220AD0049B4B3, 3002DBD108A220AD0049B4B3, 3002DBD208A220AD0049B4B3, 3002DBD308A220AD0049B4B3, ); isa = PBXGroup; name = Headers; refType = 4; sourceTree = ""; }; 3002DBB808A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "analyze-linkage.h"; path = "link-grammar/analyze-linkage.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBB908A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = and.h; path = "link-grammar/and.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBBA08A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "api-structures.h"; path = "link-grammar/api-structures.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBBB08A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = api.h; path = "link-grammar/api.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBBC08A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = error.h; path = "link-grammar/error.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBBD08A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = externs.h; path = "link-grammar/externs.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBBE08A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "extract-links.h"; path = "link-grammar/extract-links.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBBF08A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "fast-match.h"; path = "link-grammar/fast-match.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBC008A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = idiom.h; path = "link-grammar/idiom.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBC108A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "link-includes.h"; path = "link-grammar/link-includes.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBC208A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = linkset.h; path = "link-grammar/linkset.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBC308A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = massage.h; path = "link-grammar/massage.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBC408A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "post-process.h"; path = "link-grammar/post-process.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBC508A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pp_knowledge.h; path = "link-grammar/pp_knowledge.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBC608A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pp_lexer.h; path = "link-grammar/pp_lexer.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBC708A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pp_linkset.h; path = "link-grammar/pp_linkset.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBC808A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = prefix.h; path = "link-grammar/prefix.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBC908A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = preparation.h; path = "link-grammar/preparation.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBCA08A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "print-util.h"; path = "link-grammar/print-util.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBCB08A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = print.h; path = "link-grammar/print.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBCC08A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = prune.h; path = "link-grammar/prune.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBCD08A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "read-dict.h"; path = "link-grammar/read-dict.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBCE08A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = resources.h; path = "link-grammar/resources.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBCF08A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "string-set.h"; path = "link-grammar/string-set.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBD008A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = structures.h; path = "link-grammar/structures.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBD108A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = tokenize.h; path = "link-grammar/tokenize.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBD208A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = utilities.h; path = "link-grammar/utilities.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBD308A220AD0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "word-file.h"; path = "link-grammar/word-file.h"; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DBD408A220AD0049B4B3 = { fileRef = 3002DBB808A220AD0049B4B3; isa = PBXBuildFile; settings = { ATTRIBUTES = ( ); }; }; 3002DBD508A220AD0049B4B3 = { fileRef = 3002DBB908A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBD608A220AD0049B4B3 = { fileRef = 3002DBBA08A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBD708A220AD0049B4B3 = { fileRef = 3002DBBB08A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBD808A220AD0049B4B3 = { fileRef = 3002DBBC08A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBD908A220AD0049B4B3 = { fileRef = 3002DBBD08A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBDA08A220AD0049B4B3 = { fileRef = 3002DBBE08A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBDB08A220AD0049B4B3 = { fileRef = 3002DBBF08A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBDC08A220AD0049B4B3 = { fileRef = 3002DBC008A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBDD08A220AD0049B4B3 = { fileRef = 3002DBC108A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBDE08A220AD0049B4B3 = { fileRef = 3002DBC208A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBDF08A220AD0049B4B3 = { fileRef = 3002DBC308A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBE008A220AD0049B4B3 = { fileRef = 3002DBC408A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBE108A220AD0049B4B3 = { fileRef = 3002DBC508A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBE208A220AD0049B4B3 = { fileRef = 3002DBC608A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBE308A220AD0049B4B3 = { fileRef = 3002DBC708A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBE408A220AD0049B4B3 = { fileRef = 3002DBC808A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBE508A220AD0049B4B3 = { fileRef = 3002DBC908A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBE608A220AD0049B4B3 = { fileRef = 3002DBCA08A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBE708A220AD0049B4B3 = { fileRef = 3002DBCB08A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBE808A220AD0049B4B3 = { fileRef = 3002DBCC08A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBE908A220AD0049B4B3 = { fileRef = 3002DBCD08A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBEA08A220AD0049B4B3 = { fileRef = 3002DBCE08A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBEB08A220AD0049B4B3 = { fileRef = 3002DBCF08A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBEC08A220AD0049B4B3 = { fileRef = 3002DBD008A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBED08A220AD0049B4B3 = { fileRef = 3002DBD108A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBEE08A220AD0049B4B3 = { fileRef = 3002DBD208A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBEF08A220AD0049B4B3 = { fileRef = 3002DBD308A220AD0049B4B3; isa = PBXBuildFile; settings = { }; }; 3002DBF008A225310049B4B3 = { children = ( 3002DC9F08A2261D0049B4B3, ); isa = PBXGroup; name = Data; path = ""; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DC9F08A2261D0049B4B3 = { children = ( 3002DCA008A2263F0049B4B3, ); isa = PBXGroup; name = "link-grammar"; path = ""; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DCA008A2263F0049B4B3 = { children = ( 3002DCA208A2263F0049B4B3, 3002DCA308A2263F0049B4B3, 3002DCA408A2263F0049B4B3, 3002DCA508A2263F0049B4B3, 3002DCA608A2263F0049B4B3, 3002DCA808A2263F0049B4B3, 3002DCA908A2263F0049B4B3, ); isa = PBXGroup; name = en; path = data/en; refType = 2; sourceTree = SOURCE_ROOT; }; 3002DCA208A2263F0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; path = 4.0.affix; refType = 4; sourceTree = ""; }; 3002DCA308A2263F0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; path = 4.0.batch; refType = 4; sourceTree = ""; }; 3002DCA408A2263F0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; path = "4.0.constituent-knowledge"; refType = 4; sourceTree = ""; }; 3002DCA508A2263F0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; path = 4.0.dict; refType = 4; sourceTree = ""; }; 3002DCA608A2263F0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; path = 4.0.knowledge; refType = 4; sourceTree = ""; }; 3002DCA808A2263F0049B4B3 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; path = tiny.dict; refType = 4; sourceTree = ""; }; 3002DCA908A2263F0049B4B3 = { children = ( 3002DCAC08A2263F0049B4B3, 3002DCAD08A2263F0049B4B3, 3002DCAE08A2263F0049B4B3, 3002DCAF08A2263F0049B4B3, 3002DCB008A2263F0049B4B3, 3002DCB108A2263F0049B4B3, 3002DCB208A2263F0049B4B3, 3002DCB308A2263F0049B4B3, 3002DCB408A2263F0049B4B3, 3002DCB508A2263F0049B4B3, 3002DCB608A2263F0049B4B3, 3002DCB708A2263F0049B4B3, 3002DCB808A2263F0049B4B3, 3002DCB908A2263F0049B4B3, 3002DCBA08A2263F0049B4B3, 3002DCBB08A2263F0049B4B3, 3002DCBC08A2263F0049B4B3, 3002DCBD08A2263F0049B4B3, 3002DCBE08A2263F0049B4B3, 3002DCBF08A2263F0049B4B3, 3002DCC008A2263F0049B4B3, 3002DCC108A2263F0049B4B3, 3002DCC208A2263F0049B4B3, 3002DCC308A2263F0049B4B3, 3002DCC408A2263F0049B4B3, 3002DCC508A2263F0049B4B3, 3002DCC608A2263F0049B4B3, 3002DCC708A2263F0049B4B3, 3002DCC808A2263F0049B4B3, 3002DCC908A2263F0049B4B3, 3002DCCA08A2263F0049B4B3, 3002DCCB08A2263F0049B4B3, 3002DCCC08A2263F0049B4B3, 3002DCCD08A2263F0049B4B3, 3002DCCE08A2263F0049B4B3, 3002DCCF08A2263F0049B4B3, 3002DCD008A2263F0049B4B3, 3002DCD108A2263F0049B4B3, 3002DCD208A2263F0049B4B3, 3002DCD308A2263F0049B4B3, 3002DCD408A2263F0049B4B3, 3002DCD508A2263F0049B4B3, 3002DCD608A2263F0049B4B3, 3002DCD708A2263F0049B4B3, 3002DCD808A2263F0049B4B3, 3002DCD908A2263F0049B4B3, 3002DCDA08A2263F0049B4B3, 3002DCDB08A2263F0049B4B3, 3002DCDC08A2263F0049B4B3, 3002DCDD08A2263F0049B4B3, ); isa = PBXGroup; path = words; refType = 4; sourceTree = ""; }; 3002DCAC08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.adj.1; refType = 4; sourceTree = ""; }; 3002DCAD08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.adj.2; refType = 4; sourceTree = ""; }; 3002DCAE08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.adj.3; refType = 4; sourceTree = ""; }; 3002DCAF08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.adv.1; refType = 4; sourceTree = ""; }; 3002DCB008A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.adv.2; refType = 4; sourceTree = ""; }; 3002DCB108A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.adv.3; refType = 4; sourceTree = ""; }; 3002DCB208A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.n.1; refType = 4; sourceTree = ""; }; 3002DCB308A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.n.2.s; refType = 4; sourceTree = ""; }; 3002DCB408A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.n.2.x; refType = 4; sourceTree = ""; }; 3002DCB508A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.n.3; refType = 4; sourceTree = ""; }; 3002DCB608A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.n.4; refType = 4; sourceTree = ""; }; 3002DCB708A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.n.c.1; refType = 4; sourceTree = ""; }; 3002DCB808A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.n.c.2; refType = 4; sourceTree = ""; }; 3002DCB908A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.n.p; refType = 4; sourceTree = ""; }; 3002DCBA08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.n.t; refType = 4; sourceTree = ""; }; 3002DCBB08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.s; refType = 4; sourceTree = ""; }; 3002DCBC08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.1.1; refType = 4; sourceTree = ""; }; 3002DCBD08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.1.2; refType = 4; sourceTree = ""; }; 3002DCBE08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.1.3; refType = 4; sourceTree = ""; }; 3002DCBF08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.1.4; refType = 4; sourceTree = ""; }; 3002DCC008A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.1.p; refType = 4; sourceTree = ""; }; 3002DCC108A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.10.1; refType = 4; sourceTree = ""; }; 3002DCC208A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.10.2; refType = 4; sourceTree = ""; }; 3002DCC308A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.10.3; refType = 4; sourceTree = ""; }; 3002DCC408A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.10.4; refType = 4; sourceTree = ""; }; 3002DCC508A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.2.1; refType = 4; sourceTree = ""; }; 3002DCC608A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.2.2; refType = 4; sourceTree = ""; }; 3002DCC708A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.2.3; refType = 4; sourceTree = ""; }; 3002DCC808A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.2.4; refType = 4; sourceTree = ""; }; 3002DCC908A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.2.5; refType = 4; sourceTree = ""; }; 3002DCCA08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.4.1; refType = 4; sourceTree = ""; }; 3002DCCB08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.4.2; refType = 4; sourceTree = ""; }; 3002DCCC08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.4.3; refType = 4; sourceTree = ""; }; 3002DCCD08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.4.4; refType = 4; sourceTree = ""; }; 3002DCCE08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.4.5; refType = 4; sourceTree = ""; }; 3002DCCF08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.5.1; refType = 4; sourceTree = ""; }; 3002DCD008A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.5.2; refType = 4; sourceTree = ""; }; 3002DCD108A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.5.3; refType = 4; sourceTree = ""; }; 3002DCD208A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.5.4; refType = 4; sourceTree = ""; }; 3002DCD308A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.6.1; refType = 4; sourceTree = ""; }; 3002DCD408A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.6.2; refType = 4; sourceTree = ""; }; 3002DCD508A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.6.3; refType = 4; sourceTree = ""; }; 3002DCD608A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.6.4; refType = 4; sourceTree = ""; }; 3002DCD708A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.6.5; refType = 4; sourceTree = ""; }; 3002DCD808A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.8.1; refType = 4; sourceTree = ""; }; 3002DCD908A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.8.2; refType = 4; sourceTree = ""; }; 3002DCDA08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.8.3; refType = 4; sourceTree = ""; }; 3002DCDB08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.8.4; refType = 4; sourceTree = ""; }; 3002DCDC08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.v.8.5; refType = 4; sourceTree = ""; }; 3002DCDD08A2263F0049B4B3 = { explicitFileType = text; fileEncoding = 30; isa = PBXFileReference; path = words.y; refType = 4; sourceTree = ""; }; 3002DCE708A228360049B4B3 = { children = ( 3002DBF008A225310049B4B3, ); isa = PBXGroup; name = Resources; path = ""; refType = 2; sourceTree = SOURCE_ROOT; }; //300 //301 //302 //303 //304 //D20 //D21 //D22 //D23 //D24 D289988505E68E00004EDB86 = { buildActionMask = 2147483647; files = ( ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; D2AAC0600554660B00DB518D = { buildActionMask = 2147483647; files = ( 3002DBD408A220AD0049B4B3, 3002DBD508A220AD0049B4B3, 3002DBD608A220AD0049B4B3, 3002DBD708A220AD0049B4B3, 3002DBD808A220AD0049B4B3, 3002DBD908A220AD0049B4B3, 3002DBDA08A220AD0049B4B3, 3002DBDB08A220AD0049B4B3, 3002DBDC08A220AD0049B4B3, 3002DBDD08A220AD0049B4B3, 3002DBDE08A220AD0049B4B3, 3002DBDF08A220AD0049B4B3, 3002DBE008A220AD0049B4B3, 3002DBE108A220AD0049B4B3, 3002DBE208A220AD0049B4B3, 3002DBE308A220AD0049B4B3, 3002DBE408A220AD0049B4B3, 3002DBE508A220AD0049B4B3, 3002DBE608A220AD0049B4B3, 3002DBE708A220AD0049B4B3, 3002DBE808A220AD0049B4B3, 3002DBE908A220AD0049B4B3, 3002DBEA08A220AD0049B4B3, 3002DBEB08A220AD0049B4B3, 3002DBEC08A220AD0049B4B3, 3002DBED08A220AD0049B4B3, 3002DBEE08A220AD0049B4B3, 3002DBEF08A220AD0049B4B3, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; D2AAC0610554660B00DB518D = { buildActionMask = 2147483647; files = ( 3002DB9B08A21FF80049B4B3, 3002DB9C08A21FF80049B4B3, 3002DB9D08A21FF80049B4B3, 3002DB9E08A21FF80049B4B3, 3002DB9F08A21FF80049B4B3, 3002DBA008A21FF80049B4B3, 3002DBA108A21FF80049B4B3, 3002DBA208A21FF80049B4B3, 3002DBA308A21FF80049B4B3, 3002DBA408A21FF80049B4B3, 3002DBA508A21FF80049B4B3, 3002DBA608A21FF80049B4B3, 3002DBA708A21FF80049B4B3, 3002DBA808A21FF80049B4B3, 3002DBA908A21FF80049B4B3, 3002DBAA08A21FF80049B4B3, 3002DBAB08A21FF80049B4B3, 3002DBAC08A21FF80049B4B3, 3002DBAD08A21FF80049B4B3, 3002DBAE08A21FF80049B4B3, 3002DBAF08A21FF80049B4B3, 3002DBB008A21FF80049B4B3, 3002DBB108A21FF80049B4B3, 3002DBB208A21FF80049B4B3, 3002DBB308A21FF80049B4B3, 3002DBB408A21FF80049B4B3, 3002DBB508A21FF80049B4B3, 3002DBB608A21FF80049B4B3, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; D2AAC0620554660B00DB518D = { buildPhases = ( D2AAC0600554660B00DB518D, D2AAC0610554660B00DB518D, D289988505E68E00004EDB86, ); buildRules = ( ); buildSettings = { DYLIB_COMPATIBILITY_VERSION = 6; DYLIB_CURRENT_VERSION = 6.3; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PREPROCESSOR_DEFINITIONS = "PACKAGE=\"link-grammar\" VERSION=\"4.2.3\" DICTIONARY_DIR=\\\"\\\" HAVE_DLFCN_H=1 HAVE_UNISTD_H=1 HAVE_STDINT_H=1 HAVE_INTTYPES_H=1 HAVE_STRINGS_H=1 HAVE_MEMORY_H=1 HAVE_STRING_H=1 HAVE_STDLIB_H=1 HAVE_SYS_STAT_H=1 HAVE_SYS_TYPES_H=1 STDC_HEADERS=1"; HEADER_SEARCH_PATHS = "$(SRCROOT)"; INSTALL_PATH = "@executable_path/../Frameworks"; LIBRARY_STYLE = DYNAMIC; MACOSX_DEPLOYMENT_TARGET = 10.2; PRODUCT_NAME = "liblink-grammar"; VERSIONING_SYSTEM = ""; }; dependencies = ( ); isa = PBXNativeTarget; name = "liblink-grammar"; productName = "link-grammar"; productReference = D2AAC0630554660B00DB518D; productType = "com.apple.product-type.library.dynamic"; }; D2AAC0630554660B00DB518D = { explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; isa = PBXFileReference; path = "liblink-grammar.dylib"; refType = 3; sourceTree = BUILT_PRODUCTS_DIR; }; }; rootObject = 08FB7793FE84155DC02AAC07; } link-grammar/compile0000755000000000000000000001624512537603120011712 0ustar #! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2013 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 ) 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 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: link-grammar/autogen.sh0000755000000000000000000000376412536650432012346 0ustar #!/bin/sh # # Run this before configure # # This file blatantly ripped off from subversion. # # Note: this dependency on Perl is fine: only developers use autogen.sh # and we can state that dev people need Perl on their machine # rm -f autogen.err automake --version | perl -ne 'if (/\(GNU automake\) (([0-9]+).([0-9]+))/) {print; if ($2 < 1 || ($2 == 1 && $3 < 4)) {exit 1;}}' if [ $? -ne 0 ]; then echo "Error: you need automake 1.4 or later. Please upgrade." exit 1 fi if test ! -d `aclocal --print-ac-dir 2>> autogen.err`; then echo "Bad aclocal (automake) installation" exit 1 fi libtoolize --force --copy || { echo "error: libtoolize failed" exit 1 } # Produce aclocal.m4, so autoconf gets the automake macros it needs # ACLOCAL_BINRELOC='-I ac-helpers' echo "Creating aclocal.m4: aclocal $ACLOCAL_FLAGS $ACLOCAL_BINRELOC" aclocal $ACLOCAL_FLAGS $ACLOCAL_BINRELOC 2>> autogen.err # Produce all the `GNUmakefile.in's and create neat missing things # like `install-sh', etc. # echo "automake --add-missing --copy --foreign" automake --add-missing --copy --foreign 2>> autogen.err || { echo "" echo "* * * warning: possible errors while running automake - check autogen.err" echo "" } # If there's a config.cache file, we may need to delete it. # If we have an existing configure script, save a copy for comparison. if [ -f config.cache ] && [ -f configure ]; then cp configure configure.$$.tmp fi # Produce ./configure # echo "Creating configure..." autoconf 2>> autogen.err || { echo "" echo "* * * warning: possible errors while running automake - check autogen.err" echo "" } run_configure=true for arg in $*; do case $arg in --no-configure) run_configure=false ;; *) ;; esac done if $run_configure; then ./configure --enable-maintainer-mode "$@" echo echo "Now type 'make' to compile link-grammar." else echo echo "Now run 'configure' and 'make' to compile link-grammar." fi link-grammar/config.log0000644000000000000000000015747112537603146012323 0ustar This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by configure, which was generated by GNU Autoconf 2.69. Invocation command line was $ ./configure --enable-maintainer-mode ## --------- ## ## Platform. ## ## --------- ## hostname = kh uname -m = x86_64 uname -r = 3.16.0-4-amd64 uname -s = Linux uname -v = #1 SMP Debian 3.16.7-ckt9-2 (2015-04-13) /usr/bin/uname -p = unknown /bin/uname -X = unknown /bin/arch = unknown /usr/bin/arch -k = unknown /usr/convex/getsysinfo = unknown /usr/bin/hostinfo = unknown /bin/machine = unknown /usr/bin/oslevel = unknown /bin/universe = unknown PATH: /usr/local/bin/ PATH: /usr/local/bin/ PATH: /usr/local/bin PATH: /usr/bin PATH: /bin PATH: /usr/local/games PATH: /usr/games ## ----------- ## ## Core tests. ## ## ----------- ## configure:2499: checking for a BSD-compatible install configure:2567: result: /usr/bin/install -c configure:2578: checking whether build environment is sane configure:2633: result: yes configure:2784: checking for a thread-safe mkdir -p configure:2823: result: /bin/mkdir -p configure:2830: checking for gawk configure:2846: found /usr/bin/gawk configure:2857: result: gawk configure:2868: checking whether make sets $(MAKE) configure:2890: result: yes configure:2919: checking whether make supports nested variables configure:2936: result: yes configure:3064: checking whether to enable maintainer-specific portions of Makefiles configure:3073: result: yes configure:3101: checking for style of include used by make configure:3129: result: GNU configure:3200: checking for gcc configure:3216: found /usr/bin/gcc configure:3227: result: gcc configure:3456: checking for C compiler version configure:3465: gcc --version >&5 gcc (Debian 4.9.2-10) 4.9.2 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. configure:3476: $? = 0 configure:3465: gcc -v >&5 Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.9/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Debian 4.9.2-10' --with-bugurl=file:///usr/share/doc/gcc-4.9/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.9 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.9 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.9-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.9-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.9-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --with-arch-32=i586 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 4.9.2 (Debian 4.9.2-10) configure:3476: $? = 0 configure:3465: gcc -V >&5 gcc: error: unrecognized command line option '-V' gcc: fatal error: no input files compilation terminated. configure:3476: $? = 4 configure:3465: gcc -qversion >&5 gcc: error: unrecognized command line option '-qversion' gcc: fatal error: no input files compilation terminated. configure:3476: $? = 4 configure:3496: checking whether the C compiler works configure:3518: gcc conftest.c >&5 configure:3522: $? = 0 configure:3570: result: yes configure:3573: checking for C compiler default output file name configure:3575: result: a.out configure:3581: checking for suffix of executables configure:3588: gcc -o conftest conftest.c >&5 configure:3592: $? = 0 configure:3614: result: configure:3636: checking whether we are cross compiling configure:3644: gcc -o conftest conftest.c >&5 configure:3648: $? = 0 configure:3655: ./conftest configure:3659: $? = 0 configure:3674: result: no configure:3679: checking for suffix of object files configure:3701: gcc -c conftest.c >&5 configure:3705: $? = 0 configure:3726: result: o configure:3730: checking whether we are using the GNU C compiler configure:3749: gcc -c conftest.c >&5 configure:3749: $? = 0 configure:3758: result: yes configure:3767: checking whether gcc accepts -g configure:3787: gcc -c -g conftest.c >&5 configure:3787: $? = 0 configure:3828: result: yes configure:3845: checking for gcc option to accept ISO C89 configure:3908: gcc -c -g -O2 conftest.c >&5 configure:3908: $? = 0 configure:3921: result: none needed configure:3946: checking whether gcc understands -c and -o together configure:3968: gcc -c conftest.c -o conftest2.o configure:3971: $? = 0 configure:3968: gcc -c conftest.c -o conftest2.o configure:3971: $? = 0 configure:3983: result: yes configure:4002: checking dependency style of gcc configure:4113: result: gcc3 configure:4129: checking for library containing strerror configure:4160: gcc -o conftest -g -O2 conftest.c >&5 configure:4160: $? = 0 configure:4177: result: none required configure:4233: checking for gcc configure:4260: result: gcc configure:4489: checking for C compiler version configure:4498: gcc --version >&5 gcc (Debian 4.9.2-10) 4.9.2 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. configure:4509: $? = 0 configure:4498: gcc -v >&5 Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.9/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Debian 4.9.2-10' --with-bugurl=file:///usr/share/doc/gcc-4.9/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.9 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.9 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.9-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.9-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.9-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --with-arch-32=i586 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 4.9.2 (Debian 4.9.2-10) configure:4509: $? = 0 configure:4498: gcc -V >&5 gcc: error: unrecognized command line option '-V' gcc: fatal error: no input files compilation terminated. configure:4509: $? = 4 configure:4498: gcc -qversion >&5 gcc: error: unrecognized command line option '-qversion' gcc: fatal error: no input files compilation terminated. configure:4509: $? = 4 configure:4513: checking whether we are using the GNU C compiler configure:4541: result: yes configure:4550: checking whether gcc accepts -g configure:4611: result: yes configure:4628: checking for gcc option to accept ISO C89 configure:4704: result: none needed configure:4729: checking whether gcc understands -c and -o together configure:4766: result: yes configure:4785: checking dependency style of gcc configure:4896: result: gcc3 configure:4969: checking for g++ configure:4985: found /usr/bin/g++ configure:4996: result: g++ configure:5023: checking for C++ compiler version configure:5032: g++ --version >&5 g++ (Debian 4.9.2-10) 4.9.2 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. configure:5043: $? = 0 configure:5032: g++ -v >&5 Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.9/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Debian 4.9.2-10' --with-bugurl=file:///usr/share/doc/gcc-4.9/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.9 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.9 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.9-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.9-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.9-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --with-arch-32=i586 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 4.9.2 (Debian 4.9.2-10) configure:5043: $? = 0 configure:5032: g++ -V >&5 g++: error: unrecognized command line option '-V' g++: fatal error: no input files compilation terminated. configure:5043: $? = 4 configure:5032: g++ -qversion >&5 g++: error: unrecognized command line option '-qversion' g++: fatal error: no input files compilation terminated. configure:5043: $? = 4 configure:5047: checking whether we are using the GNU C++ compiler configure:5066: g++ -c conftest.cpp >&5 configure:5066: $? = 0 configure:5075: result: yes configure:5084: checking whether g++ accepts -g configure:5104: g++ -c -g conftest.cpp >&5 configure:5104: $? = 0 configure:5145: result: yes configure:5170: checking dependency style of g++ configure:5281: result: gcc3 configure:5301: checking how to run the C preprocessor configure:5332: gcc -E conftest.c configure:5332: $? = 0 configure:5346: gcc -E conftest.c conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:5346: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define PACKAGE "link-grammar" | #define VERSION "4.7.4" | /* end confdefs.h. */ | #include configure:5371: result: gcc -E configure:5391: gcc -E conftest.c configure:5391: $? = 0 configure:5405: gcc -E conftest.c conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:5405: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define PACKAGE "link-grammar" | #define VERSION "4.7.4" | /* end confdefs.h. */ | #include configure:5434: checking whether ln -s works configure:5438: result: yes configure:5445: checking whether make sets $(MAKE) configure:5467: result: yes configure:5477: checking for grep that handles long lines and -e configure:5535: result: /bin/grep configure:5540: checking for egrep configure:5602: result: /bin/grep -E configure:5607: checking for ANSI C header files configure:5627: gcc -c -g -O2 conftest.c >&5 configure:5627: $? = 0 configure:5700: gcc -o conftest -g -O2 conftest.c >&5 configure:5700: $? = 0 configure:5700: ./conftest configure:5700: $? = 0 configure:5711: result: yes configure:5723: checking build system type configure:5737: result: x86_64-unknown-linux-gnu configure:5757: checking host system type configure:5770: result: x86_64-unknown-linux-gnu configure:6139: checking how to print strings configure:6166: result: printf configure:6187: checking for a sed that does not truncate output configure:6251: result: /bin/sed configure:6269: checking for fgrep configure:6331: result: /bin/grep -F configure:6366: checking for ld used by gcc configure:6433: result: /usr/bin/ld configure:6440: checking if the linker (/usr/bin/ld) is GNU ld configure:6455: result: yes configure:6467: checking for BSD- or MS-compatible name lister (nm) configure:6516: result: /usr/bin/nm -B configure:6646: checking the name lister (/usr/bin/nm -B) interface configure:6653: gcc -c -g -O2 conftest.c >&5 configure:6656: /usr/bin/nm -B "conftest.o" configure:6659: output 0000000000000000 B some_variable configure:6666: result: BSD nm configure:6670: checking the maximum length of command line arguments configure:6801: result: 1572864 configure:6818: checking whether the shell understands some XSI constructs configure:6828: result: yes configure:6832: checking whether the shell understands "+=" configure:6838: result: yes configure:6873: checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format configure:6913: result: func_convert_file_noop configure:6920: checking how to convert x86_64-unknown-linux-gnu file names to toolchain format configure:6940: result: func_convert_file_noop configure:6947: checking for /usr/bin/ld option to reload object files configure:6954: result: -r configure:7028: checking for objdump configure:7055: result: objdump configure:7084: checking how to recognize dependent libraries configure:7282: result: pass_all configure:7367: checking for dlltool configure:7394: result: dlltool configure:7424: checking how to associate runtime and link libraries configure:7451: result: printf %s\n configure:7511: checking for ar configure:7527: found /usr/bin/ar configure:7538: result: ar configure:7575: checking for archiver @FILE support configure:7592: gcc -c -g -O2 conftest.c >&5 configure:7592: $? = 0 configure:7595: ar cru libconftest.a @conftest.lst >&5 configure:7598: $? = 0 configure:7603: ar cru libconftest.a @conftest.lst >&5 ar: conftest.o: No such file or directory configure:7606: $? = 1 configure:7618: result: @ configure:7676: checking for strip configure:7692: found /usr/bin/strip configure:7703: result: strip configure:7775: checking for ranlib configure:7791: found /usr/bin/ranlib configure:7802: result: ranlib configure:7904: checking command to parse /usr/bin/nm -B output from gcc object configure:8024: gcc -c -g -O2 conftest.c >&5 configure:8027: $? = 0 configure:8031: /usr/bin/nm -B conftest.o \| sed -n -e 's/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | sed '/ __gnu_lto/d' \> conftest.nm configure:8034: $? = 0 configure:8100: gcc -o conftest -g -O2 conftest.c conftstm.o >&5 configure:8103: $? = 0 configure:8141: result: ok configure:8178: checking for sysroot configure:8208: result: no configure:8285: gcc -c -g -O2 conftest.c >&5 configure:8288: $? = 0 configure:8477: checking for mt configure:8493: found /bin/mt configure:8504: result: mt configure:8527: checking if mt is a manifest tool configure:8533: mt '-?' configure:8541: result: no configure:9183: checking for sys/types.h configure:9183: gcc -c -g -O2 conftest.c >&5 configure:9183: $? = 0 configure:9183: result: yes configure:9183: checking for sys/stat.h configure:9183: gcc -c -g -O2 conftest.c >&5 configure:9183: $? = 0 configure:9183: result: yes configure:9183: checking for stdlib.h configure:9183: gcc -c -g -O2 conftest.c >&5 configure:9183: $? = 0 configure:9183: result: yes configure:9183: checking for string.h configure:9183: gcc -c -g -O2 conftest.c >&5 configure:9183: $? = 0 configure:9183: result: yes configure:9183: checking for memory.h configure:9183: gcc -c -g -O2 conftest.c >&5 configure:9183: $? = 0 configure:9183: result: yes configure:9183: checking for strings.h configure:9183: gcc -c -g -O2 conftest.c >&5 configure:9183: $? = 0 configure:9183: result: yes configure:9183: checking for inttypes.h configure:9183: gcc -c -g -O2 conftest.c >&5 configure:9183: $? = 0 configure:9183: result: yes configure:9183: checking for stdint.h configure:9183: gcc -c -g -O2 conftest.c >&5 configure:9183: $? = 0 configure:9183: result: yes configure:9183: checking for unistd.h configure:9183: gcc -c -g -O2 conftest.c >&5 configure:9183: $? = 0 configure:9183: result: yes configure:9197: checking for dlfcn.h configure:9197: gcc -c -g -O2 conftest.c >&5 configure:9197: $? = 0 configure:9197: result: yes configure:9412: checking for objdir configure:9427: result: .libs configure:9698: checking if gcc supports -fno-rtti -fno-exceptions configure:9716: gcc -c -g -O2 -fno-rtti -fno-exceptions conftest.c >&5 cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C configure:9720: $? = 0 configure:9733: result: no configure:10060: checking for gcc option to produce PIC configure:10067: result: -fPIC -DPIC configure:10075: checking if gcc PIC flag -fPIC -DPIC works configure:10093: gcc -c -g -O2 -fPIC -DPIC -DPIC conftest.c >&5 configure:10097: $? = 0 configure:10110: result: yes configure:10139: checking if gcc static flag -static works configure:10167: result: yes configure:10182: checking if gcc supports -c -o file.o configure:10203: gcc -c -g -O2 -o out/conftest2.o conftest.c >&5 configure:10207: $? = 0 configure:10229: result: yes configure:10237: checking if gcc supports -c -o file.o configure:10284: result: yes configure:10317: checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries configure:11474: result: yes configure:11511: checking whether -lc should be explicitly linked in configure:11519: gcc -c -g -O2 conftest.c >&5 configure:11522: $? = 0 configure:11537: gcc -shared -fPIC -DPIC conftest.o -v -Wl,-soname -Wl,conftest -o conftest 2\>\&1 \| /bin/grep -lc \>/dev/null 2\>\&1 configure:11540: $? = 0 configure:11554: result: no configure:11714: checking dynamic linker characteristics configure:12214: gcc -o conftest -g -O2 -Wl,-rpath -Wl,/foo conftest.c >&5 configure:12214: $? = 0 configure:12448: result: GNU/Linux ld.so configure:12555: checking how to hardcode library paths into programs configure:12580: result: immediate configure:13120: checking whether stripping libraries is possible configure:13125: result: yes configure:13160: checking if libtool supports shared libraries configure:13162: result: yes configure:13165: checking whether to build shared libraries configure:13186: result: yes configure:13189: checking whether to build static libraries configure:13193: result: yes configure:13216: checking how to run the C++ preprocessor configure:13243: g++ -E conftest.cpp configure:13243: $? = 0 configure:13257: g++ -E conftest.cpp conftest.cpp:23:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:13257: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define PACKAGE "link-grammar" | #define VERSION "4.7.4" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | /* end confdefs.h. */ | #include configure:13282: result: g++ -E configure:13302: g++ -E conftest.cpp configure:13302: $? = 0 configure:13316: g++ -E conftest.cpp conftest.cpp:23:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:13316: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define PACKAGE "link-grammar" | #define VERSION "4.7.4" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | /* end confdefs.h. */ | #include configure:13485: checking for ld used by g++ configure:13552: result: /usr/bin/ld -m elf_x86_64 configure:13559: checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld configure:13574: result: yes configure:13629: checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries configure:14631: result: yes configure:14667: g++ -c -g -O2 conftest.cpp >&5 configure:14670: $? = 0 configure:15190: checking for g++ option to produce PIC configure:15197: result: -fPIC -DPIC configure:15205: checking if g++ PIC flag -fPIC -DPIC works configure:15223: g++ -c -g -O2 -fPIC -DPIC -DPIC conftest.cpp >&5 configure:15227: $? = 0 configure:15240: result: yes configure:15263: checking if g++ static flag -static works configure:15291: result: yes configure:15303: checking if g++ supports -c -o file.o configure:15324: g++ -c -g -O2 -o out/conftest2.o conftest.cpp >&5 configure:15328: $? = 0 configure:15350: result: yes configure:15355: checking if g++ supports -c -o file.o configure:15402: result: yes configure:15432: checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries configure:15471: result: yes configure:15612: checking dynamic linker characteristics configure:16280: result: GNU/Linux ld.so configure:16333: checking how to hardcode library paths into programs configure:16358: result: immediate configure:16439: checking for /proc/self/maps configure:16452: result: yes configure:16458: checking whether everything is installed to the same prefix configure:16474: result: no configure:16477: checking whether binary relocation support should be enabled configure:16495: result: no configure:16638: checking for pkg-config configure:16656: found /usr/bin/pkg-config configure:16668: result: /usr/bin/pkg-config configure:16693: checking pkg-config is at least version 0.9.0 configure:16696: result: yes configure:16705: checking for an ANSI C-conforming const configure:16771: gcc -c -g -O2 conftest.c >&5 configure:16771: $? = 0 configure:16778: result: yes configure:16789: checking for towupper configure:16789: gcc -o conftest -g -O2 conftest.c >&5 conftest.c:46:6: warning: conflicting types for built-in function 'towupper' char towupper (); ^ configure:16789: $? = 0 configure:16789: result: yes configure:16800: checking for native Win32 configure:16810: result: no configure:17119: checking for ASPELL configure:17126: $PKG_CONFIG --exists --print-errors "aspell" Package aspell was not found in the pkg-config search path. Perhaps you should add the directory containing `aspell.pc' to the PKG_CONFIG_PATH environment variable No package 'aspell' found configure:17129: $? = 1 configure:17143: $PKG_CONFIG --exists --print-errors "aspell" Package aspell was not found in the pkg-config search path. Perhaps you should add the directory containing `aspell.pc' to the PKG_CONFIG_PATH environment variable No package 'aspell' found configure:17146: $? = 1 configure:17160: result: no No package 'aspell' found configure:17190: checking aspell.h usability configure:17190: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE conftest.c >&5 conftest.c:58:20: fatal error: aspell.h: No such file or directory #include ^ compilation terminated. configure:17190: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define PACKAGE "link-grammar" | #define VERSION "4.7.4" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | #define HAVE_TOWUPPER 1 | #define DEBUG_MEMORY 0 | /* end confdefs.h. */ | #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 | #include configure:17190: result: no configure:17190: checking aspell.h presence configure:17190: gcc -E conftest.c conftest.c:25:20: fatal error: aspell.h: No such file or directory #include ^ compilation terminated. configure:17190: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define PACKAGE "link-grammar" | #define VERSION "4.7.4" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | #define HAVE_TOWUPPER 1 | #define DEBUG_MEMORY 0 | /* end confdefs.h. */ | #include configure:17190: result: no configure:17190: checking for aspell.h configure:17190: result: no configure:17198: checking for new_aspell_config in -laspell configure:17223: gcc -o conftest -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE conftest.c -laspell >&5 /usr/bin/ld: cannot find -laspell collect2: error: ld returned 1 exit status configure:17223: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define PACKAGE "link-grammar" | #define VERSION "4.7.4" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | #define HAVE_TOWUPPER 1 | #define DEBUG_MEMORY 0 | /* 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 new_aspell_config (); | int | main () | { | return new_aspell_config (); | ; | return 0; | } configure:17232: result: no configure:17275: checking for HUNSPELL configure:17282: $PKG_CONFIG --exists --print-errors "hunspell" Package hunspell was not found in the pkg-config search path. Perhaps you should add the directory containing `hunspell.pc' to the PKG_CONFIG_PATH environment variable No package 'hunspell' found configure:17285: $? = 1 configure:17299: $PKG_CONFIG --exists --print-errors "hunspell" Package hunspell was not found in the pkg-config search path. Perhaps you should add the directory containing `hunspell.pc' to the PKG_CONFIG_PATH environment variable No package 'hunspell' found configure:17302: $? = 1 configure:17316: result: no No package 'hunspell' found configure:17346: checking hunspell.h usability configure:17346: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE conftest.c >&5 conftest.c:58:22: fatal error: hunspell.h: No such file or directory #include ^ compilation terminated. configure:17346: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define PACKAGE "link-grammar" | #define VERSION "4.7.4" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | #define HAVE_TOWUPPER 1 | #define DEBUG_MEMORY 0 | /* end confdefs.h. */ | #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 | #include configure:17346: result: no configure:17346: checking hunspell.h presence configure:17346: gcc -E conftest.c conftest.c:25:22: fatal error: hunspell.h: No such file or directory #include ^ compilation terminated. configure:17346: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define PACKAGE "link-grammar" | #define VERSION "4.7.4" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | #define HAVE_TOWUPPER 1 | #define DEBUG_MEMORY 0 | /* end confdefs.h. */ | #include configure:17346: result: no configure:17346: checking for hunspell.h configure:17346: result: no configure:17394: checking locale.h usability configure:17394: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE conftest.c >&5 configure:17394: $? = 0 configure:17394: result: yes configure:17394: checking locale.h presence configure:17394: gcc -E conftest.c configure:17394: $? = 0 configure:17394: result: yes configure:17394: checking for locale.h configure:17394: result: yes configure:17405: checking for LC_MESSAGES configure:17421: gcc -o conftest -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE conftest.c >&5 configure:17421: $? = 0 configure:17429: result: yes configure:17441: checking for LIBEDIT configure:17448: $PKG_CONFIG --exists --print-errors "libedit" Package libedit was not found in the pkg-config search path. Perhaps you should add the directory containing `libedit.pc' to the PKG_CONFIG_PATH environment variable No package 'libedit' found configure:17451: $? = 1 configure:17465: $PKG_CONFIG --exists --print-errors "libedit" Package libedit was not found in the pkg-config search path. Perhaps you should add the directory containing `libedit.pc' to the PKG_CONFIG_PATH environment variable No package 'libedit' found configure:17468: $? = 1 configure:17482: result: no No package 'libedit' found configure:17535: checking regex.h usability configure:17535: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE conftest.c >&5 configure:17535: $? = 0 configure:17535: result: yes configure:17535: checking regex.h presence configure:17535: gcc -E conftest.c configure:17535: $? = 0 configure:17535: result: yes configure:17535: checking for regex.h configure:17535: result: yes configure:17546: checking for regexec configure:17546: gcc -o conftest -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE conftest.c >&5 configure:17546: $? = 0 configure:17546: result: yes configure:17619: checking for supported warning flags configure:17641: checking whether gcc supports -Wall configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wall conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wextra configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wextra conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wsign-compare configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wsign-compare conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Werror-implicit-function-declaration configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Werror-implicit-function-declaration conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wpointer-arith configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wpointer-arith conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wwrite-strings configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wwrite-strings conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wstrict-prototypes configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wstrict-prototypes conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wmissing-prototypes configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wmissing-prototypes conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wmissing-declarations configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wmissing-declarations conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wnested-externs configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wnested-externs conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wpacked configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wpacked conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wswitch-enum configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wswitch-enum conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wmissing-format-attribute configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wmissing-format-attribute conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wstrict-aliasing=2 configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wstrict-aliasing=2 conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Winit-self configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Winit-self conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wunsafe-loop-optimizations configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wunsafe-loop-optimizations conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wdeclaration-after-statement configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wdeclaration-after-statement conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wold-style-definition configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wold-style-definition conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wno-missing-field-initializers configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wno-missing-field-initializers conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wno-unused-parameter configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wno-unused-parameter conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wno-attributes configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wno-attributes conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Wno-long-long configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Wno-long-long conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17641: checking whether gcc supports -Winline configure:17651: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -Winline conftest.c >&5 configure:17651: $? = 0 configure:17664: result: yes configure:17672: checking which warning flags were supported configure:17675: result: -Wall -Wextra -Wsign-compare -Werror-implicit-function-declaration -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wpacked -Wswitch-enum -Wmissing-format-attribute -Wstrict-aliasing=2 -Winit-self -Wunsafe-loop-optimizations -Wdeclaration-after-statement -Wold-style-definition -Wno-missing-field-initializers -Wno-unused-parameter -Wno-attributes -Wno-long-long -Winline configure:17690: checking whether gcc supports -fno-strict-aliasing configure:17700: gcc -c -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -fno-strict-aliasing conftest.c >&5 configure:17700: $? = 0 configure:17713: result: yes configure:17754: checking for jni.h configure:17760: gcc -E conftest.c conftest.c:28:17: fatal error: jni.h: No such file or directory #include ^ compilation terminated. configure:17760: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define PACKAGE "link-grammar" | #define VERSION "4.7.4" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | #define HAVE_TOWUPPER 1 | #define DEBUG_MEMORY 0 | #define HAVE_LOCALE_H 1 | #define HAVE_LC_MESSAGES 1 | #define HAVE_REGEXEC 1 | /* end confdefs.h. */ | #include configure:17768: WARNING: Can't find jni.h header in standard locations, trying again with -I /include -I /include/freebsd -I /include/linux -I /include/win32 -I /Headers -I /include -I /include/freebsd -I /include/linux -I /include/win32 -I /Headers -I/usr/include/classpath/ -I/usr/local/jdk1.6.0/include/ -I/usr/local/jdk1.6.0/include/freebsd -I/usr/local/jdk1.6.0/include/linux -I/usr/lib/jvm/java-6-sun/include/ -I/usr/lib/jvm/java-6-sun/include/freebsd -I/usr/lib/jvm/java-6-sun/include/linux -I/usr/lib/j2sdk1.6-ibm/include -I/usr/lib/j2sdk1.6-ibm/include/freebsd -I/usr/lib/j2sdk1.6-ibm/include/linux -I/opt/jdk1.5/include/ -I/opt/jdk1.5/include/freebsd -I/opt/jdk1.5/include/linux -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.15/include -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.15/include/freebsd -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.15/include/linux -I/c/java/jdk1.6.0/include/ -I/c/java/jdk1.6.0/include/win32/ -I/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/JavaVM.framework/Headers/ -I/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/JavaVM.framework/Headers/ configure:17774: gcc -E -I /include -I /include/freebsd -I /include/linux -I /include/win32 -I /Headers -I /include -I /include/freebsd -I /include/linux -I /include/win32 -I /Headers -I/usr/include/classpath/ -I/usr/local/jdk1.6.0/include/ -I/usr/local/jdk1.6.0/include/freebsd -I/usr/local/jdk1.6.0/include/linux -I/usr/lib/jvm/java-6-sun/include/ -I/usr/lib/jvm/java-6-sun/include/freebsd -I/usr/lib/jvm/java-6-sun/include/linux -I/usr/lib/j2sdk1.6-ibm/include -I/usr/lib/j2sdk1.6-ibm/include/freebsd -I/usr/lib/j2sdk1.6-ibm/include/linux -I/opt/jdk1.5/include/ -I/opt/jdk1.5/include/freebsd -I/opt/jdk1.5/include/linux -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.15/include -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.15/include/freebsd -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.15/include/linux -I/c/java/jdk1.6.0/include/ -I/c/java/jdk1.6.0/include/win32/ -I/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/JavaVM.framework/Headers/ -I/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/JavaVM.framework/Headers/ conftest.c conftest.c:28:17: fatal error: jni.h: No such file or directory #include ^ compilation terminated. configure:17774: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define PACKAGE "link-grammar" | #define VERSION "4.7.4" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | #define HAVE_TOWUPPER 1 | #define DEBUG_MEMORY 0 | #define HAVE_LOCALE_H 1 | #define HAVE_LC_MESSAGES 1 | #define HAVE_REGEXEC 1 | /* end confdefs.h. */ | #include configure:17779: WARNING: cannot find jni.h header, needed for Java bindings support. configure:17966: checking that generated files are newer than configure configure:17972: result: done configure:18067: creating ./config.status ## ---------------------- ## ## Running config.status. ## ## ---------------------- ## This file was extended by config.status, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = CONFIG_HEADERS = CONFIG_LINKS = CONFIG_COMMANDS = $ ./config.status on kh config.status:1138: creating Makefile config.status:1138: creating build.xml config.status:1138: creating link-grammar.pc config.status:1138: creating link-grammar.spec config.status:1138: creating link-grammar/Makefile config.status:1138: creating link-grammar/corpus/Makefile config.status:1138: creating link-grammar/minisat/Makefile config.status:1138: creating link-grammar/sat-solver/Makefile config.status:1138: creating link-grammar/link-features.h config.status:1138: creating data/Makefile config.status:1138: creating data/de/Makefile config.status:1138: creating data/en/Makefile config.status:1138: creating data/en/words/Makefile config.status:1138: creating data/lt/Makefile config.status:1138: creating man/Makefile config.status:1138: creating autopackage/default.apspec config.status:1138: creating link-grammar.xcode/Makefile config.status:1138: creating msvc6/Makefile config.status:1138: creating msvc6/link_grammar_dll/Makefile config.status:1138: creating msvc6/link_grammar_exe/Makefile config.status:1138: creating msvc6/link_grammar_java_dll/Makefile config.status:1138: creating msvc9/Makefile config.status:1310: executing depfiles commands config.status:1310: executing libtool commands ## ---------------- ## ## Cache variables. ## ## ---------------- ## ac_cv_build=x86_64-unknown-linux-gnu ac_cv_c_compiler_gnu=yes ac_cv_c_const=yes ac_cv_cxx_compiler_gnu=yes ac_cv_env_ASPELL_CFLAGS_set= ac_cv_env_ASPELL_CFLAGS_value= ac_cv_env_ASPELL_LIBS_set= ac_cv_env_ASPELL_LIBS_value= ac_cv_env_CCC_set= ac_cv_env_CCC_value= ac_cv_env_CC_set= ac_cv_env_CC_value= ac_cv_env_CFLAGS_set= ac_cv_env_CFLAGS_value= ac_cv_env_CPPFLAGS_set= ac_cv_env_CPPFLAGS_value= ac_cv_env_CPP_set= ac_cv_env_CPP_value= ac_cv_env_CXXCPP_set= ac_cv_env_CXXCPP_value= ac_cv_env_CXXFLAGS_set= ac_cv_env_CXXFLAGS_value= ac_cv_env_CXX_set= ac_cv_env_CXX_value= ac_cv_env_HUNSPELL_CFLAGS_set= ac_cv_env_HUNSPELL_CFLAGS_value= ac_cv_env_HUNSPELL_LIBS_set= ac_cv_env_HUNSPELL_LIBS_value= ac_cv_env_LDFLAGS_set= ac_cv_env_LDFLAGS_value= ac_cv_env_LIBEDIT_CFLAGS_set= ac_cv_env_LIBEDIT_CFLAGS_value= ac_cv_env_LIBEDIT_LIBS_set= ac_cv_env_LIBEDIT_LIBS_value= ac_cv_env_LIBS_set= ac_cv_env_LIBS_value= ac_cv_env_PKG_CONFIG_LIBDIR_set= ac_cv_env_PKG_CONFIG_LIBDIR_value= ac_cv_env_PKG_CONFIG_PATH_set= ac_cv_env_PKG_CONFIG_PATH_value= ac_cv_env_PKG_CONFIG_set= ac_cv_env_PKG_CONFIG_value= ac_cv_env_SQLITE3_CFLAGS_set= ac_cv_env_SQLITE3_CFLAGS_value= ac_cv_env_SQLITE3_LIBS_set= ac_cv_env_SQLITE3_LIBS_value= ac_cv_env_build_alias_set= ac_cv_env_build_alias_value= ac_cv_env_host_alias_set= ac_cv_env_host_alias_value= ac_cv_env_target_alias_set= ac_cv_env_target_alias_value= ac_cv_file__proc_self_maps=yes ac_cv_func_regexec=yes ac_cv_func_towupper=yes ac_cv_header_aspell_h=no ac_cv_header_dlfcn_h=yes ac_cv_header_hunspell_h=no ac_cv_header_inttypes_h=yes ac_cv_header_locale_h=yes ac_cv_header_memory_h=yes ac_cv_header_regex_h=yes ac_cv_header_stdc=yes ac_cv_header_stdint_h=yes ac_cv_header_stdlib_h=yes ac_cv_header_string_h=yes ac_cv_header_strings_h=yes ac_cv_header_sys_stat_h=yes ac_cv_header_sys_types_h=yes ac_cv_header_unistd_h=yes ac_cv_host=x86_64-unknown-linux-gnu ac_cv_lib_aspell_new_aspell_config=no ac_cv_objext=o ac_cv_path_EGREP='/bin/grep -E' ac_cv_path_FGREP='/bin/grep -F' ac_cv_path_GREP=/bin/grep ac_cv_path_SED=/bin/sed ac_cv_path_ac_pt_PKG_CONFIG=/usr/bin/pkg-config ac_cv_path_install='/usr/bin/install -c' ac_cv_path_mkdir=/bin/mkdir ac_cv_prog_AWK=gawk ac_cv_prog_CPP='gcc -E' ac_cv_prog_CXXCPP='g++ -E' ac_cv_prog_ac_ct_AR=ar ac_cv_prog_ac_ct_CC=gcc ac_cv_prog_ac_ct_CXX=g++ ac_cv_prog_ac_ct_DLLTOOL=dlltool ac_cv_prog_ac_ct_MANIFEST_TOOL=mt ac_cv_prog_ac_ct_OBJDUMP=objdump ac_cv_prog_ac_ct_RANLIB=ranlib ac_cv_prog_ac_ct_STRIP=strip ac_cv_prog_cc_c89= ac_cv_prog_cc_g=yes ac_cv_prog_cxx_g=yes ac_cv_prog_make_make_set=yes ac_cv_search_strerror='none required' am_cv_CC_dependencies_compiler_type=gcc3 am_cv_CXX_dependencies_compiler_type=gcc3 am_cv_make_support_nested_variables=yes am_cv_prog_cc_c_o=yes am_cv_val_LC_MESSAGES=yes br_cv_binreloc=no br_cv_valid_prefixes=no link_cv_warn_cflags=' -Wall -Wextra -Wsign-compare -Werror-implicit-function-declaration -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wpacked -Wswitch-enum -Wmissing-format-attribute -Wstrict-aliasing=2 -Winit-self -Wunsafe-loop-optimizations -Wdeclaration-after-statement -Wold-style-definition -Wno-missing-field-initializers -Wno-unused-parameter -Wno-attributes -Wno-long-long -Winline' link_cv_warn_maybe='-Wall -Wextra -Wsign-compare -Werror-implicit-function-declaration -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wpacked -Wswitch-enum -Wmissing-format-attribute -Wstrict-aliasing=2 -Winit-self -Wunsafe-loop-optimizations -Wdeclaration-after-statement -Wold-style-definition -Wno-missing-field-initializers -Wno-unused-parameter -Wno-attributes -Wno-long-long -Winline' lt_cv_ar_at_file=@ lt_cv_archive_cmds_need_lc=no lt_cv_deplibs_check_method=pass_all lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_ld_reload_flag=-r lt_cv_nm_interface='BSD nm' lt_cv_objdir=.libs lt_cv_path_LD=/usr/bin/ld lt_cv_path_LDCXX='/usr/bin/ld -m elf_x86_64' lt_cv_path_NM='/usr/bin/nm -B' lt_cv_path_mainfest_tool=no lt_cv_prog_compiler_c_o=yes lt_cv_prog_compiler_c_o_CXX=yes lt_cv_prog_compiler_pic='-fPIC -DPIC' lt_cv_prog_compiler_pic_CXX='-fPIC -DPIC' lt_cv_prog_compiler_pic_works=yes lt_cv_prog_compiler_pic_works_CXX=yes lt_cv_prog_compiler_rtti_exceptions=no lt_cv_prog_compiler_static_works=yes lt_cv_prog_compiler_static_works_CXX=yes lt_cv_prog_gnu_ld=yes lt_cv_prog_gnu_ldcxx=yes lt_cv_sharedlib_from_linklib_cmd='printf %s\n' lt_cv_shlibpath_overrides_runpath=no lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\''' lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\''' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\''' lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' lt_cv_sys_max_cmd_len=1572864 lt_cv_to_host_file_cmd=func_convert_file_noop lt_cv_to_tool_file_cmd=func_convert_file_noop ## ----------------- ## ## Output variables. ## ## ----------------- ## ACLOCAL='${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing aclocal-1.14' AMDEPBACKSLASH='\' AMDEP_FALSE='#' AMDEP_TRUE='' AMTAR='$${TAR-tar}' AM_BACKSLASH='\' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' AM_DEFAULT_VERBOSITY='1' AM_V='$(V)' AR='ar' AS='as' ASPELL_CFLAGS='' ASPELL_LIBS='' AUTOCONF='${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing autoconf' AUTOHEADER='${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing autoheader' AUTOMAKE='${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing automake-1.14' AWK='gawk' BINRELOC_CFLAGS='' BINRELOC_LIBS='' CC='gcc' CCDEPMODE='depmode=gcc3' CFLAGS='-g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE' CPP='gcc -E' CPPFLAGS='' CXX='g++' CXXCPP='g++ -E' CXXDEPMODE='depmode=gcc3' CXXFLAGS='-g -O2' CYGPATH_W='echo' DEFS='-DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"link-grammar\" -DVERSION=\"4.7.4\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_TOWUPPER=1 -DDEBUG_MEMORY=0 -DHAVE_LOCALE_H=1 -DHAVE_LC_MESSAGES=1 -DHAVE_REGEXEC=1' DEPDIR='.deps' DLLTOOL='dlltool' DSYMUTIL='' DUMPBIN='' ECHO_C='' ECHO_N='-n' ECHO_T='' EGREP='/bin/grep -E' EXEEXT='' FGREP='/bin/grep -F' GREP='/bin/grep' HAVE_ASPELL_FALSE='' HAVE_ASPELL_TRUE='#' HAVE_EDITLINE_FALSE='' HAVE_EDITLINE_TRUE='#' HAVE_HUNSPELL_FALSE='' HAVE_HUNSPELL_TRUE='#' HAVE_JAVA_FALSE='' HAVE_JAVA_TRUE='#' HAVE_SQLITE_FALSE='' HAVE_SQLITE_TRUE='#' HUNSPELL_CFLAGS='' HUNSPELL_LIBS='' INSTALL_DATA='${INSTALL} -m 644' INSTALL_PROGRAM='${INSTALL}' INSTALL_SCRIPT='${INSTALL}' INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' LD='/usr/bin/ld -m elf_x86_64' LDFLAGS='' LIBEDIT_CFLAGS='' LIBEDIT_LIBS='' LIBOBJS='' LIBS='' LIBTOOL='$(SHELL) $(top_builddir)/libtool' LINK_CFLAGS=' -Wall -Wextra -Wsign-compare -Werror-implicit-function-declaration -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wpacked -Wswitch-enum -Wmissing-format-attribute -Wstrict-aliasing=2 -Winit-self -Wunsafe-loop-optimizations -Wdeclaration-after-statement -Wold-style-definition -Wno-missing-field-initializers -Wno-unused-parameter -Wno-attributes -Wno-long-long -Winline -fno-strict-aliasing' LINK_MAJOR_VERSION='4' LINK_MICRO_VERSION='4' LINK_MINOR_VERSION='7' LIPO='' LN_S='ln -s' LTLIBOBJS='' MAINT='' MAINTAINER_MODE_FALSE='#' MAINTAINER_MODE_TRUE='' MAKEINFO='${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing makeinfo' MANIFEST_TOOL=':' MKDIR_P='/bin/mkdir -p' NM='/usr/bin/nm -B' NMEDIT='' OBJDUMP='objdump' OBJEXT='o' OS_WIN32_FALSE='' OS_WIN32_TRUE='#' OTOOL64='' OTOOL='' PACKAGE='link-grammar' PACKAGE_BUGREPORT='' PACKAGE_NAME='' PACKAGE_STRING='' PACKAGE_TARNAME='' PACKAGE_URL='' PACKAGE_VERSION='' PATH_SEPARATOR=':' PKG_CONFIG='/usr/bin/pkg-config' PKG_CONFIG_LIBDIR='' PKG_CONFIG_PATH='' RANLIB='ranlib' REGEX_LIBS='' SED='/bin/sed' SET_MAKE='' SHELL='/bin/bash' SQLITE3_CFLAGS='' SQLITE3_LIBS='' STRIP='strip' VERSION='4.7.4' VERSION_INFO='11:4:7' WITH_ASPELL_FALSE='#' WITH_ASPELL_TRUE='' WITH_BINRELOC_FALSE='' WITH_BINRELOC_TRUE='#' WITH_CORPUS_FALSE='' WITH_CORPUS_TRUE='#' WITH_HUNSPELL_FALSE='#' WITH_HUNSPELL_TRUE='' WITH_PTHREADS_FALSE='' WITH_PTHREADS_TRUE='#' WITH_SAT_SOLVER_FALSE='' WITH_SAT_SOLVER_TRUE='#' ac_ct_AR='ar' ac_ct_CC='gcc' ac_ct_CXX='g++' ac_ct_DUMPBIN='' am__EXEEXT_FALSE='' am__EXEEXT_TRUE='#' am__fastdepCC_FALSE='#' am__fastdepCC_TRUE='' am__fastdepCXX_FALSE='#' am__fastdepCXX_TRUE='' am__include='include' am__isrc='' am__leading_dot='.' am__nodep='_no' am__quote='' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' bindir='${exec_prefix}/bin' build='x86_64-unknown-linux-gnu' build_alias='' build_cpu='x86_64' build_os='linux-gnu' build_vendor='unknown' datadir='${datarootdir}' datarootdir='${prefix}/share' docdir='${datarootdir}/doc/${PACKAGE}' dvidir='${docdir}' exec_prefix='${prefix}' host='x86_64-unknown-linux-gnu' host_alias='' host_cpu='x86_64' host_os='linux-gnu' host_vendor='unknown' htmldir='${docdir}' includedir='${prefix}/include' infodir='${datarootdir}/info' install_sh='${SHELL} /home/wookey/debian/NMU/git/link-grammar/install-sh' libdir='${exec_prefix}/lib' libexecdir='${exec_prefix}/libexec' localedir='${datarootdir}/locale' localstatedir='${prefix}/var' mandir='${datarootdir}/man' mkdir_p='$(MKDIR_P)' oldincludedir='/usr/include' pdfdir='${docdir}' prefix='/usr/local' program_transform_name='s,x,x,' psdir='${docdir}' sbindir='${exec_prefix}/sbin' sharedstatedir='${prefix}/com' sysconfdir='${prefix}/etc' target_alias='' ## ----------- ## ## confdefs.h. ## ## ----------- ## /* confdefs.h */ #define PACKAGE_NAME "" #define PACKAGE_TARNAME "" #define PACKAGE_VERSION "" #define PACKAGE_STRING "" #define PACKAGE_BUGREPORT "" #define PACKAGE_URL "" #define PACKAGE "link-grammar" #define VERSION "4.7.4" #define STDC_HEADERS 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_SYS_STAT_H 1 #define HAVE_STDLIB_H 1 #define HAVE_STRING_H 1 #define HAVE_MEMORY_H 1 #define HAVE_STRINGS_H 1 #define HAVE_INTTYPES_H 1 #define HAVE_STDINT_H 1 #define HAVE_UNISTD_H 1 #define HAVE_DLFCN_H 1 #define LT_OBJDIR ".libs/" #define HAVE_TOWUPPER 1 #define DEBUG_MEMORY 0 #define HAVE_LOCALE_H 1 #define HAVE_LC_MESSAGES 1 #define HAVE_REGEXEC 1 configure: exit 0 link-grammar/TODO0000644000000000000000000000033412536650432011023 0ustar List of ideas for possible improvements: ---------------------------------------- * Use wordnet to reduce the number for parses for sentences containing compound verb phrases, such as "give up", "give off", etc. link-grammar/configure.in0000644000000000000000000003611212536650432012647 0ustar AC_INIT(link-grammar/link-parser.c) dnl Set release number dnl This is derived from "Versioning" chapter of info libtool documentation. PACKAGE=link-grammar dnl 4a) Increment when removing or changing interfaces. LINK_MAJOR_VERSION=4 dnl 4a) 5) Increment when adding interfaces. dnl 6) Set to zero when removing or changing interfaces. LINK_MINOR_VERSION=7 dnl 3) Increment when interfaces not changed at all, dnl only bug fixes or internal changes made. dnl 4b) Set to zero when adding, removing or changing interfaces. LINK_MICRO_VERSION=4 dnl dnl Set this too MAJOR_VERSION_PLUS_MINOR_VERSION=`expr $LINK_MAJOR_VERSION + $LINK_MINOR_VERSION` dnl VERSION=$LINK_MAJOR_VERSION.$LINK_MINOR_VERSION.$LINK_MICRO_VERSION dnl Version info for libraries = CURRENT:REVISION:AGE VERSION_INFO=$MAJOR_VERSION_PLUS_MINOR_VERSION:$LINK_MICRO_VERSION:$LINK_MINOR_VERSION AC_SUBST(VERSION_INFO) AC_SUBST(LINK_MAJOR_VERSION) AC_SUBST(LINK_MINOR_VERSION) AC_SUBST(LINK_MICRO_VERSION) AM_INIT_AUTOMAKE($PACKAGE, $VERSION) AM_MAINTAINER_MODE AC_CONFIG_MACRO_DIR([m4]) dnl Checks for programs. AC_ISC_POSIX AC_PROG_CC AC_PROG_CXX AC_PROG_CPP AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET AC_STDC_HEADERS AC_LIBTOOL_WIN32_DLL AM_PROG_LIBTOOL AM_BINRELOC PKG_PROG_PKG_CONFIG AC_C_CONST AC_CHECK_FUNCS(towupper) dnl ==================================================================== AC_MSG_CHECKING([for native Win32]) case "$host" in *-*-mingw*) native_win32=yes ;; *) native_win32=no ;; esac AC_MSG_RESULT([$native_win32]) AM_CONDITIONAL(OS_WIN32, test "x$native_win32" = "xyes") dnl ==================================================================== # The std=c99 flag provides the proper float-pt math decls working, # e.g. fmaxf However, it also undefined _BSD_SOURCE, etc which is # needed to get fileno, strdup, etc. and so it needs to be manually # enabled again. # Setting -D_POSIX_SOURCE messes up compilation on FreeBSD by # hiding strdup, etc. again. # CFLAGS="${CFLAGS} -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_POSIX_C_SOURCE -D_GNU_SOURCE" # Final solution: enable std=c99, explitictly turn on BSD and SVID and # GNU, but do NOT turn on POSIX. # if test x${native_win32} = xyes; then # Vikas says that -std=gnu99 is needed on cygwin/mingw CFLAGS="${CFLAGS} -std=gnu99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE" # Also -- Vikas sets MINGW explicitly, as well as assorted paths. # I'm unclear as to why these are not being set automatically, # by mingw itself .. but what the hey ... this can't hurt, right? # Oh yes it can hurt, do not set these at all. # Setting these screws up the remainder of the configure script. # CFLAGS="${CFLAGS} -I/usr/include/mingw -D__MINGW32__" # LDFLAGS="${LDFLAGS} -L/usr/lib/mingw -lmingwex -lcrtdll -lmsvcrt -lc -Wl,--allow-multiple-definition" else # Else standard Linux/*BSD environment. CFLAGS="${CFLAGS} -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE" fi dnl ==================================================================== AM_CONDITIONAL(WITH_BINRELOC, test "x$br_cv_binreloc" = "xyes") AC_ARG_ENABLE( debug, [ --enable-debug compile with debugging flags set], CFLAGS="${CFLAGS} -g" LDFLAGS="${LDFLAGS} -g" AC_DEFINE(DEBUG_MEMORY,1), AC_DEFINE(DEBUG_MEMORY,0) ) AC_ARG_ENABLE( mudflap, [ --enable-mudflap compile with mudflap checking], CFLAGS="${CFLAGS} -fmudflap" LDFLAGS="${LDFLAGS} -fmudflap -lmudflap") AC_ARG_ENABLE( profile, [ --enable-profile compile with profiling set], CFLAGS="${CFLAGS} -pg" LDFLAGS="${LDFLAGS} -pg") do_pth=no AC_ARG_ENABLE( pthreads, [ --enable-pthreads compile with pthread support], CPPFLAGS="${CPPFLAGS} -DUSE_PTHREADS=1" do_pth=yes) AM_CONDITIONAL(WITH_PTHREADS, test x${do_pth} = xyes) do_java=yes AC_ARG_ENABLE( java-bindings, [ --disable-java-bindings disable build of java bindings], do_java="no") buildSAT=no AC_ARG_ENABLE( sat-solver, [ --enable-sat-solver use the boolean SAT solver], CPPFLAGS="${CPPFLAGS} -DUSE_SAT_SOLVER=1" buildSAT=yes) AM_CONDITIONAL(WITH_SAT_SOLVER, test x${buildSAT} = xyes) buildcorpus=no AC_ARG_ENABLE( corpus-stats, [ --enable-corpus-stats use corpus statistics], CPPFLAGS="${CPPFLAGS} -DUSE_CORPUS=1" buildcorpus=yes) AM_CONDITIONAL(WITH_CORPUS, test x${buildcorpus} = xyes) dnl ASpell Support is handled here do_aspell=yes AC_ARG_ENABLE([aspell], [AS_HELP_STRING([--disable-aspell], [Build without ASpell support (default is enabled)])], [do_aspell="${enableval}"]) AM_CONDITIONAL(WITH_ASPELL, test x${do_aspell} = xyes) dnl Hunspell Support is handled here do_hunspell=yes AC_ARG_ENABLE([hunspell], [AS_HELP_STRING([--disable-hunspell], [Build without HunSpell support (default is enabled)])], [do_hunspell="${enableval}"]) AM_CONDITIONAL(WITH_HUNSPELL, test x${do_hunspell} = xyes) AC_ARG_WITH([hunspell-dictdir], [AS_HELP_STRING([--with-hunspell-dictdir=DIR], [Use DIR to find HunSpell files (default=/usr/share/myspell/dicts])], [], with_hunspell_dictdir=) dnl ==================================================================== # If not asking for the statistics backend, then don't even # check for SQLite. if test x${buildcorpus} = xyes; then AC_CHECK_HEADER([sqlite3.h], [CPPFLAGS="${CPPFLAGS} -DHAVE_SQLITE=1" SQLiteFound=yes], SQLiteFound=no) AM_CONDITIONAL(HAVE_SQLITE, test x${SQLiteFound} = xyes) # If there are sqlite3 and pkgconfig on MacOS, then # recommend that user install MacPorts http://www.macports.org/ if test "x${SQLiteFound}" = "xyes"; then PKG_CHECK_MODULES(SQLITE3, sqlite3 >= 3.0.0) AC_SUBST(SQLITE3_LIBS) AC_SUBST(SQLITE3_CFLAGS) fi else AM_CONDITIONAL(HAVE_SQLITE, false) fi dnl Set Default Spell Checker settings dnl ==================================================================== ASpellFound=no if test "$do_aspell" = yes ; then PKG_CHECK_MODULES([ASPELL], [aspell], [ASpellFound=yes], [ASpellFound=no]) save_cpp_flags=${CPPFLAGS} CPPFLAGS="${CPPFLAGS} ${ASPELL_CFLAGS}" AC_CHECK_HEADER([aspell.h], [ASpellFound=yes], ASpellFound=no) AC_CHECK_LIB(aspell, new_aspell_config, [], [ASpellFound=no]) CPPFLAGS=$save_cpp_flags if test "x${ASpellFound}" = "xyes"; then AC_DEFINE(HAVE_ASPELL, 1, [Define for compilation]) AC_SUBST(ASPELL_LIBS) AC_SUBST(ASPELL_CFLAGS) # If aspell enabled and found, then do NOT do hunspell do_hunspell=no fi fi AM_CONDITIONAL(HAVE_ASPELL, test x${ASpellFound} = xyes) HunSpellDictDir= HunSpellFound=no if test x"$do_hunspell" = xyes; then HunSpellFound=no # First, look for the libraries. PKG_CHECK_MODULES([HUNSPELL], [hunspell], [HunSpellFound=yes], [HunSpellFound=no]) save_cpp_flags=${CPPFLAGS} CPPFLAGS="${CPPFLAGS} ${HUNSPELL_CFLAGS}" AC_CHECK_HEADER([hunspell.h], [HunSpellFound=yes], HunSpellFound=no) CPPFLAGS=$save_cpp_flags if test "x${HunSpellFound}" = "xyes"; then AC_DEFINE(HAVE_HUNSPELL, 1, [Define for compilation]) AC_SUBST(HUNSPELL_LIBS) AC_SUBST(HUNSPELL_CFLAGS) # Now, look for the dictionaries. HunSpellDictDir=/usr/share/myspell/dicts if test -n "$with_hunspell_dictdir"; then HunSpellDictDir=$with_hunspell_dictdir fi if ! test -d "$HunSpellDictDir" ; then echo "WARN HunSpell Dictionaries do not exist at \"$HunSpellDictDir\"" fi AC_DEFINE_UNQUOTED(HUNSPELL_DICT_DIR, "$HunSpellDictDir", [Defining the dictionary path]) fi fi AM_CONDITIONAL(HAVE_HUNSPELL, test x${HunSpellFound} = xyes) dnl ==================================================================== AC_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) GLIB_LC_MESSAGES dnl ==================================================================== PKG_CHECK_MODULES([LIBEDIT], [libedit], [edlin=yes], [edlin=no]) if test "x${edlin}" = "xyes"; then AM_CONDITIONAL(HAVE_EDITLINE, true) AC_DEFINE(HAVE_EDITLINE, 1, [Define for compilation]) else AM_CONDITIONAL(HAVE_EDITLINE, false) fi dnl ==================================================================== AC_CHECK_HEADER([regex.h],,[AC_MSG_ERROR([No regex.h header found])]) AC_CHECK_FUNCS(regexec,,[AC_CHECK_LIB(regex,regexec, [REGEX_LIBS=-lregex], [AC_MSG_ERROR([No regex library found])])]) AC_SUBST(REGEX_LIBS) dnl ==================================================================== dnl check compiler flags AC_DEFUN([LINK_CC_TRY_FLAG], [ AC_MSG_CHECKING([whether $CC supports $1]) link_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $1" AC_COMPILE_IFELSE([ ], [link_cc_flag=yes], [link_cc_flag=no]) CFLAGS="$link_save_CFLAGS" if test "x$link_cc_flag" = "xyes"; then ifelse([$2], , :, [$2]) else ifelse([$3], , :, [$3]) fi AC_MSG_RESULT([$link_cc_flag]) ]) dnl Use lots of warning flags with with gcc and compatible compilers dnl Note: if you change the following variable, the cache is automatically dnl skipped and all flags rechecked. So there's no need to do anything dnl else. If for any reason you need to force a recheck, just change dnl MAYBE_WARN in an ignorable way (like adding whitespace) MAYBE_WARN="-Wall -Wextra \ -Wsign-compare -Werror-implicit-function-declaration \ -Wpointer-arith -Wwrite-strings -Wstrict-prototypes \ -Wmissing-prototypes -Wmissing-declarations -Wnested-externs \ -Wpacked -Wswitch-enum -Wmissing-format-attribute \ -Wstrict-aliasing=2 -Winit-self -Wunsafe-loop-optimizations \ -Wdeclaration-after-statement -Wold-style-definition \ -Wno-missing-field-initializers -Wno-unused-parameter \ -Wno-attributes -Wno-long-long -Winline" # invalidate cached value if MAYBE_WARN has changed if test "x$link_cv_warn_maybe" != "x$MAYBE_WARN"; then unset link_cv_warn_cflags fi AC_CACHE_CHECK([for supported warning flags], link_cv_warn_cflags, [ echo WARN_CFLAGS="" # Some warning options are not supported by all versions of # gcc, so test all desired options against the current # compiler. # # Note that there are some order dependencies # here. Specifically, an option that disables a warning will # have no net effect if a later option then enables that # warnings, (perhaps implicitly). So we put some grouped # options (-Wall and -Wextra) up front and the -Wno options # last. for W in $MAYBE_WARN; do LINK_CC_TRY_FLAG([$W], [WARN_CFLAGS="$WARN_CFLAGS $W"]) done link_cv_warn_cflags=$WARN_CFLAGS link_cv_warn_maybe=$MAYBE_WARN AC_MSG_CHECKING([which warning flags were supported])]) WARN_CFLAGS="$link_cv_warn_cflags" LINK_CFLAGS="$LINK_CFLAGS $WARN_CFLAGS" # # dnl Per email, -fnested-functions is needed on Macintosh OS/X # Except that the solitary case where there was an actual nested # function was fixed, so this is no longer needed ... right? # # LINK_CC_TRY_FLAG([-fnested-functions], # [LINK_CFLAGS="$LINK_CFLAGS -fnested-functions"]) LINK_CC_TRY_FLAG([-fno-strict-aliasing], [LINK_CFLAGS="$LINK_CFLAGS -fno-strict-aliasing"]) AC_SUBST(LINK_CFLAGS) dnl ===================================================================== dnl Try to guess location of the jni.h file. dnl Might be useful to look at env variables $JDK_HOME and $JAVA_HOME for these. dnl JNIfound=no if test "x$do_java" = "xyes"; then JNI_GUESS=" \ -I $JAVA_HOME/include \ -I $JAVA_HOME/include/freebsd \ -I $JAVA_HOME/include/linux \ -I $JAVA_HOME/include/win32 \ -I $JAVA_HOME/Headers \ -I $JDK_HOME/include \ -I $JDK_HOME/include/freebsd \ -I $JDK_HOME/include/linux \ -I $JDK_HOME/include/win32 \ -I $JDK_HOME/Headers \ -I/usr/include/classpath/ \ -I/usr/local/jdk1.6.0/include/\ -I/usr/local/jdk1.6.0/include/freebsd \ -I/usr/local/jdk1.6.0/include/linux \ -I/usr/lib/jvm/java-6-sun/include/ \ -I/usr/lib/jvm/java-6-sun/include/freebsd \ -I/usr/lib/jvm/java-6-sun/include/linux \ -I/usr/lib/j2sdk1.6-ibm/include \ -I/usr/lib/j2sdk1.6-ibm/include/freebsd \ -I/usr/lib/j2sdk1.6-ibm/include/linux \ -I/opt/jdk1.5/include/ \ -I/opt/jdk1.5/include/freebsd \ -I/opt/jdk1.5/include/linux \ -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.15/include \ -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.15/include/freebsd \ -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.15/include/linux \ -I/c/java/jdk1.6.0/include/ \ -I/c/java/jdk1.6.0/include/win32/ \ -I/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/JavaVM.framework/Headers/ \ -I/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/JavaVM.framework/Headers/ " AC_MSG_CHECKING(for jni.h) AC_TRY_CPP( [#include ], [AC_MSG_RESULT([yes, will build java libs]) JNIfound=yes], [ SAVE_CPPFLAGS=${CPPFLAGS} CPPFLAGS="${CPPFLAGS} ${JNI_GUESS}" AC_MSG_WARN([Can't find jni.h header in standard locations, trying again with ${CPPFLAGS}]) AC_TRY_CPP( [#include ], [AC_MSG_RESULT([yes, will build java libs]) JNIfound=yes], [ AC_MSG_WARN([cannot find jni.h header, needed for Java bindings support.]) CPPFLAGS=${SAVE_CPPFLAGS} JNIfound=no]) ]) AC_SUBST(CPPFLAGS) # Hmm .. there seems to be a missing pkgconfig for ordinary java ... # There's libgcj-4.2.pc and libgcj8.pc but nothing for ordinary java?? # PKG_CHECK_MODULES(LIBJDK, libjdk-1.5 >= $LIBJDK_REQUIRED) # AC_SUBST(LIBJDK_CFLAGS) # AC_SUBST(LIBJDK_LIBS) # For now, we assume that if the jni files are there, then the javac # ant, and jar compilers/builders are install as well. This is used # to build the jar file and install it. AM_CONDITIONAL(HAVE_JAVA, test x${JNIfound} = xyes) else AM_CONDITIONAL(HAVE_JAVA, false) fi dnl =================================================================== AC_OUTPUT([ Makefile build.xml link-grammar.pc link-grammar.spec link-grammar/Makefile link-grammar/corpus/Makefile link-grammar/minisat/Makefile link-grammar/sat-solver/Makefile link-grammar/link-features.h data/Makefile data/de/Makefile data/en/Makefile data/en/words/Makefile data/lt/Makefile man/Makefile autopackage/default.apspec link-grammar.xcode/Makefile msvc6/Makefile msvc6/link_grammar_dll/Makefile msvc6/link_grammar_exe/Makefile msvc6/link_grammar_java_dll/Makefile msvc9/Makefile ]) dnl ==================================================================== echo " $PACKAGE-$VERSION prefix: ${prefix} compiler: ${CC} ${CPPFLAGS} ${CFLAGS} autopackage: ${br_cv_binreloc} Posix threads: ${do_pth} Editline command-line history: ${edlin} Java interfaces: ${JNIfound} ASpell spell checker: ${ASpellFound} HunSpell spell checker: ${HunSpellFound} HunSpell dictionary location: ${HunSpellDictDir} Boolean SAT solver: ${buildSAT} Corpus statistics database: ${buildcorpus} " link-grammar/config.sub0000755000000000000000000010577512537603120012326 0ustar #! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-09-11' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-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." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; 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-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; 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 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: link-grammar/autogen.err0000644000000000000000000001316612537603123012512 0ustar aclocal: warning: autoconf input should be named 'configure.ac', not 'configure.in' configure.in:315: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body ../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from... ../../lib/autoconf/general.m4:2590: _AC_COMPILE_IFELSE is expanded from... ../../lib/autoconf/general.m4:2606: AC_COMPILE_IFELSE is expanded from... configure.in:277: LINK_CC_TRY_FLAG is expanded from... ../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from... ../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from... ../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from... configure.in:315: the top level configure.in:350: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body ../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from... ../../lib/autoconf/general.m4:2590: _AC_COMPILE_IFELSE is expanded from... ../../lib/autoconf/general.m4:2606: AC_COMPILE_IFELSE is expanded from... configure.in:277: LINK_CC_TRY_FLAG is expanded from... configure.in:350: the top level configure.in:315: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body ../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from... ../../lib/autoconf/general.m4:2590: _AC_COMPILE_IFELSE is expanded from... ../../lib/autoconf/general.m4:2606: AC_COMPILE_IFELSE is expanded from... configure.in:277: LINK_CC_TRY_FLAG is expanded from... ../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from... ../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from... ../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from... configure.in:315: the top level configure.in:350: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body ../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from... ../../lib/autoconf/general.m4:2590: _AC_COMPILE_IFELSE is expanded from... ../../lib/autoconf/general.m4:2606: AC_COMPILE_IFELSE is expanded from... configure.in:277: LINK_CC_TRY_FLAG is expanded from... configure.in:350: the top level automake: warning: autoconf input should be named 'configure.ac', not 'configure.in' configure.in:315: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body ../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from... ../../lib/autoconf/general.m4:2590: _AC_COMPILE_IFELSE is expanded from... ../../lib/autoconf/general.m4:2606: AC_COMPILE_IFELSE is expanded from... configure.in:277: LINK_CC_TRY_FLAG is expanded from... ../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from... ../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from... ../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from... configure.in:315: the top level configure.in:350: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body ../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from... ../../lib/autoconf/general.m4:2590: _AC_COMPILE_IFELSE is expanded from... ../../lib/autoconf/general.m4:2606: AC_COMPILE_IFELSE is expanded from... configure.in:277: LINK_CC_TRY_FLAG is expanded from... configure.in:350: the top level configure.in:27: warning: AM_INIT_AUTOMAKE: two- and three-arguments forms are deprecated. For more info, see: configure.in:27: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation configure.in:33: installing './compile' configure.in:41: installing './config.guess' configure.in:41: installing './config.sub' configure.in:27: installing './install-sh' configure.in:27: installing './missing' automake: warning: autoconf input should be named 'configure.ac', not 'configure.in' link-grammar/Makefile.am:28: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS') link-grammar/Makefile.am: installing './depcomp' link-grammar/corpus/Makefile.am:8: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS') link-grammar/corpus/Makefile.am:41: warning: variable 'cluster_pop_SOURCES' is defined but no program or link-grammar/corpus/Makefile.am:41: library has 'cluster_pop' as canonical name (possible typo) link-grammar/corpus/Makefile.am:45: warning: variable 'sniff_SOURCES' is defined but no program or link-grammar/corpus/Makefile.am:45: library has 'sniff' as canonical name (possible typo) link-grammar/corpus/Makefile.am:42: warning: variable 'cluster_pop_LDADD' is defined but no program or link-grammar/corpus/Makefile.am:42: library has 'cluster_pop' as canonical name (possible typo) link-grammar/corpus/Makefile.am:46: warning: variable 'sniff_LDADD' is defined but no program or link-grammar/corpus/Makefile.am:46: library has 'sniff' as canonical name (possible typo) link-grammar/sat-solver/Makefile.am:8: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS') configure.in:315: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body ../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from... ../../lib/autoconf/general.m4:2590: _AC_COMPILE_IFELSE is expanded from... ../../lib/autoconf/general.m4:2606: AC_COMPILE_IFELSE is expanded from... configure.in:277: LINK_CC_TRY_FLAG is expanded from... ../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from... ../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from... ../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from... configure.in:315: the top level configure.in:350: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body ../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from... ../../lib/autoconf/general.m4:2590: _AC_COMPILE_IFELSE is expanded from... ../../lib/autoconf/general.m4:2606: AC_COMPILE_IFELSE is expanded from... configure.in:277: LINK_CC_TRY_FLAG is expanded from... configure.in:350: the top level link-grammar/MAINTAINERS0000644000000000000000000000011612536650432012026 0ustar Dom Lachowicz (domlachowicz@gmail.com) Linas Vepstas (linasvepstas@gmail.com) link-grammar/ltmain.sh0000644000000000000000000105203012537603110012144 0ustar # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.11 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.2 Debian-2.4.2-1.11" TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" 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 "$linkmode" != prog && test "$linkmode" != lib; 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 "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; *) 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" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 link-grammar/configure0000755000000000000000000231145212537603123012246 0ustar #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # # # 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 about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="link-grammar/link-parser.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS HAVE_JAVA_FALSE HAVE_JAVA_TRUE LINK_CFLAGS REGEX_LIBS HAVE_EDITLINE_FALSE HAVE_EDITLINE_TRUE LIBEDIT_LIBS LIBEDIT_CFLAGS HAVE_HUNSPELL_FALSE HAVE_HUNSPELL_TRUE HUNSPELL_LIBS HUNSPELL_CFLAGS HAVE_ASPELL_FALSE HAVE_ASPELL_TRUE ASPELL_LIBS ASPELL_CFLAGS SQLITE3_LIBS SQLITE3_CFLAGS HAVE_SQLITE_FALSE HAVE_SQLITE_TRUE WITH_HUNSPELL_FALSE WITH_HUNSPELL_TRUE WITH_ASPELL_FALSE WITH_ASPELL_TRUE WITH_CORPUS_FALSE WITH_CORPUS_TRUE WITH_SAT_SOLVER_FALSE WITH_SAT_SOLVER_TRUE WITH_PTHREADS_FALSE WITH_PTHREADS_TRUE WITH_BINRELOC_FALSE WITH_BINRELOC_TRUE OS_WIN32_FALSE OS_WIN32_TRUE PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG BINRELOC_LIBS BINRELOC_CFLAGS CXXCPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR 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 EGREP GREP LN_S CPP am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM LINK_MICRO_VERSION LINK_MINOR_VERSION LINK_MAJOR_VERSION VERSION_INFO target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock enable_binreloc enable_binreloc_threads enable_debug enable_mudflap enable_profile enable_pthreads enable_java_bindings enable_sat_solver enable_corpus_stats enable_aspell enable_hunspell with_hunspell_dictdir ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC CPP CXXCPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR SQLITE3_CFLAGS SQLITE3_LIBS ASPELL_CFLAGS ASPELL_LIBS HUNSPELL_CFLAGS HUNSPELL_LIBS LIBEDIT_CFLAGS LIBEDIT_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' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --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 cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --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-binreloc compile with binary relocation support (default=enable when available) --enable-binreloc-threads compile binary relocation with threads support (default=yes) --enable-debug compile with debugging flags set --enable-mudflap compile with mudflap checking --enable-profile compile with profiling set --enable-pthreads compile with pthread support --disable-java-bindings disable build of java bindings --enable-sat-solver use the boolean SAT solver --enable-corpus-stats use corpus statistics --disable-aspell Build without ASpell support (default is enabled) --disable-hunspell Build without HunSpell support (default is enabled) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-hunspell-dictdir=DIR Use DIR to find HunSpell files (default=/usr/share/myspell/dicts 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 CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor CXXCPP C++ preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path SQLITE3_CFLAGS C compiler flags for SQLITE3, overriding pkg-config SQLITE3_LIBS linker flags for SQLITE3, overriding pkg-config ASPELL_CFLAGS C compiler flags for ASPELL, overriding pkg-config ASPELL_LIBS linker flags for ASPELL, overriding pkg-config HUNSPELL_CFLAGS C compiler flags for HUNSPELL, overriding pkg-config HUNSPELL_LIBS linker flags for HUNSPELL, overriding pkg-config LIBEDIT_CFLAGS C compiler flags for LIBEDIT, overriding pkg-config LIBEDIT_LIBS linker flags for LIBEDIT, 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 the package provider. _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 configure 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_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_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_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_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_c_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;} ;; 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 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 $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu PACKAGE=link-grammar LINK_MAJOR_VERSION=4 LINK_MINOR_VERSION=7 LINK_MICRO_VERSION=4 MAJOR_VERSION_PLUS_MINOR_VERSION=`expr $LINK_MAJOR_VERSION + $LINK_MINOR_VERSION` VERSION=$LINK_MAJOR_VERSION.$LINK_MINOR_VERSION.$LINK_MICRO_VERSION VERSION_INFO=$MAJOR_VERSION_PLUS_MINOR_VERSION:$LINK_MICRO_VERSION:$LINK_MINOR_VERSION am__api_version='1.14' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$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. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=$PACKAGE VERSION=$VERSION cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi 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 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if ${ac_cv_search_strerror+:} 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 strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; 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_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_strerror+:} false; then : break fi done if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu 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 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=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi { $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 # 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 case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # 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 "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ 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 $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; 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*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*) 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-*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf # Set options 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 test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; 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 "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | 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 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi link_all_deplibs=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd* | 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*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; 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*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs_CXX=no ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; 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*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: # Check whether --enable-binreloc was given. if test "${enable_binreloc+set}" = set; then : enableval=$enable_binreloc; enable_binreloc=$enableval else enable_binreloc=auto fi # Check whether --enable-binreloc-threads was given. if test "${enable_binreloc_threads+set}" = set; then : enableval=$enable_binreloc_threads; enable_binreloc_threads=$enableval else enable_binreloc_threads=yes fi BINRELOC_CFLAGS= BINRELOC_LIBS= if test "x$enable_binreloc" = "xauto"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /proc/self/maps" >&5 $as_echo_n "checking for /proc/self/maps... " >&6; } if ${ac_cv_file__proc_self_maps+:} false; then : $as_echo_n "(cached) " >&6 else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/proc/self/maps"; then ac_cv_file__proc_self_maps=yes else ac_cv_file__proc_self_maps=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__proc_self_maps" >&5 $as_echo "$ac_cv_file__proc_self_maps" >&6; } if test "x$ac_cv_file__proc_self_maps" = xyes; then : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether everything is installed to the same prefix" >&5 $as_echo_n "checking whether everything is installed to the same prefix... " >&6; } if ${br_cv_valid_prefixes+:} false; then : $as_echo_n "(cached) " >&6 else if test "$bindir" = '${exec_prefix}/bin' -a "$sbindir" = '${exec_prefix}/sbin' -a \ "$datadir" = '${prefix}/share' -a "$libdir" = '${exec_prefix}/lib' -a \ "$libexecdir" = '${exec_prefix}/libexec' -a "$sysconfdir" = '${prefix}/etc' then br_cv_valid_prefixes=yes else br_cv_valid_prefixes=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $br_cv_valid_prefixes" >&5 $as_echo "$br_cv_valid_prefixes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether binary relocation support should be enabled" >&5 $as_echo_n "checking whether binary relocation support should be enabled... " >&6; } if ${br_cv_binreloc+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$enable_binreloc" = "xyes"; then br_cv_binreloc=yes elif test "x$enable_binreloc" = "xauto"; then if test "x$br_cv_valid_prefixes" = "xyes" -a \ "x$ac_cv_file__proc_self_maps" = "xyes"; then br_cv_binreloc=yes else br_cv_binreloc=no fi else br_cv_binreloc=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $br_cv_binreloc" >&5 $as_echo "$br_cv_binreloc" >&6; } if test "x$br_cv_binreloc" = "xyes"; then BINRELOC_CFLAGS="-DENABLE_BINRELOC" $as_echo "#define ENABLE_BINRELOC /**/" >>confdefs.h if test "x$enable_binreloc_threads" = "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_getspecific in -lpthread" >&5 $as_echo_n "checking for pthread_getspecific in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_getspecific+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $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 pthread_getspecific (); int main () { return pthread_getspecific (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_getspecific=yes else ac_cv_lib_pthread_pthread_getspecific=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_pthread_pthread_getspecific" >&5 $as_echo "$ac_cv_lib_pthread_pthread_getspecific" >&6; } if test "x$ac_cv_lib_pthread_pthread_getspecific" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBPTHREAD 1 _ACEOF LIBS="-lpthread $LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether binary relocation should use threads" >&5 $as_echo_n "checking whether binary relocation should use threads... " >&6; } if ${br_cv_binreloc_threads+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$enable_binreloc_threads" = "xyes"; then if test "x$ac_cv_lib_pthread_pthread_getspecific" = "xyes"; then br_cv_binreloc_threads=yes else br_cv_binreloc_threads=no fi else br_cv_binreloc_threads=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $br_cv_binreloc_threads" >&5 $as_echo "$br_cv_binreloc_threads" >&6; } if test "x$br_cv_binreloc_threads" = "xyes"; then BINRELOC_LIBS="-lpthread" $as_echo "#define BR_PTHREAD 1" >>confdefs.h else BINRELOC_CFLAGS="$BINRELOC_CFLAGS -DBR_PTHREADS=0" $as_echo "#define BR_PTHREAD 0" >>confdefs.h fi fi 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi for ac_func in towupper do : ac_fn_c_check_func "$LINENO" "towupper" "ac_cv_func_towupper" if test "x$ac_cv_func_towupper" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TOWUPPER 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for native Win32" >&5 $as_echo_n "checking for native Win32... " >&6; } case "$host" in *-*-mingw*) native_win32=yes ;; *) native_win32=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $native_win32" >&5 $as_echo "$native_win32" >&6; } if test "x$native_win32" = "xyes"; then OS_WIN32_TRUE= OS_WIN32_FALSE='#' else OS_WIN32_TRUE='#' OS_WIN32_FALSE= fi # The std=c99 flag provides the proper float-pt math decls working, # e.g. fmaxf However, it also undefined _BSD_SOURCE, etc which is # needed to get fileno, strdup, etc. and so it needs to be manually # enabled again. # Setting -D_POSIX_SOURCE messes up compilation on FreeBSD by # hiding strdup, etc. again. # CFLAGS="${CFLAGS} -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_POSIX_C_SOURCE -D_GNU_SOURCE" # Final solution: enable std=c99, explitictly turn on BSD and SVID and # GNU, but do NOT turn on POSIX. # if test x${native_win32} = xyes; then # Vikas says that -std=gnu99 is needed on cygwin/mingw CFLAGS="${CFLAGS} -std=gnu99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE" # Also -- Vikas sets MINGW explicitly, as well as assorted paths. # I'm unclear as to why these are not being set automatically, # by mingw itself .. but what the hey ... this can't hurt, right? # Oh yes it can hurt, do not set these at all. # Setting these screws up the remainder of the configure script. # CFLAGS="${CFLAGS} -I/usr/include/mingw -D__MINGW32__" # LDFLAGS="${LDFLAGS} -L/usr/lib/mingw -lmingwex -lcrtdll -lmsvcrt -lc -Wl,--allow-multiple-definition" else # Else standard Linux/*BSD environment. CFLAGS="${CFLAGS} -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE" fi if test "x$br_cv_binreloc" = "xyes"; then WITH_BINRELOC_TRUE= WITH_BINRELOC_FALSE='#' else WITH_BINRELOC_TRUE='#' WITH_BINRELOC_FALSE= fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; CFLAGS="${CFLAGS} -g" LDFLAGS="${LDFLAGS} -g" $as_echo "#define DEBUG_MEMORY 1" >>confdefs.h else $as_echo "#define DEBUG_MEMORY 0" >>confdefs.h fi # Check whether --enable-mudflap was given. if test "${enable_mudflap+set}" = set; then : enableval=$enable_mudflap; CFLAGS="${CFLAGS} -fmudflap" LDFLAGS="${LDFLAGS} -fmudflap -lmudflap" fi # Check whether --enable-profile was given. if test "${enable_profile+set}" = set; then : enableval=$enable_profile; CFLAGS="${CFLAGS} -pg" LDFLAGS="${LDFLAGS} -pg" fi do_pth=no # Check whether --enable-pthreads was given. if test "${enable_pthreads+set}" = set; then : enableval=$enable_pthreads; CPPFLAGS="${CPPFLAGS} -DUSE_PTHREADS=1" do_pth=yes fi if test x${do_pth} = xyes; then WITH_PTHREADS_TRUE= WITH_PTHREADS_FALSE='#' else WITH_PTHREADS_TRUE='#' WITH_PTHREADS_FALSE= fi do_java=yes # Check whether --enable-java-bindings was given. if test "${enable_java_bindings+set}" = set; then : enableval=$enable_java_bindings; do_java="no" fi buildSAT=no # Check whether --enable-sat-solver was given. if test "${enable_sat_solver+set}" = set; then : enableval=$enable_sat_solver; CPPFLAGS="${CPPFLAGS} -DUSE_SAT_SOLVER=1" buildSAT=yes fi if test x${buildSAT} = xyes; then WITH_SAT_SOLVER_TRUE= WITH_SAT_SOLVER_FALSE='#' else WITH_SAT_SOLVER_TRUE='#' WITH_SAT_SOLVER_FALSE= fi buildcorpus=no # Check whether --enable-corpus-stats was given. if test "${enable_corpus_stats+set}" = set; then : enableval=$enable_corpus_stats; CPPFLAGS="${CPPFLAGS} -DUSE_CORPUS=1" buildcorpus=yes fi if test x${buildcorpus} = xyes; then WITH_CORPUS_TRUE= WITH_CORPUS_FALSE='#' else WITH_CORPUS_TRUE='#' WITH_CORPUS_FALSE= fi do_aspell=yes # Check whether --enable-aspell was given. if test "${enable_aspell+set}" = set; then : enableval=$enable_aspell; do_aspell="${enableval}" fi if test x${do_aspell} = xyes; then WITH_ASPELL_TRUE= WITH_ASPELL_FALSE='#' else WITH_ASPELL_TRUE='#' WITH_ASPELL_FALSE= fi do_hunspell=yes # Check whether --enable-hunspell was given. if test "${enable_hunspell+set}" = set; then : enableval=$enable_hunspell; do_hunspell="${enableval}" fi if test x${do_hunspell} = xyes; then WITH_HUNSPELL_TRUE= WITH_HUNSPELL_FALSE='#' else WITH_HUNSPELL_TRUE='#' WITH_HUNSPELL_FALSE= fi # Check whether --with-hunspell-dictdir was given. if test "${with_hunspell_dictdir+set}" = set; then : withval=$with_hunspell_dictdir; else with_hunspell_dictdir= fi # If not asking for the statistics backend, then don't even # check for SQLite. if test x${buildcorpus} = xyes; then ac_fn_c_check_header_mongrel "$LINENO" "sqlite3.h" "ac_cv_header_sqlite3_h" "$ac_includes_default" if test "x$ac_cv_header_sqlite3_h" = xyes; then : CPPFLAGS="${CPPFLAGS} -DHAVE_SQLITE=1" SQLiteFound=yes else SQLiteFound=no fi if test x${SQLiteFound} = xyes; then HAVE_SQLITE_TRUE= HAVE_SQLITE_FALSE='#' else HAVE_SQLITE_TRUE='#' HAVE_SQLITE_FALSE= fi # If there are sqlite3 and pkgconfig on MacOS, then # recommend that user install MacPorts http://www.macports.org/ if test "x${SQLiteFound}" = "xyes"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLITE3" >&5 $as_echo_n "checking for SQLITE3... " >&6; } if test -n "$SQLITE3_CFLAGS"; then pkg_cv_SQLITE3_CFLAGS="$SQLITE3_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sqlite3 >= 3.0.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "sqlite3 >= 3.0.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SQLITE3_CFLAGS=`$PKG_CONFIG --cflags "sqlite3 >= 3.0.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$SQLITE3_LIBS"; then pkg_cv_SQLITE3_LIBS="$SQLITE3_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sqlite3 >= 3.0.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "sqlite3 >= 3.0.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SQLITE3_LIBS=`$PKG_CONFIG --libs "sqlite3 >= 3.0.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } 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 SQLITE3_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sqlite3 >= 3.0.0" 2>&1` else SQLITE3_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sqlite3 >= 3.0.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$SQLITE3_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (sqlite3 >= 3.0.0) were not met: $SQLITE3_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables SQLITE3_CFLAGS and SQLITE3_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "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. Alternatively, you may set the environment variables SQLITE3_CFLAGS and SQLITE3_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else SQLITE3_CFLAGS=$pkg_cv_SQLITE3_CFLAGS SQLITE3_LIBS=$pkg_cv_SQLITE3_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi else if false; then HAVE_SQLITE_TRUE= HAVE_SQLITE_FALSE='#' else HAVE_SQLITE_TRUE='#' HAVE_SQLITE_FALSE= fi fi ASpellFound=no if test "$do_aspell" = yes ; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ASPELL" >&5 $as_echo_n "checking for ASPELL... " >&6; } if test -n "$ASPELL_CFLAGS"; then pkg_cv_ASPELL_CFLAGS="$ASPELL_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"aspell\""; } >&5 ($PKG_CONFIG --exists --print-errors "aspell") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ASPELL_CFLAGS=`$PKG_CONFIG --cflags "aspell" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$ASPELL_LIBS"; then pkg_cv_ASPELL_LIBS="$ASPELL_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"aspell\""; } >&5 ($PKG_CONFIG --exists --print-errors "aspell") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ASPELL_LIBS=`$PKG_CONFIG --libs "aspell" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } 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 ASPELL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "aspell" 2>&1` else ASPELL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "aspell" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$ASPELL_PKG_ERRORS" >&5 ASpellFound=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ASpellFound=no else ASPELL_CFLAGS=$pkg_cv_ASPELL_CFLAGS ASPELL_LIBS=$pkg_cv_ASPELL_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ASpellFound=yes fi save_cpp_flags=${CPPFLAGS} CPPFLAGS="${CPPFLAGS} ${ASPELL_CFLAGS}" ac_fn_c_check_header_mongrel "$LINENO" "aspell.h" "ac_cv_header_aspell_h" "$ac_includes_default" if test "x$ac_cv_header_aspell_h" = xyes; then : ASpellFound=yes else ASpellFound=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for new_aspell_config in -laspell" >&5 $as_echo_n "checking for new_aspell_config in -laspell... " >&6; } if ${ac_cv_lib_aspell_new_aspell_config+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-laspell $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 new_aspell_config (); int main () { return new_aspell_config (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_aspell_new_aspell_config=yes else ac_cv_lib_aspell_new_aspell_config=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_aspell_new_aspell_config" >&5 $as_echo "$ac_cv_lib_aspell_new_aspell_config" >&6; } if test "x$ac_cv_lib_aspell_new_aspell_config" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBASPELL 1 _ACEOF LIBS="-laspell $LIBS" else ASpellFound=no fi CPPFLAGS=$save_cpp_flags if test "x${ASpellFound}" = "xyes"; then $as_echo "#define HAVE_ASPELL 1" >>confdefs.h # If aspell enabled and found, then do NOT do hunspell do_hunspell=no fi fi if test x${ASpellFound} = xyes; then HAVE_ASPELL_TRUE= HAVE_ASPELL_FALSE='#' else HAVE_ASPELL_TRUE='#' HAVE_ASPELL_FALSE= fi HunSpellDictDir= HunSpellFound=no if test x"$do_hunspell" = xyes; then HunSpellFound=no # First, look for the libraries. pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HUNSPELL" >&5 $as_echo_n "checking for HUNSPELL... " >&6; } if test -n "$HUNSPELL_CFLAGS"; then pkg_cv_HUNSPELL_CFLAGS="$HUNSPELL_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"hunspell\""; } >&5 ($PKG_CONFIG --exists --print-errors "hunspell") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_HUNSPELL_CFLAGS=`$PKG_CONFIG --cflags "hunspell" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$HUNSPELL_LIBS"; then pkg_cv_HUNSPELL_LIBS="$HUNSPELL_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"hunspell\""; } >&5 ($PKG_CONFIG --exists --print-errors "hunspell") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_HUNSPELL_LIBS=`$PKG_CONFIG --libs "hunspell" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } 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 HUNSPELL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "hunspell" 2>&1` else HUNSPELL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "hunspell" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$HUNSPELL_PKG_ERRORS" >&5 HunSpellFound=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } HunSpellFound=no else HUNSPELL_CFLAGS=$pkg_cv_HUNSPELL_CFLAGS HUNSPELL_LIBS=$pkg_cv_HUNSPELL_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } HunSpellFound=yes fi save_cpp_flags=${CPPFLAGS} CPPFLAGS="${CPPFLAGS} ${HUNSPELL_CFLAGS}" ac_fn_c_check_header_mongrel "$LINENO" "hunspell.h" "ac_cv_header_hunspell_h" "$ac_includes_default" if test "x$ac_cv_header_hunspell_h" = xyes; then : HunSpellFound=yes else HunSpellFound=no fi CPPFLAGS=$save_cpp_flags if test "x${HunSpellFound}" = "xyes"; then $as_echo "#define HAVE_HUNSPELL 1" >>confdefs.h # Now, look for the dictionaries. HunSpellDictDir=/usr/share/myspell/dicts if test -n "$with_hunspell_dictdir"; then HunSpellDictDir=$with_hunspell_dictdir fi if ! test -d "$HunSpellDictDir" ; then echo "WARN HunSpell Dictionaries do not exist at \"$HunSpellDictDir\"" fi cat >>confdefs.h <<_ACEOF #define HUNSPELL_DICT_DIR "$HunSpellDictDir" _ACEOF fi fi if test x${HunSpellFound} = xyes; then HAVE_HUNSPELL_TRUE= HAVE_HUNSPELL_FALSE='#' else HAVE_HUNSPELL_TRUE='#' HAVE_HUNSPELL_FALSE= fi for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBEDIT" >&5 $as_echo_n "checking for LIBEDIT... " >&6; } if test -n "$LIBEDIT_CFLAGS"; then pkg_cv_LIBEDIT_CFLAGS="$LIBEDIT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libedit\""; } >&5 ($PKG_CONFIG --exists --print-errors "libedit") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBEDIT_CFLAGS=`$PKG_CONFIG --cflags "libedit" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBEDIT_LIBS"; then pkg_cv_LIBEDIT_LIBS="$LIBEDIT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libedit\""; } >&5 ($PKG_CONFIG --exists --print-errors "libedit") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBEDIT_LIBS=`$PKG_CONFIG --libs "libedit" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } 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 LIBEDIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libedit" 2>&1` else LIBEDIT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libedit" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBEDIT_PKG_ERRORS" >&5 edlin=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } edlin=no else LIBEDIT_CFLAGS=$pkg_cv_LIBEDIT_CFLAGS LIBEDIT_LIBS=$pkg_cv_LIBEDIT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } edlin=yes fi if test "x${edlin}" = "xyes"; then if true; then HAVE_EDITLINE_TRUE= HAVE_EDITLINE_FALSE='#' else HAVE_EDITLINE_TRUE='#' HAVE_EDITLINE_FALSE= fi $as_echo "#define HAVE_EDITLINE 1" >>confdefs.h else if false; then HAVE_EDITLINE_TRUE= HAVE_EDITLINE_FALSE='#' else HAVE_EDITLINE_TRUE='#' HAVE_EDITLINE_FALSE= fi fi ac_fn_c_check_header_mongrel "$LINENO" "regex.h" "ac_cv_header_regex_h" "$ac_includes_default" if test "x$ac_cv_header_regex_h" = xyes; then : else as_fn_error $? "No regex.h header found" "$LINENO" 5 fi for ac_func in regexec do : ac_fn_c_check_func "$LINENO" "regexec" "ac_cv_func_regexec" if test "x$ac_cv_func_regexec" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_REGEXEC 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for regexec in -lregex" >&5 $as_echo_n "checking for regexec in -lregex... " >&6; } if ${ac_cv_lib_regex_regexec+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lregex $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 regexec (); int main () { return regexec (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_regex_regexec=yes else ac_cv_lib_regex_regexec=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_regex_regexec" >&5 $as_echo "$ac_cv_lib_regex_regexec" >&6; } if test "x$ac_cv_lib_regex_regexec" = xyes; then : REGEX_LIBS=-lregex else as_fn_error $? "No regex library found" "$LINENO" 5 fi fi done MAYBE_WARN="-Wall -Wextra \ -Wsign-compare -Werror-implicit-function-declaration \ -Wpointer-arith -Wwrite-strings -Wstrict-prototypes \ -Wmissing-prototypes -Wmissing-declarations -Wnested-externs \ -Wpacked -Wswitch-enum -Wmissing-format-attribute \ -Wstrict-aliasing=2 -Winit-self -Wunsafe-loop-optimizations \ -Wdeclaration-after-statement -Wold-style-definition \ -Wno-missing-field-initializers -Wno-unused-parameter \ -Wno-attributes -Wno-long-long -Winline" # invalidate cached value if MAYBE_WARN has changed if test "x$link_cv_warn_maybe" != "x$MAYBE_WARN"; then unset link_cv_warn_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for supported warning flags" >&5 $as_echo_n "checking for supported warning flags... " >&6; } if ${link_cv_warn_cflags+:} false; then : $as_echo_n "(cached) " >&6 else echo WARN_CFLAGS="" # Some warning options are not supported by all versions of # gcc, so test all desired options against the current # compiler. # # Note that there are some order dependencies # here. Specifically, an option that disables a warning will # have no net effect if a later option then enables that # warnings, (perhaps implicitly). So we put some grouped # options (-Wall and -Wextra) up front and the -Wno options # last. for W in $MAYBE_WARN; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $W" >&5 $as_echo_n "checking whether $CC supports $W... " >&6; } link_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $W" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ _ACEOF if ac_fn_c_try_compile "$LINENO"; then : link_cc_flag=yes else link_cc_flag=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$link_save_CFLAGS" if test "x$link_cc_flag" = "xyes"; then WARN_CFLAGS="$WARN_CFLAGS $W" else : fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $link_cc_flag" >&5 $as_echo "$link_cc_flag" >&6; } done link_cv_warn_cflags=$WARN_CFLAGS link_cv_warn_maybe=$MAYBE_WARN { $as_echo "$as_me:${as_lineno-$LINENO}: checking which warning flags were supported" >&5 $as_echo_n "checking which warning flags were supported... " >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $link_cv_warn_cflags" >&5 $as_echo "$link_cv_warn_cflags" >&6; } WARN_CFLAGS="$link_cv_warn_cflags" LINK_CFLAGS="$LINK_CFLAGS $WARN_CFLAGS" # # dnl Per email, -fnested-functions is needed on Macintosh OS/X # Except that the solitary case where there was an actual nested # function was fixed, so this is no longer needed ... right? # # LINK_CC_TRY_FLAG([-fnested-functions], # [LINK_CFLAGS="$LINK_CFLAGS -fnested-functions"]) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fno-strict-aliasing" >&5 $as_echo_n "checking whether $CC supports -fno-strict-aliasing... " >&6; } link_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fno-strict-aliasing" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ _ACEOF if ac_fn_c_try_compile "$LINENO"; then : link_cc_flag=yes else link_cc_flag=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$link_save_CFLAGS" if test "x$link_cc_flag" = "xyes"; then LINK_CFLAGS="$LINK_CFLAGS -fno-strict-aliasing" else : fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $link_cc_flag" >&5 $as_echo "$link_cc_flag" >&6; } JNIfound=no if test "x$do_java" = "xyes"; then JNI_GUESS=" \ -I $JAVA_HOME/include \ -I $JAVA_HOME/include/freebsd \ -I $JAVA_HOME/include/linux \ -I $JAVA_HOME/include/win32 \ -I $JAVA_HOME/Headers \ -I $JDK_HOME/include \ -I $JDK_HOME/include/freebsd \ -I $JDK_HOME/include/linux \ -I $JDK_HOME/include/win32 \ -I $JDK_HOME/Headers \ -I/usr/include/classpath/ \ -I/usr/local/jdk1.6.0/include/\ -I/usr/local/jdk1.6.0/include/freebsd \ -I/usr/local/jdk1.6.0/include/linux \ -I/usr/lib/jvm/java-6-sun/include/ \ -I/usr/lib/jvm/java-6-sun/include/freebsd \ -I/usr/lib/jvm/java-6-sun/include/linux \ -I/usr/lib/j2sdk1.6-ibm/include \ -I/usr/lib/j2sdk1.6-ibm/include/freebsd \ -I/usr/lib/j2sdk1.6-ibm/include/linux \ -I/opt/jdk1.5/include/ \ -I/opt/jdk1.5/include/freebsd \ -I/opt/jdk1.5/include/linux \ -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.15/include \ -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.15/include/freebsd \ -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.15/include/linux \ -I/c/java/jdk1.6.0/include/ \ -I/c/java/jdk1.6.0/include/win32/ \ -I/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/JavaVM.framework/Headers/ \ -I/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/JavaVM.framework/Headers/ " { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jni.h" >&5 $as_echo_n "checking for jni.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, will build java libs" >&5 $as_echo "yes, will build java libs" >&6; } JNIfound=yes else SAVE_CPPFLAGS=${CPPFLAGS} CPPFLAGS="${CPPFLAGS} ${JNI_GUESS}" { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Can't find jni.h header in standard locations, trying again with ${CPPFLAGS}" >&5 $as_echo "$as_me: WARNING: Can't find jni.h header in standard locations, trying again with ${CPPFLAGS}" >&2;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, will build java libs" >&5 $as_echo "yes, will build java libs" >&6; } JNIfound=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find jni.h header, needed for Java bindings support." >&5 $as_echo "$as_me: WARNING: cannot find jni.h header, needed for Java bindings support." >&2;} CPPFLAGS=${SAVE_CPPFLAGS} JNIfound=no fi rm -f conftest.err conftest.i conftest.$ac_ext fi rm -f conftest.err conftest.i conftest.$ac_ext # Hmm .. there seems to be a missing pkgconfig for ordinary java ... # There's libgcj-4.2.pc and libgcj8.pc but nothing for ordinary java?? # PKG_CHECK_MODULES(LIBJDK, libjdk-1.5 >= $LIBJDK_REQUIRED) # AC_SUBST(LIBJDK_CFLAGS) # AC_SUBST(LIBJDK_LIBS) # For now, we assume that if the jni files are there, then the javac # ant, and jar compilers/builders are install as well. This is used # to build the jar file and install it. if test x${JNIfound} = xyes; then HAVE_JAVA_TRUE= HAVE_JAVA_FALSE='#' else HAVE_JAVA_TRUE='#' HAVE_JAVA_FALSE= fi else if false; then HAVE_JAVA_TRUE= HAVE_JAVA_FALSE='#' else HAVE_JAVA_TRUE='#' HAVE_JAVA_FALSE= fi fi ac_config_files="$ac_config_files Makefile build.xml link-grammar.pc link-grammar.spec link-grammar/Makefile link-grammar/corpus/Makefile link-grammar/minisat/Makefile link-grammar/sat-solver/Makefile link-grammar/link-features.h data/Makefile data/de/Makefile data/en/Makefile data/en/words/Makefile data/lt/Makefile man/Makefile autopackage/default.apspec link-grammar.xcode/Makefile msvc6/Makefile msvc6/link_grammar_dll/Makefile msvc6/link_grammar_exe/Makefile msvc6/link_grammar_java_dll/Makefile msvc9/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}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${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 "${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 "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OS_WIN32_TRUE}" && test -z "${OS_WIN32_FALSE}"; then as_fn_error $? "conditional \"OS_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_BINRELOC_TRUE}" && test -z "${WITH_BINRELOC_FALSE}"; then as_fn_error $? "conditional \"WITH_BINRELOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_PTHREADS_TRUE}" && test -z "${WITH_PTHREADS_FALSE}"; then as_fn_error $? "conditional \"WITH_PTHREADS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_SAT_SOLVER_TRUE}" && test -z "${WITH_SAT_SOLVER_FALSE}"; then as_fn_error $? "conditional \"WITH_SAT_SOLVER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_CORPUS_TRUE}" && test -z "${WITH_CORPUS_FALSE}"; then as_fn_error $? "conditional \"WITH_CORPUS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_ASPELL_TRUE}" && test -z "${WITH_ASPELL_FALSE}"; then as_fn_error $? "conditional \"WITH_ASPELL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_HUNSPELL_TRUE}" && test -z "${WITH_HUNSPELL_FALSE}"; then as_fn_error $? "conditional \"WITH_HUNSPELL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SQLITE_TRUE}" && test -z "${HAVE_SQLITE_FALSE}"; then as_fn_error $? "conditional \"HAVE_SQLITE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SQLITE_TRUE}" && test -z "${HAVE_SQLITE_FALSE}"; then as_fn_error $? "conditional \"HAVE_SQLITE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ASPELL_TRUE}" && test -z "${HAVE_ASPELL_FALSE}"; then as_fn_error $? "conditional \"HAVE_ASPELL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_HUNSPELL_TRUE}" && test -z "${HAVE_HUNSPELL_FALSE}"; then as_fn_error $? "conditional \"HAVE_HUNSPELL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_EDITLINE_TRUE}" && test -z "${HAVE_EDITLINE_FALSE}"; then as_fn_error $? "conditional \"HAVE_EDITLINE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_EDITLINE_TRUE}" && test -z "${HAVE_EDITLINE_FALSE}"; then as_fn_error $? "conditional \"HAVE_EDITLINE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_JAVA_TRUE}" && test -z "${HAVE_JAVA_FALSE}"; then as_fn_error $? "conditional \"HAVE_JAVA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_JAVA_TRUE}" && test -z "${HAVE_JAVA_FALSE}"; then as_fn_error $? "conditional \"HAVE_JAVA\" 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 $as_me, 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 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" 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 Configuration files: $config_files Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status 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;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' 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"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in AS \ DLLTOOL \ OBJDUMP \ SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "build.xml") CONFIG_FILES="$CONFIG_FILES build.xml" ;; "link-grammar.pc") CONFIG_FILES="$CONFIG_FILES link-grammar.pc" ;; "link-grammar.spec") CONFIG_FILES="$CONFIG_FILES link-grammar.spec" ;; "link-grammar/Makefile") CONFIG_FILES="$CONFIG_FILES link-grammar/Makefile" ;; "link-grammar/corpus/Makefile") CONFIG_FILES="$CONFIG_FILES link-grammar/corpus/Makefile" ;; "link-grammar/minisat/Makefile") CONFIG_FILES="$CONFIG_FILES link-grammar/minisat/Makefile" ;; "link-grammar/sat-solver/Makefile") CONFIG_FILES="$CONFIG_FILES link-grammar/sat-solver/Makefile" ;; "link-grammar/link-features.h") CONFIG_FILES="$CONFIG_FILES link-grammar/link-features.h" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "data/de/Makefile") CONFIG_FILES="$CONFIG_FILES data/de/Makefile" ;; "data/en/Makefile") CONFIG_FILES="$CONFIG_FILES data/en/Makefile" ;; "data/en/words/Makefile") CONFIG_FILES="$CONFIG_FILES data/en/words/Makefile" ;; "data/lt/Makefile") CONFIG_FILES="$CONFIG_FILES data/lt/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "autopackage/default.apspec") CONFIG_FILES="$CONFIG_FILES autopackage/default.apspec" ;; "link-grammar.xcode/Makefile") CONFIG_FILES="$CONFIG_FILES link-grammar.xcode/Makefile" ;; "msvc6/Makefile") CONFIG_FILES="$CONFIG_FILES msvc6/Makefile" ;; "msvc6/link_grammar_dll/Makefile") CONFIG_FILES="$CONFIG_FILES msvc6/link_grammar_dll/Makefile" ;; "msvc6/link_grammar_exe/Makefile") CONFIG_FILES="$CONFIG_FILES msvc6/link_grammar_exe/Makefile" ;; "msvc6/link_grammar_java_dll/Makefile") CONFIG_FILES="$CONFIG_FILES msvc6/link_grammar_java_dll/Makefile" ;; "msvc9/Makefile") CONFIG_FILES="$CONFIG_FILES msvc9/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_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" eval set X " :F $CONFIG_FILES :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 ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # 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 # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo " $PACKAGE-$VERSION prefix: ${prefix} compiler: ${CC} ${CPPFLAGS} ${CFLAGS} autopackage: ${br_cv_binreloc} Posix threads: ${do_pth} Editline command-line history: ${edlin} Java interfaces: ${JNIfound} ASpell spell checker: ${ASpellFound} HunSpell spell checker: ${HunSpellFound} HunSpell dictionary location: ${HunSpellDictDir} Boolean SAT solver: ${buildSAT} Corpus statistics database: ${buildcorpus} " link-grammar/man/0000755000000000000000000000000012537603515011107 5ustar link-grammar/man/link-parser.10000644000000000000000000001221412536650433013420 0ustar .\" Hey, EMACS: -*- nroff -*- .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH LINK-GRAMMAR 1 "April 18, 2008" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME link-parser \- parses natural language sentences .SH SYNOPSIS .B link-parser .RI [language] [\-pp pp_knowledge_file] [\-c constituent_knowledge_file] [\-a affix_file] [\-ppoff] [\-coff] [\-aoff] [\-batch] [\-] .SH DESCRIPTION .PP .\" TeX users may be more comfortable with the \fB\fP and .\" \fI\fP escape sequences to invode bold face and italics, .\" respectively. In Selator, D. and Temperly, D. "Parsing English with a Link Grammar" (1991), the authors defined a new formal grammatical system called a "link grammar". A sequence of words is in the language of a link grammar if there is a way to draw "links" between words in such a way that the local requirements of each word are satisfied, the links do not cross, and the words form a consistent connected graph. The authors encoded English grammar into such a system, and wrote \fBlink\-parser\fP to parse English using this grammar. .PP This package can be used for linguistic parsing for information retrieval or extraction from natural language documents. Abiword also uses it as a grammar checker. .SH OPTIONS .TP .B \-pp pp_knowledge_file .TP .B \-c constituent_knowledge_file .TP .B \-a affix_file .TP .B \-ppoff .TP .B \-coff .TP .B \-aoff .TP .B \-batch .TP .B \- \"Can special commands be commandline arguments? .SH USE .PP link\-parser, when invoked manually, will take control of the terminal; link\-parser will then attempt to analyze the grammar of all input, unless escaped with an exclamation mark, according to the dictionary file provided as an argument. If escaped, the input will be treated as a "special command"; "!help" lists all special commands available. .PP link\-parser depends on a link\-grammar dictionary which contains lists of words and associated metadata about their grammatical properties in order to analyze sentences. A link\-grammar dictionary provided by the authors of link\-grammar is usually included with the link\-grammar package, and can often be found somewhere in the /usr/share/link\-grammar/ hierarchy. When this is the case, only the two\-letter language code needs to be specified on the command\-line. Alternatively, a user can provide their own dictionary as an argument, in which case the dictionary's directory should be specified. Hence, either of the commands .TP .B link\-parser en .TP .B link\-parser /usr/share/link\-grammar/en will run link\-parser using the english dictionary included with the parser. .PP While in a link\-parser session, some example output could be: .PP .RS .B linkparser> Reading a man page is informative. .PP ++++Time 0.00 seconds (0.01 total) .PP Found 1 linkage (1 had no P.P. violations) Unique linkage, cost vector = (UNUSED=0 DIS=0 AND=0 LEN=12) +------------------------Xp-----------------------+ | +---------Ss*g---------+ | | +-------Os-------+ | | | | +----Ds----+ | | +----Wd---+ | +--AN--+ +---Pa---+ | | | | | | | | | .PP LEFT\-WALL reading.g a man.n page.n is.v informative.a . .RE .PP A P.P. violation is a post-processing violation; it is a post\-linkage step used to reject invalid parses. The link types shown are specific to English; other langauges will have different link types. .PP link\-parser can also be used non\-interactively, either through its API, or via the \-batch option. When used with the \-batch option, link\-parser passively receives input from standard input, and when the stream finishes, it then outputs its analysis. So one could construct an ad\-hoc grammar checker by piping text through link\-parser with a batch option, and seeing what sentences fail to parse as valid: .RS .B cat thesis.txt | link\-parser /usr/share/link\-grammar/en/4.0.dict \-batch .RE .SH SEE ALSO .br Information on the shared\-library API and the link types used in the parse is avavailable at the Abiword website at .B http://www.abisource.com/projects/link-grammar/dict/index.html .br Peer\-reviewed papers explaining link\-parser can be found at the original CMU site at .B http://www.link.cs.cmu.edu/link/papers/index.html. .SH AUTHOR .nh link\-parser was written by Daniel Sleator , Davy Temperley , and John Lafferty .PP This manual page was written by Ken Bloom , for the Debian project (but may be used by others). link-grammar/man/Makefile.am0000644000000000000000000000016212536650433013142 0ustar ## Process this file with automake to produce Makefile.in. man_MANS = link-parser.1 EXTRA_DIST = link-parser.1 link-grammar/man/.cvsignore0000644000000000000000000000002512536650433013104 0ustar Makefile.in Makefile link-grammar/man/Makefile.in0000644000000000000000000003642612537603122013161 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = man DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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@ man_MANS = link-parser.1 EXTRA_DIST = link-parser.1 all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign man/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(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='$(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) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man 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-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-man \ uninstall-man1 # 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: link-grammar/autopackage/0000755000000000000000000000000012537603515012620 5ustar link-grammar/autopackage/.cvsignore0000644000000000000000000000001712536650432014615 0ustar default.apspec link-grammar/autopackage/default.apspec.in0000644000000000000000000000245712536650432016055 0ustar # -*-shell-script-*- [Meta] RootName: @abisource.org/link-grammar:@VERSION@ DisplayName: An english language parser ShortName: link-grammar Maintainer: Link-Grammar Team - http://www.abisource.com/projects/link-grammar/ Packager: Robert Staudinger Summary: An english language parser SoftwareVersion: @VERSION@ AutopackageTarget: 1.0 PackageVersion: 1 # Only uncomment InterfaceVersion if your package exposes interfaces to other software, # for instance if it includes DSOs or python/perl modules. See the developer guide for more info, # or ask on autopackage-dev if you don't understand interface versioning in autopackage. InterfaceVersion: 4.1 [Description] An english language parsrer, based on the theory of link grammars. [BuildPrepare] # create configure wrapper when building out of the source tree if [ ! -e "configure" ] ; then echo '#!/bin/bash' > configure echo '../link-grammar/configure $@' >> configure chmod +x configure fi prepareBuild --prefix=/break/if/binreloc/breaks --enable-binreloc --disable-debug [BuildUnprepare] unprepareBuild [Imports] echo '*' | import [Prepare] # avoid warning echo "nothing to prepare" [Install] #doesn't work installExe ./bin/link-parser installLib ./lib/*.so.*.*.* installData ./share/* [Uninstall] uninstallFromLog link-grammar/link-grammar/0000755000000000000000000000000012537603515012715 5ustar link-grammar/link-grammar/build-disjuncts.c0000644000000000000000000002520212536650433016165 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ /* stuff for transforming a dictionary entry into a disjunct list */ #include #include #include "disjunct-utils.h" #include "utilities.h" /* For Win32 compatibility features */ /* Temporary connectors used while converting expressions into disjunct lists */ typedef struct Tconnector_struct Tconnector; struct Tconnector_struct { char multi; /* TRUE if this is a multi-connector */ char dir; /* '-' for left and '+' for right */ Tconnector * next; const char * string; }; typedef struct clause_struct Clause; struct clause_struct { Clause * next; float cost; float maxcost; Tconnector * c; }; static void free_Tconnectors(Tconnector *e) { Tconnector * n; for(;e != NULL; e=n) { n = e->next; xfree((char *)e, sizeof(Tconnector)); } } static void free_clause_list(Clause *c) { Clause *c1; while (c != NULL) { c1 = c->next; free_Tconnectors(c->c); xfree((char *)c, sizeof(Clause)); c = c1; } } #ifdef UNUSED_FUNCTION /** * This builds a new copy of the connector list pointed to by c. * Strings, as usual, are not copied. */ static Tconnector * copy_Tconnectors(Tconnector * c) { Tconnector *c1; if (c == NULL) return NULL; c1 = (Tconnector *) xalloc(sizeof(Tconnector)); *c1 = *c; c1->next = copy_Tconnectors(c->next); return c1; } /** * This builds a new copy of the clause pointed to by d (except for the * next field which is set to NULL). Strings, as usual, are not copied. */ static Clause * copy_clause(Clause * d) { Clause * d1; if (d == NULL) return NULL; d1 = (Clause *) xalloc(sizeof(Clause)); *d1 = *d; d1->next = NULL; d1->c = copy_Tconnectors(d->c); return d1; } #endif /* UNUSED_FUNCTION */ /** * reverse the order of the list e. destructive */ static Tconnector * Treverse(Tconnector *e) { Tconnector * head, *x; head = NULL; while (e != NULL) { x = e->next; e->next = head; head = e; e = x; } return head; } /** * reverse the order of the list e. destructive */ static Connector * reverse(Connector *e) { Connector * head, *x; head = NULL; while (e != NULL) { x = e->next; e->next = head; head = e; e = x; } return head; } /** * Builds a new list of connectors that is the catenation of e1 with e2. * does not effect lists e1 or e2. Order is maintained. */ static Tconnector * catenate(Tconnector * e1, Tconnector * e2) { Tconnector * e, * head; head = NULL; for (;e1 != NULL; e1 = e1->next) { e = (Tconnector *) xalloc(sizeof(Tconnector)); *e = *e1; e->next = head; head = e; } for (;e2 != NULL; e2 = e2->next) { e = (Tconnector *) xalloc(sizeof(Tconnector)); *e = *e2; e->next = head; head = e; } return Treverse(head); } /** * build the connector for the terminal node n */ static Tconnector * build_terminal(Exp * e) { Tconnector * c; c = (Tconnector *) xalloc(sizeof(Tconnector)); c->string = e->u.string; c->multi = e->multi; c->dir = e->dir; c->next = NULL; return c; } #ifdef UNUSED_FUNCTION static xxxfloat-int maxcost_of_expression(Exp *e) { E_list * e_list; int m, m1; m = 0; if ((e->type == AND_type) || (e->type == OR_type)) { for (e_list = e->u.l; e_list != NULL; e_list = e_list->next) { m1 = maxcost_of_expression(e_list->e); m = MAX(m, m1); } } return (m + e->cost); } /** * This returns the maximum maxcost of any disjunct in the sentence * Assumes the sentence expressions have been constructed */ static xxx-float-int maxcost_of_sentence(Sentence sent) { X_node * x; int w, m, m1; m = 0; for (w = 0; w < sent->length; w++) { for (x = sent->word[w].x; x != NULL; x = x->next) { m1 = maxcost_of_expression(x->exp), m = MAX(m, m1); } } return m; } #endif /* UNUSED_FUNCTION */ /** * Build the clause for the expression e. Does not change e */ static Clause * build_clause(Exp *e) { Clause *c = NULL, *c1, *c2, *c3, *c4, *c_head; E_list * e_list; assert(e != NULL, "build_clause called with null parameter"); if (e->type == AND_type) { c1 = (Clause *) xalloc(sizeof (Clause)); c1->c = NULL; c1->next = NULL; c1->cost = 0.0f; c1->maxcost = 0.0f ; for (e_list = e->u.l; e_list != NULL; e_list = e_list->next) { c2 = build_clause(e_list->e); c_head = NULL; for (c3 = c1; c3 != NULL; c3 = c3->next) { for (c4 = c2; c4 != NULL; c4 = c4->next) { c = (Clause *) xalloc(sizeof (Clause)); c->cost = c3->cost + c4->cost; c->maxcost = fmaxf(c3->maxcost,c4->maxcost); c->c = catenate(c3->c, c4->c); c->next = c_head; c_head = c; } } free_clause_list(c1); free_clause_list(c2); c1 = c_head; } c = c1; } else if (e->type == OR_type) { /* we'll catenate the lists of clauses */ c = NULL; for (e_list = e->u.l; e_list != NULL; e_list = e_list->next) { c1 = build_clause(e_list->e); while(c1 != NULL) { c3 = c1->next; c1->next = c; c = c1; c1 = c3; } } } else if (e->type == CONNECTOR_type) { c = (Clause *) xalloc(sizeof(Clause)); c->c = build_terminal(e); c->cost = 0.0f; c->maxcost = 0.0f; c->next = NULL; } else { assert(FALSE, "an expression node with no type"); } /* c now points to the list of clauses */ for (c1 = c; c1 != NULL; c1 = c1->next) { c1->cost += e->cost; /* c1->maxcost = MAX(c1->maxcost,e->cost); */ /* Above is how Dennis had it. Someone changed it to below. * However, this can sometimes lead to a maxcost that is less * than the cost ! -- which seems wrong to me ... seems Dennis * had it right!? */ c1->maxcost += e->cost; } return c; } /* #define DEBUG */ #ifdef DEBUG /* Misc printing functions, useful for debugging */ static void print_Tconnector_list(Tconnector * e) { for (;e != NULL; e=e->next) { if (e->multi) printf("@"); printf("%s",e->string); printf("%c", e->dir); if (e->next != NULL) printf(" "); } } static void print_clause_list(Clause * c) { for (;c != NULL; c=c->next) { printf(" Clause: "); printf("(%4.2f, %4.2f) ", c->cost, c->maxcost); print_Tconnector_list(c->c); printf("\n"); } } static void print_connector_list(Connector * e) { for (;e != NULL; e=e->next) { printf("%s",e->string); if (e->label != NORMAL_LABEL) { printf("%3d", e->label); } else { printf(" "); } if (e->next != NULL) printf(" "); } } static void print_disjunct_list(Disjunct * c) { for (;c != NULL; c=c->next) { printf("%10s: ", c->string); printf("(%f) ", c->cost); print_connector_list(c->left); printf(" <--> "); print_connector_list(c->right); printf("\n"); } } #endif /* DEBUG */ /** * Build a new list of connectors starting from the Tconnectors * in the list pointed to by e. Keep only those whose strings whose * direction has the value c. */ static Connector * extract_connectors(Tconnector *e, int c) { Connector *e1; if (e == NULL) return NULL; if (e->dir == c) { e1 = connector_new(); e1->next = extract_connectors(e->next,c); e1->multi = e->multi; e1->string = e->string; e1->word = 0; return e1; } else { return extract_connectors(e->next,c); } } /** * Build a disjunct list out of the clause list c. * string is the print name of word that generated this disjunct. */ static Disjunct * build_disjunct(Clause * cl, const char * string, float cost_cutoff) { Disjunct *dis, *ndis; dis = NULL; for (; cl != NULL; cl = cl->next) { if (cl->maxcost <= cost_cutoff) { ndis = (Disjunct *) xalloc(sizeof(Disjunct)); ndis->left = reverse(extract_connectors(cl->c, '-')); ndis->right = reverse(extract_connectors(cl->c, '+')); ndis->string = string; ndis->cost = cl->cost; ndis->next = dis; dis = ndis; } } return dis; } Disjunct * build_disjuncts_for_X_node(X_node * x, float cost_cutoff) { Clause *c ; Disjunct * dis; /* print_expression(x->exp); printf("\n"); */ c = build_clause(x->exp); /* print_clause_list(c); */ dis = build_disjunct(c, x->string, cost_cutoff); /* print_disjunct_list(dis); */ free_clause_list(c); return dis; } #if DEBUG /* There is a much better print_expression elsewhere * This one is for low-level debug. */ void prt_exp(Exp *e, int i) { if (e == NULL) return; for(int j =0; jtype, e->dir, e->multi, e->cost); if (e->type != CONNECTOR_type) { E_list *l = e->u.l; while(l) { prt_exp(l->e, i+2); l = l->next; } } else { for(int j =0; ju.string); } } #endif /** * Build a list of disjuncts. * * This is mostly used only for counting the number of disjuncts * (but is otherwise "almost" obsolete ??) */ Disjunct * build_disjuncts_for_dict_node(Dict_node *dn) { Disjunct *dj; X_node x; x.exp = dn->exp; x.string = dn->string; dj = build_disjuncts_for_X_node(&x, MAX_CONNECTOR_COST); /* print_disjunct_list(dj); */ return dj; } /** * build_word_expressions() -- build list of expressions for a word * * Looks up the word s in the dictionary. Returns NULL if it's not there. * If there, it builds the list of expressions for the word, and returns * a pointer to it. */ X_node * build_word_expressions(Dictionary dict, const char * s) { Dict_node * dn, *dn_head; X_node * x, * y; dn_head = dictionary_lookup_list(dict, s); dn = dn_head; x = NULL; while (dn != NULL) { y = (X_node *) xalloc(sizeof(X_node)); y->next = x; x = y; x->exp = copy_Exp(dn->exp); x->string = dn->string; dn = dn->right; } free_lookup_list (dn_head); return x; } /** * Turn sentence expressions into disjuncts. * Sentence expressions must have been built, before calling this routine. */ void build_sentence_disjuncts(Sentence sent, float cost_cutoff) { Disjunct * d; X_node * x; int w; for (w = 0; w < sent->length; w++) { d = NULL; for (x = sent->word[w].x; x != NULL; x = x->next) { Disjunct *dx = build_disjuncts_for_X_node(x, cost_cutoff); d = catenate_disjuncts(dx, d); } sent->word[w].d = d; } } link-grammar/link-grammar/Makefile.am0000644000000000000000000001451112536650433014753 0ustar # # Automake file for building both liblink-grammar.so and # the command line application link-parser. # if WITH_SAT_SOLVER SUBDIRS=minisat sat-solver endif if WITH_CORPUS SUBDIRS=corpus endif if OS_WIN32 install-libtool-import-lib: $(INSTALL) .libs/liblink-grammar.dll.a $(DESTDIR)$(libdir) uninstall-libtool-import-lib: -rm $(DESTDIR)$(libdir)/liblink-grammar.dll.a else install-libtool-import-lib: uninstall-libtool-import-lib: endif DEFS = @DEFS@ -DVERSION=\"@VERSION@\" -DDICTIONARY_DIR=\"$(pkgdatadir)\" INCLUDES = -I$(top_srcdir) $(ANSI_CFLAGS) $(LINK_CFLAGS) $(HUNSPELL_CFLAGS) lib_LTLIBRARIES = liblink-grammar.la if HAVE_JAVA lib_LTLIBRARIES += liblink-grammar-java.la endif liblink_grammar_la_LDFLAGS = -version-info @VERSION_INFO@ -export-dynamic -no-undefined -export-symbols $(srcdir)/link-grammar.def liblink_grammar_java_la_LDFLAGS = -version-info @VERSION_INFO@ -export-dynamic -no-undefined -export-symbols $(srcdir)/link-grammar-java.def if OS_WIN32 liblink_grammar_la_LDFLAGS += -D_JNI_IMPLEMENTATION_ -Wl,--kill-at liblink_grammar_java_la_LDFLAGS += -D_JNI_IMPLEMENTATION_ -Wl,--kill-at endif liblink_grammar_la_LIBADD = ${REGEX_LIBS} liblink_grammar_java_la_LIBADD = liblink-grammar.la ${REGEX_LIBS} if HAVE_HUNSPELL liblink_grammar_la_LIBADD += ${HUNSPELL_LIBS} liblink_grammar_java_la_LIBADD += ${HUNSPELL_LIBS} endif if HAVE_ASPELL liblink_grammar_la_LIBADD += ${ASPELL_LIBS} endif if WITH_SAT_SOLVER liblink_grammar_la_LIBADD += $(top_builddir)/link-grammar/sat-solver/libsat-solver.la liblink_grammar_la_LIBADD += $(top_builddir)/link-grammar/minisat/libminisat.la liblink_grammar_java_la_LIBADD += $(top_builddir)/link-grammar/sat-solver/libsat-solver.la liblink_grammar_java_la_LIBADD += $(top_builddir)/link-grammar/minisat/libminisat.la endif if WITH_CORPUS liblink_grammar_la_LIBADD += $(top_builddir)/link-grammar/corpus/liblink-corpus.la ${SQLITE3_LIBS} liblink_grammar_java_la_LIBADD += $(top_builddir)/link-grammar/corpus/liblink-corpus.la ${SQLITE3_LIBS} endif if WITH_BINRELOC liblink_grammar_la_LIBADD += -lpthread liblink_grammar_java_la_LIBADD += -lpthread endif if WITH_PTHREADS liblink_grammar_la_LIBADD += -lpthread liblink_grammar_java_la_LIBADD += -lpthread endif # Math libraries are needed for floorf, etc. liblink_grammar_la_LIBADD += -lm liblink_grammar_la_SOURCES = \ analyze-linkage.c \ and.c \ api.c \ build-disjuncts.c \ command-line.c \ constituents.c \ count.c \ disjunct-utils.c \ disjuncts.c \ error.c \ expand.c \ extract-links.c \ fast-match.c \ idiom.c \ massage.c \ post-process.c \ pp_knowledge.c \ pp_lexer.c \ pp_linkset.c \ preparation.c \ print.c \ print-util.c \ prune.c \ read-dict.c \ read-regex.c \ regex-morph.c \ resources.c \ spellcheck-aspell.c \ spellcheck-hun.c \ string-set.c \ tokenize.c \ utilities.c \ word-file.c \ word-utils.c \ prefix.c \ api.h \ api-structures.h \ api-types.h \ analyze-linkage.h \ and.h \ build-disjuncts.h \ command-line.h \ constituents.h \ count.h \ disjunct-utils.h \ disjuncts.h \ error.h \ expand.h \ externs.h \ extract-links.h \ fast-match.h \ idiom.h \ link-includes.h \ massage.h \ post-process.h \ pp_knowledge.h \ pp_lexer.h \ pp_linkset.h \ preparation.h \ print.h \ print-util.h \ prune.h \ read-dict.h \ read-regex.h \ regex-morph.h \ resources.h \ spellcheck.h \ string-set.h \ structures.h \ tokenize.h \ utilities.h \ word-file.h \ word-utils.h liblink_grammar_includedir = $(includedir)/link-grammar liblink_grammar_include_HEADERS = \ link-includes.h \ link-features.h liblink_grammar_java_la_SOURCES = \ jni-client.h \ jni-client.c EXTRA_DIST= \ prefix.h \ autoit/_LGTest.au3 \ autoit/_LinkGrammar.au3 \ autoit/README \ java/README \ java/org/linkgrammar/JSONReader.java \ java/org/linkgrammar/LGConfig.java \ java/org/linkgrammar/LGRemoteClient.java \ java/org/linkgrammar/LGService.java \ java/org/linkgrammar/Linkage.java \ java/org/linkgrammar/LinkGrammar.java \ java/org/linkgrammar/Link.java \ java/org/linkgrammar/ParseResult.java \ link-grammar.def \ link-grammar-java.def # ----------------------------------------------------------- # Directives to build the link-parser command-line application bin_PROGRAMS=link-parser link_parser_SOURCES = link-parser.c link_parser_LDADD = $(LIBEDIT_LIBS) if WITH_SAT_SOLVER link_parser_LDADD += $(top_builddir)/link-grammar/sat-solver/libsat-solver.la link_parser_LDADD += $(top_builddir)/link-grammar/minisat/libminisat.la endif link_parser_LDADD += liblink-grammar.la # ----------------------------------------------------------- install-data-local: install-libtool-import-lib uninstall-local: uninstall-libtool-import-lib link-grammar/link-grammar/prune.h0000644000000000000000000000226512536650433014224 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ void prune(Sentence sent); int power_prune(Sentence sent, int mode, Parse_Options opts); void pp_and_power_prune(Sentence sent, int mode, Parse_Options opts); int prune_match(int dist, Connector * left, Connector * right); void expression_prune(Sentence sent); link-grammar/link-grammar/utilities.c0000644000000000000000000004630012536650433015077 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* Copyright 2008, 2009 Linas Vepstas */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include #include #include #include #include #ifdef USE_PTHREADS #include #endif #ifdef ENABLE_BINRELOC #include "prefix.h" #endif /* BINRELOC */ #ifdef _WIN32 # include # define DIR_SEPARATOR '\\' # define PATH_SEPARATOR ';' #else # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #define IS_DIR_SEPARATOR(ch) (DIR_SEPARATOR == (ch)) #ifdef _MSC_VER #define DICTIONARY_DIR "." #endif #define DEFAULTPATH DICTIONARY_DIR /* This file contains certain general utilities. */ int verbosity; /* ============================================================= */ /* String utilities */ char *safe_strdup(const char *u) { if(u) return strdup(u); return NULL; } /** * Copies as much of v into u as it can assuming u is of size usize * guaranteed to terminate u with a '\0'. */ void safe_strcpy(char *u, const char * v, size_t usize) { strncpy(u, v, usize-1); u[usize-1] = '\0'; } /** * A version of strlcpy, for those systems that don't have it. */ size_t lg_strlcpy(char * dest, const char *src, size_t size) { size_t i=0; while ((imax_space_used = 0; s->space_in_use = 0; s->max_external_space_used = 0; s->external_space_in_use = 0; return s; } void init_memusage(void) { #ifdef USE_PTHREADS pthread_once(&space_key_once, space_key_alloc); #else static int mem_inited = FALSE; if (mem_inited) return; mem_inited = TRUE; #endif do_init_memusage(); } static inline space_t *getspace(void) { #ifdef USE_PTHREADS space_t *s = pthread_getspecific(space_key); if (s) return s; return do_init_memusage(); #else return &space; #endif } /** * space used but not yet freed during parse */ size_t get_space_in_use(void) { return getspace()->space_in_use; } /** * maximum space used during the parse */ size_t get_max_space_used(void) { return getspace()->max_space_used; } #else /* TRACK_SPACE_USAGE */ void init_memusage(void) {} size_t get_space_in_use(void) { return 0; } size_t get_max_space_used(void) { return 0; } #endif /* TRACK_SPACE_USAGE */ /** * alloc some memory, and keep track of the space allocated. */ void * xalloc(size_t size) { void * p = malloc(size); #ifdef TRACK_SPACE_USAGE space_t *s = getspace(); s->space_in_use += size; if (s->max_space_used < s->space_in_use) s->max_space_used = s->space_in_use; #endif /* TRACK_SPACE_USAGE */ if ((p == NULL) && (size != 0)) { prt_error("Fatal Error: Ran out of space.\n"); abort(); exit(1); } return p; } void * xrealloc(void *p, size_t oldsize, size_t newsize) { #ifdef TRACK_SPACE_USAGE space_t *s = getspace(); s->space_in_use -= oldsize; #endif /* TRACK_SPACE_USAGE */ p = realloc(p, newsize); if ((p == NULL) && (newsize != 0)) { prt_error("Fatal Error: Ran out of space on realloc.\n"); abort(); exit(1); } #ifdef TRACK_SPACE_USAGE s->space_in_use += newsize; if (s->max_space_used < s->space_in_use) s->max_space_used = s->space_in_use; #endif /* TRACK_SPACE_USAGE */ return p; } #ifdef TRACK_SPACE_USAGE void xfree(void * p, size_t size) { getspace()->space_in_use -= size; free(p); } #endif /* TRACK_SPACE_USAGE */ void * exalloc(size_t size) { void * p = malloc(size); #ifdef TRACK_SPACE_USAGE space_t *s = getspace(); s->external_space_in_use += size; if (s->max_external_space_used < s->external_space_in_use) s->max_external_space_used = s->external_space_in_use; #endif /* TRACK_SPACE_USAGE */ if ((p == NULL) && (size != 0)) { prt_error("Fatal Error: Ran out of space.\n"); abort(); exit(1); } return p; } #ifdef TRACK_SPACE_USAGE void exfree(void * p, size_t size) { getspace()->external_space_in_use -= size; free(p); } #endif /* TRACK_SPACE_USAGE */ /* =========================================================== */ /* File path and dictionary open routines below */ char * join_path(const char * prefix, const char * suffix) { char * path; int path_len; path_len = strlen(prefix) + 1 /* len(DIR_SEPARATOR) */ + strlen(suffix); path = (char *) malloc(path_len + 1); strcpy(path, prefix); path[strlen(path)+1] = '\0'; path[strlen(path)] = DIR_SEPARATOR; strcat(path, suffix); return path; } #ifdef _WIN32 /* borrowed from glib */ /* Used only for Windows builds */ static char* path_get_dirname (const char *file_name) { register char *base; register int len; base = strrchr (file_name, DIR_SEPARATOR); #ifdef _WIN32 { char *q = strrchr (file_name, '/'); if (base == NULL || (q != NULL && q > base)) base = q; } #endif if (!base) { #ifdef _WIN32 if (is_utf8_alpha (file_name) && file_name[1] == ':') { char drive_colon_dot[4]; drive_colon_dot[0] = file_name[0]; drive_colon_dot[1] = ':'; drive_colon_dot[2] = '.'; drive_colon_dot[3] = '\0'; return safe_strdup (drive_colon_dot); } #endif return safe_strdup ("."); } while (base > file_name && IS_DIR_SEPARATOR (*base)) base--; #ifdef _WIN32 /* base points to the char before the last slash. * * In case file_name is the root of a drive (X:\) or a child of the * root of a drive (X:\foo), include the slash. * * In case file_name is the root share of an UNC path * (\\server\share), add a slash, returning \\server\share\ . * * In case file_name is a direct child of a share in an UNC path * (\\server\share\foo), include the slash after the share name, * returning \\server\share\ . */ if (base == file_name + 1 && is_utf8_alpha (file_name) && file_name[1] == ':') base++; else if (IS_DIR_SEPARATOR (file_name[0]) && IS_DIR_SEPARATOR (file_name[1]) && file_name[2] && !IS_DIR_SEPARATOR (file_name[2]) && base >= file_name + 2) { const char *p = file_name + 2; while (*p && !IS_DIR_SEPARATOR (*p)) p++; if (p == base + 1) { len = (int) strlen (file_name) + 1; base = (char *)malloc(len + 1); strcpy (base, file_name); base[len-1] = DIR_SEPARATOR; base[len] = 0; return base; } if (IS_DIR_SEPARATOR (*p)) { p++; while (*p && !IS_DIR_SEPARATOR (*p)) p++; if (p == base + 1) base++; } } #endif len = (int) 1 + base - file_name; base = (char *)malloc(len + 1); memmove (base, file_name, len); base[len] = 0; return base; } #endif /* _WIN32 */ /* global - but thats OK, since this is set only during initialization, * and is is thenceforth a read-only item. So it doesn't need to be * locked. */ static char * custom_data_dir = NULL; void dictionary_set_data_dir(const char * path) { if (custom_data_dir) free (custom_data_dir); custom_data_dir = safe_strdup(path); } char * dictionary_get_data_dir(void) { #ifdef _WIN32 HINSTANCE hInstance; #endif char * data_dir = NULL; if (custom_data_dir != NULL) { data_dir = safe_strdup(custom_data_dir); return data_dir; } #ifdef ENABLE_BINRELOC data_dir = safe_strdup (BR_DATADIR("/link-grammar")); #elif defined(_WIN32) /* Dynamically locate library and return containing directory */ hInstance = GetModuleHandle("link-grammar.dll"); if(hInstance != NULL) { char dll_path[MAX_PATH]; if(GetModuleFileName(hInstance,dll_path,MAX_PATH)) { #ifdef _DEBUG prt_error("Info: GetModuleFileName=%s\n", (dll_path?dll_path:"NULL")); #endif data_dir = path_get_dirname(dll_path); } } #endif return data_dir; } /** * object_open() -- dictopen() - open a dictionary * * This function is used to open a dictionary file or a word file, * or any associated data file (like a post process knowledge file). * * It works as follows. If the file name begins with a "/", then * it's assumed to be an absolute file name and it tries to open * that exact file. * * If the filename does not begin with a "/", then it uses the * dictpath mechanism to find the right file to open. This looks * for the file in a sequence of directories until it finds it. The * sequence of directories is specified in a dictpath string, in * which each directory is followed by a ":". */ void * object_open(const char *filename, void * (*opencb)(const char *, void *), void * user_data) { char completename[MAX_PATH_NAME+1]; char fulldictpath[MAX_PATH_NAME+1]; static char prevpath[MAX_PATH_NAME+1] = ""; static int first_time_ever = 1; char *pos, *oldpos; int filenamelen, len; void *fp; /* Record the first path ever used, so that we can recycle it */ if (first_time_ever) { strncpy (prevpath, filename, MAX_PATH_NAME); prevpath[MAX_PATH_NAME] = 0; pos = strrchr(prevpath, DIR_SEPARATOR); if (pos) *pos = 0; pos = strrchr(prevpath, DIR_SEPARATOR); if (pos) *(pos+1) = 0; first_time_ever = 0; } /* Look for absolute filename. * Unix: starts with leading slash. * Windows: starts with C:\ except that the drive letter may differ. */ if ((filename[0] == '/') || ((filename[1] == ':') && (filename[2] == '\\'))) { /* fopen returns NULL if the file does not exist. */ fp = opencb(filename, user_data); if (fp) return fp; } { char * data_dir = dictionary_get_data_dir(); #ifdef _DEBUG prt_error("Info: data_dir=%s\n", (data_dir?data_dir:"NULL")); #endif if (data_dir) { snprintf(fulldictpath, MAX_PATH_NAME, "%s%c%s%c", data_dir, PATH_SEPARATOR, DEFAULTPATH, PATH_SEPARATOR); free(data_dir); } else { /* Always make sure that it ends with a path * separator char for the below while() loop. * For unix, this should look like: * /usr/share/link-grammar:.:data:..:../data: * For windows: * C:\SOMWHERE;.;data;..;..\data; */ snprintf(fulldictpath, MAX_PATH_NAME, "%s%c%s%c%s%c%s%c%s%c%s%c%s%c", prevpath, PATH_SEPARATOR, DEFAULTPATH, PATH_SEPARATOR, ".", PATH_SEPARATOR, "data", PATH_SEPARATOR, "..", PATH_SEPARATOR, "..", DIR_SEPARATOR, "data", PATH_SEPARATOR); } } /* Now fulldictpath is our dictpath, where each entry is * followed by a ":" including the last one */ filenamelen = strlen(filename); len = strlen(fulldictpath)+ filenamelen + 1 + 1; oldpos = fulldictpath; while ((pos = strchr(oldpos, PATH_SEPARATOR)) != NULL) { strncpy(completename, oldpos, (pos-oldpos)); *(completename+(pos-oldpos)) = DIR_SEPARATOR; strcpy(completename+(pos-oldpos)+1,filename); #ifdef _DEBUG prt_error("Info: object_open() trying %s\n", completename); #endif if ((fp = opencb(completename, user_data)) != NULL) { return fp; } oldpos = pos+1; } return NULL; } /* XXX static global variable used during dictionary open */ static char *path_found = NULL; static void * dict_file_open(const char * fullname, void * user_data) { const char * how = (const char *) user_data; FILE * fh = fopen(fullname, how); if (fh && NULL == path_found) { path_found = strdup (fullname); prt_error("Info: Dictionary found at %s\n", fullname); } return (void *) fh; } FILE *dictopen(const char *filename, const char *how) { FILE * fh = NULL; void * ud = (void *) how; /* If not the first time through, look for the other dictionaries * in the *same* directory in which the first one was found. * (The first one is typcailly "en/4.0.dict") * The global "path_found" records where the first dict was found. * The goal here is to avoid fractured install insanity. */ if (path_found) { size_t sz = strlen (path_found) + strlen(filename) + 1; char * fullname = (char *) malloc (sz); strcpy(fullname, path_found); strcat(fullname, filename); fh = (FILE *) object_open(fullname, dict_file_open, ud); free(fullname); } else { fh = (FILE *) object_open(filename, dict_file_open, ud); if (path_found) { char * root = strstr(path_found, filename); *root = 0; } } return fh; } /* ======================================================== */ /* Locale routines */ #ifdef _WIN32 static char * win32_getlocale (void) { LCID lcid; LANGID langid; char *ev; int primary, sub; char bfr[64]; char iso639[10]; char iso3166[10]; const char *script = NULL; /* Let the user override the system settings through environment * variables, as on POSIX systems. Note that in GTK+ applications * since GTK+ 2.10.7 setting either LC_ALL or LANG also sets the * Win32 locale and C library locale through code in gtkmain.c. */ if (((ev = getenv ("LC_ALL")) != NULL && ev[0] != '\0') || ((ev = getenv ("LC_MESSAGES")) != NULL && ev[0] != '\0') || ((ev = getenv ("LANG")) != NULL && ev[0] != '\0')) return safe_strdup (ev); lcid = GetThreadLocale (); if (!GetLocaleInfo (lcid, LOCALE_SISO639LANGNAME, iso639, sizeof (iso639)) || !GetLocaleInfo (lcid, LOCALE_SISO3166CTRYNAME, iso3166, sizeof (iso3166))) return safe_strdup ("C"); /* Strip off the sorting rules, keep only the language part. */ langid = LANGIDFROMLCID (lcid); /* Split into language and territory part. */ primary = PRIMARYLANGID (langid); sub = SUBLANGID (langid); /* Handle special cases */ switch (primary) { case LANG_AZERI: switch (sub) { case SUBLANG_AZERI_LATIN: script = "@Latn"; break; case SUBLANG_AZERI_CYRILLIC: script = "@Cyrl"; break; } break; case LANG_SERBIAN: /* LANG_CROATIAN == LANG_SERBIAN */ switch (sub) { case SUBLANG_SERBIAN_LATIN: case 0x06: /* Serbian (Latin) - Bosnia and Herzegovina */ script = "@Latn"; break; } break; case LANG_UZBEK: switch (sub) { case SUBLANG_UZBEK_LATIN: script = "@Latn"; break; case SUBLANG_UZBEK_CYRILLIC: script = "@Cyrl"; break; } break; } strcat (bfr, iso639); strcat (bfr, "_"); strcat (bfr, iso3166); if (script) strcat (bfr, script); return safe_strdup (bfr); } #endif char * get_default_locale(void) { char * locale, * needle; locale = NULL; #ifdef _WIN32 if(!locale) locale = win32_getlocale (); #endif if(!locale) locale = safe_strdup (getenv ("LANG")); #if defined(HAVE_LC_MESSAGES) if(!locale) locale = safe_strdup (setlocale (LC_MESSAGES, NULL)); #endif if(!locale) locale = safe_strdup (setlocale (LC_ALL, NULL)); if(!locale || strcmp(locale, "C") == 0) { free(locale); locale = safe_strdup("en"); } /* strip off "@euro" from en_GB@euro */ if ((needle = strchr (locale, '@')) != NULL) *needle = '\0'; /* strip off ".UTF-8" from en_GB.UTF-8 */ if ((needle = strchr (locale, '.')) != NULL) *needle = '\0'; /* strip off "_GB" from en_GB */ if ((needle = strchr (locale, '_')) != NULL) *needle = '\0'; return locale; } /* ========================== END OF FILE =================== */ link-grammar/link-grammar/api-types.h0000644000000000000000000000552112536650433015004 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #ifndef _API_TYPES_H_ #define _API_TYPES_H_ #define MAX_TOKEN_LENGTH 50 /* maximum number of chars in a token */ /* MAX_SENTENCE cannot be more than 254, because word MAX_SENTENCE+1 is * used to indicate that nothing can connect to this connector, and this * should fit in one byte (if the word field of a connector is an * unsigned char). */ #define MAX_SENTENCE 250 /* maximum number of words in a sentence */ #define MAX_LINKS (2*MAX_SENTENCE-3) /* maximum number of links allowed */ /* "public" typedefs */ typedef struct And_data_s And_data; typedef struct Connector_struct Connector; typedef struct Cost_Model_s Cost_Model; typedef struct Dict_node_struct Dict_node; typedef struct Domain_s Domain; typedef struct DTreeLeaf_s DTreeLeaf; typedef struct Image_node_struct Image_node; typedef struct Label_node_s Label_node; typedef struct Linkage_info_struct Linkage_info; typedef struct Parse_info_struct *Parse_info; typedef struct Postprocessor_s Postprocessor; typedef struct PP_data_s PP_data; typedef struct PP_info_s PP_info; typedef struct Regex_node_s Regex_node; typedef struct Resources_s * Resources; typedef struct Sublinkage_s Sublinkage; /* Some private typedefs */ typedef char Boolean; typedef struct analyze_context_s analyze_context_t; typedef struct count_context_s count_context_t; typedef struct match_context_s match_context_t; typedef struct Connector_set_s Connector_set; typedef struct Disjunct_struct Disjunct; typedef struct Exp_struct Exp; typedef struct E_list_struct E_list; typedef struct Link_s Link; typedef struct List_o_links_struct List_o_links; typedef struct Parse_set_struct Parse_set; typedef struct String_set_s String_set; typedef struct Word_struct Word; typedef struct Word_file_struct Word_file; typedef struct X_table_connector_struct X_table_connector; typedef struct pp_knowledge_s pp_knowledge; typedef struct corpus_s Corpus; typedef struct sense_s Sense; typedef struct cluster_s Cluster; #endif link-grammar/link-grammar/sat-solver/0000755000000000000000000000000012537603145015013 5ustar link-grammar/link-grammar/sat-solver/Makefile.am0000644000000000000000000000132412536650433017050 0ustar VERSION=0.0.1 dnl Version info for libraries = CURRENT:REVISION:AGE SATSOLVER_VERSION_INFO=1:0:1 libsat_solver_la_LDFLAGS = -version-info $(SATSOLVER_VERSION_INFO) INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/link-grammar -I$(top_srcdir)/link-grammar/minisat libsat_solver_includedir = $(includedir)/link-grammar $(includedir)/link-grammar/minisat lib_LTLIBRARIES = libsat-solver.la libsat_solver_la_SOURCES = \ clock.hpp \ fast-sprintf.cpp \ fast-sprintf.hpp \ guiding.hpp \ matrix-ut.hpp \ sat-encoder.cpp \ sat-encoder.hpp \ sat-encoder.h \ trie.hpp \ util.cpp \ util.hpp \ variables.cpp \ variables.hpp \ word-tag.cpp \ word-tag.hpp link-grammar/link-grammar/sat-solver/Makefile0000644000000000000000000005440112537603144016456 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # link-grammar/sat-solver/Makefile. Generated from Makefile.in by configure. # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/link-grammar pkgincludedir = $(includedir)/link-grammar pkglibdir = $(libdir)/link-grammar pkglibexecdir = $(libexecdir)/link-grammar 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 = x86_64-unknown-linux-gnu host_triplet = x86_64-unknown-linux-gnu subdir = link-grammar/sat-solver DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libsat_solver_la_LIBADD = am_libsat_solver_la_OBJECTS = fast-sprintf.lo sat-encoder.lo util.lo \ variables.lo word-tag.lo libsat_solver_la_OBJECTS = $(am_libsat_solver_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent am__v_lt_1 = libsat_solver_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(libsat_solver_la_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_$(V)) am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I. depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_$(V)) am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_$(V)) am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) 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_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libsat_solver_la_SOURCES) DIST_SOURCES = $(libsat_solver_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing aclocal-1.14 AMTAR = $${TAR-tar} AM_DEFAULT_VERBOSITY = 1 AR = ar AS = as ASPELL_CFLAGS = ASPELL_LIBS = AUTOCONF = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing autoconf AUTOHEADER = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing autoheader AUTOMAKE = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing automake-1.14 AWK = gawk BINRELOC_CFLAGS = BINRELOC_LIBS = CC = gcc CCDEPMODE = depmode=gcc3 CFLAGS = -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE CPP = gcc -E CPPFLAGS = CXX = g++ CXXCPP = g++ -E CXXDEPMODE = depmode=gcc3 CXXFLAGS = -g -O2 CYGPATH_W = echo DEFS = -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"link-grammar\" -DVERSION=\"4.7.4\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_TOWUPPER=1 -DDEBUG_MEMORY=0 -DHAVE_LOCALE_H=1 -DHAVE_LC_MESSAGES=1 -DHAVE_REGEXEC=1 DEPDIR = .deps DLLTOOL = dlltool DSYMUTIL = DUMPBIN = ECHO_C = ECHO_N = -n ECHO_T = EGREP = /bin/grep -E EXEEXT = FGREP = /bin/grep -F GREP = /bin/grep HUNSPELL_CFLAGS = HUNSPELL_LIBS = INSTALL = /usr/bin/install -c INSTALL_DATA = ${INSTALL} -m 644 INSTALL_PROGRAM = ${INSTALL} INSTALL_SCRIPT = ${INSTALL} INSTALL_STRIP_PROGRAM = $(install_sh) -c -s LD = /usr/bin/ld -m elf_x86_64 LDFLAGS = LIBEDIT_CFLAGS = LIBEDIT_LIBS = LIBOBJS = LIBS = LIBTOOL = $(SHELL) $(top_builddir)/libtool LINK_CFLAGS = -Wall -Wextra -Wsign-compare -Werror-implicit-function-declaration -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wpacked -Wswitch-enum -Wmissing-format-attribute -Wstrict-aliasing=2 -Winit-self -Wunsafe-loop-optimizations -Wdeclaration-after-statement -Wold-style-definition -Wno-missing-field-initializers -Wno-unused-parameter -Wno-attributes -Wno-long-long -Winline -fno-strict-aliasing LINK_MAJOR_VERSION = 4 LINK_MICRO_VERSION = 4 LINK_MINOR_VERSION = 7 LIPO = LN_S = ln -s LTLIBOBJS = MAINT = MAKEINFO = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing makeinfo MANIFEST_TOOL = : MKDIR_P = /bin/mkdir -p NM = /usr/bin/nm -B NMEDIT = OBJDUMP = objdump OBJEXT = o OTOOL = OTOOL64 = PACKAGE = link-grammar PACKAGE_BUGREPORT = PACKAGE_NAME = PACKAGE_STRING = PACKAGE_TARNAME = PACKAGE_URL = PACKAGE_VERSION = PATH_SEPARATOR = : PKG_CONFIG = /usr/bin/pkg-config PKG_CONFIG_LIBDIR = PKG_CONFIG_PATH = RANLIB = ranlib REGEX_LIBS = SED = /bin/sed SET_MAKE = SHELL = /bin/bash SQLITE3_CFLAGS = SQLITE3_LIBS = STRIP = strip VERSION = 0.0.1 VERSION_INFO = 11:4:7 abs_builddir = /home/wookey/debian/NMU/git/link-grammar/link-grammar/sat-solver abs_srcdir = /home/wookey/debian/NMU/git/link-grammar/link-grammar/sat-solver abs_top_builddir = /home/wookey/debian/NMU/git/link-grammar abs_top_srcdir = /home/wookey/debian/NMU/git/link-grammar ac_ct_AR = ar ac_ct_CC = gcc ac_ct_CXX = g++ ac_ct_DUMPBIN = am__include = include am__leading_dot = . am__quote = am__tar = $${TAR-tar} chof - "$$tardir" am__untar = $${TAR-tar} xf - bindir = ${exec_prefix}/bin build = x86_64-unknown-linux-gnu build_alias = build_cpu = x86_64 build_os = linux-gnu build_vendor = unknown builddir = . datadir = ${datarootdir} datarootdir = ${prefix}/share docdir = ${datarootdir}/doc/${PACKAGE} dvidir = ${docdir} exec_prefix = ${prefix} host = x86_64-unknown-linux-gnu host_alias = host_cpu = x86_64 host_os = linux-gnu host_vendor = unknown htmldir = ${docdir} includedir = ${prefix}/include infodir = ${datarootdir}/info install_sh = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/install-sh libdir = ${exec_prefix}/lib libexecdir = ${exec_prefix}/libexec localedir = ${datarootdir}/locale localstatedir = ${prefix}/var mandir = ${datarootdir}/man mkdir_p = $(MKDIR_P) oldincludedir = /usr/include pdfdir = ${docdir} prefix = /usr/local program_transform_name = s,x,x, psdir = ${docdir} sbindir = ${exec_prefix}/sbin sharedstatedir = ${prefix}/com srcdir = . sysconfdir = ${prefix}/etc target_alias = top_build_prefix = ../../ top_builddir = ../.. top_srcdir = ../.. SATSOLVER_VERSION_INFO = 1:0:1 libsat_solver_la_LDFLAGS = -version-info $(SATSOLVER_VERSION_INFO) INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/link-grammar -I$(top_srcdir)/link-grammar/minisat libsat_solver_includedir = $(includedir)/link-grammar $(includedir)/link-grammar/minisat lib_LTLIBRARIES = libsat-solver.la libsat_solver_la_SOURCES = \ clock.hpp \ fast-sprintf.cpp \ fast-sprintf.hpp \ guiding.hpp \ matrix-ut.hpp \ sat-encoder.cpp \ sat-encoder.hpp \ sat-encoder.h \ trie.hpp \ util.cpp \ util.hpp \ variables.cpp \ variables.hpp \ word-tag.cpp \ word-tag.hpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .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 link-grammar/sat-solver/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign link-grammar/sat-solver/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(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-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}; \ } libsat-solver.la: $(libsat_solver_la_OBJECTS) $(libsat_solver_la_DEPENDENCIES) $(EXTRA_libsat_solver_la_DEPENDENCIES) $(AM_V_CXXLD)$(libsat_solver_la_LINK) -rpath $(libdir) $(libsat_solver_la_OBJECTS) $(libsat_solver_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c include ./$(DEPDIR)/fast-sprintf.Plo include ./$(DEPDIR)/sat-encoder.Plo include ./$(DEPDIR)/util.Plo include ./$(DEPDIR)/variables.Plo include ./$(DEPDIR)/word-tag.Plo .cpp.o: $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po # $(AM_V_CXX)source='$<' object='$@' libtool=no \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(AM_V_CXX_no)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po # $(AM_V_CXX)source='$<' object='$@' libtool=no \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(AM_V_CXX_no)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo # $(AM_V_CXX)source='$<' object='$@' libtool=yes \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(AM_V_CXX_no)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES dnl Version info for libraries = CURRENT:REVISION:AGE # 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: link-grammar/link-grammar/sat-solver/variables.cpp0000644000000000000000000000011712536650433017467 0ustar #include "variables.hpp" #ifdef _VARS ostream& var_defs_stream = cerr; #endif link-grammar/link-grammar/sat-solver/Makefile.in0000644000000000000000000005373712537603122017072 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = link-grammar/sat-solver DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libsat_solver_la_LIBADD = am_libsat_solver_la_OBJECTS = fast-sprintf.lo sat-encoder.lo util.lo \ variables.lo word-tag.lo libsat_solver_la_OBJECTS = $(am_libsat_solver_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 = libsat_solver_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(libsat_solver_la_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libsat_solver_la_SOURCES) DIST_SOURCES = $(libsat_solver_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = 0.0.1 VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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@ SATSOLVER_VERSION_INFO = 1:0:1 libsat_solver_la_LDFLAGS = -version-info $(SATSOLVER_VERSION_INFO) INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/link-grammar -I$(top_srcdir)/link-grammar/minisat libsat_solver_includedir = $(includedir)/link-grammar $(includedir)/link-grammar/minisat lib_LTLIBRARIES = libsat-solver.la libsat_solver_la_SOURCES = \ clock.hpp \ fast-sprintf.cpp \ fast-sprintf.hpp \ guiding.hpp \ matrix-ut.hpp \ sat-encoder.cpp \ sat-encoder.hpp \ sat-encoder.h \ trie.hpp \ util.cpp \ util.hpp \ variables.cpp \ variables.hpp \ word-tag.cpp \ word-tag.hpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign link-grammar/sat-solver/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign link-grammar/sat-solver/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libsat-solver.la: $(libsat_solver_la_OBJECTS) $(libsat_solver_la_DEPENDENCIES) $(EXTRA_libsat_solver_la_DEPENDENCIES) $(AM_V_CXXLD)$(libsat_solver_la_LINK) -rpath $(libdir) $(libsat_solver_la_OBJECTS) $(libsat_solver_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast-sprintf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sat-encoder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/variables.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/word-tag.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES dnl Version info for libraries = CURRENT:REVISION:AGE # 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: link-grammar/link-grammar/sat-solver/matrix-ut-test.cpp0000644000000000000000000000052112536650433020425 0ustar #include #include "matrix-ut.hpp" using namespace std; int main() { MatrixUpperTriangle m(10, 5); for (int i = 0; i < 10; i++) for (int j = i+1; j < 10; j++) { m.set(i, j, i+j); } for (int i = 0; i < 10; i++) for (int j = i+1; j < 10; j++) { cout << m(i, j) << endl; } return 0; } link-grammar/link-grammar/sat-solver/.deps/0000755000000000000000000000000012537603145016024 5ustar link-grammar/link-grammar/sat-solver/.deps/sat-encoder.Plo0000644000000000000000000000001012537603145020673 0ustar # dummy link-grammar/link-grammar/sat-solver/.deps/fast-sprintf.Plo0000644000000000000000000000001012537603145021107 0ustar # dummy link-grammar/link-grammar/sat-solver/.deps/word-tag.Plo0000644000000000000000000000001012537603145020213 0ustar # dummy link-grammar/link-grammar/sat-solver/.deps/variables.Plo0000644000000000000000000000001012537603145020437 0ustar # dummy link-grammar/link-grammar/sat-solver/.deps/util.Plo0000644000000000000000000000001012537603145017444 0ustar # dummy link-grammar/link-grammar/sat-solver/sat-encoder.cpp0000644000000000000000000025202512536650433017732 0ustar #include #include #include #include #include #include #include #include using std::cout; using std::cerr; using std::endl; #include "sat-encoder.hpp" #include "variables.hpp" #include "word-tag.hpp" #include "matrix-ut.hpp" #include "clock.hpp" #include "fast-sprintf.hpp" #include "minisat/Solver.h" extern "C" { #include #include "preparation.h" } // Macro DEBUG_print is used to dump to stdout information while debugging #ifdef _DEBUG #define DEBUG_print(x) (cout << x << endl) #else #define DEBUG_print(x) (0) #endif /*-------------------------------------------------------------------------* * C N F C O N V E R S I O N * *-------------------------------------------------------------------------*/ void SATEncoder::generate_literal(Lit l) { vec clause(1); clause[0] = l; add_clause(clause); } void SATEncoder::generate_and_definition(Lit lhs, vec& rhs) { vec clause; for (int i = 0; i < rhs.size(); i++) { clause.growTo(2); clause[0] = ~lhs; clause[1] = rhs[i]; add_clause(clause); } for (int i = 0; i < rhs.size(); i++) { clause.growTo(2); clause[0] = ~rhs[i]; clause[1] = lhs; add_clause(clause); } } void SATEncoder::generate_classical_and_definition(Lit lhs, vec& rhs) { { vec clause; for (int i = 0; i < rhs.size(); i++) { clause.growTo(2); clause[0] = ~lhs; clause[1] = rhs[i]; add_clause(clause); } } { vec clause(rhs.size() + 1); for (int i = 0; i < rhs.size(); i++) { clause[i] = ~rhs[i]; } clause[rhs.size()] = lhs; add_clause(clause); } } void SATEncoder::generate_or_definition(Lit lhs, vec& rhs) { { vec clause; for (int i = 0; i < rhs.size(); i++) { clause.growTo(2); clause[0] = lhs; clause[1] = ~rhs[i]; add_clause(clause); } } { vec clause(rhs.size() + 1); for (int i = 0; i < rhs.size(); i++) { clause[i] = rhs[i]; } clause[rhs.size()] = ~lhs; add_clause(clause); } } void SATEncoder::generate_conditional_or_definition(Lit condition, Lit lhs, vec& rhs) { { vec clause; for (int i = 0; i < rhs.size(); i++) { clause.growTo(3); clause[0] = ~condition; clause[1] = lhs; clause[2] = ~rhs[i]; add_clause(clause); } } { vec clause(rhs.size() + 2); for (int i = 0; i < rhs.size(); i++) { clause[i] = rhs[i]; } clause[rhs.size()] = ~lhs; clause[rhs.size()+1] = ~condition; add_clause(clause); } } void SATEncoder::generate_conditional_lr_implication_or_definition(Lit condition, Lit lhs, vec& rhs) { { vec clause; for (int i = 0; i < rhs.size(); i++) { clause.growTo(2); clause[0] = lhs; clause[1] = ~rhs[i]; add_clause(clause); } } { vec clause(rhs.size() + 2); for (int i = 0; i < rhs.size(); i++) { clause[i] = rhs[i]; } clause[rhs.size()] = ~lhs; clause[rhs.size()+1] = ~condition; add_clause(clause); } } void SATEncoder::generate_conditional_lr_implication_or_definition(Lit condition1, Lit condition2, Lit lhs, vec& rhs) { { vec clause; for (int i = 0; i < rhs.size(); i++) { clause.growTo(2); clause[0] = lhs; clause[1] = ~rhs[i]; add_clause(clause); } } { vec clause(rhs.size() + 3); for (int i = 0; i < rhs.size(); i++) { clause[i] = rhs[i]; } clause[rhs.size()] = ~lhs; clause[rhs.size()+1] = ~condition1; clause[rhs.size()+2] = ~condition2; add_clause(clause); } } void SATEncoder::generate_xor_conditions(vec& vect) { vec clause; for (int i = 0; i < vect.size(); i++) { for (int j = i + 1; j < vect.size(); j++) { if (vect[i] == vect[j]) continue; clause.growTo(2); clause[0] = ~vect[i]; clause[1] = ~vect[j]; add_clause(clause); } } } void SATEncoder::generate_and(vec& vect) { for (int i = 0; i < vect.size(); i++) { generate_literal(vect[i]); } } void SATEncoder::generate_or(vec& vect) { add_clause(vect); } void SATEncoder::generate_equivalence_definition(Lit l1, Lit l2) { { vec clause(2); clause[0] = ~l1; clause[1] = l2; add_clause(clause); } { vec clause(2); clause[0] = l1; clause[1] = ~l2; add_clause(clause); } } /*-------------------------------------------------------------------------* * E N C O D I N G * *-------------------------------------------------------------------------*/ void SATEncoder::encode() { Clock clock; generate_satisfaction_conditions(); DEBUG_print(clock.elapsed()); generate_linked_definitions(); DEBUG_print(clock.elapsed()); generate_planarity_conditions(); DEBUG_print(clock.elapsed()); #ifdef _CONNECTIVITY_ generate_connectivity(); DEBUG_print(clock.elapsed()); #endif generate_encoding_specific_clauses(); DEBUG_print(clock.elapsed()); pp_prune(); power_prune(); DEBUG_print(clock.elapsed()); _variables->setVariableParameters(_solver); } /*-------------------------------------------------------------------------* * W O R D - T A G S * *-------------------------------------------------------------------------*/ void SATEncoder::build_word_tags() { for (int w = 0; w < _sent->length; w++) { _word_tags.push_back(WordTag(w, _variables, _sent, _opts)); int dfs_position = 0; if (_sent->word[w].x == NULL) { DEBUG_print("Word ." << w << ".: " << _sent->word[w].string << " (null)" << endl); continue; } bool join = _sent->word[w].x->next != NULL; Exp* exp = join ? join_alternatives(w) : _sent->word[w].x->exp; #ifdef _DEBUG cout << "Word ." << w << ".: " << _sent->word[w].string << endl; print_expression(exp); cout << endl; #endif char name[MAX_VARIABLE_NAME]; sprintf(name, "w%d", w); bool leading_right = true; bool leading_left = true; std::vector eps_right, eps_left; _word_tags[w].insert_connectors(exp, dfs_position, leading_right, leading_left, eps_right, eps_left, name, true, 0); if (join) free_alternatives(exp); } for (int wl = 0; wl < _sent->length - 1; wl++) { for (int wr = wl + 1; wr < _sent->length; wr++) { _word_tags[wl].add_matches_with_word(_word_tags[wr]); } } } void SATEncoder::find_all_matches_between_words(int w1, int w2, std::vector >& matches) { const std::vector& w1_right = _word_tags[w1].get_right_connectors(); std::vector::const_iterator i; for (i = w1_right.begin(); i != w1_right.end(); i++) { const std::vector& w2_left_c = (*i).matches; std::vector::const_iterator j; for (j = w2_left_c.begin(); j != w2_left_c.end(); j++) { if ((*j)->word == w2) { matches.push_back(std::pair(&(*i), *j)); } } } } bool SATEncoder::matches_in_interval(int wi, int pi, int l, int r) { for (int w = l; w < r; w++) { if (_word_tags[w].match_possible(wi, pi)) return true; } return false; } /*-------------------------------------------------------------------------* * S A T I S F A C T I O N * *-------------------------------------------------------------------------*/ void SATEncoder::generate_satisfaction_conditions() { for (int w = 0; w < _sent->length; w++) { if (_sent->word[w].x == NULL) { DEBUG_print("Word: " << _sent->word[w].string << " : " << "(null)" << endl); handle_null_expression(w); continue; } bool join = _sent->word[w].x->next != NULL; Exp* exp = join ? join_alternatives(w) : _sent->word[w].x->exp; #ifdef _DEBUG cout << "Word: " << _sent->word[w].string << endl; print_expression(exp); cout << endl; #endif char name[MAX_VARIABLE_NAME]; sprintf(name, "w%d", w); determine_satisfaction(w, name); int dfs_position = 0; generate_satisfaction_for_expression(w, dfs_position, exp, name, 0); if (join) free_alternatives(exp); } } void SATEncoder::generate_satisfaction_for_expression(int w, int& dfs_position, Exp* e, char* var, int parrent_cost) { E_list *l; int total_cost = parrent_cost + e->cost; if (e->type == CONNECTOR_type) { dfs_position++; generate_satisfaction_for_connector(w, dfs_position, e->u.string, e->dir, e->multi, e->cost, var); if (total_cost > _cost_cutoff) { Lit lhs = Lit(_variables->string_cost(var, e->cost)); generate_literal(~lhs); } } else { if (e->type == AND_type) { if (e->u.l == NULL) { /* zeroary and */ _variables->string_cost(var, e->cost); if (total_cost > _cost_cutoff) { generate_literal(~Lit(_variables->string_cost(var, e->cost))); } } else if (e->u.l != NULL && e->u.l->next == NULL) { /* unary and - skip */ generate_satisfaction_for_expression(w, dfs_position, e->u.l->e, var, total_cost); } else { /* n-ary and */ int i; char new_var[MAX_VARIABLE_NAME]; char* last_new_var = new_var; char* last_var = var; while(*last_new_var = *last_var) { last_new_var++; last_var++; } vec rhs; for (i = 0, l=e->u.l; l!=NULL; l=l->next, i++) { // sprintf(new_var, "%sc%d", var, i) char* s = last_new_var; *s++ = 'c'; fast_sprintf(s, i); rhs.push(Lit(_variables->string(new_var))); } Lit lhs = Lit(_variables->string_cost(var, e->cost)); generate_and_definition(lhs, rhs); /* Preceeds */ int dfs_position_tmp = dfs_position; for (l = e->u.l; l->next != NULL; l = l->next) { generate_conjunct_order_constraints(w, l->e, l->next->e, dfs_position_tmp); } /* Recurse */ for (i = 0, l=e->u.l; l!=NULL; l=l->next, i++) { // sprintf(new_var, "%sc%d", var, i) char* s = last_new_var; *s++ = 'c'; fast_sprintf(s, i); generate_satisfaction_for_expression(w, dfs_position, l->e, new_var, total_cost); } } } else if (e->type == OR_type) { if (e->u.l == NULL) { /* zeroary or */ cerr << "Zeroary OR" << endl; exit(EXIT_FAILURE); } else if (e->u.l != NULL && e->u.l->next == NULL) { /* unary or */ generate_satisfaction_for_expression(w, dfs_position, e->u.l->e, var, total_cost); } else { /* n-ary or */ int i; char new_var[MAX_VARIABLE_NAME]; char* last_new_var = new_var; char* last_var = var; while(*last_new_var = *last_var) { last_new_var++; last_var++; } vec rhs; for (i = 0, l=e->u.l; l!=NULL; l=l->next, i++) { // sprintf(new_var, "%sc%d", var, i) char* s = last_new_var; *s++ = 'd'; fast_sprintf(s, i); rhs.push(Lit(_variables->string(new_var))); } Lit lhs = Lit(_variables->string_cost(var, e->cost)); generate_or_definition(lhs, rhs); generate_xor_conditions(rhs); /* Recurse */ for (i = 0, l=e->u.l; l!=NULL; l=l->next, i++) { char* s = last_new_var; *s++ = 'd'; fast_sprintf(s, i); generate_satisfaction_for_expression(w, dfs_position, l->e, new_var, total_cost); } } } } } Exp* SATEncoder::join_alternatives(int w) { // join all alternatives using and OR_type node Exp* exp; E_list* or_list = NULL;; for (X_node* x = _sent->word[w].x; x != NULL; x = x->next) { E_list* new_node = (E_list*)xalloc(sizeof(E_list)); new_node->e = x->exp; new_node->next = NULL; if (or_list == NULL) { or_list = new_node; } else { E_list *y; for (y = or_list; y->next != NULL; y = y->next) ; y->next = new_node; } } exp = (Exp*)xalloc(sizeof(Exp)); exp->type = OR_type; exp->u.l = or_list; exp->cost = 0; return exp; } void SATEncoder::free_alternatives(Exp* exp) { E_list *l = exp->u.l; while (l != NULL) { E_list* next = l->next; xfree(l, sizeof(E_list)); l = next; } xfree(exp, sizeof(exp)); } void SATEncoder::generate_link_cw_ordinary_definition(int wi, int pi, const char* Ci, char dir, int cost, int wj) { Lit lhs = Lit(_variables->link_cw(wj, wi, pi, Ci)); char str[MAX_VARIABLE_NAME]; sprintf(str, "w%d", wj); Lit condition = Lit(_variables->string(str)); vec rhs; // Collect matches (wi, pi) with word wj std::vector& matches = _word_tags[wi].get(pi)->matches; std::vector::const_iterator i; for (i = matches.begin(); i != matches.end(); i++) { /* TODO: PositionConnector->matches[wj] */ if ((*i)->word != wj) continue; if (dir == '+') { rhs.push(Lit(_variables->link_cost(wi, pi, Ci, (*i)->word, (*i)->position, (*i)->connector->string, cost + (*i)->cost))); } else if (dir == '-'){ rhs.push(Lit(_variables->link((*i)->word, (*i)->position, (*i)->connector->string, wi, pi, Ci))); } } // Generate clauses DEBUG_print("--------- link_cw as ordinary down"); generate_conditional_lr_implication_or_definition(condition, lhs, rhs); generate_xor_conditions(rhs); DEBUG_print("--------- end link_cw as ordinary down"); } /*--------------------------------------------------------------------------* * C O N J U N C T O R D E R I N G * *--------------------------------------------------------------------------*/ int SATEncoder::num_connectors(Exp* e) { if (e->type == CONNECTOR_type) return 1; else { int num = 0; for (E_list* l = e->u.l; l != NULL; l = l->next) { num += num_connectors(l->e); } return num; } } int SATEncoder::empty_connectors(Exp* e, char dir) { if (e->type == CONNECTOR_type) { return e->dir != dir; } else if (e->type == OR_type) { for (E_list* l = e->u.l; l != NULL; l = l->next) { if (empty_connectors(l->e, dir)) return true; } return false; } else if (e->type == AND_type) { for (E_list* l = e->u.l; l != NULL; l = l->next) { if (!empty_connectors(l->e, dir)) return false; } return true; } else throw std::string("Unkown connector type"); } int SATEncoder::non_empty_connectors(Exp* e, char dir) { if (e->type == CONNECTOR_type) { return e->dir == dir; } else if (e->type == OR_type) { for (E_list* l = e->u.l; l != NULL; l = l->next) { if (non_empty_connectors(l->e, dir)) return true; } return false; } else if (e->type == AND_type) { for (E_list* l = e->u.l; l != NULL; l = l->next) { if (non_empty_connectors(l->e, dir)) return true; } return false; } else throw std::string("Unkown connector type"); } bool SATEncoder::trailing_connectors_and_aux(int w, E_list* l, char dir, int& dfs_position, std::vector& connectors) { if (l == NULL) { return true; } else { int dfs_position_in = dfs_position; dfs_position += num_connectors(l->e); if (trailing_connectors_and_aux(w, l->next, dir, dfs_position, connectors)) { trailing_connectors(w, l->e, dir, dfs_position_in, connectors); } return empty_connectors(l->e, dir); } } void SATEncoder::trailing_connectors(int w, Exp* exp, char dir, int& dfs_position, std::vector& connectors) { if (exp->type == CONNECTOR_type) { dfs_position++; if (exp->dir == dir) { connectors.push_back(_word_tags[w].get(dfs_position)); } } else if (exp->type == OR_type) { for (E_list* l = exp->u.l; l != NULL; l = l->next) { trailing_connectors(w, l->e, dir, dfs_position, connectors); } } else if (exp->type == AND_type) { trailing_connectors_and_aux(w, exp->u.l, dir, dfs_position, connectors); } } void SATEncoder::certainly_non_trailing(int w, Exp* exp, char dir, int& dfs_position, std::vector& connectors, bool has_right) { if (exp->type == CONNECTOR_type) { dfs_position++; if (exp->dir == dir && has_right) { connectors.push_back(_word_tags[w].get(dfs_position)); } } else if (exp->type == OR_type) { for (E_list* l = exp->u.l; l != NULL; l = l->next) { certainly_non_trailing(w, l->e, dir, dfs_position, connectors, has_right); } } else if (exp->type == AND_type) { if (has_right) { for (E_list* l = exp->u.l; l != NULL; l = l->next) { certainly_non_trailing(w, l->e, dir, dfs_position, connectors, true); } } else { for (E_list* l = exp->u.l; l != NULL; l = l->next) { has_right = false; for (E_list* m = l->next; m != NULL; m = m->next) { if (non_empty_connectors(m->e, dir) && !empty_connectors(m->e, dir)) { has_right = true; break; } } certainly_non_trailing(w, l->e, dir, dfs_position, connectors, has_right); } } } } void SATEncoder::leading_connectors(int w, Exp* exp, char dir, int& dfs_position, vector& connectors) { if (exp->type == CONNECTOR_type) { dfs_position++; if (exp->dir == dir) { connectors.push_back(_word_tags[w].get(dfs_position)); } } else if (exp->type == OR_type) { for (E_list* l = exp->u.l; l != NULL; l = l->next) { leading_connectors(w, l->e, dir, dfs_position, connectors); } } else if (exp->type == AND_type) { E_list* l; for (l = exp->u.l; l != NULL; l = l->next) { leading_connectors(w, l->e, dir, dfs_position, connectors); if (!empty_connectors(l->e, dir)) break; } if (l != NULL) { for (l = l->next; l != NULL; l = l->next) dfs_position += num_connectors(l->e); } } } void SATEncoder::generate_conjunct_order_constraints(int w, Exp *e1, Exp* e2, int& dfs_position) { DEBUG_print("----- conjunct order constraints"); int dfs_position_e1 = dfs_position; std::vector last_right_in_e1, first_right_in_e2; trailing_connectors(w, e1, '+', dfs_position_e1, last_right_in_e1); int dfs_position_e2 = dfs_position_e1; leading_connectors(w, e2, '+', dfs_position_e2, first_right_in_e2); vec clause; if (!last_right_in_e1.empty() && !first_right_in_e2.empty()) { std::vector::iterator i, j; for (i = last_right_in_e1.begin(); i != last_right_in_e1.end(); i++) { std::vector& matches_e1 = (*i)->matches; for (j = first_right_in_e2.begin(); j != first_right_in_e2.end(); j++) { std::vector& matches_e2 = (*j)->matches; std::vector::const_iterator m1, m2; std::vector mw1; for (m1 = matches_e1.begin(); m1 != matches_e1.end(); m1++) { if ((m1+1) == matches_e1.end() || (*m1)->word != (*(m1 + 1))->word) mw1.push_back((*m1)->word); } std::vector mw2; for (m2 = matches_e2.begin(); m2 != matches_e2.end(); m2++) { if ((m2+1) == matches_e2.end() || (*m2)->word != (*(m2 + 1))->word) mw2.push_back((*m2)->word); } std::vector::const_iterator mw1i, mw2i; for (mw1i = mw1.begin(); mw1i != mw1.end(); mw1i++) { for (mw2i = mw2.begin(); mw2i != mw2.end(); mw2i++) { if (*mw1i >= *mw2i) { clause.growTo(2); clause[0] = ~Lit(_variables->link_cw(*mw1i, w, (*i)->position, (*i)->connector->string)); clause[1] = ~Lit(_variables->link_cw(*mw2i, w, (*j)->position, (*j)->connector->string)); add_clause(clause); } } } } } } DEBUG_print("----"); dfs_position_e1 = dfs_position; std::vector last_left_in_e1, first_left_in_e2; trailing_connectors(w, e1, '-', dfs_position_e1, last_left_in_e1); dfs_position_e2 = dfs_position_e1; leading_connectors(w, e2, '-', dfs_position_e2, first_left_in_e2); if (!last_left_in_e1.empty() && !first_left_in_e2.empty()) { std::vector::iterator i, j; for (i = last_left_in_e1.begin(); i != last_left_in_e1.end(); i++) { std::vector& matches_e1 = (*i)->matches; for (j = first_left_in_e2.begin(); j != first_left_in_e2.end(); j++) { std::vector& matches_e2 = (*j)->matches; std::vector::const_iterator m1, m2; std::vector mw1; for (m1 = matches_e1.begin(); m1 != matches_e1.end(); m1++) { if ((m1+1) == matches_e1.end() || (*m1)->word != (*(m1 + 1))->word) mw1.push_back((*m1)->word); } std::vector mw2; for (m2 = matches_e2.begin(); m2 != matches_e2.end(); m2++) { if ((m2+1) == matches_e2.end() || (*m2)->word != (*(m2 + 1))->word) mw2.push_back((*m2)->word); } std::vector::const_iterator mw1i, mw2i; for (mw1i = mw1.begin(); mw1i != mw1.end(); mw1i++) { for (mw2i = mw2.begin(); mw2i != mw2.end(); mw2i++) { if (*mw1i <= *mw2i) { clause.growTo(2); clause[0] = ~Lit(_variables->link_cw(*mw1i, w, (*i)->position, (*i)->connector->string)); clause[1] = ~Lit(_variables->link_cw(*mw2i, w, (*j)->position, (*j)->connector->string)); add_clause(clause); } } } } } } dfs_position = dfs_position_e1; DEBUG_print("---end conjunct order constraints"); } /*--------------------------------------------------------------------------* * C O N N E C T I V I T Y * *--------------------------------------------------------------------------*/ #ifdef _CONNECTIVITY_ void SATEncoder::generate_connectivity() { for (int w = 1; w < _sent->length; w++) { if (!_linkage_possible(0, w)) { vec clause; clause.push(~Lit(_variables->con(w, 1))); generate_and(clause); } else { generate_equivalence_definition(Lit(_variables->con(w, 1)), Lit(_variables->linked(0, w))); } } for (int d = 2; d < _sent->length; d++) { for (int w = 1; w < _sent->length; w++) { Lit lhs = Lit(_variables->con(w, d)); vec rhs; rhs.push(Lit(_variables->con(w, d-1))); for (int w1 = 1; w1 < _sent->length; w1++) { if (w == w1) continue; if (!_linkage_possible(std::min(w, w1), std::max(w, w1))) { continue; } rhs.push(Lit(_variables->l_con(w, w1, d-1))); } generate_or_definition(lhs, rhs); /* lc definitions*/ for (int w1 = 1; w1 < _sent->length; w1++) { if (w == w1) continue; int mi = std::min(w, w1), ma = std::max(w, w1); if (!_linked_possible(mi, ma)) continue; Lit lhs = Lit(_variables->l_con(w, w1, d-1)); vec rhs(2); rhs[0] = Lit(_variables->linked(mi, ma)); rhs[1] = Lit(_variables->con(w1, d-1)); generate_classical_and_definition(lhs, rhs); } } } for (int w = 1; w < _sent->length; w++) { generate_literal(Lit(_variables->con(w, _sent->length-1))); } } #endif void SATEncoder::dfs(int node, const MatrixUpperTriangle& graph, int component, std::vector& components) { if (components[node] != -1) return; components[node] = component; for (int other_node = node + 1; other_node < components.size(); other_node++) { if (graph(node, other_node)) dfs(other_node, graph, component, components); } for (int other_node = 0; other_node < node; other_node++) { if (graph(other_node, node)) dfs(other_node, graph, component, components); } } bool SATEncoder::connectivity_components(std::vector& components) { // get satisfied linked(wi, wj) variables const std::vector& linked_variables = _variables->linked_variables(); std::vector satisfied_linked_variables; for (std::vector::const_iterator i = linked_variables.begin(); i != linked_variables.end(); i++) { int var = *i; if (_solver->model[var] == l_True) { satisfied_linked_variables.push_back(var); } } // build the connectivity graph MatrixUpperTriangle graph(_sent->length, 0); std::vector::const_iterator i; for (i = satisfied_linked_variables.begin(); i != satisfied_linked_variables.end(); i++) { graph.set(_variables->linked_variable(*i)->left_word, _variables->linked_variable(*i)->right_word, 1); } // determine the connectivity components components.resize(_sent->length); std::fill(components.begin(), components.end(), -1); for (int node = 0; node < _sent->length; node++) dfs(node, graph, node, components); bool connected = true; for (int node = 0; node < _sent->length; node++) { if (components[node] != 0) { connected = false; } } return connected; } void SATEncoder::generate_disconnectivity_prohibiting(std::vector components) { // vector of unique components std::vector different_components = components; std::sort(different_components.begin(), different_components.end()); different_components.erase(std::unique(different_components.begin(), different_components.end()), different_components.end()); // Each connected component must contain a branch going out of it std::vector::const_iterator c; for (c = different_components.begin(); c != different_components.end(); c++) { vec clause; const std::vector& linked_variables = _variables->linked_variables(); for (std::vector::const_iterator i = linked_variables.begin(); i != linked_variables.end(); i++) { int var = *i; const Variables::LinkedVar* lv = _variables->linked_variable(var); if ((components[lv->left_word] == *c && components[lv->right_word] != *c) || (components[lv->left_word] != *c && components[lv->right_word] == *c)) { clause.push(Lit(var)); } } _solver->addConflictingClause(clause); if (different_components.size() == 2) break; } } /*--------------------------------------------------------------------------* * P L A N A R I T Y * *--------------------------------------------------------------------------*/ void SATEncoder::generate_planarity_conditions() { vec clause; for (int wi1 = 0; wi1 < _sent->length; wi1++) { for (int wj1 = wi1+1; wj1 < _sent->length; wj1++) { for (int wi2 = wj1+1; wi2 < _sent->length; wi2++) { if (!_linked_possible(wi1, wi2)) continue; for (int wj2 = wi2+1; wj2 < _sent->length; wj2++) { if (!_linked_possible(wj1, wj2)) continue; clause.growTo(2); clause[0] = ~Lit(_variables->linked(wi1, wi2)); clause[1] = ~Lit(_variables->linked(wj1, wj2)); add_clause(clause); } } } } // generate_linked_min_max_planarity(); } /*--------------------------------------------------------------------------* * P O W E R P R U N I N G * *--------------------------------------------------------------------------*/ void SATEncoder::generate_epsilon_definitions() { for (int w = 0; w < _sent->length; w++) { if (_sent->word[w].x == NULL) { continue; } bool join = _sent->word[w].x->next != NULL; Exp* exp = join ? join_alternatives(w) : _sent->word[w].x->exp; char name[MAX_VARIABLE_NAME]; sprintf(name, "w%d", w); int dfs_position; dfs_position = 0; generate_epsilon_for_expression(w, dfs_position, exp, name, true, '+'); dfs_position = 0; generate_epsilon_for_expression(w, dfs_position, exp, name, true, '-'); if (join) free_alternatives(exp); } } bool SATEncoder::generate_epsilon_for_expression(int w, int& dfs_position, Exp* e, char* var, bool root, char dir) { E_list *l; if (e->type == CONNECTOR_type) { dfs_position++; if (var != NULL) { if (e->dir == dir) { // generate_literal(-_variables->epsilon(name, var, e->dir)); return false; } else { generate_equivalence_definition(Lit(_variables->epsilon(var, dir)), Lit(_variables->string(var))); return true; } } } else if (e->type == AND_type) { if (e->u.l == NULL) { /* zeroary and */ generate_equivalence_definition(Lit(_variables->string(var)), Lit(_variables->epsilon(var, dir))); return true; } else if (e->u.l != NULL && e->u.l->next == NULL) { /* unary and - skip */ return generate_epsilon_for_expression(w, dfs_position, e->u.l->e, var, root, dir); } else { /* Recurse */ E_list* l; int i; bool eps = true; char new_var[MAX_VARIABLE_NAME]; char* last_new_var = new_var; char* last_var = var; while(*last_new_var = *last_var) { last_new_var++; last_var++; } for (i = 0, l = e->u.l; l != NULL; l = l->next, i++) { // sprintf(new_var, "%sc%d", var, i) char* s = last_new_var; *s++ = 'c'; fast_sprintf(s, i); if (!generate_epsilon_for_expression(w, dfs_position, l->e, new_var, false, dir)) { eps = false; break; } } if (l != NULL) { for (l = l->next; l != NULL; l = l->next) dfs_position += num_connectors(l->e); } if (!root && eps) { Lit lhs = Lit(_variables->epsilon(var, dir)); vec rhs; for (i = 0, l=e->u.l; l!=NULL; l=l->next, i++) { // sprintf(new_var, "%sc%d", var, i) char* s = last_new_var; *s++ = 'c'; fast_sprintf(s, i); rhs.push(Lit(_variables->epsilon(new_var, dir))); } generate_classical_and_definition(lhs, rhs); } return eps; } } else if (e->type == OR_type) { if (e->u.l != NULL && e->u.l->next == NULL) { /* unary or - skip */ return generate_epsilon_for_expression(w, dfs_position, e->u.l->e, var, root, dir); } else { /* Recurse */ E_list* l; int i; bool eps = false; char new_var[MAX_VARIABLE_NAME]; char* last_new_var = new_var; char* last_var = var; while(*last_new_var = *last_var) { last_new_var++; last_var++; } vec rhs; for (i = 0, l = e->u.l; l != NULL; l = l->next, i++) { // sprintf(new_var, "%sc%d", var, i) char* s = last_new_var; *s++ = 'd'; fast_sprintf(s, i); if (generate_epsilon_for_expression(w, dfs_position, l->e, new_var, false, dir) && !root) { rhs.push(Lit(_variables->epsilon(new_var, dir))); eps = true; } } if (!root && eps) { Lit lhs = Lit(_variables->epsilon(var, dir)); generate_or_definition(lhs, rhs); } return eps; } } return false; } void SATEncoder::power_prune() { generate_epsilon_definitions(); // on two non-adjacent words, a pair of connectors can be used only // if not [both of them are the deepest]. for (int wl = 0; wl < _sent->length - 2; wl++) { const std::vector& rc = _word_tags[wl].get_right_connectors(); std::vector::const_iterator rci; for (rci = rc.begin(); rci != rc.end(); rci++) { if (!(*rci).leading_right || (*rci).connector->multi) continue; const std::vector& matches = rci->matches; for (std::vector::const_iterator lci = matches.begin(); lci != matches.end(); lci++) { if (!(*lci)->leading_left || (*lci)->connector->multi || (*lci)->word <= wl + 2) continue; // printf("LR: .%d. .%d. %s\n", wl, rci->position, rci->connector->string); // printf("LL: .%d. .%d. %s\n", (*lci)->word, (*lci)->position, (*lci)->connector->string); vec clause; for (std::vector::const_iterator i = rci->eps_right.begin(); i != rci->eps_right.end(); i++) { clause.push(~Lit(*i)); } for (std::vector::const_iterator i = (*lci)->eps_left.begin(); i != (*lci)->eps_left.end(); i++) { clause.push(~Lit(*i)); } add_additional_power_pruning_conditions(clause, wl, (*lci)->word); clause.push(~Lit(_variables->link(wl, rci->position, rci->connector->string, (*lci)->word, (*lci)->position, (*lci)->connector->string))); add_clause(clause); } } } /* // on two adjacent words, a pair of connectors can be used only if // they're the deepest ones on their disjuncts for (int wl = 0; wl < _sent->length - 2; wl++) { const std::vector& rc = _word_tags[wl].get_right_connectors(); std::vector::const_iterator rci; for (rci = rc.begin(); rci != rc.end(); rci++) { if (!(*rci).leading_right) continue; const std::vector& matches = rci->matches; for (std::vector::const_iterator lci = matches.begin(); lci != matches.end(); lci++) { if (!(*lci)->leading_left || (*lci)->word != wl + 1) continue; int link = _variables->link(wl, rci->position, rci->connector->string, (*lci)->word, (*lci)->position, (*lci)->connector->string); std::vector clause(2); clause[0] = -link; for (std::vector::const_iterator i = rci->eps_right.begin(); i != rci->eps_right.end(); i++) { clause[1] = *i; } for (std::vector::const_iterator i = (*lci)->eps_left.begin(); i != (*lci)->eps_left.end(); i++) { clause[1] = *i; } add_clause(clause); } } } // Two deep connectors cannot match (deep means notlast) std::vector > certainly_deep_left(_sent->length), certainly_deep_right(_sent->length); for (int w = 0; w < _sent->length; w++) { if (_sent->word[w].x == NULL) continue; bool join = _sent->word[w].x->next != NULL; Exp* exp = join ? join_alternatives(w) : _sent->word[w].x->exp; int dfs_position = 0; certainly_non_trailing(w, exp, '+', dfs_position, certainly_deep_right[w], false); dfs_position = 0; certainly_non_trailing(w, exp, '-', dfs_position, certainly_deep_left[w], false); if (join) free_alternatives(exp); } for (int w = 0; w < _sent->length; w++) { std::vector::const_iterator i; for (i = certainly_deep_right[w].begin(); i != certainly_deep_right[w].end(); i++) { const std::vector& matches = (*i)->matches; std::vector::const_iterator j; for (j = matches.begin(); j != matches.end(); j++) { if (std::find(certainly_deep_left[(*j)->word].begin(), certainly_deep_left[(*j)->word].end(), *j) != certainly_deep_left[(*j)->word].end()) { generate_literal(-_variables->link((*i)->word, (*i)->position, (*i)->connector->string, (*j)->word, (*j)->position, (*j)->connector->string)); } } } } */ } /*--------------------------------------------------------------------------* * P O S T P R O C E S S I N G & P P P R U N I N G * *--------------------------------------------------------------------------*/ void SATEncoder::pp_prune() { const std::vector& link_variables = _variables->link_variables(); if (_sent->dict->postprocessor == NULL) return; pp_knowledge * knowledge; knowledge = _sent->dict->postprocessor->knowledge; for (int i=0; in_contains_one_rules; i++) { pp_rule rule; const char * selector; pp_linkset * link_set; rule = knowledge->contains_one_rules[i]; selector = rule.selector; /* selector string for this rule */ link_set = rule.link_set; /* the set of criterion links */ vec triggers; for (int i = 0; i < link_variables.size(); i++) { const Variables::LinkVar* var = _variables->link_variable(link_variables[i]); if (post_process_match(rule.selector, var->label)) { triggers.push(Lit(link_variables[i])); } } if (triggers.size() == 0) continue; vec criterions; for (int j = 0; j < link_variables.size(); j++) { pp_linkset_node *p; for (int hashval = 0; hashval < link_set->hash_table_size; hashval++) { for (p = link_set->hash_table[hashval]; p!=NULL; p=p->next) { const Variables::LinkVar* var = _variables->link_variable(link_variables[j]); if (post_process_match(p->str, var->label)) { criterions.push(Lit(link_variables[j])); } } } } DEBUG_print("---pp_pruning--"); for (int k = 0; k < triggers.size(); k++) { vec clause(criterions.size() + 1); for (int i = 0; i < criterions.size(); i++) clause[i] = criterions[i]; clause[criterions.size()] = (~triggers[k]); add_clause(clause); } DEBUG_print("---end pp_pruning--"); } } /* TODO: replace with analyze_xxx_linkage */ bool SATEncoder::post_process_linkage(Linkage linkage) { if (parse_options_get_use_fat_links(_opts) && set_has_fat_down(_sent)) { Linkage_info li = analyze_fat_linkage(_sent, _opts, PP_SECOND_PASS); return li.N_violations == 0; } else { Linkage_info li = analyze_thin_linkage(_sent, _opts, PP_SECOND_PASS); return li.N_violations == 0; } return 1; } /*--------------------------------------------------------------------------* * D E C O D I N G * *--------------------------------------------------------------------------*/ Linkage SATEncoder::create_linkage() { /* Using exalloc since this is external to the parser itself. */ Linkage linkage = (Linkage) exalloc(sizeof(struct Linkage_s)); memset(linkage, 0, sizeof(struct Linkage_s)); linkage->num_words = _sent->length; linkage->word = (const char **) exalloc(linkage->num_words*sizeof(char *)); linkage->sent = _sent; linkage->opts = _opts; // linkage->info = sent->link_info[k]; if (_sent->parse_info) { Parse_info pi = _sent->parse_info; for (int i=0; i< MAX_LINKS; i++) { free_connectors(pi->link_array[i].lc); free_connectors(pi->link_array[i].rc); } free_parse_info(_sent->parse_info); _sent->parse_info = NULL; } Parse_info pi = _sent->parse_info = parse_info_new(_sent->length); bool fat = extract_links(pi); // compute_chosen_words(sent, linkage); /* TODO: this is just a simplified version of the compute_chosen_words. */ for (int i = 0; i < _sent->length; i++) { char *s = (char *) exalloc(strlen(_sent->word[i].string)+1); strcpy(s, _sent->word[i].string); linkage->word[i] = s; } linkage->num_words = _sent->length; pi->N_words = _sent->length; if (!fat || !parse_options_get_use_fat_links(_opts)) extract_thin_linkage(_sent, _opts, linkage); else extract_fat_linkage(_sent, _opts, linkage); linkage_set_current_sublinkage(linkage, 0); return linkage; } void SATEncoder::generate_linkage_prohibiting() { vec clause; const std::vector& link_variables = _variables->link_variables(); for (std::vector::const_iterator i = link_variables.begin(); i != link_variables.end(); i++) { int var = *i; if (_solver->model[var] == l_True) { clause.push(~Lit(var)); } else if (_solver->model[var] == l_False) { clause.push(Lit(var)); } } _solver->addConflictingClause(clause); } Linkage SATEncoder::get_next_linkage() { if (l_False == _solver->solve()) return NULL; Linkage linkage = create_linkage(); std::vector components; bool connected = connectivity_components(components); if (connected) { // num_connected_linkages++; if (post_process_linkage(linkage)) { cout << "Linkage PP OK" << endl; _sent->num_valid_linkages++; } else { cout << "Linkage PP NOT OK" << endl; } generate_linkage_prohibiting(); } else { cout << "Linkage DISCONNECTED" << endl; generate_disconnectivity_prohibiting(components); } _solver->printStats(); return linkage; } /******************************************************************************* * SAT encoding for sentences that do not contain conjunction. * *******************************************************************************/ void SATEncoderConjunctionFreeSentences::generate_encoding_specific_clauses() { } void SATEncoderConjunctionFreeSentences::handle_null_expression(int w) { // Formula is unsatisfiable vec clause; add_clause(clause); } void SATEncoderConjunctionFreeSentences::determine_satisfaction(int w, char* name) { // All tags must be satisfied generate_literal(Lit(_variables->string(name))); } void SATEncoderConjunctionFreeSentences::generate_satisfaction_for_connector(int wi, int pi, const char* Ci, char dir, bool multi, int cost, char* var) { Lit lhs = Lit(_variables->string_cost(var, cost)); #ifdef _DEBUG cout << "*** Connector: ." << wi << ". ." << pi << ". " << Ci << dir << endl; #endif // words that can potentially match (wi, pi) int low = (dir == '-') ? 0 : wi + 1; int hi = (dir == '-') ? wi : _sent->length; std::vector _w_; for (int wj = low; wj < hi; wj++) { // Eliminate words that cannot be connected to (wi, pi) if (!_word_tags[wj].match_possible(wi, pi)) continue; // Now we know that there is a potential link between the // connector (wi, pi) and the word wj _w_.push_back(wj); generate_link_cw_ordinary_definition(wi, pi, Ci, dir, cost, wj); } vec _link_cw_; for (int i = 0; i < _w_.size(); i++) _link_cw_.push(Lit(_variables->link_cw(_w_[i], wi, pi, Ci))); generate_or_definition(lhs, _link_cw_); DEBUG_print("--------- multi"); if (!multi) { generate_xor_conditions(_link_cw_); } DEBUG_print("--------- end multi"); #ifdef _DEBUG cout << "*** End Connector: ." << wi << ". ." << pi << ". " << Ci << endl; #endif } void SATEncoderConjunctionFreeSentences::generate_linked_definitions() { _linked_possible.resize(_sent->length, 1); DEBUG_print("------- linked definitions"); for (int w1 = 0; w1 < _sent->length; w1++) { for (int w2 = w1 + 1; w2 < _sent->length; w2++) { DEBUG_print("---------- ." << w1 << ". ." << w2 << "."); Lit lhs = Lit(_variables->linked(w1, w2)); vec rhs; const std::vector& w1_connectors = _word_tags[w1].get_right_connectors(); std::vector::const_iterator c; for (c = w1_connectors.begin(); c != w1_connectors.end(); c++) { assert(c->word == w1, "Connector word must match"); if (_word_tags[w2].match_possible(c->word, c->position)) { rhs.push(Lit(_variables->link_cw(w2, c->word, c->position, c->connector->string))); } } _linked_possible.set(w1, w2, rhs.size() > 0); generate_or_definition(lhs, rhs); } } DEBUG_print("------- end linked definitions"); } void SATEncoder::generate_linked_min_max_planarity() { DEBUG_print("---- linked_max"); for (int w1 = 0; w1 < _sent->length; w1++) { for (int w2 = 0; w2 < _sent->length; w2++) { Lit lhs = Lit(_variables->linked_max(w1, w2)); vec rhs; if (w2 < _sent->length - 1) { rhs.push(Lit(_variables->linked_max(w1, w2 + 1))); if (w1 != w2 + 1 && _linked_possible(std::min(w1, w2+1), std::max(w1, w2+1))) rhs.push(~Lit(_variables->linked(std::min(w1, w2+1), std::max(w1, w2+1)))); } generate_classical_and_definition(lhs, rhs); } } DEBUG_print("---- end linked_max"); DEBUG_print("---- linked_min"); for (int w1 = 0; w1 < _sent->length; w1++) { for (int w2 = 0; w2 < _sent->length; w2++) { Lit lhs = Lit(_variables->linked_min(w1, w2)); vec rhs; if (w2 > 0) { rhs.push(Lit(_variables->linked_min(w1, w2 - 1))); if (w1 != w2-1 && _linked_possible(std::min(w1, w2 - 1), std::max(w1, w2 - 1))) rhs.push(~Lit(_variables->linked(std::min(w1, w2 - 1), std::max(w1, w2 - 1)))); } generate_classical_and_definition(lhs, rhs); } } DEBUG_print("---- end linked_min"); vec clause; for (int wi = 3; wi < _sent->length; wi++) { for (int wj = 1; wj < wi - 1; wj++) { for (int wl = wj + 1; wl < wi; wl++) { clause.growTo(3); clause[0] = ~Lit(_variables->linked_min(wi, wj)); clause[1] = ~Lit(_variables->linked_max(wi, wl - 1)); clause[2] = Lit(_variables->linked_min(wl, wj)); add_clause(clause); } } } DEBUG_print("------------"); for (int wi = 0; wi < _sent->length - 1; wi++) { for (int wj = wi + 1; wj < _sent->length - 1; wj++) { for (int wl = wi+1; wl < wj; wl++) { clause.growTo(3); clause[0] = ~Lit(_variables->linked_max(wi, wj)); clause[1] = ~Lit(_variables->linked_min(wi, wl + 1)); clause[2] = Lit(_variables->linked_max(wl, wj)); add_clause(clause); } } } DEBUG_print("------------"); clause.clear(); for (int wi = 1; wi < _sent->length; wi++) { for (int wj = wi + 2; wj < _sent->length - 1; wj++) { for (int wl = wi + 1; wl < wj; wl++) { clause.growTo(2); clause[0] = ~Lit(_variables->linked_min(wi, wj)); clause[1] = Lit(_variables->linked_min(wl, wi)); add_clause(clause); clause.growTo(2); clause[0] = ~Lit(_variables->linked_max(wj, wi)); clause[1] = Lit(_variables->linked_max(wl, wj)); add_clause(clause); } } } } bool SATEncoderConjunctionFreeSentences::extract_links(Parse_info pi) { int current_link = 0; const std::vector& link_variables = _variables->link_variables(); std::vector::const_iterator i; for (i = link_variables.begin(); i != link_variables.end(); i++) { if (_solver->model[*i] != l_True) continue; const Variables::LinkVar* var = _variables->link_variable(*i); if (_solver->model[_variables->linked(var->left_word, var->right_word)] != l_True) continue; pi->link_array[current_link].l = var->left_word; pi->link_array[current_link].r = var->right_word; // pi->link_array[j].name = var->label; Connector* connector; connector = connector_new(); connector->string = var->left_connector; pi->link_array[current_link].lc = connector; connector = connector_new(); connector->string = var->right_connector; pi->link_array[current_link].rc = connector; current_link++; } pi->N_links = current_link; DEBUG_print("Total: ." << pi->N_links << "." << endl); return false; } /******************************************************************************* * SAT encoding for sentences that contain conjunction. * *******************************************************************************/ // Check if a connector is andable static int is_andable(Sentence sent, Connector* c, char dir) { /* if no set, then everything is considered andable */ if (sent->dict->andable_connector_set == NULL) return TRUE; return match_in_connector_set(sent, sent->dict->andable_connector_set, c, dir); } void SATEncoderConjunctiveSentences::handle_null_expression(int w) { // Formula is unsatisfiable, but only if w is not a conjunctive // word. Conjunctive words can have empty tags, but then they must // have fat-links attached. if (!isConnectiveOrComma(w)) { vec clause; add_clause(clause); } else { char str[MAX_VARIABLE_NAME]; sprintf(str, "fl_d_%d", w); generate_literal(Lit(_variables->string(str))); sprintf(str, "w%d", w); generate_literal(~Lit(_variables->string(str))); } } void SATEncoderConjunctiveSentences::determine_satisfaction(int w, char* name) { if (!parse_options_get_use_fat_links(_opts) || !isConnectiveOrComma(w)) { // Non-conjunctive words must have their tags satisfied generate_literal(Lit(_variables->string(name))); } else { // Tags of conjunctive words are satisfied iff they are not fat-linked either_tag_or_fat_link(w, Lit(_variables->string(name))); } } void SATEncoderConjunctiveSentences::generate_satisfaction_for_connector(int wi, int pi, const char* Ci, char dir, bool multi, int cost, char* var) { Lit lhs = Lit(_variables->string_cost(var, cost)); #ifdef _DEBUG cout << "*** Connector: ." << wi << ". ." << pi << ". " << Ci << dir << endl; #endif // words that can potentially match (wi, pi) int low = (dir == '-') ? 0 : wi + 1; int hi = (dir == '-') ? wi : _sent->length; // determine if opposite of (wi, pi) is andable Connector conn; init_connector(&conn); conn.label = NORMAL_LABEL; conn.priority = THIN_priority; conn.string = Ci; bool andable_opposite = is_andable(_sent, &conn, dir == '+' ? '-' : '+'); std::vector _w_; for (int wj = low; wj < hi; wj++) { // Eliminate words that cannot be connected to (wi, pi) if (!link_cw_possible(wi, pi, Ci, dir, wj, 1, _sent->length-1)) continue; // Now we know that there is a potential link between the // connector (wi, pi) and the word w _w_.push_back(wj); // link_cw down definitions as ordinary words if (_word_tags[wj].match_possible(wi, pi) || isConnectiveOrComma(wj)) { generate_link_cw_ordinary_definition(wi, pi, Ci, dir, cost, wj); } // link_cw down definitions as special words if (isConnectiveOrComma(wj)) { if (!link_cw_possible_with_fld(wi, pi, Ci, dir, wj, 1, _sent->length-1)) { generate_link_cw_connective_impossible(wi, pi, Ci, wj); } else { generate_link_cw_connective_definition(wi, pi, Ci, wj); } } // ------------------------------------------------------------------------ // link_top_cw up defintions if (andable_opposite) { // connections can be either directly established or inherited from above generate_link_top_cw_up_definition(wj, wi, pi, Ci, multi); } else { // connection is established iff it is directly established // i.e., it cannot be inherited from above generate_link_top_cw_iff_link_cw(wj, wi, pi, Ci); } // Commas cannot be directly connected if they have fat links down if (parse_options_get_use_fat_links(_opts) && isComma(_sent, wj)) { vec clause; char str[MAX_VARIABLE_NAME]; sprintf(str,"fl_d_%d", wj); clause.push(~Lit(_variables->string(str))); clause.push(~Lit(_variables->link_top_cw(wj, wi, pi, Ci))); add_clause(clause); } } vec _link_cw_; for (int i = 0; i < _w_.size(); i++) _link_cw_.push(Lit(_variables->link_cw(_w_[i], wi, pi, Ci))); generate_or_definition(lhs, _link_cw_); vec _link_top_cw_; for (int i = 0; i < _w_.size(); i++) _link_top_cw_.push(Lit(_variables->link_top_cw(_w_[i], wi, pi, Ci))); // Faster generate_or_definition(lhs, _link_top_cw_); DEBUG_print("--------- multi"); if (!multi) { generate_xor_conditions(_link_top_cw_); } DEBUG_print("--------- end multi"); #ifdef _DEBUG cout << "*** End Connector: ." << wi << ". ." << pi << ". " << Ci << endl; #endif } void SATEncoderConjunctiveSentences::add_additional_power_pruning_conditions(vec& clause, int wl, int wr) { char str[MAX_VARIABLE_NAME]; sprintf(str, "fl_ur_%d", wl); clause.push(Lit(_variables->string(str))); sprintf(str, "fl_ul_%d", wl); clause.push(Lit(_variables->string(str))); sprintf(str, "fl_ul_%d", wr); clause.push(Lit(_variables->string(str))); sprintf(str, "fl_ur_%d", wr); clause.push(Lit(_variables->string(str))); } void SATEncoderConjunctiveSentences::generate_encoding_specific_clauses() { generate_label_compatibility(); generate_fat_link_existence(); generate_fat_link_up_definitions(); generate_fat_link_down_definitions(); generate_fat_link_up_between_down_conditions(); generate_fat_link_comma_conditions(); generate_fat_link_crossover_conditions(); generate_fat_link_Left_Wall_not_inside(); generate_fat_link_linked_upperside(); generate_fat_link_neighbor(); } void SATEncoderConjunctiveSentences::init_connective_words() { for (int i = 0; i < _sent->length; i++) { if (::isConnectiveOrComma(_sent, i)) { _connectives.push_back(i); _is_connective_or_comma.push_back(true); } else { _is_connective_or_comma.push_back(false); } } } /* If there is a direct link between a connective word wi and a connector (w,p), then there is an indirect link between wi and (w, p). */ void SATEncoderConjunctiveSentences::generate_link_top_cw_iff_link_cw(int wi, int wj, int pj, const char* Cj) { DEBUG_print("--------- link_top_cw iff link_cw"); vec clause; clause.growTo(2); clause[0] = ~Lit(_variables->link_cw(wi, wj, pj, Cj)); clause[1] = Lit(_variables->link_top_cw(wi, wj, pj, Cj)); add_clause(clause); clause.growTo(2); clause[0] = ~Lit(_variables->link_top_cw(wi, wj, pj, Cj)); clause[1] = Lit(_variables->link_cw(wi, wj, pj, Cj)); add_clause(clause); DEBUG_print("--------- end link_top_cw iff link_cw"); } void SATEncoderConjunctiveSentences::generate_link_top_cw_up_definition(int wj, int wi, int pi, const char* Ci, bool multi) { DEBUG_print("--------- link_top_cw definition"); Lit link_cw_wj = Lit(_variables->link_cw(wj, wi, pi, Ci)); Lit link_top_cw_wj = Lit(_variables->link_top_cw(wj, wi, pi, Ci)); char dir = wi < wj ? '+' : '-'; vec clause; clause.growTo(2); clause[0] = ~link_top_cw_wj; clause[1] = link_cw_wj; add_clause(clause); // Collect connectors up std::vector Wk; for (int k = 0; k < _connectives.size(); k++) { int wk = _connectives[k]; if (wk != wj && (wj - wi)*(wk - wi) > 0 && link_cw_possible_with_fld(wi, pi, Ci, dir, wk, 1, _sent->length - 1)) Wk.push_back(wk); } for (int k = 0; k < Wk.size(); k++) { int wk = Wk[k]; clause.growTo(4); clause[0] = link_top_cw_wj; clause[1] = ~link_cw_wj; clause[2] = ~Lit(_variables->fat_link(wj, wk)); clause[3] = Lit(_variables->link_cw(wk, wi, pi, Ci)); add_clause(clause); } clause.clear(); for (int k = 0; k < Wk.size(); k++) { int wk = Wk[k]; clause.growTo(3); clause[0] = ~link_top_cw_wj; clause[1] = ~Lit(_variables->fat_link(wj, wk)); clause[2] = ~Lit(_variables->link_cw(wk, wi, pi, Ci)); add_clause(clause); } clause.clear(); clause.push(~link_cw_wj); clause.push(link_top_cw_wj); for (int k = 0; k < Wk.size(); k++) { int wk = Wk[k]; clause.push(Lit(_variables->fat_link(wj, wk))); } add_clause(clause); if (clause.size() == 2) return; // Faster clause.clear(); clause.push(~link_cw_wj); clause.push(link_top_cw_wj); for (int k = 0; k < Wk.size(); k++) { int wk = Wk[k]; clause.push(Lit(_variables->link_cw(wk, wi, pi, Ci))); } add_clause(clause); if (multi) { // cannot directly link to both ends of the fat link clause.clear(); for (int k = 0; k < Wk.size(); k++) { int wk = Wk[k]; clause.growTo(3); clause[0] = ~Lit(_variables->fat_link(wj, wk)); clause[1] = ~Lit(_variables->link_top_cw(wj, wi, pi, Ci)); clause[2] = ~Lit(_variables->link_top_cw(wk, wi, pi, Ci)); add_clause(clause); } } DEBUG_print("--------- end link_top_cw definition"); } /* If there is an indirect link from a connective word or a comma wi to a connector (wj, pj), then, there exist two words wk1 and wk2, such that: (1) (a) wk1 is between wi and wj (b) there is a fat-link between wk1 and wi (c) there is an indirect link between wk1 and (wj, pj) (2) (a) wi is between wk2 and wj (b) there is a fat-link between wk2 and wi (c) there is an indirect link between wk2 and (wj, pj) */ void SATEncoderConjunctiveSentences::generate_link_cw_connective_definition(int wj, int pj, const char* Cj, int wi) { DEBUG_print("--------- link_cw as special"); char str[MAX_VARIABLE_NAME]; sprintf(str, "fl_d_%d", wi); Lit not_wi_fld = ~Lit(_variables->string(str)); char link_cw_k1_str[MAX_VARIABLE_NAME]; sprintf(link_cw_k1_str, "%d_%d_%d__1", wj, pj, wi); Lit link_cw_k1(_variables->string(link_cw_k1_str)); char link_cw_k2_str[MAX_VARIABLE_NAME]; sprintf(link_cw_k2_str, "%d_%d_%d__2", wj, pj, wi); Lit link_cw_k2(_variables->string(link_cw_k2_str)); Lit not_link_wi_wjpj = ~Lit(_variables->link_cw(wi, wj, pj, Cj)); char dir = wj < wi ? '+' : '-'; vec clause; clause.growTo(3); clause[0] = not_wi_fld; clause[1] = not_link_wi_wjpj; clause[2] = link_cw_k1; add_clause(clause); clause.growTo(3); clause[0] = not_wi_fld; clause[1] = not_link_wi_wjpj; clause[2] = link_cw_k2; add_clause(clause); clause.growTo(3); clause[0] = ~link_cw_k1; clause[1] = ~link_cw_k2; clause[2] = ~not_link_wi_wjpj; add_clause(clause); clause.clear(); // B(wi, w, wj) int wl, wr; if (wi < wj) { wl = wi + 1; wr = wj; } else { wl = wj + 1; wr = wi; } std::vector link_cw_possible_cache(wr - wl); for (int wk1 = wl; wk1 < wr; wk1++) { if (!(link_cw_possible_cache[wk1 - wl] = link_cw_possible(wj, pj, Cj, dir, wk1, wl, wr))) continue; clause.growTo(3); clause[0] = ~link_cw_k1; clause[1] = ~Lit(_variables->fat_link(wk1, wi)); clause[2] = Lit(_variables->link_cw(wk1, wj, pj, Cj)); add_clause(clause); } clause.clear(); clause.push(~link_cw_k1); for (int wk1 = wl; wk1 < wr; wk1++) { if (!link_cw_possible_cache[wk1 - wl]) continue; clause.push(Lit(_variables->fat_link(wk1, wi))); } add_clause(clause); // Faster clause.clear(); clause.push(~link_cw_k1); for (int wk1 = wl; wk1 < wr; wk1++) { if (!link_cw_possible_cache[wk1 - wl]) continue; clause.push(Lit(_variables->link_cw(wk1, wj, pj, Cj))); } add_clause(clause); clause.clear(); for (int wk1 = wl; wk1 < wr; wk1++) { if (!link_cw_possible_cache[wk1 - wl]) continue; clause.growTo(3); clause[0] = ~Lit(_variables->fat_link(wk1, wi)); clause[1] = ~Lit(_variables->link_cw(wk1, wj, pj, Cj)); clause[2] = link_cw_k1; add_clause(clause); } DEBUG_print("---"); // B(wk2, wi, wj) if (wi < wj) { wl = 1; wr = wi; } else { wl = wi + 1; wr = _sent->length - 1; } link_cw_possible_cache.resize(wr - wl); clause.clear(); for (int wk2 = wl; wk2 < wr; wk2++) { if (!(link_cw_possible_cache[wk2 - wl] = link_cw_possible(wj, pj, Cj, dir, wk2, wl, wr))) continue; clause.growTo(3); clause[0] = ~link_cw_k2; clause[1] = ~Lit(_variables->fat_link(wk2, wi)); clause[2] = Lit(_variables->link_cw(wk2, wj, pj, Cj)); add_clause(clause); } clause.clear(); clause.push(~link_cw_k2); for (int wk2 = wl; wk2 < wr; wk2++) { if (!link_cw_possible_cache[wk2 - wl]) continue; clause.push(Lit(_variables->fat_link(wk2, wi))); } add_clause(clause); // Faster clause.clear(); clause.push(~link_cw_k2); for (int wk2 = wl; wk2 < wr; wk2++) { if (!link_cw_possible_cache[wk2 - wl]) continue; clause.push(Lit(_variables->link_cw(wk2, wj, pj, Cj))); } add_clause(clause); clause.clear(); for (int wk2 = wl; wk2 < wr; wk2++) { if (!link_cw_possible_cache[wk2 - wl]) continue; clause.growTo(3); clause[0] = ~Lit(_variables->fat_link(wk2, wi)); clause[1] = ~Lit(_variables->link_cw(wk2, wj, pj, Cj)); clause[2] = link_cw_k2; add_clause(clause); } DEBUG_print("--------- end link_cw as special"); } void SATEncoderConjunctiveSentences::generate_link_cw_connective_impossible(int wi, int pi, const char* Ci, int wj) { DEBUG_print("--------- link_cw as special down - impossible"); // If the connective word w has fat-links down it cannot be // connected to (wi, pi) vec clause; char str[MAX_VARIABLE_NAME]; sprintf(str,"fl_d_%d", wj); clause.push(~Lit(_variables->string(str))); clause.push(~Lit(_variables->link_cw(wj, wi, pi, Ci))); add_clause(clause); DEBUG_print("--------- end link_cw as special down - impossible"); } void SATEncoderConjunctiveSentences::generate_fat_link_up_definitions() { Lit lhs; vec rhs; char fl_str[MAX_VARIABLE_NAME]; vec clause; for (int w = 1; w < _sent->length - 1; w++) { DEBUG_print("----fat_link up definition"); // Fatlink up left definition rhs.clear(); for (std::vector::const_iterator cl = _connectives.begin(); cl != _connectives.end(); cl++) { if (*cl < w) rhs.push(Lit(_variables->fat_link(w, *cl))); } sprintf(fl_str, "fl_ul_%d", w); lhs = Lit(_variables->string(fl_str)); generate_or_definition(lhs, rhs); generate_xor_conditions(rhs); // Fatlink up right definition rhs.clear(); for (std::vector::const_iterator cr = _connectives.begin(); cr != _connectives.end(); cr++) { if (*cr > w) rhs.push(Lit(_variables->fat_link(w, *cr))); } sprintf(fl_str, "fl_ur_%d", w); lhs = Lit(_variables->string(fl_str)); generate_or_definition(lhs, rhs); generate_xor_conditions(rhs); // There can not be two links up clause.growTo(2); sprintf(fl_str, "fl_ul_%d", w); clause[0] = ~Lit(_variables->string(fl_str)); sprintf(fl_str, "fl_ur_%d", w); clause[1] = ~Lit(_variables->string(fl_str)); add_clause(clause); DEBUG_print("----end fat_link up definition"); } } void SATEncoderConjunctiveSentences::generate_fat_link_down_definitions() { // Fat links down char fl_str[MAX_VARIABLE_NAME]; std::vector::const_iterator w; for (w = _connectives.begin(); w != _connectives.end(); w++) { DEBUG_print("----fat_link down definition"); // Fatlink down left definition vec rhs; for (int wl = 1; wl < *w; wl++) { rhs.push(Lit(_variables->fat_link(wl, *w))); } sprintf(fl_str, "fl_d_%d", *w); Lit lhs = Lit(_variables->string(fl_str)); generate_or_definition(lhs, rhs); generate_xor_conditions(rhs); // Fatlink down right definition rhs.clear(); for (int wr = *w + 1; wr < _sent->length - 1; wr++) { rhs.push(Lit(_variables->fat_link(wr, *w))); } sprintf(fl_str, "fl_d_%d", *w); lhs = Lit(_variables->string(fl_str)); generate_or_definition(lhs, rhs); generate_xor_conditions(rhs); DEBUG_print("----end fat_link down definition"); } } void SATEncoderConjunctiveSentences::generate_fat_link_comma_conditions() { char fl_str[MAX_VARIABLE_NAME]; std::vector::const_iterator w; vec clause; for (w = _connectives.begin(); w != _connectives.end(); w++) { if (isComma(_sent, *w)) { DEBUG_print("---comma---"); // If comma has a link down it has to have a link up to the right sprintf(fl_str, "fl_d_%d", *w); clause.growTo(2); clause[0] = ~Lit(_variables->string(fl_str)); sprintf(fl_str, "fl_ur_%d", *w); clause[1] = Lit(_variables->string(fl_str)); add_clause(clause); // If comma has a link down it cannot have a link up to the left sprintf(fl_str, "fl_d_%d", *w); clause.growTo(2); clause[0] = ~Lit(_variables->string(fl_str)); sprintf(fl_str, "fl_ul_%d", *w); clause[1] = ~Lit(_variables->string(fl_str)); add_clause(clause); DEBUG_print("---end comma---"); } } } void SATEncoderConjunctiveSentences::generate_fat_link_crossover_conditions() { vec clause; // If a word has a fat link up, than it cannot establish links with words behind that connective for (int w = 1; w < _sent->length - 1; w++) { DEBUG_print("----links cannot crossover the fat-links"); std::vector::const_iterator c1, c2; for (c1 = _connectives.begin(); c1 != _connectives.end(); c1++) { if (*c1 > w) { for (int w1 = *c1 + 1; w1 < _sent->length; w1++) { if (!_linked_possible(w, w1)) continue; clause.growTo(3); clause[0] = ~Lit(_variables->fat_link(w, *c1)); clause[1] = Lit(_variables->link_top_ww(*c1, w1)); clause[2] = ~Lit(_variables->link_top_ww(w, w1)); add_clause(clause); } } if (*c1 < w) { for (int w1 = 0; w1 < *c1; w1++) { if (!_linked_possible(w1, w)) continue; clause.growTo(3); clause[0] = ~Lit(_variables->fat_link(w, *c1)); clause[1] = Lit(_variables->link_top_ww(*c1, w1)); clause[2] = ~Lit(_variables->link_top_ww(w, w1)); add_clause(clause); } } } DEBUG_print("----end links cannot cross over the fat-links"); } // One step structure violation pruning heuristic If a word is // directly linked to a fat linked word, than it cannot establish // links with words behind that connective std::vector::const_iterator c; for (c = _connectives.begin(); c != _connectives.end(); c++) { DEBUG_print("----links cannot crossover the fat-links heuristic"); for (int w = 1; w < *c; w++) { for (int w1 = 0; w1 < w; w1++) { if (!_linked_possible(w1, w)) continue; for (int w2 = *c; w2 < _sent->length; w2++) { if (!_linked_possible(w1, w2)) continue; vec clause; clause.push(~Lit(_variables->fat_link(w, *c))); clause.push(~Lit(_variables->linked(w1, w))); clause.push(~Lit(_variables->linked(w1, w2))); add_clause(clause); } } } for (int w = *c + 1; w < _sent->length - 1; w++) { for (int w1 = w+1; w1 < _sent->length; w1++) { if (!_linked_possible(w, w1)) continue; for (int w2 = 0; w2 <= *c; w2++) { if (!_linked_possible(w2, w1)) continue; vec clause; clause.push(~Lit(_variables->fat_link(w, *c))); clause.push(~Lit(_variables->linked(w, w1))); clause.push(~Lit(_variables->linked(w2, w1))); add_clause(clause); } } } DEBUG_print("----end links cannot cross over the fat-links heuristic"); } } void SATEncoderConjunctiveSentences::generate_fat_link_up_between_down_conditions() { // If a connective wi has a fat-link down to wj, it cannot have // links up between wi and wj. vec clause; for (std::vector::const_iterator wi = _connectives.begin(); wi != _connectives.end(); wi++) { DEBUG_print("---up between down---"); for (int wj = 1; wj < _sent->length - 1; wj++) { if (*wi == wj) continue; int l = std::min(*wi, wj) + 1; int r = std::max(*wi, wj); for (int wk = l; wk < r; wk++) { int mi = std::min(*wi, wk); int ma = std::max(*wi, wk); if (!_linked_possible(mi, ma)) continue; clause.growTo(2); clause[0] = ~Lit(_variables->fat_link(wj, *wi)); clause[1] = ~Lit(_variables->linked(mi, ma)); add_clause(clause); } if (isConnectiveOrComma(wj)) { clause.growTo(2); clause[0] = ~Lit(_variables->fat_link(wj, *wi)); clause[1] = ~Lit(_variables->fat_link(*wi, wj)); add_clause(clause); } } DEBUG_print("---end up between down---"); } } void SATEncoderConjunctiveSentences::generate_fat_link_neighbor() { // Search guiding heuristic: one fat-link is usually just next to the word Lit lhs; vec rhs; char fl_str[MAX_VARIABLE_NAME]; std::vector::const_iterator w; for (w = _connectives.begin(); w != _connectives.end(); w++) { DEBUG_print("----fat-link-neighbor"); if (*w > 1 && *w < _sent->length - 1) { rhs.clear(); rhs.push(Lit(_variables->fat_link(*w - 1, *w))); rhs.push(Lit(_variables->fat_link(*w + 1, *w))); lhs = Lit(_variables->neighbor_fat_link(*w)); sprintf(fl_str, "fl_d_%d", *w); Lit fld = Lit(_variables->string(fl_str)); generate_conditional_or_definition(fld, lhs, rhs); } DEBUG_print("----end fat-link-neighbor"); } } void SATEncoderConjunctiveSentences::generate_label_compatibility() { // Eliminate non-matching indirect links DEBUG_print("----label compatibility"); vec clause; const std::vector& vars = _variables->link_variables(); std::vector::const_iterator i, j; for (i = vars.begin(); i != vars.end(); i++) { const Variables::LinkVar* vari = _variables->link_variable(*i); const std::vector& varsjr = _variables->link_variables(vari->right_word, vari->right_position); for (j = varsjr.begin(); j != varsjr.end(); j++) { const Variables::LinkVar* varj = _variables->link_variable(*j); if (!labels_match(vari->label, varj->label)) { clause.growTo(2); clause[0] = ~Lit(*i); clause[1] = ~Lit(*j); add_clause(clause); } } const std::vector& varsjl = _variables->link_variables(vari->left_word, vari->left_position); for (j = varsjl.begin(); j != varsjl.end(); j++) { const Variables::LinkVar* varj = _variables->link_variable(*j); if (!labels_match(vari->label, varj->label)) { clause.growTo(2); clause[0] = ~Lit(*i); clause[1] = ~Lit(*j); add_clause(clause); } } } DEBUG_print("----label compatibility"); } void SATEncoderConjunctiveSentences::generate_fat_link_existence() { // If there is a fat link from wa to wb then there should be // at least one connector in the wa word tag that is indirectly // connected to words between: // if wa < wb: [0, wa) and [wb+2, n) // if wa > wb: [0, wb-1) and [wa+1, n) DEBUG_print("----fat-link-existence"); vec clause_a, clause_b; for (std::vector::const_iterator wb = _connectives.begin(); wb != _connectives.end(); wb++) { for (int wa = 1; wa < _sent->length-1; wa++) { if (isConnectiveOrComma(wa)) continue; if (wa == *wb) continue; int up = (wa < *wb) ? wa : *wb - 1; int low = (wa < *wb) ? *wb + 2 : wa + 1; clause_a.clear(); clause_b.clear(); clause_a.push(~Lit(_variables->fat_link(wa, *wb))); clause_b.push(~Lit(_variables->fat_link(wa, *wb))); std::vector::const_iterator ci; char dir; const std::vector& lconnectors = _word_tags[wa].get_left_connectors(); for (ci = lconnectors.begin(); ci != lconnectors.end(); ci++) { const std::vector& matches = ci->matches; std::vector::const_iterator m; for (m = matches.begin(); m != matches.end(); m++) { if ((0 <= (*m)->word && (*m)->word < up) && link_cw_possible_with_fld((*m)->word, (*m)->position, (*m)->connector->string, '+', *wb, 1, _sent->length - 1)) { clause_a.push(Lit(_variables->link_cw(wa, (*m)->word, (*m)->position, (*m)->connector->string))); clause_b.push(Lit(_variables->link_cw(*wb, (*m)->word, (*m)->position, (*m)->connector->string))); } } } const std::vector& rconnectors = _word_tags[wa].get_right_connectors(); for (ci = rconnectors.begin(); ci != rconnectors.end(); ci++) { const std::vector& matches = ci->matches; std::vector::const_iterator m; for (m = matches.begin(); m != matches.end(); m++) { if ((low <= (*m)->word && (*m)->word < _sent->length) && link_cw_possible_with_fld((*m)->word, (*m)->position, (*m)->connector->string, '-', *wb, 1, _sent->length - 1)) { clause_a.push(Lit(_variables->link_cw(wa, (*m)->word, (*m)->position, (*m)->connector->string))); clause_b.push(Lit(_variables->link_cw(*wb, (*m)->word, (*m)->position, (*m)->connector->string))); } } } add_clause(clause_a); add_clause(clause_b); } } DEBUG_print("----end fat-link-existence"); } void SATEncoderConjunctiveSentences::generate_fat_link_Left_Wall_not_inside() { // Wall cannot be connected just inside the fat-link tree for (int w = 1; w < _sent->length-1; w++) { DEBUG_print("---Left Wall cannot be connected inside"); vec clause; std::vector::const_iterator c; if (!_linked_possible(0, w)) continue; for (c = _connectives.begin(); c != _connectives.end(); c++) { if (w == *c) continue; if (!_linked_possible(0, *c)) continue; clause.growTo(3); clause[0] = ~Lit(_variables->linked(0, w)); clause[1] = ~Lit(_variables->fat_link(w, *c)); clause[2] = Lit(_variables->linked(0, *c)); add_clause(clause); } DEBUG_print("---end Left Wall cannot be connected inside"); } } void SATEncoderConjunctiveSentences::generate_fat_link_linked_upperside() { // Fat link must be linked on the upper side DEBUG_print("--- Fat link must be linked on the upper side"); vec clause; std::vector::const_iterator c; for (c = _connectives.begin(); c != _connectives.end(); c++) { if (isComma(_sent, *c)) continue; clause.clear(); char fl_str[MAX_VARIABLE_NAME]; sprintf(fl_str, "fl_d_%d", *c); clause.push(~Lit(_variables->string(fl_str))); for (int wl = 0; wl < *c - 1; wl++) { if (_linked_possible(wl, *c)) { const std::vector& vc = _word_tags[wl].get_right_connectors(); std::vector::const_iterator i; for (i = vc.begin(); i != vc.end(); i++) { if (link_cw_possible(wl, i->position, i->connector->string, '+', *c, 1, _sent->length - 1)) clause.push(Lit(_variables->link_cw(*c, wl, (*i).position, (*i).connector->string))); } } } for (int wr = *c+2; wr < _sent->length; wr++) { if (_linked_possible(*c, wr)) { const std::vector& vc = _word_tags[wr].get_left_connectors(); std::vector::const_iterator i; for (i = vc.begin(); i != vc.end(); i++) { if (link_cw_possible(wr, i->position, i->connector->string, '-', *c, 1, _sent->length - 1)) clause.push(Lit(_variables->link_cw(*c, wr, (*i).position, (*i).connector->string))); } } } std::vector::const_iterator c1; for (c1 = _connectives.begin(); c1 != _connectives.end(); c1++) { if (c1 != c) clause.push(Lit(_variables->fat_link(*c, *c1))); } add_clause(clause); } DEBUG_print("---end Fat link must be connected on the upper side"); } void SATEncoderConjunctiveSentences::either_tag_or_fat_link(int w, Lit tag) { DEBUG_print("----either tag or fat_link"); vec clause; char fl_str[MAX_VARIABLE_NAME]; sprintf(fl_str, "fl_d_%d", w); // Either tag of the word is satisfied or there must be fat-link on // this word clause.growTo(2); clause[0] = tag; clause[1] = Lit(_variables->string(fl_str)); add_clause(clause); // There cannot be both fat-links and a satisfied tag clause.growTo(2); clause[0] = ~tag; clause[1] = ~Lit(_variables->string(fl_str)); add_clause(clause); DEBUG_print("----end either tag or fat_link"); } // Check if there can be a connection between the connector (wi, pi) // with the word w when the word w has fat links down bool SATEncoderConjunctiveSentences::link_cw_possible_with_fld(int wi, int pi, const char* Ci, char dir, int w, int llim, int rlim) { // Connective word can match iff the connector is andable and there // are words wk1 and wk2 such that B(wi, wk1, w) and B(wi, w, wk1) // and there are connectors on wk1 and wk2 that can match (wi, pi) Connector conn; init_connector(&conn); conn.label = NORMAL_LABEL; conn.priority = THIN_priority; conn.string = Ci; bool andable_opposite = is_andable(_sent, &conn, dir == '+' ? '-' : '+'); if (!andable_opposite) { return false; } int low = wi < w ? std::max(llim, wi + 1) : llim; int hi = wi < w ? rlim : std::min(wi, rlim); return matches_in_interval(wi, pi, low, w) && matches_in_interval(wi, pi, w + 1, hi); } // Check if there can be a connection between the connector (wi, pi) with the word w bool SATEncoderConjunctiveSentences::link_cw_possible(int wi, int pi, const char* Ci, char dir, int w, int llim, int rlim) { if (!isConnectiveOrComma(w)) { // Ordinary word can match iff it has a connector that can match return _word_tags[w].match_possible(wi, pi); } else { // Connective word can match iff it can match as an ordinary word // or the connector is andable and there are words wk1 and wk2 // such that B(wi, wk1, w) and B(wi, w, wk1) and there are // connectors on wk1 and wk2 that can match (wi, pi) return _word_tags[w].match_possible(wi, pi) || link_cw_possible_with_fld(wi, pi, Ci, dir, w, llim, rlim); } } void SATEncoderConjunctiveSentences::generate_link_top_ww_connective_comma_definition(Lit lhs, int w1, int w2) { DEBUG_print("---- link_top_connective_comma"); vec clause; vec fatlinks_left, fatlinks_right, link_top_left, link_top_right; int low = w1 < w2 ? 1 : w2+1; int hi = w1 < w2 ? w2 : _sent->length - 1; for (int w = low; w < w1; w++) { Lit fl(_variables->fat_link(w, w1)); Lit tl(_variables->link_top_ww(w, w2)); clause.growTo(3); clause[0] = ~fl; clause[1] = ~lhs; clause[2] = tl; add_clause(clause); fatlinks_left.push(fl); link_top_left.push(tl); } DEBUG_print("---------"); for (int w = w1 + 1; w < hi; w++) { Lit fr(_variables->fat_link(w, w1)); Lit tr(_variables->link_top_ww(w, w2)); clause.growTo(3); clause[0] = ~fr; clause[1] = ~lhs; clause[2] = tr; add_clause(clause); fatlinks_right.push(fr); link_top_right.push(tr); } clause.clear(); for (int i = 0; i < fatlinks_left.size(); i++) { for (int j = 0; j < fatlinks_right.size(); j++) { clause.growTo(5); clause[0] = ~fatlinks_left[i]; clause[1] = ~link_top_left[i]; clause[2] = ~fatlinks_right[j]; clause[3] = ~link_top_right[j]; clause[4] = lhs; add_clause(clause); } } DEBUG_print("---- end link_top_connective_comma"); } void SATEncoderConjunctiveSentences::generate_linked_definitions() { Matrix _thin_link_possible; _thin_link_possible.resize(_sent->length, 1); DEBUG_print("------- link_top_ww definitions"); for (int w1 = 0; w1 < _sent->length; w1++) { for (int w2 = 0; w2 < _sent->length; w2++) { if (w1 == w2) continue; DEBUG_print("---------- ." << w1 << ". ." << w2 << "."); Lit lhs; vec rhs; const std::vector& w1_connectors = (w1 < w2) ? _word_tags[w1].get_right_connectors() : _word_tags[w1].get_left_connectors(); std::vector::const_iterator c; for (c = w1_connectors.begin(); c != w1_connectors.end(); c++) { if (link_cw_possible(w1, c->position, c->connector->string, c->dir, w2, 1, _sent->length - 1)) { rhs.push(Lit(_variables->link_top_cw(w2, w1, c->position, c->connector->string))); } } lhs = Lit(_variables->link_top_ww(w1, w2)); if (!isConnectiveOrComma(w1) || abs(w1 - w2) == 1) { if (rhs.size() == 0) _thin_link_possible.set(w1, w2, 0); generate_or_definition(lhs, rhs); } else { char w1_str[MAX_VARIABLE_NAME]; sprintf(w1_str, "w%d", w1); generate_conditional_or_definition(Lit(_variables->string(w1_str)), lhs, rhs); generate_link_top_ww_connective_comma_definition(lhs, w1, w2); } DEBUG_print("----------"); } } DEBUG_print("------- end link_top_ww definitions"); DEBUG_print("------- thin_link definitions"); Lit lhs; vec rhs; for (int w1 = 0; w1 < _sent->length - 1; w1++) { for (int w2 = w1 + 1; w2 < _sent->length; w2++) { rhs.clear(); if (_thin_link_possible(w1, w2)) { lhs = Lit(_variables->thin_link(w1, w2)); rhs.growTo(2); rhs[0] = Lit(_variables->link_top_ww(w1, w2)); rhs[1] = Lit(_variables->link_top_ww(w2, w1)); generate_classical_and_definition(lhs, rhs); } } } DEBUG_print("------- thin_linked definitions"); DEBUG_print("------- linked definitions"); _linked_possible.resize(_sent->length, 1); for (int w1 = 0; w1 < _sent->length - 1; w1++) { for (int w2 = w1 + 1; w2 < _sent->length; w2++) { rhs.clear(); if (_thin_link_possible(w1, w2)) rhs.push(Lit(_variables->thin_link(w1, w2))); if (isConnectiveOrComma(w1) && w2 < _sent->length - 1) rhs.push(Lit(_variables->fat_link(w2, w1))); if (isConnectiveOrComma(w2) && w1 > 0) rhs.push(Lit(_variables->fat_link(w1, w2))); if (rhs.size() > 0) { lhs = Lit(_variables->linked(w1, w2)); generate_or_definition(lhs, rhs); _linked_possible.set(w1, w2, 1); } else { _linked_possible.set(w1, w2, 0); } } } DEBUG_print("------- linked definitions"); DEBUG_print("---Weak connectivity"); for (int w1 = 0; w1 < _sent->length; w1++) { // At least one link should exist (weak connectivity) vec clause; for (int w2 = 0; w2 < w1; w2++) { if (_linked_possible(w2, w1)) clause.push(Lit(_variables->linked(w2, w1))); } for (int w2 = w1+1; w2 < _sent->length; w2++) { if (_linked_possible(w1, w2)) clause.push(Lit(_variables->linked(w1, w2))); } add_clause(clause); } DEBUG_print("---end Weak connectivity"); } void SATEncoderConjunctiveSentences::get_satisfied_link_top_cw_connectors(int word, int top_word, std::vector& link_top_cw_vars) { static int tab = 0; // Check if top_word acts as an ordinary or as a special connective words char str[MAX_VARIABLE_NAME]; sprintf(str, "w%d", top_word); bool ordinary = _solver->model[_variables->string(str)] == l_True; if (ordinary) { const std::vector& link_top_cw_variables = _variables->link_top_cw_variables(); std::vector::const_iterator i; for (i = link_top_cw_variables.begin(); i != link_top_cw_variables.end(); i++) { if (_solver->model[*i] != l_True) continue; const Variables::LinkTopCWVar* var = _variables->link_top_cw_variable(*i); if (var->top_word != word || var->connector_word != top_word) continue; link_top_cw_vars.push_back(*i); } } else { // Find two words that are fat_linked up to the top word for (int w = 1; w < _sent->length - 1; w++) { if (w == top_word) continue; if (_solver->model[_variables->fat_link(w, top_word)] == l_True) { get_satisfied_link_top_cw_connectors(word, w, link_top_cw_vars); } } } } bool SATEncoderConjunctiveSentences::extract_links(Parse_info pi) { int current_link = 0; bool fat = false; const std::vector& linked_variables = _variables->linked_variables(); std::vector::const_iterator i; for (i = linked_variables.begin(); i != linked_variables.end(); i++) { if (_solver->model[*i] != l_True) continue; const Variables::LinkedVar* var = _variables->linked_variable(*i); // Check if words are connected with a fat-link bool fl_lr = 0 < var->left_word && var->right_word < _sent->length - 1 && parse_options_get_use_fat_links(_opts) && isConnectiveOrComma(var->right_word) && _solver->model[_variables->fat_link(var->left_word, var->right_word)] == l_True; bool fl_rl = 0 < var->left_word && var->right_word < _sent->length - 1 && parse_options_get_use_fat_links(_opts) && isConnectiveOrComma(var->left_word) && _solver->model[_variables->fat_link(var->right_word, var->left_word)] == l_True; if (fl_lr || fl_rl) { // a fat link pi->link_array[current_link].l = var->left_word; pi->link_array[current_link].r = var->right_word; Connector* connector; connector = connector_new(); connector->priority = fl_lr ? UP_priority : DOWN_priority; connector->string = "fat"; pi->link_array[current_link].lc = connector; connector = connector_new(); connector->priority = fl_lr ? DOWN_priority : UP_priority; connector->string = "fat"; pi->link_array[current_link].rc = connector; current_link++; fat = true; } else { // a thin link std::vector link_top_cw_vars_right; std::vector link_top_cw_vars_left; get_satisfied_link_top_cw_connectors(var->left_word, var->right_word, link_top_cw_vars_left); get_satisfied_link_top_cw_connectors(var->right_word, var->left_word, link_top_cw_vars_right); std::vector strings_right; std::vector::const_iterator rc, lc; for (rc = link_top_cw_vars_right.begin(); rc != link_top_cw_vars_right.end(); rc++) { const Variables::LinkTopCWVar* var = _variables->link_top_cw_variable(*rc); strings_right.push_back(var->connector); } std::vector strings_left; for (lc = link_top_cw_vars_left.begin(); lc != link_top_cw_vars_left.end(); lc++) { const Variables::LinkTopCWVar* var = _variables->link_top_cw_variable(*lc); strings_left.push_back(var->connector); } // String unification std::vector::const_iterator li, ri; const char* left_string = strings_left[0]; for (li = strings_left.begin() + 1; li != strings_left.end(); li++) { left_string = intersect_strings(_sent, left_string, *li); } const char* right_string = strings_right[0]; for (ri = strings_right.begin() + 1; ri != strings_right.end(); ri++) { right_string = intersect_strings(_sent, right_string, *ri); } pi->link_array[current_link].l = var->left_word; pi->link_array[current_link].r = var->right_word; Connector* connector; connector = connector_new(); connector->string = right_string; pi->link_array[current_link].lc = connector; connector = connector_new(); connector->string = left_string; pi->link_array[current_link].rc = connector; current_link++; } } pi->N_links = current_link; return fat; } /**************************************************************************** * Main entry point into the SAT parser * ****************************************************************************/ extern "C" int sat_parse(Sentence sent, Parse_Options opts) { SATEncoder* encoder = (SATEncoder*) sent->hook; if (encoder) delete encoder; // Prepare for parsing - extracted for "preparation.c" build_deletable(sent, 0); build_effective_dist(sent, 0); init_count(sent); count_set_effective_distance(sent); bool conjunction = FALSE; if (parse_options_get_use_fat_links(opts)) { conjunction = sentence_contains_conjunction(sent); } // Create the encoder, encode the formula and solve it if (conjunction) { DEBUG_print("Conjunctive sentence\n"); encoder = new SATEncoderConjunctiveSentences(sent, opts); } else { DEBUG_print("Conjunction free sentence\n"); encoder = new SATEncoderConjunctionFreeSentences(sent, opts); } sent->hook = encoder; encoder->encode(); // XXX this is wrong, we actually don't know yet ... // If we don't return some large number here, then the // Command-line client will fail to print all of the possible // linkages. Work around this by lying ... sent->num_valid_linkages = 222; sent->num_linkages_post_processed = 222; return 0; } extern "C" Linkage sat_create_linkage(int k, Sentence sent, Parse_Options opts) { SATEncoder* encoder = (SATEncoder*) sent->hook; if (!encoder) return NULL; return encoder->get_next_linkage(); } extern "C" void sat_sentence_delete(Sentence sent) { SATEncoder* encoder = (SATEncoder*) sent->hook; if (!encoder) return; delete encoder; // Don't do this parse-info-free stuff, if there's no encoder. // That's because it will screw up the regular parser. if (sent->parse_info) { Parse_info pi = sent->parse_info; for (int i=0; i< MAX_LINKS; i++) { free_connectors(pi->link_array[i].lc); free_connectors(pi->link_array[i].rc); } free_parse_info(sent->parse_info); sent->parse_info = NULL; } } link-grammar/link-grammar/sat-solver/word-tag.hpp0000644000000000000000000001054512536650433017256 0ustar #ifndef __WORD_TAG_HPP__ #define __WORD_TAG_HPP__ #include #include #include extern "C" { #include } #include "variables.hpp" struct PositionConnector { PositionConnector(Connector* c, char d, int w, int p, int cst, int pcst, bool lr, bool ll, const std::vector& er, const std::vector& el) : connector(c), dir(d), word(w), position(p), cost(cst), parrent_cost(pcst), leading_right(lr), leading_left(ll), eps_right(er), eps_left(el) { /* cout << c->string << " : ." << w << ". : ." << p << ". "; if (leading_right) { cout << "lr: "; copy(er.begin(), er.end(), ostream_iterator(cout, " ")); } if (leading_left) { cout << "ll: "; copy(el.begin(), el.end(), ostream_iterator(cout, " ")); } cout << endl; */ } // Connector itself Connector* connector; // Direction char dir; // word in a sentence that this connector belongs to int word; // position in the word tag int position; // cost of the connector int cost; // parrent cost int parrent_cost; bool leading_right; std::vector eps_right; bool leading_left; std::vector eps_left; // Matches with other words std::vector matches; }; // TODO: Hash connectors for faster matching class WordTag { private: std::vector _left_connectors; std::vector _right_connectors; std::vector _dir; std::vector _position; int _word; Variables* _variables; Sentence _sent; Parse_Options _opts; // Could this word tag match a connector (wi, pi)? // For each word wi I keep a set of positions pi that can be matched std::vector< std::set > _match_possible; void set_match_possible(int wj, int pj) { _match_possible[wj].insert(pj); } public: WordTag(int word, Variables* variables, Sentence sent, Parse_Options opts) : _word(word), _variables(variables), _sent(sent), _opts(opts) { _match_possible.resize(_sent->length); } const std::vector& get_left_connectors() { return _left_connectors; } const std::vector& get_right_connectors() { return _right_connectors; } PositionConnector* get(int dfs_position) { switch (_dir[dfs_position - 1]) { case '+': return &_right_connectors[_position[dfs_position - 1]]; case '-': return &_left_connectors[_position[dfs_position - 1]]; } } void set_connector_length_limit(Connector* c) { int short_len = _opts->short_length; if (short_len > UNLIMITED_LEN) short_len = UNLIMITED_LEN; Connector_set *conset = _sent->dict->unlimited_connector_set; if (parse_options_get_all_short_connectors(_opts)) { c->length_limit = short_len; } else if (conset == NULL || match_in_connector_set(_sent, conset, c, '+')) { c->length_limit = UNLIMITED_LEN; } else { c->length_limit = short_len; } } int match(int w1, Connector& cntr1, char dir, int w2, Connector& cntr2, bool conjunction) { if (conjunction) { switch (dir) { case '+': return ::prune_match(0, &cntr1, &cntr2); case '-': return ::prune_match(0, &cntr2, &cntr1); default: throw std::string("Unknown connector direction: ") + dir; } } else { return ::do_match(_sent, &cntr1, &cntr2, w1, w2); } } void insert_connectors(Exp* exp, int& dfs_position, bool& leading_right, bool& leading_left, std::vector& eps_right, std::vector& eps_left, char* var, bool root, int parrent_cost); // Caches information about the found matches to the _matches vector, and also // updates the _matches vector of all connectors in the given tag. // In order to have all possible matches correctly cached, the function assumes that it is // iteratively called for all words in the sentence, where the tag is on the right side of // this word void add_matches_with_word(WordTag& tag); // Find matches in this word tag with the connector (name, dir). void find_matches(int w, const char* C, char dir, std::vector& matches); // A simpler function: Can any connector in this word match a connector wi, pi? // It is assumed that bool match_possible(int wi, int pi) { return _match_possible[wi].find(pi) != _match_possible[wi].end(); } }; #endif link-grammar/link-grammar/sat-solver/fast-sprintf.cpp0000644000000000000000000000070412536650433020141 0ustar #include "fast-sprintf.hpp" char* fast_sprintf(char* buffer, int num) { char* begin = buffer; do { *buffer++ = '0' + num % 10; num /= 10; } while (num > 0); char* end = buffer - 1; for (; begin < end; begin++, end--) { char tmp = *begin; *begin = *end; *end = tmp; } *buffer = '\0'; return buffer; } char* fast_sprintf(char* buffer, const char* str) { while(*buffer++ = *str++) ; return buffer - 1; } link-grammar/link-grammar/sat-solver/util.hpp0000644000000000000000000000046312536650433016505 0ustar #ifndef __UTIL_HPP__ #define __UTIL_HPP__ extern "C" { #include } bool isEndingInterpunction(const char* str); bool isConnective(Sentence sent, int w); bool isComma(Sentence sent, int w); bool isConnectiveOrComma(Sentence sent, int w); const char* word(Sentence sent, int w); #endif link-grammar/link-grammar/sat-solver/matrix-ut.hpp0000644000000000000000000000324012536650433017456 0ustar #ifndef __MATRIX_UPPER_TRIANGLE_HPP__ #define __MATRIX_UPPER_TRIANGLE_HPP__ #include #ifndef assert #define assert(ex,string) { \ if (!(ex)) { \ printf("Assertion failed: %s\n", string); \ exit(1); \ } \ } #endif template class Matrix { public: Matrix(int n = 1, T init = T()) { resize(n, init); } virtual void resize(int n, T init = T()) { _n = n; _data.resize(size(_n), init); } virtual const T& operator() (int i, int j) const { return _data[pos(i, j, _n)]; } virtual T& operator() (int i, int j) { return _data[pos(i, j, _n)]; } void set(int i, int j, T t) { (*this)(i, j) = t; } protected: virtual int pos (int i, int j, int n) const { return n*i + j; } virtual int size(int n) const { return n*n; } std::vector _data; int _n; }; template class MatrixUpperTriangle : public Matrix { public: MatrixUpperTriangle(int n = 1, T init = T()) : Matrix(n, init) { } const T& operator() (int i, int j) const { assert(i < j, "MatrixUpperTriangle: i >= j"); return Matrix::_data[pos(i, j, Matrix::_n)]; } T& operator() (int i, int j) { assert(i < j, "MatrixUpperTriangle: i >= j"); return Matrix::_data[pos(i, j, Matrix::_n)]; } protected: virtual int size(int n) const { return n*(n-1)/2; } virtual int pos (int i, int j, int n) const { return i*(n-2) - i*(i-1)/2 + j - 1; } }; #endif link-grammar/link-grammar/sat-solver/fast-sprintf.hpp0000644000000000000000000000024112536650433020142 0ustar #ifndef __FAST_SPRINTF_HPP__ #define __FAST_SPRINTF_HPP__ char* fast_sprintf(char* buffer, int num); char* fast_sprintf(char* buffer, const char* str); #endif link-grammar/link-grammar/sat-solver/util.cpp0000644000000000000000000000076312536650433016503 0ustar #include "util.hpp" bool isEndingInterpunction(const char* str) { return strcmp(str, ".") == 0 || strcmp(str, "?") == 0 || strcmp(str, "!") == 0; } bool isConnective(Sentence sent, int w) { return sent->is_conjunction[w]; } bool isComma(Sentence sent, int w) { return strcmp(word(sent, w), ",") == 0; } bool isConnectiveOrComma(Sentence sent, int w) { return isConnective(sent, w) || isComma(sent, w); } const char* word(Sentence sent, int w) { return sent->word[w].string; } link-grammar/link-grammar/sat-solver/rejected.cpp0000644000000000000000000001777712536650433017330 0ustar void generate_power_pruning_right(int w, Exp* exp, int& dfs_position, std::vector empty_conditions, char* name, char* var); void generate_power_pruning_left(int w, Exp* exp, int& dfs_position, std::vector empty_conditions, char* name, char* var, int w_r, int pos_r, char* name_r); void SATEncoder::generate_power_pruning_right(int w, Exp* exp, int& dfs_position, std::vector empty_conditions, char* name, char* var) { if (exp->type == CONNECTOR_type) { dfs_position++; if (exp->dir == '+' && !exp->multi) { for (int w_l = w + 2; w_l < _sent->length; w_l++) { if (_sent->word[w_l].x == NULL) continue; char name_l[MAX_VARIABLE_NAME]; sprintf(name_l, "w%d", w_l); bool join = _sent->word[w_l].x->next != NULL; Exp* e_l = join ? join_alternatives(w_l) : _sent->word[w_l].x->exp; int dfs_position_l = 0; generate_power_pruning_left(w_l, e_l, dfs_position_l, empty_conditions, name_l, NULL, w, dfs_position, exp->u.string); if (join) free_alternatives(e_l); } } } else if (exp->type == OR_type) { if (exp->u.l != NULL && exp->u.l->next == NULL) { /* unary or - skip */ generate_power_pruning_right(w, exp->u.l->e,dfs_position, empty_conditions, name, var); } else { int i; E_list* l; for (l = exp->u.l, i = 0; l != NULL; l = l->next, i++) { char new_var[MAX_VARIABLE_NAME]; if (var != NULL) { sprintf(new_var, "%s_d%d", var, i); } else { sprintf(new_var, "d%d", i); } generate_power_pruning_right(w, l->e, dfs_position, empty_conditions, name, new_var); } } } else if (exp->type == AND_type) { if (exp->u.l != NULL && exp->u.l->next == NULL) { /* unary and - skip */ generate_power_pruning_right(w, exp->u.l->e,dfs_position, empty_conditions, name, var); } else { int i; E_list* l; for (l = exp->u.l, i = 0; l != NULL; l = l->next, i++) { char new_var[MAX_VARIABLE_NAME]; if (var != NULL) { sprintf(new_var, "%s_c%d", var, i); } else { sprintf(new_var, "c%d", i); } generate_power_pruning_right(w, l->e, dfs_position, empty_conditions, name, new_var); empty_conditions.push_back(-_variables->epsilon(name, new_var, '+')); } } } } void SATEncoder::generate_power_pruning_left(int w, Exp* exp, int& dfs_position, std::vector empty_conditions, char* name, char* var, int w_r, int pos_r, char* name_r) { // cout << "TDL: "; // print_expression(exp); // cout << endl; if (exp->type == CONNECTOR_type) { dfs_position++; if (exp->dir == '-' && !exp->multi) { Connector c1, c2; init_connector(&c1); c1.label = NORMAL_LABEL; c1.priority = THIN_priority; c1.string = name_r; init_connector(&c2); c2.label = NORMAL_LABEL; c2.priority = THIN_priority; c2.string = exp->u.string; // cout << name_r << "_" << w_r << "_" << pos_r << " vs " // << exp->u.string << "_" << w << "_" << dfs_position << endl; if (!WordTag::match(c1, '+', c2)) return; cout << "POS: "; cout << name_r << "_." << w_r << "._." << pos_r << ". vs " << exp->u.string << "_." << w << "._." << dfs_position << endl; empty_conditions.push_back(-_variables->link(w_r, pos_r, name_r, w, dfs_position, exp->u.string)); generate_or(empty_conditions); } } else if (exp->type == OR_type) { if (exp->u.l != NULL && exp->u.l->next == NULL) { /* unary or - skip */ generate_power_pruning_left(w, exp->u.l->e,dfs_position, empty_conditions, name, var, w_r, pos_r, name_r); } else { int i; E_list* l; for (l = exp->u.l, i = 0; l != NULL; l = l->next, i++) { char new_var[MAX_VARIABLE_NAME]; if (var != NULL) { sprintf(new_var, "%s_d%d", var, i); } else { sprintf(new_var, "d%d", i); } generate_power_pruning_left(w, l->e, dfs_position, empty_conditions, name, new_var, w_r, pos_r, name_r); } } } else if (exp->type == AND_type) { if (exp->u.l != NULL && exp->u.l->next == NULL) { /* unary and - skip */ generate_power_pruning_left(w, exp->u.l->e,dfs_position, empty_conditions, name, var, w_r, pos_r, name_r); } else { int i; E_list* l; for (l = exp->u.l, i = 0; l != NULL; l = l->next, i++) { char new_var[MAX_VARIABLE_NAME]; if (var != NULL) { sprintf(new_var, "%s_c%d", var, i); } else { sprintf(new_var, "c%d", i); } generate_power_pruning_left(w, l->e, dfs_position, empty_conditions, name, new_var, w_r, pos_r, name_r); empty_conditions.push_back(-_variables->epsilon(name, new_var, '-')); } } } } bool SATEncoder::pp_match(const char* name) { // cout << "PPMATCH: " << name << endl; for (int w = 0; w < _sent->length; w++) if (_word_tags[w].pp_check(name)) return true; return false; } bool SATEncoder::pp_check(const char* connector) { if (_sent->dict->postprocessor == NULL) return true; pp_knowledge * knowledge; knowledge = _sent->dict->postprocessor->knowledge; for (int i=0; in_contains_one_rules; i++) { pp_rule rule; char * selector; pp_linkset * link_set; rule = knowledge->contains_one_rules[i]; /* the ith rule */ selector = rule.selector; /* selector string for this rule */ link_set = rule.link_set; /* the set of criterion links */ if (strchr(selector, '*') != NULL) continue; /* If it has a * forget it */ if (!post_process_match(selector, connector)) continue; cout << "Trigger: " << connector << endl; pp_linkset_node *p; bool match_possible = false; for (int hashval = 0; hashval < link_set->hash_table_size && !match_possible; hashval++) { for (p = link_set->hash_table[hashval]; p!=NULL && !match_possible; p=p->next) { const char * t; char name[20], *s; strncpy(name, p->str, sizeof(name)-1); name[sizeof(name)-1] = '\0'; cout << "NAME: " << name << endl; for (s = name; isupper((int)*s); s++) ; for (;*s != '\0'; s++) if (*s != '*') *s = '#'; for (s = name, t = p->str; isupper((int) *s); s++, t++) ; int bad = 0; int n_subscripts = 0; for (;*s != '\0' && bad==0; s++, t++) { if (*s == '*') continue; n_subscripts++; /* after the upper case part, and is not a * so must be a regular subscript */ *s = *t; if (!pp_match(name)) bad++; *s = '#'; } if (n_subscripts == 0) { /* now we handle the special case which occurs if there were 0 subscripts */ if (!pp_match(name)) bad++; } /* now if bad==0 this criterion link does the job to satisfy the needs of the trigger link */ if (bad == 0) match_possible = true; } } if (!match_possible) { cout << "THIS ONE IS FALSE\n" << endl; return false; } } return true; } bool pp_match(const char* name); bool pp_check(const char* connector); bool pp_check(const char* connector); bool WordTag::pp_check(const char* connector) { std::vector::const_iterator i; for (i = _left_connectors.begin(); i != _left_connectors.end(); i++) if (post_process_match(connector, i->connector->string)) return true; for (i = _right_connectors.begin(); i != _right_connectors.end(); i++) if (post_process_match(connector, i->connector->string)) return true; return false; } static void split(const std::string& str, char c, std::vector& parts) { const char *s, *e; e = str.c_str(); while(1) { s = e + 1; e = strchr(s, c); if (!e) { parts.push_back(str.substr(s - str.c_str())); break; } else parts.push_back(str.substr(s - str.c_str(), e - s)); } } static char* link_label(const std::string& link_var) { std::vector parts; split(link_var, '_', parts); return construct_link_label(parts[3].c_str(), parts[6].c_str()); } static int link_left_word(const std::string& link_var) { std::vector parts; split(link_var, '_', parts); return atoi(parts[1].c_str()); } static int link_right_word(const std::string& link_var) { std::vector parts; split(link_var, '_', parts); return atoi(parts[4].c_str()); } link-grammar/link-grammar/sat-solver/word-tag.cpp0000644000000000000000000001125712536650433017252 0ustar #include "word-tag.hpp" #include "fast-sprintf.hpp" void WordTag::insert_connectors(Exp* exp, int& dfs_position, bool& leading_right, bool& leading_left, std::vector& eps_right, std::vector& eps_left, char* var, bool root, int parrent_cost) { int cost = parrent_cost + exp->cost; if (exp->type == CONNECTOR_type) { dfs_position++; const char* name = exp->u.string; Connector* connector = connector_new(); connector->multi = exp->multi; connector->string = name; set_connector_length_limit(connector); switch(exp->dir) { case '+': _position.push_back(_right_connectors.size()); _dir.push_back('+'); _right_connectors.push_back(PositionConnector(connector, '+', _word, dfs_position, exp->cost, cost, leading_right, false, eps_right, eps_left)); leading_right = false; break; case '-': _position.push_back(_left_connectors.size()); _dir.push_back('-'); _left_connectors.push_back(PositionConnector(connector, '-', _word, dfs_position, exp->cost, cost, false, leading_left, eps_right, eps_left)); leading_left = false; break; default: throw std::string("Unknown connector direction: ") + exp->dir; } } else if (exp->type == AND_type) { if (exp->u.l == NULL) { /* zeroary and */ } else if (exp->u.l != NULL && exp->u.l->next == NULL) { /* unary and - skip */ insert_connectors(exp->u.l->e, dfs_position, leading_right, leading_left, eps_right, eps_left, var, root, cost); } else { int i; E_list* l; char new_var[MAX_VARIABLE_NAME]; char* last_new_var = new_var; char* last_var = var; while(*last_new_var = *last_var) { last_new_var++; last_var++; } for (i = 0, l = exp->u.l; l != NULL; l = l->next, i++) { char* s = last_new_var; *s++ = 'c'; fast_sprintf(s, i); insert_connectors(l->e, dfs_position, leading_right, leading_left, eps_right, eps_left, new_var, false, cost); if (leading_right && var != NULL) { eps_right.push_back(_variables->epsilon(new_var, '+')); } if (leading_left && var != NULL) { eps_left.push_back(_variables->epsilon(new_var, '-')); } } } } else if (exp->type == OR_type) { if (exp->u.l != NULL && exp->u.l->next == NULL) { /* unary or - skip */ insert_connectors(exp->u.l->e, dfs_position, leading_right, leading_left, eps_right, eps_left, var, root, cost); } else { int i; E_list* l; bool ll_true = false; bool lr_true = false; char new_var[MAX_VARIABLE_NAME]; char* last_new_var = new_var; char* last_var = var; while(*last_new_var = *last_var) { last_new_var++; last_var++; } for (i = 0, l = exp->u.l; l != NULL; l = l->next, i++) { bool lr = leading_right, ll = leading_left; std::vector er = eps_right, el = eps_left; char* s = last_new_var; *s++ = 'd'; fast_sprintf(s, i); insert_connectors(l->e, dfs_position, lr, ll, er, el, new_var, false, cost); if (lr) lr_true = true; if (ll) ll_true = true; } leading_right = lr_true; leading_left = ll_true; } } } void WordTag::find_matches(int w, const char* C, char dir, std::vector& matches) { // cout << "Look connection on: ." << _word << ". ." << w << ". " << C << dir << endl; Connector search_cntr; init_connector(&search_cntr); search_cntr.label = NORMAL_LABEL; search_cntr.priority = THIN_priority; search_cntr.string = C; set_connector_length_limit(&search_cntr); std::vector* connectors; switch(dir) { case '+': connectors = &_left_connectors; break; case '-': connectors = &_right_connectors; break; default: throw std::string("Unknown connector direction: ") + dir; } bool conjunction = sentence_contains_conjunction(_sent); std::vector::iterator i; for (i = connectors->begin(); i != connectors->end(); i++) { if (WordTag::match(w, search_cntr, dir, (*i).word, *((*i).connector), conjunction)) { matches.push_back(&(*i)); } } } void WordTag::add_matches_with_word(WordTag& tag) { std::vector::iterator i; for (i = _right_connectors.begin(); i != _right_connectors.end(); i++) { std::vector connector_matches; tag.find_matches(_word, (*i).connector->string, '+', connector_matches); std::vector::iterator j; for (j = connector_matches.begin(); j != connector_matches.end(); j++) { i->matches.push_back(*j); set_match_possible((*j)->word, (*j)->position); (*j)->matches.push_back(&(*i)); tag.set_match_possible(_word, (*i).position); } } } link-grammar/link-grammar/sat-solver/guiding.hpp0000644000000000000000000001674212536650433017165 0ustar #ifndef __GUIDING_HPP__ #define __GUIDING_HPP__ #include "Solver.h" #include "util.hpp" // This class represents different guding strategies of LinkParser SAT search class Guiding { public: struct SATParameters { /* Should the variable with the given number be used as a decision variable during the SAT search? */ bool isDecision; /* What is the decision priority of the variable with the given number during the SAT search? */ double priority; /* What is the preffered polarity of the variable with the given number during the SAT search? */ double polarity; }; Guiding(Sentence sent) : _sent(sent) { } /* Abstract functions that calculate params for each type of variable */ /* string variables */ virtual void setStringParameters (int var, const char* str) { bool isDecision = false; setParameters(var, isDecision, 0.0, 0.0); } virtual void setStringParameters (int var, const char* str, int cost) = 0; /* epsilon variables */ virtual void setEpsilonParameters (int var) { bool isDecision = false; setParameters(var, isDecision, 0.0, 0.0); } /* link_cc variables */ virtual void setLinkParameters (int var, int wi, const char* ci, int wj, const char* cj, const char* label) = 0; virtual void setLinkParameters (int var, int wi, const char* ci, int wj, const char* cj, const char* label, int cost) = 0; /* linked_variables */ virtual void setLinkedParameters (int var, int wi, int wj) { bool isDecision = false; setParameters(var, isDecision, 0.0, 0.0); } virtual void setLinkedMinMaxParameters (int var, int wi, int wj) { bool isDecision = false; setParameters(var, isDecision, 0.0, 0.0); } /* link_cw_variables */ virtual void setLinkCWParameters (int var, int wi, int wj, const char* cj) { bool isDecision = false; setParameters(var, isDecision, 0.0, 0.0); } /* link_top_cw variables */ virtual void setLinkTopCWParameters (int var, int wi, int wj, const char* cj) { bool isDecision = false; setParameters(var, isDecision, 0.0, 0.0); } /* link_top_ww variables */ virtual void setLinkTopWWParameters (int var, int wi, int wj) { bool isDecision = false; setParameters(var, isDecision, 0.0, 0.0); } /* fat_link variables */ virtual void setFatLinkParameters (int var, int wi, int wj) = 0; /* thin_link variables */ virtual void setThinLinkParameters (int var, int wi, int wj) = 0; /* neighbor fat link variables */ virtual void setNeighborFatLinkParameters (int var, int w) = 0; /* Pass SAT search parameters to the MiniSAT solver */ void passParametersToSolver(Solver* solver) { for (int v = 0; v < _parameters.size(); v++) { solver->setDecisionVar(v, _parameters[v].isDecision); if (_parameters[v].isDecision) { solver->setActivity(v, _parameters[v].priority); /* TODO: make polarity double instead of boolean*/ solver->setPolarity(v, _parameters[v].polarity > 0.0); } } } protected: /* Set the parameters for the given variable to given values */ void setParameters(int var, bool isDecision, double priority, double polarity) { if (var >= _parameters.size()) _parameters.resize(var + 1); _parameters[var].isDecision = isDecision; _parameters[var].priority = priority; _parameters[var].polarity = polarity; // printf("Set: %d %s .%g. .%g.\n", var, isDecision ? "true" : "false", priority, polarity); } /* Sentence that is being parsed */ Sentence _sent; /* Parameters for each variable */ std::vector _parameters; }; //////////////////////////////////////////////////////////////////////////// class CostDistanceGuiding : public Guiding { public: double cost2priority(int cost) { return cost == 0 ? 0.0 : (double)(_sent->length + cost); } CostDistanceGuiding(Sentence sent) : Guiding(sent) { } virtual void setStringParameters (int var, const char* str, int cost) { bool isDecision = cost > 0.0; double priority = cost2priority(cost); double polarity = 0.0; setParameters(var, isDecision, priority, polarity); } virtual void setLinkParameters (int var, int wi, const char* ci, int wj, const char* cj, const char* label) { bool isDecision = true; double priority = 0.0; double polarity = 0.0; setParameters(var, isDecision, priority, polarity); } virtual void setLinkParameters(int var, int i, const char* ci, int j, const char* cj, const char* label, int cost) { bool isDecision = true; double priority = cost2priority(cost); double polarity = 0.0; setParameters(var, isDecision, priority, polarity); } void setFatLinkParameters(int var, int i, int j) { bool isDecision = true; double priority = (double)abs(j - i); if (_sent->is_conjunction[i]) priority = 0.0; double polarity = abs(j - i) == 1 ? 1.0 : 0.0; setParameters(var, isDecision, priority, polarity); } void setThinLinkParameters(int var, int i, int j) { bool isDecision = true; double priority = (double)(j - i); if (_sent->is_conjunction[i] || _sent->is_conjunction[j]) priority = priority / 2; double polarity = j - i == 1 ? 1.0 : 0.0; if (i == 0 && j == _sent->length - 2 && isEndingInterpunction(_sent->word[j].string)) { polarity = 1.0; } if (i == 0 && j == _sent->length - 1 && !isEndingInterpunction(_sent->word[j - 1].string)) { polarity = 1.0; } setParameters(var, isDecision, priority, polarity); } void setNeighborFatLinkParameters(int var, int w) { bool isDecision = true; double priority = _sent->length; double polarity = 1.0; setParameters(var, isDecision, priority, polarity); } }; //////////////////////////////////////////////////////////////////////////// class CostDistanceGuidingOnlyLink : public Guiding { public: double cost2priority(int cost) { return cost == 0 ? 0.0 : (double)(_sent->length + cost); } CostDistanceGuidingOnlyLink(Sentence sent) : Guiding(sent) { } virtual void setStringParameters (int var, const char* str, int cost) { bool isDecision = cost > 0.0; double priority = cost2priority(cost); double polarity = 0.0; setParameters(var, isDecision, priority, polarity); } virtual void setLinkParameters (int var, int wi, const char* ci, int wj, const char* cj, const char* label) { bool isDecision = true; double priority = _sent->length - (wj - wi); double polarity = wj - wi <= 3 ? 1.0 : 0.0;; setParameters(var, isDecision, priority, polarity); } virtual void setLinkParameters(int var, int wi, const char* ci, int wj, const char* cj, const char* label, int cost) { bool isDecision = true; double priority = cost > 0 ? cost2priority(cost) : wj - wi; double polarity = wj - wi <= 3 ? 1.0 : 0.0; setParameters(var, isDecision, priority, polarity); } void setFatLinkParameters(int var, int i, int j) { bool isDecision = true; double priority = (double)abs(j - i); if (_sent->is_conjunction[i]) priority = 0.0; double polarity = abs(j - i) == 1 ? 1.0 : 0.0; setParameters(var, isDecision, priority, polarity); } void setThinLinkParameters(int var, int i, int j) { bool isDecision = false; setParameters(var, isDecision, 0.0, 0.0); } void setNeighborFatLinkParameters(int var, int w) { bool isDecision = true; double priority = _sent->length; double polarity = 1.0; setParameters(var, isDecision, priority, polarity); } }; #endif link-grammar/link-grammar/sat-solver/sat-encoder.h0000644000000000000000000000072212536650433017372 0ustar #include #ifdef USE_SAT_SOLVER int sat_parse(Sentence sent, Parse_Options opts); Linkage sat_create_linkage(int k, Sentence sent, Parse_Options opts); void sat_sentence_delete(Sentence sent); #else static inline int sat_parse(Sentence sent, Parse_Options opts) { return -1; } static inline Linkage sat_create_linkage(int k, Sentence sent, Parse_Options opts) { return NULL; } static inline void sat_sentence_delete(Sentence sent) {} #endif link-grammar/link-grammar/sat-solver/clock.hpp0000755000000000000000000000055112536650433016624 0ustar #ifndef __CLOCK_H__ #define __CLOCK_H__ /** * Time measurment functions */ #include #include class Clock { private: clock_t start; public: Clock() { reset(); } void reset() { start = clock(); } public: double elapsed() { clock_t stop = clock(); return ((double)stop-(double)start)/CLOCKS_PER_SEC; } }; #endif link-grammar/link-grammar/sat-solver/trie.hpp0000644000000000000000000000523712536650433016477 0ustar #ifndef __TRIE_HPP__ #define __TRIE_HPP__ #include /* Trie that supports strings made out of alphabeth letters, digits and underscores */ template class Trie { public: Trie(); ~Trie(); void insert(const char* key, T value); T lookup(const char* key); // returned in the key is not found in the trie const static int NOT_FOUND = -1; private: // no copying Trie(const Trie&); void operator=(const Trie& t); // Number of supported chars - digits + upper + lower + other const static int NUM_CHARS = 10 + 1 + 10 + 1; // hash chars int char_to_pos(char c); bool _terminal; Trie* _next[NUM_CHARS]; T _value; }; template Trie::Trie() : _terminal(false) { memset(_next, 0, NUM_CHARS*sizeof(Trie*)); } template Trie::~Trie() { for (int i = 0; i < NUM_CHARS; i++) if (_next[i]) { delete _next[i]; } } template int Trie::char_to_pos(char c) { static int pos[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, // A B C D E F G H I J K L M N O P Q R S T U V W X Y Z -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, -1, // a b c d e f g h i j k l m n o p q r s t u v w x y z -1, -1, 12, 13, 14, 15, -1, -1, 16, -1, -1, 17, -1, 18, -1, -1, -1, 19, -1, -1, 20, -1, 21, -1, -1, -1}; assert(pos[c] != -1, "NOT FOUND"); return pos[c]; /* if ('0' <= c && c <= '9') return c-'0' + 26 + 26; if (c == 'c') return 2; if (c == 'd') return 3; if (c == '_') return 26 + 26 + 10; if ('a' <= c && c <= 'z') return c-'a'; if ('A' <= c && c <= 'Z') return c-'A' + 26; if (c == '*') return 26 + 26 + 10 + 1; throw std::string("Trie::char ") + c + " is not supported"; */ } template void Trie::insert(const char* key, T value) { Trie* t = this; while(*key != '\0') { int pos = char_to_pos(*key); if (!t->_next[pos]) { t->_next[pos] = new Trie(); } t = t->_next[pos]; key++; } t->_terminal = true; t->_value = value; } template T Trie::lookup(const char* key) { Trie* t = this; while(*key != '\0') { int pos = char_to_pos(*key); t = t->_next[pos]; if (!t) { return NOT_FOUND; } key++; } return t->_terminal ? t->_value : NOT_FOUND; } #endif link-grammar/link-grammar/sat-solver/sat-encoder.hpp0000644000000000000000000003027412536650433017737 0ustar extern "C" { #include } extern "C" int sat_encode(Sentence sent, Parse_Options opts); extern "C" Linkage sat_create_linkage(int k, Sentence sent, Parse_Options opts); extern "C" void sat_sentence_delete(Sentence sent); #include "word-tag.hpp" /** * Base class for all SAT encodings */ class SATEncoder { public: // Construct the encoder based on given sentence SATEncoder(Sentence sent, Parse_Options opts) : _sent(sent), _opts(opts), _solver(new Solver()), _variables(new Variables(sent)) { // Preprocess word tags of the sentence build_word_tags(); } virtual ~SATEncoder() { delete _variables; delete _solver; } // Create the formula from the sentence void encode(); // Solve the formula, returning the next linkage. Linkage get_next_linkage(); protected: /** * Methods that generate various link-grammar constraints. */ // Top-level method that generates satisfaction conditions for every // word in the sentence void generate_satisfaction_conditions(); // Generates satisfaction conditions for the word-tag expression e void generate_satisfaction_for_expression(int w, int& dfs_position, Exp* e, char* var, int parrent_cost); // Handle the case of NULL expression of a word virtual void handle_null_expression(int w) = 0; // Determine if this word-tag must be satisfied and generate appropriate clauses virtual void determine_satisfaction(int w, char* name) = 0; // Generates satisfaction condition for the connector (wi, pi) virtual void generate_satisfaction_for_connector(int wi, int pi, const char* Ci, char dir, bool multi, int cost, char* var) = 0; // Definition of link_cw((wi, pi), wj) variables when wj is an ordinary word void generate_link_cw_ordinary_definition(int wi, int pi, const char* Ci, char dir, int cost, int wj); // Generates order constraints for the elements of a conjunction. void generate_conjunct_order_constraints(int w, Exp *e1, Exp* e2, int& dfs_position); /** * Methods used for optimizing conjunction ordering constraints */ // Number of connectors in an expression int num_connectors(Exp* e); // This expression can be matched without using any connectors of // the given direction static int empty_connectors(Exp* exp, char dir); // This expression can be matched while using a connector of the // given direction static int non_empty_connectors(Exp* exp, char dir); // Trailing connectors of a given direction in the given expression void trailing_connectors(int w, Exp* exp, char dir, int& dfs_position, std::vector& connectors); bool trailing_connectors_and_aux(int w, E_list* l, char dir, int& dfs_position, std::vector& connectors); // Connectors of the given direction that cannot be trailing // connectors void certainly_non_trailing(int w, Exp* exp, char dir, int& dfs_position, std::vector& connectors, bool has_right); // Connectors that can act as leading connectors of a given // direction in the given direction void leading_connectors(int w, Exp* exp, char dir, int& dfs_position, std::vector& connectors); /** * Definitions of linked(wi, wj) variables. */ // Define all linked(wi, wj) variables virtual void generate_linked_definitions() = 0; // In order to reduce the number of clauses, some linked(wi, wj) // variables can apriori be eliminated. The information about pairs // of words that can be linked is kept in this matrix. MatrixUpperTriangle _linked_possible; /** * Planarity constraints */ // Generates clauses that forbid link-crossing void generate_planarity_conditions(); // Stronger planarity pruning void generate_linked_min_max_planarity(); /** * Connectivity constraints */ #ifdef _CONNECTIVITY_ // Generate clauses that encode the connectivity requirement of the // linkage. Experiments showed that it is better to check the // connectivity aposteriori and this method has been excised. void generate_connectivity(); #endif // Helper method for connectivity_components static void dfs(int node, const MatrixUpperTriangle& graph, int component, std::vector& components); // Extract connectivity components of a linkage. Return true iff the linkage is connected. bool connectivity_components(std::vector& components); // Generate clauses that prohibit all disconnected linkages that // have the specified connectivity components. void generate_disconnectivity_prohibiting(std::vector components); /** * Encoding specific clauses - override to add clauses that are * specific to a certain encoding */ virtual void generate_encoding_specific_clauses() {} /** * Post-processing - PP pruning */ // Generates PP pruning clauses. void pp_prune(); bool post_process_linkage(Linkage linkage); /** * Power pruning */ // Generate definition of epsilon variables that are used for power // pruning void generate_epsilon_definitions(); bool generate_epsilon_for_expression(int w, int& dfs_position, Exp* e, char* var, bool root, char dir); // Power pruning void power_prune(); // auxiliary method that extends power pruning clauses with additional literals // (e.g., link should not be power-prunned if there words are fat-linked) virtual void add_additional_power_pruning_conditions(vec& clause, int wl, int wr) {} /** * Cost cutoff */ // Cost cutoff treshold value. Nodes of the expression tree are // pruned if their cost exceeds this value. Cost cutoff is performed // during satisfaction condition generating. static const int _cost_cutoff = 2; /** * Creating clauses and passing them to the MiniSAT solver */ // Add the specified clause to the solver void add_clause(vec& clause) { #ifdef _DEBUG print_clause(clause); #endif for (int i = 0; i < clause.size(); i++) { while (var(clause[i]) >= _solver->nVars()) { _solver->newVar(); } } _solver->addClause(clause); } // Print clause literals to standard output static void print_clause(const vec& clause) { static int num = 1; cout << "Clause: ." << num++ << ". "; for (int i = 0; i < clause.size(); i++) cout << (sign(clause[i]) ? '-' : '+') << var(clause[i]) << " "; cout << endl; } /** * Conversion of various formula types to CNF. Clauses obtained * are automatically passed to the SAT Solver. */ void generate_literal(Lit l); void generate_and_definition(Lit lhs, vec& rhs); void generate_or_definition(Lit lhs, vec& rhs); void generate_xor_definition(Lit lhs, vec& rhs); void generate_equivalence_definition(Lit l1, Lit l2); void generate_classical_and_definition(Lit lhs, vec& rhs); void generate_and(vec& vect); void generate_or(vec& vect); void generate_xor_conditions(vec& vect); void generate_conditional_or_definition(Lit condition, Lit lhs, vec& rhs); void generate_conditional_lr_implication_or_definition(Lit condition, Lit lhs, vec& rhs); void generate_conditional_lr_implication_or_definition(Lit condition1, Lit condition2, Lit lhs, vec& rhs); /* * Word tags of the words in a sentence kept in a preprocessed * form. This enables users to get information about the * connectors in a very eficient way. */ // Word tags std::vector _word_tags; // Initializes _word_tags array void build_word_tags(); // Find all matching connectors between two words void find_all_matches_between_words(int w1, int w2, std::vector >& matches); // Check if the connector (wi, pi) can match any word in [l, r) bool matches_in_interval(int wi, int pi, int l, int r); // Join several expressions corresponding to different dictionary // entries of a word into a single expression. Exp* join_alternatives(int w); // Erase auxiliary expression tree nodes obtained by joining several // expressions into one. void free_alternatives(Exp* e); /** * Decoding */ // Convert propositional model to a parse info structure virtual bool extract_links(Parse_info pi) = 0; // Create linkage from a propositional model Linkage create_linkage(); // Generate clause that prohibits the current model void generate_linkage_prohibiting(); // Object that contains all information about the variable // encoding. Variables* _variables; // The MiniSAT solver instance. The solver keeps the set of clauses. Solver* _solver; // Sentence that is being parsed. Sentence _sent; // Parse options. Parse_Options _opts; }; /******************************************************************************* * SAT encoding for sentences that do not contain conjunction. * *******************************************************************************/ class SATEncoderConjunctionFreeSentences : public SATEncoder { public: SATEncoderConjunctionFreeSentences(Sentence sent, Parse_Options opts) : SATEncoder(sent, opts) { } virtual void handle_null_expression(int w); virtual void determine_satisfaction(int w, char* name); virtual void generate_satisfaction_for_connector(int wi, int pi, const char* Ci, char dir, bool multi, int cost, char* var); virtual void generate_linked_definitions(); virtual bool extract_links(Parse_info pi); virtual void generate_encoding_specific_clauses(); }; /******************************************************************************* * SAT encoding for sentences that contain conjunction. * *******************************************************************************/ class SATEncoderConjunctiveSentences : public SATEncoder { public: SATEncoderConjunctiveSentences(Sentence sent, Parse_Options opts) : SATEncoder(sent, opts) { init_connective_words(); } private: virtual void handle_null_expression(int w); virtual void determine_satisfaction(int w, char* name); virtual void generate_satisfaction_for_connector(int wi, int pi, const char* Ci, char dir, bool multi, int cost, char* var); virtual void add_additional_power_pruning_conditions(vec& clause, int wl, int wr); virtual void generate_encoding_specific_clauses(); // various fat-link conditions void either_tag_or_fat_link(int w, Lit tag); void generate_fat_link_up_definitions(); void generate_fat_link_down_definitions(); void generate_fat_link_up_between_down_conditions(); void generate_fat_link_comma_conditions(); void generate_fat_link_crossover_conditions(); void generate_fat_link_Left_Wall_not_inside(); void generate_fat_link_linked_upperside(); void generate_fat_link_existence(); void generate_fat_link_neighbor(); void generate_label_compatibility(); // link_cw variables bool link_cw_possible(int wi, int pi, const char* Ci, char dir, int w, int llim, int rlim); bool link_cw_possible_with_fld(int wi, int pi, const char* Ci, char dir, int w, int llim, int rlim); void generate_link_cw_connective_impossible (int wi, int pi, const char* Ci, int wj); void generate_link_cw_connective_definition (int wi, int pi, const char* Cj, int wj); // link_top_cw variables void generate_link_top_cw_up_definition (int wi, int wj, int pj, const char* Cj, bool multi); void generate_link_top_cw_iff_link_cw (int wi, int wj, int pj, const char* Cj); // link_top_ww void generate_link_top_ww_connective_comma_definition (Lit lhs, int wi, int wj); // link_ww virtual void generate_linked_definitions(); // Linkage extraction from the model void get_satisfied_link_top_cw_connectors(int word, int top_word, std::vector& link_top_cw_vars); virtual bool extract_links(Parse_info pi); // Initialize the vector of connective words of this sentence void init_connective_words(); // Words that are connectives or commas std::vector _connectives; // Cache isConnectiveOrComma results for faster checking std::vector _is_connective_or_comma; bool isConnectiveOrComma(int w) { return _is_connective_or_comma[w]; } }; link-grammar/link-grammar/sat-solver/variables.hpp0000644000000000000000000005437512536650433017513 0ustar #ifndef __VARIABLES_HPP__ #define __VARIABLES_HPP__ #include #include extern "C" { #include } #include "guiding.hpp" #include "Solver.h" #include "trie.hpp" #include "matrix-ut.hpp" #include "fast-sprintf.hpp" #define MAX_VARIABLE_NAME 256 // #define _DEBUG // #define _VARS #ifdef _DEBUG #define _VARS #endif #ifdef _VARS extern ostream& var_defs_stream; #endif static char* construct_link_label(const char* connector1, const char* connector2) { char* result = (char*)xalloc((std::max(strlen(connector1), strlen(connector2)) + 1)* sizeof(char)); char* presult = result; while (*connector1 != '\0' && *connector2 != '\0') { if (*connector1 == '*') *presult++ = *connector2; else if (*connector2 == '*') *presult++ = *connector1; else *presult++ = std::max(*connector1, *connector2); connector1++; connector2++; } while(*connector1 != '\0') *presult++ = *connector1++; while(*connector2 != '\0') *presult++ = *connector2++; *presult = '\0'; return result; } static bool labels_match(const char* label1, const char* label2) { // printf("Compare: %s %s\n", label1, label2); if ((label1[0] == 'S' && label2[0] == 'S') && (label1[1] == 's' || label1[1] == 'p') && (label2[1] == 's' || label2[1] == 'p')) { label1 += 2; label2 += 2; } while(*label1 != '\0' && *label2 != '\0') { if (*label1 != '*' && *label2 != '*' && *label1 != *label2) return false; label1++; label2++; } return true; } //////////////////////////////////////////////////////////////////////////// class Variables { public: Variables(Sentence sent) :_var(0) ,_sent(sent) ,_linked_variable_map(sent->length, -1) ,_linked_min_variable_map(sent->length, -1) ,_linked_max_variable_map(sent->length, -1) ,_link_variable_map(sent->length) ,_fat_link_variable_map(sent->length, -1) ,_link_top_cw_variable_map(sent->length) , _link_cw_variable_map(sent->length) ,_link_top_ww_variable_map(sent->length, -1) ,_thin_link_variable_map(sent->length, -1) ,_guiding(new CostDistanceGuiding(sent)) { } ~Variables() { std::vector::iterator i; for (i = _link_variables.begin(); i != _link_variables.end(); i++) { if ((*i) != 0) { xfree((*i)->label, strlen((*i)->label)); delete *i; } } delete _guiding; } /* * General purpose variables specified by their names */ // If guiding params are unknown, they are set do default int string(const char* name) { int var; if (!get_var_from_trie(name, var)) { #ifdef _VARS var_defs_stream << name << "\t" << var << endl; #endif _guiding->setStringParameters(var, name); } assert(var != -1, "Var == -1"); return var; } // If the cost is explicitely given, guiding params are calculated // using the cost. Any params set earlier are overridden. int string_cost(const char* name, int cost) { int var; var = string(name); _guiding->setStringParameters(var, name, cost); assert(var != -1, "Var == -1"); return var; } /* * Variables that specify that a part of word tag is satisfied * without making any connections of the given direction. */ // If guiding params are unknown, they are set do default int epsilon(char* v, char dir) { char name[MAX_VARIABLE_NAME]; dir = (dir == '+') ? 'r' : 'l'; char* s = name; *s++ = dir; *s++ = 'e'; s = fast_sprintf(s, v); int var; if (!get_var_from_trie(name, var)) { #ifdef _VARS var_defs_stream << name << "\t" << var << endl; #endif _guiding->setEpsilonParameters(var); } assert(var != -1, "Var == -1"); return var; } /* * linked(wi, wj) * Variables that specify that two words are linked */ // If guiding params are unknown, they are set do default int linked(int wi, int wj) { assert(wi < wj, "Variables: linked should be ordered"); int var; if (!get_linked_variable(wi, wj, var)) { #ifdef _VARS var_defs_stream << "linked_" << wi << "_" << wj << "\t" << var << endl; #endif add_linked_variable(wi, wj, var); _guiding->setLinkedParameters(var, wi, wj); } assert(var != -1, "Var == -1"); return var; } // If guiding params are unknown, they are set do default int linked_max(int wi, int wj) { int var; if (!get_linked_max_variable(wi, wj, var)) { #ifdef _VARS var_defs_stream << "linked_max_" << wi << "_" << wj << "\t" << var << endl; #endif _guiding->setLinkedMinMaxParameters(var, wi, wj); } assert(var != -1, "Var == -1"); return var; } // If guiding params are unknown, they are set do default int linked_min(int wi, int wj) { int var; if (!get_linked_min_variable(wi, wj, var)) { #ifdef _VARS var_defs_stream << "linked_min_" << wi << "_" << wj << "\t" << var << endl; #endif _guiding->setLinkedMinMaxParameters(var, wi, wj); } assert(var != -1, "Var == -1"); return var; } /* * link(wi, pi, wj, pj) * Variables that specify that a direct link has been established * between the connectors ci of the word_i at position i and * cj of the word_j at position j */ // If guiding params are unknown, they are set do default int link(int wi, int pi, const char* ci, int wj, int pj, const char* cj) { assert(wi < wj, "Variables: link should be ordered"); int var; if (!get_link_variable(wi, pi, wj, pj, var)) { #ifdef _VARS var_defs_stream << "link_" << wi << "_" << pi << "_" << ci << "_" << wj << "_" << pj << "_" << cj << "\t" << var << endl; #endif add_link_variable(wi, pi, ci, wj, pj, cj, var); _guiding->setLinkParameters(var, wi, ci, wj, cj, _link_variables[var]->label); } assert(var != -1, "Var == -1"); return var; } // If the cost is specified, guiding params are calculated // using the cost. Any guiding params that are set earlier are overridden int link_cost(int wi, int pi, const char* ci, int wj, int pj, const char* cj, int cost) { assert(wi < wj, "Variables: link should be ordered"); int var = link(wi, pi, ci, wj, pj, cj); _guiding->setLinkParameters(var, wi, ci, wj, cj, link_variable(var)->label, cost); assert(var != -1, "Var == -1"); return var; } /* * The following types of variables are used for conjunction handling */ /* * fat_link(wi, wj) * Variables that specify that there is a fat link from the word i * up to the word j */ // If guiding params for this variable are not set earlier, they are // now set to default int fat_link(int wi, int wj) { assert(_sent->is_conjunction[wj] || strcmp(_sent->word[wj].string, ",") == 0, "Fat link can up only to a connective word"); int var; if (!get_fat_link_variable(wi, wj, var)) { #ifdef _VARS var_defs_stream << "fatlink_" << wi << "_" << wj << "\t" << var << endl; #endif add_fatlink_variable(wi, wj, var); _guiding->setFatLinkParameters(var, wi, wj); } assert(var != -1, "Var == -1"); return var; } /* * fat_link_neighbor(w) * It seems that connective words usually have fat links to at least one * neighboring word. This is a definitional variable for that notion and * it can positively affect the search guiding. */ int neighbor_fat_link(int w) { assert(_sent->is_conjunction[w] || strcmp(_sent->word[w].string, ",") == 0, "Only connective words can have fat links down"); int var; char name[MAX_VARIABLE_NAME]; sprintf(name, "nfl_%d", w); if (!get_var_from_trie(name, var)) { #ifdef _VARS var_defs_stream << name << "\t" << var << endl; #endif _guiding->setNeighborFatLinkParameters(var, w); } assert(var != -1, "Var == -1"); return var; } /* * thin_link(wi, wj) * Variables that specify that two words are linked by a thin link */ // If guiding params are unknown, they are set do default int thin_link(int wi, int wj) { assert(wi < wj, "Variables: thin link should be ordered"); int var; if (!get_thin_link_variable(wi, wj, var)) { #ifdef _VARS var_defs_stream << "thin_link_" << wi << "_" << wj << "\t" << var << endl; #endif _guiding->setThinLinkParameters(var, wi, wj); } assert(var != -1, "Var == -1"); return var; } /* * link_cw(wi, wj, pj) * Variables that specify that an indirect link has been established * between the word i and connector cj of the word_j at position * j. */ // If guiding params for this variable are not set earlier, they are // now set to default int link_cw(int wi, int wj, int pj, const char* cj) { int var; if (!get_link_cw_variable(wi, wj, pj, var)) { #ifdef _VARS var_defs_stream << "link_cw_" << "(" << wj << "_" << pj << "_" << cj << ")_" << wi << "\t" << var << endl; #endif _guiding->setLinkCWParameters(var, wi, wj, cj); } assert(var != -1, "Var == -1"); return var; } /* * link_top_cw(wi, wj, pj) * Variables that specify that a connective word has been directly * linked to a connector */ // If guiding params for this variable are not set earlier, they are // now set to default int link_top_cw(int wi, int wj, int pj, const char* cj) { int var; if (!get_link_top_cw_variable(wi, wj, pj, var)) { add_link_top_cw_variable(wi, wj, pj, cj, var); _guiding->setLinkTopCWParameters(var, wi, wj, cj); #ifdef _VARS var_defs_stream << "link_top_cw_" << "(" << wj << "_" << pj << "_" << cj << ")_" << wi << "\t" << var << endl; #endif } assert(var != -1, "Var == -1"); return var; } /* * link_top_ww(wi, wj) * Variables that specify that word wi is linked to the word wj, and * wj is a top of the fat-link tree. */ // If guiding params are unknown, they are set do default int link_top_ww(int wi, int wj) { int var; if (!get_link_top_ww_variable(wi, wj, var)) { #ifdef _VARS var_defs_stream << "link_top_ww_" << wi << "_" << wj << "\t" << var << endl; #endif _guiding->setLinkTopWWParameters(var, wi, wj); } assert(var != -1, "Var == -1"); return var; } #ifdef _CONNECTIVITY_ /* The following variables are deprecated */ // Variables that specify that words i and j are connected int con(int i, int j) { char name[MAX_VARIABLE_NAME]; char* s = name; *s++ = 'c'; s = fast_sprintf(s, i); *s++ = '_'; s = fast_sprintf(s, j); int var; if (!get_var_from_trie(name, var)) set_variable_sat_params(var, false); return var; } // Auxilary variables used for connectivity encoding int l_con(int i, int j, int k) { int var; if (!get_lcon_variable(i, j, k, var)) set_variable_sat_params(var, false); return var; } #endif /* * link(wi, pi, wj, pj) */ // Returns the indices of all link variables const std::vector& link_variables() { return _link_variables_indices; } // Returns the indices of all link_x_x_wj_pj variables const std::vector& link_variables(int wj, int pj) { std::pair p(wj, pj); return _link_variable_wp_map[p]; } // Additional info about the link(wi, pi, wj, pj) variable struct LinkVar { LinkVar(const std::string& _name, char* _label, int _lw, int _lp, int _rw, int _rp, const char* _lc, const char* _rc) : name(_name), label(_label), left_word(_lw), right_word(_rw), left_position(_lp), right_position(_rp), left_connector(_lc), right_connector(_rc) { } std::string name; char* label; const char* left_connector; const char* right_connector; int left_word; int left_position; int right_word; int right_position; }; // Returns additional info about the given link variable const LinkVar* link_variable(int var) { return _link_variables[var]; } /* * linked(wi, wj) */ // Returns the indices of all linked variables const std::vector& linked_variables() { return _linked_variables_indices; } // Additional info about the linked(i, j) variable struct LinkedVar { LinkedVar(int lw, int rw) : left_word(lw), right_word(rw) { } int left_word; int right_word; }; // Returns additional info about the given linked variable const LinkedVar* linked_variable(int var) { return _linked_variables[var]; } /* * link_top_cw((wi, pi), wj) */ // Returns indices of all link_top_cw variables const std::vector& link_top_cw_variables() { return _link_top_cw_variables_indices; } // Additional info about the link_top_cw(wi, wj, pj) variable struct LinkTopCWVar { LinkTopCWVar(const std::string& _name, int _tw, int _cw, const char* _c) : name(_name), connector_word(_cw), top_word(_tw), connector(_c) { } std::string name; char* label; const char* connector; int connector_word; int top_word; }; // Returns additional info about the given link_top_cw variable const LinkTopCWVar* link_top_cw_variable(int var) { return _link_top_cw_variables[var]; } /* * fat_link(wi, wj) */ // Returns indices of all fat-link variables const std::vector& fat_link_variables() { return _fat_link_variables_indices; } // Additional info about the fatlink(wi, wj) variable struct FatLinkVar { FatLinkVar(int down, int up) : down_word(down), up_word(up) { } int down_word; int up_word; }; // Return additional info about the given fat-link variable const FatLinkVar* fat_link_variable(int var) { return _fat_link_variables[var]; } /* Pass SAT search parameters to the MiniSAT solver */ void setVariableParameters(Solver* solver) { _guiding->passParametersToSolver(solver); } private: /* Sentence that is being parsed */ Sentence _sent; /* * Information about string variables */ // What is the number of the variable with the given name? Trie _variable_trie; /* * Information about link(wi, pi, wj, pj) variables */ // What is the number of the link(wi, pi, wj, pj) variable? MatrixUpperTriangle< std::map, int> > _link_variable_map; // What are the numbers of all link(wi, pi, wj, pj) variables? std::vector _link_variables_indices; // What are the numbers of all link(x, x, wj, pj) variables? std::map< std::pair, std::vector > _link_variable_wp_map; // Additional info about the link(wi, pi, wj, pj) variable with the given number std::vector _link_variables; // Set this additional info void add_link_variable(int i, int pi, const char* ci, int j, int pj, const char* cj, int var) { char name[MAX_VARIABLE_NAME]; char* s = name; *s++ = 'l'; *s++ = 'i'; *s++ = 'n'; *s++ = 'k'; *s++ = '_'; s = fast_sprintf(s, i); *s++ = '_'; s = fast_sprintf(s, pi); *s++ = '_'; s = fast_sprintf(s, ci); *s++ = '_'; s = fast_sprintf(s, j); *s++ = '_'; s = fast_sprintf(s, pj); *s++ = '_'; s = fast_sprintf(s, cj); char* label = construct_link_label(ci, cj); if (var >= _link_variables.size()) { _link_variables.resize(var + 1, 0); } _link_variables[var] = new LinkVar(name, label, i, pi, j, pj, ci, cj); _link_variables_indices.push_back(var); } /* * Information about linked(i, j) variables */ // What is the number of the linked(i, j) variable? MatrixUpperTriangle _linked_variable_map; // What are the numbers of all linked(i, j) variables? std::vector _linked_variables_indices; // Additional info about the linked(i, j) variable std::vector _linked_variables; // Set the additional info void add_linked_variable(int i, int j, int var) { if (var >= _linked_variables.size()) { _linked_variables.resize(var + 1, 0); } _linked_variables[var] = new LinkedVar(i, j); _linked_variables_indices.push_back(var); } // What is the number of the linked_min(i, j) variable? Matrix _linked_min_variable_map; // What is the number of the linked_max(i, j) variable? Matrix _linked_max_variable_map; /* * Information about the fat_link(i, j) variables */ // What is the number of the fatlink(wi, wj) variable? Matrix _fat_link_variable_map; // What are the numbers of all fatlink(wi wj) variables? std::vector _fat_link_variables_indices; // Additional info about the fatlink(wi, wj) variable with the given number std::vector _fat_link_variables; // Set the additional info void add_fatlink_variable(int i, int j, int var) { if (var >= _fat_link_variables.size()) { _fat_link_variables.resize(var + 1, 0); } _fat_link_variables[var] = new FatLinkVar(i, j); _fat_link_variables_indices.push_back(var); } /* * Information about the thin_link(i, j) variables */ // What is the number of the thin_link(i, j) variable? MatrixUpperTriangle _thin_link_variable_map; /* * Information about the link_top_cw(w, wj, pj) variables */ // What is the number of the link_top_cw(wi, wj, pj) variable? Matrix< std::map > _link_top_cw_variable_map; // What are the numbers of all link_top_cw(wi, wj, pj) variables? std::vector _link_top_cw_variables_indices; // Additional info about the link_top_cw(wi, wj, pj) variable with the given number std::vector _link_top_cw_variables; // Set this additional info void add_link_top_cw_variable(int i, int j, int pj, const char* cj, int var) { char name[MAX_VARIABLE_NAME]; char* s = name; *s++ = 'l'; *s++ = 'i'; *s++ = 'n'; *s++ = 'k'; *s++ = '_'; *s++ = 't'; *s++ = 'o'; *s++ = 'p'; *s++ = '_'; s = fast_sprintf(s, i); *s++ = '_'; *s++ = '('; s = fast_sprintf(s, j); *s++ = '_'; s = fast_sprintf(s, pj); *s++ = '_'; s = fast_sprintf(s, cj); *s++ = ')'; *s = '\0'; if (var >= _link_top_cw_variables.size()) { _link_top_cw_variables.resize(var + 1, 0); } _link_top_cw_variables[var] = new LinkTopCWVar(name, i, j, cj); _link_top_cw_variables_indices.push_back(var); } /* * Information about the link_cw(w, wj, pj) variables */ // What is the number of the link_cw(wi, wj, pj) variable? Matrix< std::map > _link_cw_variable_map; /* * Information about the link_top_ww(i, j) variables */ // What is the number of the link_top_ww(i, j) variable? Matrix _link_top_ww_variable_map; #ifdef _CONNECTIVITY_ std::map,int>, int> _lcon_variables; #endif /* SAT search parameters */ Guiding* _guiding; /* Current free variable number */ int _var; /* Get a variable number that has not been used before */ int get_fresh_var(void) { return _var++; } /* Helper functions that retrieve variable numbers from appropriate data structures. If the variable is not present, it is assigned a fresh variable number, and false is returned. Otherwise, the number is retrieved and true is returned. */ bool get_var_from_trie(const char* name, int& var) { try { int num = _variable_trie.lookup(name); if (num != Trie::NOT_FOUND) { var = num; return true; } else { var = get_fresh_var(); _variable_trie.insert(name, var); return false; } } catch (const std::string& s) { cout << s << endl; exit(EXIT_FAILURE); } } bool get_2int_variable(int i, int j, int& var, Matrix& mp) { var = mp(i, j); if (var == -1) { var = get_fresh_var(); mp.set(i, j, var); return false; } return true; } bool get_3int_variable(int i, int j, int pj, int& var, Matrix< std::map >& mp) { std::map& m = mp(i, j); std::map::iterator it = m.find(pj); if (it == m.end()) { var = get_fresh_var(); m[pj] = var; return false; } else { var = it->second; return true; } } bool get_4int_variable(int i, int pi, int j, int pj, int& var, Matrix< std::map, int> >& mp) { std::map< std::pair, int >& m = mp(i, j); std::pair p(pi, pj); std::map< std::pair, int >::iterator it = m.find(p); if (it == m.end()) { var = get_fresh_var(); m[p] = var; return false; } else { var = it->second; return true; } } bool get_link_variable(int i, int pi, int j, int pj, int& var) { bool ret = get_4int_variable(i, pi, j, pj, var, _link_variable_map); if (!ret) { std::pair p(j, pj); _link_variable_wp_map[p].push_back(var); } return ret; } bool get_linked_variable(int i, int j, int& var) { return get_2int_variable(i, j, var, _linked_variable_map); } bool get_linked_min_variable(int i, int j, int& var) { return get_2int_variable(i, j, var, _linked_min_variable_map); } bool get_linked_max_variable(int i, int j, int& var) { return get_2int_variable(i, j, var, _linked_max_variable_map); } bool get_fat_link_variable(int i, int j, int& var) { return get_2int_variable(i, j, var, _fat_link_variable_map); } bool get_thin_link_variable(int i, int j, int& var) { return get_2int_variable(i, j, var, _thin_link_variable_map); } bool get_link_cw_variable(int i, int j, int pj, int& var) { return get_3int_variable(i, j, pj, var, _link_cw_variable_map); } bool get_link_top_cw_variable(int i, int j, int pj, int& var) { return get_3int_variable(i, j, pj, var, _link_top_cw_variable_map); } bool get_link_top_ww_variable(int i, int j, int& var) { return get_2int_variable(i, j, var, _link_top_ww_variable_map); } #ifdef _CONNECTIVITY_ bool get_lcon_variable(int i, int j, int k, int& var) { std::pair, int> p(std::pair(i, j), k); std::map, int>, int>::iterator it = _lcon_variables.find(p); if (it != _lcon_variables.end()) { var = it->second; return true; } else { var = get_fresh_var(); #ifdef _VARS var_defs_stream << "lcon_" << i << "_" << j << "_" << k << "\t" << var << endl; #endif _lcon_variables[p] = var; return false; } } #endif }; #endif link-grammar/link-grammar/fast-match.c0000644000000000000000000001727712536650433015126 0ustar /**************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /**************************************************************************/ #include #include "fast-match.h" /** * returns the number of disjuncts in the list that have non-null * left connector lists. */ static int left_disjunct_list_length(Disjunct * d) { int i; for (i=0; d!=NULL; d=d->next) { if (d->left != NULL) i++; } return i; } static int right_disjunct_list_length(Disjunct * d) { int i; for (i=0; d!=NULL; d=d->next) { if (d->right != NULL) i++; } return i; } struct match_context_s { int match_cost; int l_table_size[MAX_SENTENCE]; /* the sizes of the hash tables */ int r_table_size[MAX_SENTENCE]; /* the beginnings of the hash tables */ Match_node ** l_table[MAX_SENTENCE]; Match_node ** r_table[MAX_SENTENCE]; /* I'll pedantically maintain my own list of these cells */ Match_node * mn_free_list; }; /** * Return a match node to be used by the caller */ static Match_node * get_match_node(match_context_t *ctxt) { Match_node * m; if (ctxt->mn_free_list != NULL) { m = ctxt->mn_free_list; ctxt->mn_free_list = m->next; } else { m = (Match_node *) xalloc(sizeof(Match_node)); } return m; } /** * Put these nodes back onto my free list */ void put_match_list(Sentence sent, Match_node *m) { Match_node * xm; match_context_t *ctxt = sent->match_ctxt; for (; m != NULL; m = xm) { xm = m->next; m->next = ctxt->mn_free_list; ctxt->mn_free_list = m; } } static void free_match_list(Match_node * t) { Match_node *xt; for (; t!=NULL; t=xt) { xt = t->next; xfree((char *)t, sizeof(Match_node)); } } /** * Free all of the hash tables and Match_nodes */ void free_fast_matcher(Sentence sent) { int w; int i; match_context_t *ctxt = sent->match_ctxt; if (verbosity > 1) printf("%d Match cost\n", ctxt->match_cost); for (w = 0; w < sent->length; w++) { for (i = 0; i < ctxt->l_table_size[w]; i++) { free_match_list(ctxt->l_table[w][i]); } xfree((char *)ctxt->l_table[w], ctxt->l_table_size[w] * sizeof (Match_node *)); for (i = 0; i < ctxt->r_table_size[w]; i++) { free_match_list(ctxt->r_table[w][i]); } xfree((char *)ctxt->r_table[w], ctxt->r_table_size[w] * sizeof (Match_node *)); } free_match_list(ctxt->mn_free_list); ctxt->mn_free_list = NULL; free(ctxt); sent->match_ctxt = NULL; } /** * Adds the match node m to the sorted list of match nodes l. * The parameter dir determines the order of the sorting to be used. * Makes the list sorted from smallest to largest. */ static Match_node * add_to_right_table_list(Match_node * m, Match_node * l) { if (l == NULL) return m; if ((m->d->right->word) <= (l->d->right->word)) { m->next = l; return m; } else { l->next = add_to_right_table_list(m, l->next); return l; } } /** * Adds the match node m to the sorted list of match nodes l. * The parameter dir determines the order of the sorting to be used. * Makes the list sorted from largest to smallest */ static Match_node * add_to_left_table_list(Match_node * m, Match_node * l) { if (l==NULL) return m; if ((m->d->left->word) >= (l->d->left->word)) { m->next = l; return m; } else { l->next = add_to_left_table_list(m, l->next); return l; } } /** * The disjunct d (whose left or right pointer points to c) is put * into the appropriate hash table * dir = 1, we're putting this into a right table. * dir = -1, we're putting this into a left table. */ static void put_into_match_table(int size, Match_node ** t, Disjunct * d, Connector * c, int dir ) { int h; Match_node * m; h = connector_hash(c) & (size-1); m = (Match_node *) xalloc (sizeof(Match_node)); m->next = NULL; m->d = d; if (dir == 1) { t[h] = add_to_right_table_list(m, t[h]); } else { t[h] = add_to_left_table_list(m, t[h]); } } void init_fast_matcher(Sentence sent) { int w, len, size, i; Match_node ** t; Disjunct * d; match_context_t *ctxt; ctxt = (match_context_t *) malloc(sizeof(match_context_t)); sent->match_ctxt = ctxt; ctxt->match_cost = 0; ctxt->mn_free_list = NULL; for (w=0; wlength; w++) { len = left_disjunct_list_length(sent->word[w].d); size = next_power_of_two_up(len); ctxt->l_table_size[w] = size; t = ctxt->l_table[w] = (Match_node **) xalloc(size * sizeof(Match_node *)); for (i = 0; i < size; i++) t[i] = NULL; for (d = sent->word[w].d; d != NULL; d = d->next) { if (d->left != NULL) { put_into_match_table(size, t, d, d->left, -1); } } len = right_disjunct_list_length(sent->word[w].d); size = next_power_of_two_up(len); ctxt->r_table_size[w] = size; t = ctxt->r_table[w] = (Match_node **) xalloc(size * sizeof(Match_node *)); for (i = 0; i < size; i++) t[i] = NULL; for (d = sent->word[w].d; d != NULL; d = d->next) { if (d->right != NULL) { put_into_match_table(size, t, d, d->right, 1); } } } } /** * Forms and returns a list of disjuncts that might match lc or rc or both. * lw and rw are the words from which lc and rc came respectively. * The list is formed by the link pointers of Match_nodes. * The list contains no duplicates. A quadratic algorithm is used to * eliminate duplicates. In practice the match_cost is less than the * parse_cost (and the loop is tiny), so there's no reason to bother * to fix this. */ Match_node * form_match_list(Sentence sent, int w, Connector *lc, int lw, Connector *rc, int rw) { Match_node *ml, *mr, *mx, *my, * mz, *front, *free_later; match_context_t *ctxt = sent->match_ctxt; if (lc != NULL) { ml = ctxt->l_table[w][connector_hash(lc) & (ctxt->l_table_size[w]-1)]; } else { ml = NULL; } if (rc != NULL) { mr = ctxt->r_table[w][connector_hash(rc) & (ctxt->r_table_size[w]-1)]; } else { mr = NULL; } front = NULL; for (mx = ml; mx != NULL; mx = mx->next) { if (mx->d->left->word < lw) break; my = get_match_node(ctxt); my->d = mx->d; my->next = front; front = my; } ml = front; /* ml is now the list of things that could match the left */ front = NULL; for (mx = mr; mx != NULL; mx = mx->next) { if (mx->d->right->word > rw) break; my = get_match_node(ctxt); my->d = mx->d; my->next = front; front = my; } mr = front; /* mr is now the list of things that could match the right */ /* now we want to eliminate duplicates from the lists */ free_later = NULL; front = NULL; for (mx = mr; mx != NULL; mx = mz) { /* see if mx in first list, put it in if its not */ mz = mx->next; ctxt->match_cost++; for (my=ml; my!=NULL; my=my->next) { ctxt->match_cost++; if (mx->d == my->d) break; } if (my != NULL) { /* mx was in the l list */ mx->next = free_later; free_later = mx; } if (my==NULL) { /* it was not there */ mx->next = front; front = mx; } } mr = front; /* mr is now the abbreviated right list */ put_match_list(sent, free_later); /* now catenate the two lists */ if (mr == NULL) return ml; for (mx = mr; mx->next != NULL; mx = mx->next) ; mx->next = ml; return mr; } link-grammar/link-grammar/count.c0000644000000000000000000006124212536650433014216 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include "disjunct-utils.h" /* This file contains the exhaustive search algorithm. */ typedef struct Table_connector_s Table_connector; struct Table_connector_s { short lw, rw; Connector *le, *re; short cost; s64 count; Table_connector *next; }; struct count_context_s { char ** deletable; char ** effective_dist; Word * local_sent; int null_block; int islands_ok; int null_links; int table_size; int log2_table_size; Table_connector ** table; Resources current_resources; }; static void free_table(count_context_t *ctxt) { int i; Table_connector *t, *x; for (i=0; itable_size; i++) { for(t = ctxt->table[i]; t!= NULL; t=x) { x = t->next; xfree((void *) t, sizeof(Table_connector)); } } xfree(ctxt->table, ctxt->table_size * sizeof(Table_connector*)); ctxt->table = NULL; ctxt->table_size = 0; } static void init_table(Sentence sent) { int shift; /* A piecewise exponential function determines the size of the * hash table. Probably should make use of the actual number of * disjuncts, rather than just the number of words. */ count_context_t *ctxt = sent->count_ctxt; if (ctxt->table) free_table(ctxt); if (sent->length >= 10) { shift = 12 + (sent->length) / 6 ; } else { shift = 12; } /* Clamp at max 4*(1<<24) == 64 MBytes */ if (24 < shift) shift = 24; ctxt->table_size = (1 << shift); ctxt->log2_table_size = shift; ctxt->table = (Table_connector**) xalloc(ctxt->table_size * sizeof(Table_connector*)); memset(ctxt->table, 0, ctxt->table_size*sizeof(Table_connector*)); } int x_match(Sentence sent, Connector *a, Connector *b) { return do_match(sent, a, b, 0, 0); } void count_set_effective_distance(Sentence sent) { sent->count_ctxt->effective_dist = sent->effective_dist; } void count_unset_effective_distance(Sentence sent) { sent->count_ctxt->effective_dist = NULL; } /* * Returns TRUE if s and t match according to the connector matching * rules. The connector strings must be properly formed, starting with * zero or more upper case letters, followed by some other letters, and * The algorithm is symmetric with respect to a and b. * * It works as follows: The labels must match. The priorities must be * compatible (both THIN_priority, or one UP_priority and one DOWN_priority). * The sequence of upper case letters must match exactly. After these comes * a sequence of lower case letters "*"s or "^"s. The matching algorithm * is different depending on which of the two priority cases is being * considered. See the comments below. */ int do_match(Sentence sent, Connector *a, Connector *b, int aw, int bw) { const char *s, *t; int x, y, dist; count_context_t *ctxt; if (a->label != b->label) return FALSE; s = a->string; t = b->string; while(isupper((int)*s) || isupper((int)*t)) { if (*s != *t) return FALSE; s++; t++; } ctxt = sent->count_ctxt; x = a->priority; y = b->priority; /* Probably not necessary, as long as * effective_dist[0][0]=0 and is defined */ if (aw == 0 && bw == 0) { dist = 0; } else { assert(aw < bw, "match() did not receive params in the natural order."); dist = ctxt->effective_dist[aw][bw]; } /* printf("M: a=%4s b=%4s ap=%d bp=%d aw=%d bw=%d a->ll=%d b->ll=%d dist=%d\n", s, t, x, y, aw, bw, a->length_limit, b->length_limit, dist); */ if (dist > a->length_limit || dist > b->length_limit) return FALSE; if ((x == THIN_priority) && (y == THIN_priority)) { /* Remember that "*" matches anything, and "^" matches nothing (except "*"). Otherwise two characters match if and only if they're equal. ("^" can be used in the dictionary just like any other connector.) */ while ((*s!='\0') && (*t!='\0')) { if ((*s == '*') || (*t == '*') || ((*s == *t) && (*s != '^'))) { s++; t++; } else return FALSE; } return TRUE; } else if ((x==UP_priority) && (y==DOWN_priority)) { /* As you go up (namely from x to y) the set of strings that match (in the normal THIN sense above) should get no larger. Read the comment in and.c to understand this. In other words, the y string (t) must be weaker (or at least no stronger) that the x string (s). This code is only correct if the strings are the same length. This is currently true, but perhaps for safty this assumption should be removed. */ while ((*s!='\0') && (*t!='\0')) { if ((*s == *t) || (*s == '*') || (*t == '^')) { s++; t++; } else return FALSE; } return TRUE; } else if ((y == UP_priority) && (x == DOWN_priority)) { while ((*s!='\0') && (*t!='\0')) { if ((*s == *t) || (*t == '*') || (*s == '^')) { s++; t++; } else return FALSE; } return TRUE; } else return FALSE; } /** * Stores the value in the table. Assumes it's not already there. */ static Table_connector * table_store(count_context_t *ctxt, int lw, int rw, Connector *le, Connector *re, int cost, s64 count) { Table_connector *t, *n; int h; n = (Table_connector *) xalloc(sizeof(Table_connector)); n->count = count; n->lw = lw; n->rw = rw; n->le = le; n->re = re; n->cost = cost; h = pair_hash(ctxt->log2_table_size,lw, rw, le, re, cost); t = ctxt->table[h]; n->next = t; ctxt->table[h] = n; return n; } /** returns the pointer to this info, NULL if not there */ static Table_connector * find_table_pointer(count_context_t *ctxt, int lw, int rw, Connector *le, Connector *re, int cost) { Table_connector *t; int h = pair_hash(ctxt->log2_table_size,lw, rw, le, re, cost); t = ctxt->table[h]; for (; t != NULL; t = t->next) { if ((t->lw == lw) && (t->rw == rw) && (t->le == le) && (t->re == re) && (t->cost == cost)) return t; } /* Create a new connector only if resources are exhausted. * (???) Huh? I guess we're in panic parse mode in that case. */ if ((ctxt->current_resources != NULL) && resources_exhausted(ctxt->current_resources)) { return table_store(ctxt, lw, rw, le, re, cost, 0); } else return NULL; } /** returns the count for this quintuple if there, -1 otherwise */ s64 table_lookup(Sentence sent, int lw, int rw, Connector *le, Connector *re, int cost) { Table_connector *t = find_table_pointer(sent->count_ctxt, lw, rw, le, re, cost); if (t == NULL) return -1; else return t->count; } /** * Stores the value in the table. Unlike table_store, it assumes * it's already there */ static void table_update(count_context_t *ctxt, int lw, int rw, Connector *le, Connector *re, int cost, s64 count) { Table_connector *t = find_table_pointer(ctxt, lw, rw, le, re, cost); assert(t != NULL, "This entry is supposed to be in the table."); t->count = count; } /** * Returns 0 if and only if this entry is in the hash table * with a count value of 0. */ static s64 pseudocount(Sentence sent, int lw, int rw, Connector *le, Connector *re, int cost) { s64 count; count = table_lookup(sent, lw, rw, le, re, cost); if (count == 0) return 0; else return 1; } static s64 do_count(Sentence sent, int lw, int rw, Connector *le, Connector *re, int null_count) { Disjunct * d; s64 total, pseudototal; int start_word, end_word, w; s64 leftcount, rightcount; int lcost, rcost, Lmatch, Rmatch; Match_node * m, *m1; Table_connector *t; count_context_t *ctxt = sent->count_ctxt; if (null_count < 0) return 0; /* can this ever happen?? */ t = find_table_pointer(ctxt, lw, rw, le, re, null_count); if (t == NULL) { /* Create the table entry with a tentative null count of 0. * This count must be updated before we return. */ t = table_store(ctxt, lw, rw, le, re, null_count, 0); } else { return t->count; } if (rw == 1+lw) { /* lw and rw are neighboring words */ /* You can't have a linkage here with null_count > 0 */ if ((le == NULL) && (re == NULL) && (null_count == 0)) { t->count = 1; } else { t->count = 0; } return t->count; } if ((le == NULL) && (re == NULL)) { if (!ctxt->islands_ok && (lw != -1)) { /* If we don't allow islands (a set of words linked together * but separate from the rest of the sentence) then the * null_count of skipping n words is just n */ if (null_count == ((rw-lw-1) + ctxt->null_block-1)/ctxt->null_block) { /* If null_block=4 then the null_count of 1,2,3,4 nulls is 1; and 5,6,7,8 is 2 etc. */ t->count = 1; } else { t->count = 0; } return t->count; } if (null_count == 0) { /* There is no solution without nulls in this case. There is * a slight efficiency hack to separate this null_count==0 * case out, but not necessary for correctness */ t->count = 0; } else { total = 0; w = lw+1; for (d = ctxt->local_sent[w].d; d != NULL; d = d->next) { if (d->left == NULL) { total += do_count(sent, w, rw, d->right, NULL, null_count-1); } } total += do_count(sent, w, rw, NULL, NULL, null_count-1); t->count = total; } return t->count; } if (le == NULL) { start_word = lw+1; } else { start_word = le->word; } if (re == NULL) { end_word = rw; } else { end_word = re->word +1; } total = 0; for (w = start_word; w < end_word; w++) { m1 = m = form_match_list(sent, w, le, lw, re, rw); for (; m!=NULL; m=m->next) { d = m->d; for (lcost = 0; lcost <= null_count; lcost++) { rcost = null_count - lcost; /* Now lcost and rcost are the costs we're assigning * to those parts respectively */ /* Now, we determine if (based on table only) we can see that the current range is not parsable. */ Lmatch = (le != NULL) && (d->left != NULL) && do_match(sent, le, d->left, lw, w); Rmatch = (d->right != NULL) && (re != NULL) && do_match(sent, d->right, re, w, rw); rightcount = leftcount = 0; if (Lmatch) { leftcount = pseudocount(sent, lw, w, le->next, d->left->next, lcost); if (le->multi) leftcount += pseudocount(sent, lw, w, le, d->left->next, lcost); if (d->left->multi) leftcount += pseudocount(sent, lw, w, le->next, d->left, lcost); if (le->multi && d->left->multi) leftcount += pseudocount(sent, lw, w, le, d->left, lcost); } if (Rmatch) { rightcount = pseudocount(sent, w, rw, d->right->next, re->next, rcost); if (d->right->multi) rightcount += pseudocount(sent, w,rw,d->right,re->next, rcost); if (re->multi) rightcount += pseudocount(sent, w, rw, d->right->next, re, rcost); if (d->right->multi && re->multi) rightcount += pseudocount(sent, w, rw, d->right, re, rcost); } /* total number where links are used on both sides */ pseudototal = leftcount*rightcount; if (leftcount > 0) { /* evaluate using the left match, but not the right */ pseudototal += leftcount * pseudocount(sent, w, rw, d->right, re, rcost); } if ((le == NULL) && (rightcount > 0)) { /* evaluate using the right match, but not the left */ pseudototal += rightcount * pseudocount(sent, lw, w, le, d->left, lcost); } /* now pseudototal is 0 implies that we know that the true total is 0 */ if (pseudototal != 0) { rightcount = leftcount = 0; if (Lmatch) { leftcount = do_count(sent, lw, w, le->next, d->left->next, lcost); if (le->multi) leftcount += do_count(sent, lw, w, le, d->left->next, lcost); if (d->left->multi) leftcount += do_count(sent, lw, w, le->next, d->left, lcost); if (le->multi && d->left->multi) leftcount += do_count(sent, lw, w, le, d->left, lcost); } if (Rmatch) { rightcount = do_count(sent, w, rw, d->right->next, re->next, rcost); if (d->right->multi) rightcount += do_count(sent, w,rw,d->right,re->next, rcost); if (re->multi) rightcount += do_count(sent, w, rw, d->right->next, re, rcost); if (d->right->multi && re->multi) rightcount += do_count(sent, w, rw, d->right, re, rcost); } total += leftcount*rightcount; /* total number where links are used on both sides */ if (leftcount > 0) { /* evaluate using the left match, but not the right */ total += leftcount * do_count(sent, w, rw, d->right, re, rcost); } if ((le == NULL) && (rightcount > 0)) { /* evaluate using the right match, but not the left */ total += rightcount * do_count(sent, lw, w, le, d->left, lcost); } } } } put_match_list(sent, m1); } t->count = total; return total; } /** * Returns the number of ways the sentence can be parsed with the * specified null count. Assumes that the hash table has already been * initialized, and is freed later. The "null_count" here is the * number of words that are allowed to have no links to them. */ s64 do_parse(Sentence sent, int null_count, Parse_Options opts) { s64 total; count_context_t *ctxt = sent->count_ctxt; count_set_effective_distance(sent); ctxt->current_resources = opts->resources; ctxt->local_sent = sent->word; ctxt->deletable = sent->deletable; ctxt->null_block = opts->null_block; ctxt->islands_ok = opts->islands_ok; total = do_count(sent, -1, sent->length, NULL, NULL, null_count+1); ctxt->local_sent = NULL; ctxt->current_resources = NULL; return total; } /** CONJUNCTION PRUNING. The basic idea is this. Before creating the fat disjuncts, we run a modified version of the exhaustive search procedure. Its purpose is to mark the disjuncts that can be used in any linkage. It's just like the normal exhaustive search, except that if a subrange of words are deletable, then we treat them as though they were not even there. So, if we call the function in the situation where the set of words between the left and right one are deletable, and the left and right connector pointers are NULL, then that range is considered to have a solution. There are actually two procedures to implement this. One is mark_region() and the other is region_valid(). The latter just checks to see if the given region can be completed (within it). The former actually marks those disjuncts that can be used in any valid linkage of the given region. As in the standard search procedure, we make use of the fast-match data structure (which requires power pruning to have been done), and we also use a hash table. The table is used differently in this case. The meaning of values stored in the table are as follows: -1 Nothing known (Actually, this is not stored. It's returned by table_lookup when nothing is known.) 0 This region can't be completed (marking is therefore irrelevant) 1 This region can be completed, but it's not yet marked 2 This region can be completed, and it's been marked. */ static int x_prune_match(count_context_t *ctxt, Connector *le, Connector *re, int lw, int rw) { int dist; assert(lw < rw, "prune_match() did not receive params in the natural order."); dist = ctxt->effective_dist[lw][rw]; return prune_match(dist, le, re); } /** * Returns 0 if this range cannot be successfully filled in with * links. Returns 1 if it can, and it's not been marked, and returns * 2 if it can and it has been marked. */ static int region_valid(Sentence sent, int lw, int rw, Connector *le, Connector *re) { Disjunct * d; int left_valid, right_valid, found; int i, start_word, end_word; int w; Match_node * m, *m1; count_context_t *ctxt = sent->count_ctxt; i = table_lookup(sent, lw, rw, le, re, 0); if (i >= 0) return i; if ((le == NULL) && (re == NULL) && ctxt->deletable[lw][rw]) { table_store(ctxt, lw, rw, le, re, 0, 1); return 1; } if (le == NULL) { start_word = lw+1; } else { start_word = le->word; } if (re == NULL) { end_word = rw; } else { end_word = re->word + 1; } found = 0; for (w=start_word; w < end_word; w++) { m1 = m = form_match_list(sent, w, le, lw, re, rw); for (; m!=NULL; m=m->next) { d = m->d; /* mark_cost++;*/ /* in the following expressions we use the fact that 0=FALSE. Could eliminate by always saying "region_valid(...) != 0" */ left_valid = (((le != NULL) && (d->left != NULL) && x_prune_match(ctxt, le, d->left, lw, w)) && ((region_valid(sent, lw, w, le->next, d->left->next)) || ((le->multi) && region_valid(sent, lw, w, le, d->left->next)) || ((d->left->multi) && region_valid(sent, lw, w, le->next, d->left)) || ((le->multi && d->left->multi) && region_valid(sent, lw, w, le, d->left)))); if (left_valid && region_valid(sent, w, rw, d->right, re)) { found = 1; break; } right_valid = (((d->right != NULL) && (re != NULL) && x_prune_match(ctxt, d->right, re, w, rw)) && ((region_valid(sent, w, rw, d->right->next,re->next)) || ((d->right->multi) && region_valid(sent, w,rw,d->right,re->next)) || ((re->multi) && region_valid(sent, w, rw, d->right->next, re)) || ((d->right->multi && re->multi) && region_valid(sent, w, rw, d->right, re)))); if ((left_valid && right_valid) || (right_valid && region_valid(sent, lw, w, le, d->left))) { found = 1; break; } } put_match_list(sent, m1); if (found != 0) break; } table_store(ctxt, lw, rw, le, re, 0, found); return found; } /** * Mark as useful all disjuncts involved in some way to complete the * structure within the current region. Note that only disjuncts * strictly between lw and rw will be marked. If it so happens that * this region itself is not valid, then this fact will be recorded * in the table, and nothing else happens. */ static void mark_region(Sentence sent, int lw, int rw, Connector *le, Connector *re) { Disjunct * d; int left_valid, right_valid, i; int start_word, end_word; int w; Match_node * m, *m1; count_context_t *ctxt = sent->count_ctxt; i = region_valid(sent, lw, rw, le, re); if ((i==0) || (i==2)) return; /* we only reach this point if it's a valid unmarked region, i=1 */ table_update(ctxt, lw, rw, le, re, 0, 2); if ((le == NULL) && (re == NULL) && (ctxt->null_links) && (rw != 1+lw)) { w = lw+1; for (d = ctxt->local_sent[w].d; d != NULL; d = d->next) { if ((d->left == NULL) && region_valid(sent, w, rw, d->right, NULL)) { d->marked = TRUE; mark_region(sent, w, rw, d->right, NULL); } } mark_region(sent, w, rw, NULL, NULL); return; } if (le == NULL) { start_word = lw+1; } else { start_word = le->word; } if (re == NULL) { end_word = rw; } else { end_word = re->word + 1; } for (w=start_word; w < end_word; w++) { m1 = m = form_match_list(sent, w, le, lw, re, rw); for (; m!=NULL; m=m->next) { d = m->d; /* mark_cost++;*/ left_valid = (((le != NULL) && (d->left != NULL) && x_prune_match(ctxt, le, d->left, lw, w)) && ((region_valid(sent, lw, w, le->next, d->left->next)) || ((le->multi) && region_valid(sent, lw, w, le, d->left->next)) || ((d->left->multi) && region_valid(sent, lw, w, le->next, d->left)) || ((le->multi && d->left->multi) && region_valid(sent, lw, w, le, d->left)))); right_valid = (((d->right != NULL) && (re != NULL) && x_prune_match(ctxt, d->right, re, w, rw)) && ((region_valid(sent, w, rw, d->right->next,re->next)) || ((d->right->multi) && region_valid(sent, w,rw,d->right,re->next)) || ((re->multi) && region_valid(sent, w, rw, d->right->next, re)) || ((d->right->multi && re->multi) && region_valid(sent, w, rw, d->right, re)))); /* The following if statements could be restructured to avoid superfluous calls to mark_region. It didn't seem a high priority, so I didn't optimize this. */ if (left_valid && region_valid(sent, w, rw, d->right, re)) { d->marked = TRUE; mark_region(sent, w, rw, d->right, re); mark_region(sent, lw, w, le->next, d->left->next); if (le->multi) mark_region(sent, lw, w, le, d->left->next); if (d->left->multi) mark_region(sent, lw, w, le->next, d->left); if (le->multi && d->left->multi) mark_region(sent, lw, w, le, d->left); } if (right_valid && region_valid(sent, lw, w, le, d->left)) { d->marked = TRUE; mark_region(sent, lw, w, le, d->left); mark_region(sent, w, rw, d->right->next,re->next); if (d->right->multi) mark_region(sent, w,rw,d->right,re->next); if (re->multi) mark_region(sent, w, rw, d->right->next, re); if (d->right->multi && re->multi) mark_region(sent, w, rw, d->right, re); } if (left_valid && right_valid) { d->marked = TRUE; mark_region(sent, lw, w, le->next, d->left->next); if (le->multi) mark_region(sent, lw, w, le, d->left->next); if (d->left->multi) mark_region(sent, lw, w, le->next, d->left); if (le->multi && d->left->multi) mark_region(sent, lw, w, le, d->left); mark_region(sent, w, rw, d->right->next,re->next); if (d->right->multi) mark_region(sent, w,rw,d->right,re->next); if (re->multi) mark_region(sent, w, rw, d->right->next, re); if (d->right->multi && re->multi) mark_region(sent, w, rw, d->right, re); } } put_match_list(sent, m1); } } void delete_unmarked_disjuncts(Sentence sent) { int w; Disjunct *d_head, *d, *dx; for (w=0; wlength; w++) { d_head = NULL; for (d=sent->word[w].d; d != NULL; d=dx) { dx = d->next; if (d->marked) { d->next = d_head; d_head = d; } else { d->next = NULL; free_disjuncts(d); } } sent->word[w].d = d_head; } } /** * We've already built the sentence disjuncts, and we've pruned them * and power_pruned(GENTLE) them also. The sentence contains a * conjunction. deletable[][] has been initialized to indicate the * ranges which may be deleted in the final linkage. * * This routine deletes irrelevant disjuncts. It finds them by first * marking them all as irrelevant, and then marking the ones that * might be useable. Finally, the unmarked ones are removed. */ void conjunction_prune(Sentence sent, Parse_Options opts) { Disjunct * d; int w; count_context_t *ctxt = sent->count_ctxt; ctxt->current_resources = opts->resources; ctxt->deletable = sent->deletable; count_set_effective_distance(sent); /* We begin by unmarking all disjuncts. This would not be necessary if whenever we created a disjunct we cleared its marked field. I didn't want to search the program for all such places, so I did this way. XXX FIXME, someday ... */ for (w=0; wlength; w++) { for (d=sent->word[w].d; d != NULL; d=d->next) { d->marked = FALSE; } } init_fast_matcher(sent); ctxt->local_sent = sent->word; ctxt->null_links = (opts->min_null_count > 0); /* for (d = sent->word[0].d; d != NULL; d = d->next) { if ((d->left == NULL) && region_valid(sent, 0, sent->length, d->right, NULL)) { mark_region(sent, 0, sent->length, d->right, NULL); d->marked = TRUE; } } mark_region(sent, 0, sent->length, NULL, NULL); */ if (ctxt->null_links) { mark_region(sent, -1, sent->length, NULL, NULL); } else { for (w=0; wlength; w++) { /* consider removing the words [0,w-1] from the beginning of the sentence */ if (ctxt->deletable[-1][w]) { for (d = sent->word[w].d; d != NULL; d = d->next) { if ((d->left == NULL) && region_valid(sent, w, sent->length, d->right, NULL)) { mark_region(sent, w, sent->length, d->right, NULL); d->marked = TRUE; } } } } } delete_unmarked_disjuncts(sent); free_fast_matcher(sent); ctxt->local_sent = NULL; ctxt->current_resources = NULL; ctxt->deletable = NULL; count_unset_effective_distance(sent); } void init_count(Sentence sent) { if (NULL == sent->count_ctxt) sent->count_ctxt = (count_context_t *) malloc (sizeof(count_context_t)); memset(sent->count_ctxt, 0, sizeof(count_context_t)); init_table(sent); } void free_count(Sentence sent) { if (NULL == sent->count_ctxt) return; free_table(sent->count_ctxt); free(sent->count_ctxt); sent->count_ctxt = NULL; } link-grammar/link-grammar/Makefile0000644000000000000000000011331712537603144014361 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # link-grammar/Makefile. Generated from Makefile.in by configure. # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # # Automake file for building both liblink-grammar.so and # the command line application link-parser. # am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/link-grammar pkgincludedir = $(includedir)/link-grammar pkglibdir = $(libdir)/link-grammar pkglibexecdir = $(libexecdir)/link-grammar 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 = x86_64-unknown-linux-gnu host_triplet = x86_64-unknown-linux-gnu #am__append_1 = liblink-grammar-java.la #am__append_2 = -D_JNI_IMPLEMENTATION_ -Wl,--kill-at #am__append_3 = -D_JNI_IMPLEMENTATION_ -Wl,--kill-at #am__append_4 = ${HUNSPELL_LIBS} #am__append_5 = ${HUNSPELL_LIBS} #am__append_6 = ${ASPELL_LIBS} #am__append_7 = $(top_builddir)/link-grammar/sat-solver/libsat-solver.la \ # $(top_builddir)/link-grammar/minisat/libminisat.la #am__append_8 = $(top_builddir)/link-grammar/sat-solver/libsat-solver.la \ # $(top_builddir)/link-grammar/minisat/libminisat.la #am__append_9 = $(top_builddir)/link-grammar/corpus/liblink-corpus.la ${SQLITE3_LIBS} #am__append_10 = $(top_builddir)/link-grammar/corpus/liblink-corpus.la ${SQLITE3_LIBS} #am__append_11 = -lpthread #am__append_12 = -lpthread #am__append_13 = -lpthread #am__append_14 = -lpthread bin_PROGRAMS = link-parser$(EXEEXT) #am__append_15 = $(top_builddir)/link-grammar/sat-solver/libsat-solver.la \ # $(top_builddir)/link-grammar/minisat/libminisat.la subdir = link-grammar DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/link-features.h.in $(top_srcdir)/depcomp \ $(liblink_grammar_include_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = link-features.h 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)$(bindir)" \ "$(DESTDIR)$(liblink_grammar_includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = #am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) #am__DEPENDENCIES_3 = $(top_builddir)/link-grammar/corpus/liblink-corpus.la \ # $(am__DEPENDENCIES_1) liblink_grammar_java_la_DEPENDENCIES = liblink-grammar.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) $(am__append_8) \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_liblink_grammar_java_la_OBJECTS = jni-client.lo liblink_grammar_java_la_OBJECTS = \ $(am_liblink_grammar_java_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent am__v_lt_1 = liblink_grammar_java_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(liblink_grammar_java_la_LDFLAGS) \ $(LDFLAGS) -o $@ #am_liblink_grammar_java_la_rpath = -rpath $(libdir) #am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) liblink_grammar_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_4) $(am__append_7) \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_liblink_grammar_la_OBJECTS = analyze-linkage.lo and.lo api.lo \ build-disjuncts.lo command-line.lo constituents.lo count.lo \ disjunct-utils.lo disjuncts.lo error.lo expand.lo \ extract-links.lo fast-match.lo idiom.lo massage.lo \ post-process.lo pp_knowledge.lo pp_lexer.lo pp_linkset.lo \ preparation.lo print.lo print-util.lo prune.lo read-dict.lo \ read-regex.lo regex-morph.lo resources.lo spellcheck-aspell.lo \ spellcheck-hun.lo string-set.lo tokenize.lo utilities.lo \ word-file.lo word-utils.lo prefix.lo liblink_grammar_la_OBJECTS = $(am_liblink_grammar_la_OBJECTS) liblink_grammar_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(liblink_grammar_la_LDFLAGS) \ $(LDFLAGS) -o $@ PROGRAMS = $(bin_PROGRAMS) am_link_parser_OBJECTS = link-parser.$(OBJEXT) link_parser_OBJECTS = $(am_link_parser_OBJECTS) link_parser_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__append_15) \ liblink-grammar.la AM_V_P = $(am__v_P_$(V)) am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I. depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) 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_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(liblink_grammar_java_la_SOURCES) \ $(liblink_grammar_la_SOURCES) $(link_parser_SOURCES) DIST_SOURCES = $(liblink_grammar_java_la_SOURCES) \ $(liblink_grammar_la_SOURCES) $(link_parser_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 = $(liblink_grammar_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 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 = corpus minisat sat-solver 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 = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing aclocal-1.14 AMTAR = $${TAR-tar} AM_DEFAULT_VERBOSITY = 1 AR = ar AS = as ASPELL_CFLAGS = ASPELL_LIBS = AUTOCONF = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing autoconf AUTOHEADER = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing autoheader AUTOMAKE = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing automake-1.14 AWK = gawk BINRELOC_CFLAGS = BINRELOC_LIBS = CC = gcc CCDEPMODE = depmode=gcc3 CFLAGS = -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE CPP = gcc -E CPPFLAGS = CXX = g++ CXXCPP = g++ -E CXXDEPMODE = depmode=gcc3 CXXFLAGS = -g -O2 CYGPATH_W = echo DEFS = -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"link-grammar\" -DVERSION=\"4.7.4\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_TOWUPPER=1 -DDEBUG_MEMORY=0 -DHAVE_LOCALE_H=1 -DHAVE_LC_MESSAGES=1 -DHAVE_REGEXEC=1 -DVERSION=\"4.7.4\" -DDICTIONARY_DIR=\"$(pkgdatadir)\" DEPDIR = .deps DLLTOOL = dlltool DSYMUTIL = DUMPBIN = ECHO_C = ECHO_N = -n ECHO_T = EGREP = /bin/grep -E EXEEXT = FGREP = /bin/grep -F GREP = /bin/grep HUNSPELL_CFLAGS = HUNSPELL_LIBS = INSTALL = /usr/bin/install -c INSTALL_DATA = ${INSTALL} -m 644 INSTALL_PROGRAM = ${INSTALL} INSTALL_SCRIPT = ${INSTALL} INSTALL_STRIP_PROGRAM = $(install_sh) -c -s LD = /usr/bin/ld -m elf_x86_64 LDFLAGS = LIBEDIT_CFLAGS = LIBEDIT_LIBS = LIBOBJS = LIBS = LIBTOOL = $(SHELL) $(top_builddir)/libtool LINK_CFLAGS = -Wall -Wextra -Wsign-compare -Werror-implicit-function-declaration -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wpacked -Wswitch-enum -Wmissing-format-attribute -Wstrict-aliasing=2 -Winit-self -Wunsafe-loop-optimizations -Wdeclaration-after-statement -Wold-style-definition -Wno-missing-field-initializers -Wno-unused-parameter -Wno-attributes -Wno-long-long -Winline -fno-strict-aliasing LINK_MAJOR_VERSION = 4 LINK_MICRO_VERSION = 4 LINK_MINOR_VERSION = 7 LIPO = LN_S = ln -s LTLIBOBJS = MAINT = MAKEINFO = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing makeinfo MANIFEST_TOOL = : MKDIR_P = /bin/mkdir -p NM = /usr/bin/nm -B NMEDIT = OBJDUMP = objdump OBJEXT = o OTOOL = OTOOL64 = PACKAGE = link-grammar PACKAGE_BUGREPORT = PACKAGE_NAME = PACKAGE_STRING = PACKAGE_TARNAME = PACKAGE_URL = PACKAGE_VERSION = PATH_SEPARATOR = : PKG_CONFIG = /usr/bin/pkg-config PKG_CONFIG_LIBDIR = PKG_CONFIG_PATH = RANLIB = ranlib REGEX_LIBS = SED = /bin/sed SET_MAKE = SHELL = /bin/bash SQLITE3_CFLAGS = SQLITE3_LIBS = STRIP = strip VERSION = 4.7.4 VERSION_INFO = 11:4:7 abs_builddir = /home/wookey/debian/NMU/git/link-grammar/link-grammar abs_srcdir = /home/wookey/debian/NMU/git/link-grammar/link-grammar abs_top_builddir = /home/wookey/debian/NMU/git/link-grammar abs_top_srcdir = /home/wookey/debian/NMU/git/link-grammar ac_ct_AR = ar ac_ct_CC = gcc ac_ct_CXX = g++ ac_ct_DUMPBIN = am__include = include am__leading_dot = . am__quote = am__tar = $${TAR-tar} chof - "$$tardir" am__untar = $${TAR-tar} xf - bindir = ${exec_prefix}/bin build = x86_64-unknown-linux-gnu build_alias = build_cpu = x86_64 build_os = linux-gnu build_vendor = unknown builddir = . datadir = ${datarootdir} datarootdir = ${prefix}/share docdir = ${datarootdir}/doc/${PACKAGE} dvidir = ${docdir} exec_prefix = ${prefix} host = x86_64-unknown-linux-gnu host_alias = host_cpu = x86_64 host_os = linux-gnu host_vendor = unknown htmldir = ${docdir} includedir = ${prefix}/include infodir = ${datarootdir}/info install_sh = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/install-sh libdir = ${exec_prefix}/lib libexecdir = ${exec_prefix}/libexec localedir = ${datarootdir}/locale localstatedir = ${prefix}/var mandir = ${datarootdir}/man mkdir_p = $(MKDIR_P) oldincludedir = /usr/include pdfdir = ${docdir} prefix = /usr/local program_transform_name = s,x,x, psdir = ${docdir} sbindir = ${exec_prefix}/sbin sharedstatedir = ${prefix}/com srcdir = . sysconfdir = ${prefix}/etc target_alias = top_build_prefix = ../ top_builddir = .. top_srcdir = .. #SUBDIRS = corpus #SUBDIRS = minisat sat-solver INCLUDES = -I$(top_srcdir) $(ANSI_CFLAGS) $(LINK_CFLAGS) $(HUNSPELL_CFLAGS) lib_LTLIBRARIES = liblink-grammar.la $(am__append_1) liblink_grammar_la_LDFLAGS = -version-info 11:4:7 \ -export-dynamic -no-undefined -export-symbols \ $(srcdir)/link-grammar.def $(am__append_2) liblink_grammar_java_la_LDFLAGS = -version-info 11:4:7 \ -export-dynamic -no-undefined -export-symbols \ $(srcdir)/link-grammar-java.def $(am__append_3) # Math libraries are needed for floorf, etc. liblink_grammar_la_LIBADD = ${REGEX_LIBS} $(am__append_4) \ $(am__append_6) $(am__append_7) $(am__append_9) \ $(am__append_11) $(am__append_13) -lm liblink_grammar_java_la_LIBADD = liblink-grammar.la ${REGEX_LIBS} \ $(am__append_5) $(am__append_8) $(am__append_10) \ $(am__append_12) $(am__append_14) liblink_grammar_la_SOURCES = \ analyze-linkage.c \ and.c \ api.c \ build-disjuncts.c \ command-line.c \ constituents.c \ count.c \ disjunct-utils.c \ disjuncts.c \ error.c \ expand.c \ extract-links.c \ fast-match.c \ idiom.c \ massage.c \ post-process.c \ pp_knowledge.c \ pp_lexer.c \ pp_linkset.c \ preparation.c \ print.c \ print-util.c \ prune.c \ read-dict.c \ read-regex.c \ regex-morph.c \ resources.c \ spellcheck-aspell.c \ spellcheck-hun.c \ string-set.c \ tokenize.c \ utilities.c \ word-file.c \ word-utils.c \ prefix.c \ api.h \ api-structures.h \ api-types.h \ analyze-linkage.h \ and.h \ build-disjuncts.h \ command-line.h \ constituents.h \ count.h \ disjunct-utils.h \ disjuncts.h \ error.h \ expand.h \ externs.h \ extract-links.h \ fast-match.h \ idiom.h \ link-includes.h \ massage.h \ post-process.h \ pp_knowledge.h \ pp_lexer.h \ pp_linkset.h \ preparation.h \ print.h \ print-util.h \ prune.h \ read-dict.h \ read-regex.h \ regex-morph.h \ resources.h \ spellcheck.h \ string-set.h \ structures.h \ tokenize.h \ utilities.h \ word-file.h \ word-utils.h liblink_grammar_includedir = $(includedir)/link-grammar liblink_grammar_include_HEADERS = \ link-includes.h \ link-features.h liblink_grammar_java_la_SOURCES = \ jni-client.h \ jni-client.c EXTRA_DIST = \ prefix.h \ autoit/_LGTest.au3 \ autoit/_LinkGrammar.au3 \ autoit/README \ java/README \ java/org/linkgrammar/JSONReader.java \ java/org/linkgrammar/LGConfig.java \ java/org/linkgrammar/LGRemoteClient.java \ java/org/linkgrammar/LGService.java \ java/org/linkgrammar/Linkage.java \ java/org/linkgrammar/LinkGrammar.java \ java/org/linkgrammar/Link.java \ java/org/linkgrammar/ParseResult.java \ link-grammar.def \ link-grammar-java.def link_parser_SOURCES = link-parser.c link_parser_LDADD = $(LIBEDIT_LIBS) $(am__append_15) \ liblink-grammar.la all: 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) --foreign link-grammar/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign link-grammar/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(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): link-features.h: $(top_builddir)/config.status $(srcdir)/link-features.h.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}; \ } liblink-grammar-java.la: $(liblink_grammar_java_la_OBJECTS) $(liblink_grammar_java_la_DEPENDENCIES) $(EXTRA_liblink_grammar_java_la_DEPENDENCIES) $(AM_V_CCLD)$(liblink_grammar_java_la_LINK) $(am_liblink_grammar_java_la_rpath) $(liblink_grammar_java_la_OBJECTS) $(liblink_grammar_java_la_LIBADD) $(LIBS) liblink-grammar.la: $(liblink_grammar_la_OBJECTS) $(liblink_grammar_la_DEPENDENCIES) $(EXTRA_liblink_grammar_la_DEPENDENCIES) $(AM_V_CCLD)$(liblink_grammar_la_LINK) -rpath $(libdir) $(liblink_grammar_la_OBJECTS) $(liblink_grammar_la_LIBADD) $(LIBS) 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 link-parser$(EXEEXT): $(link_parser_OBJECTS) $(link_parser_DEPENDENCIES) $(EXTRA_link_parser_DEPENDENCIES) @rm -f link-parser$(EXEEXT) $(AM_V_CCLD)$(LINK) $(link_parser_OBJECTS) $(link_parser_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c include ./$(DEPDIR)/analyze-linkage.Plo include ./$(DEPDIR)/and.Plo include ./$(DEPDIR)/api.Plo include ./$(DEPDIR)/build-disjuncts.Plo include ./$(DEPDIR)/command-line.Plo include ./$(DEPDIR)/constituents.Plo include ./$(DEPDIR)/count.Plo include ./$(DEPDIR)/disjunct-utils.Plo include ./$(DEPDIR)/disjuncts.Plo include ./$(DEPDIR)/error.Plo include ./$(DEPDIR)/expand.Plo include ./$(DEPDIR)/extract-links.Plo include ./$(DEPDIR)/fast-match.Plo include ./$(DEPDIR)/idiom.Plo include ./$(DEPDIR)/jni-client.Plo include ./$(DEPDIR)/link-parser.Po include ./$(DEPDIR)/massage.Plo include ./$(DEPDIR)/post-process.Plo include ./$(DEPDIR)/pp_knowledge.Plo include ./$(DEPDIR)/pp_lexer.Plo include ./$(DEPDIR)/pp_linkset.Plo include ./$(DEPDIR)/prefix.Plo include ./$(DEPDIR)/preparation.Plo include ./$(DEPDIR)/print-util.Plo include ./$(DEPDIR)/print.Plo include ./$(DEPDIR)/prune.Plo include ./$(DEPDIR)/read-dict.Plo include ./$(DEPDIR)/read-regex.Plo include ./$(DEPDIR)/regex-morph.Plo include ./$(DEPDIR)/resources.Plo include ./$(DEPDIR)/spellcheck-aspell.Plo include ./$(DEPDIR)/spellcheck-hun.Plo include ./$(DEPDIR)/string-set.Plo include ./$(DEPDIR)/tokenize.Plo include ./$(DEPDIR)/utilities.Plo include ./$(DEPDIR)/word-file.Plo include ./$(DEPDIR)/word-utils.Plo .c.o: $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po # $(AM_V_CC)source='$<' object='$@' libtool=no \ # DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ # $(AM_V_CC_no)$(COMPILE) -c -o $@ $< .c.obj: $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po # $(AM_V_CC)source='$<' object='$@' libtool=no \ # DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ # $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo # $(AM_V_CC)source='$<' object='$@' libtool=yes \ # DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ # $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-liblink_grammar_includeHEADERS: $(liblink_grammar_include_HEADERS) @$(NORMAL_INSTALL) @list='$(liblink_grammar_include_HEADERS)'; test -n "$(liblink_grammar_includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(liblink_grammar_includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(liblink_grammar_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)$(liblink_grammar_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(liblink_grammar_includedir)" || exit $$?; \ done uninstall-liblink_grammar_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(liblink_grammar_include_HEADERS)'; test -n "$(liblink_grammar_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(liblink_grammar_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: $(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) $(PROGRAMS) $(HEADERS) install-binPROGRAMS: install-libLTLIBRARIES installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(liblink_grammar_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." clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local \ install-liblink_grammar_includeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES \ uninstall-liblink_grammar_includeHEADERS uninstall-local .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-binPROGRAMS 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-binPROGRAMS \ 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-libLTLIBRARIES install-liblink_grammar_includeHEADERS \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-libLTLIBRARIES \ uninstall-liblink_grammar_includeHEADERS uninstall-local #install-libtool-import-lib: # $(INSTALL) .libs/liblink-grammar.dll.a $(DESTDIR)$(libdir) #uninstall-libtool-import-lib: # -rm $(DESTDIR)$(libdir)/liblink-grammar.dll.a install-libtool-import-lib: uninstall-libtool-import-lib: # ----------------------------------------------------------- install-data-local: install-libtool-import-lib uninstall-local: uninstall-libtool-import-lib # 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: link-grammar/link-grammar/print.c0000644000000000000000000007550112536650433014225 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include #include "corpus/corpus.h" const char * trailer(int mode); const char * header(int mode); static void set_centers(Linkage linkage, int center[], int print_word_0, int N_words_to_print) { mbstate_t mbss; int i, len, tot; memset(&mbss, 0, sizeof(mbss)); tot = 0; if (print_word_0) i=0; else i=1; for (; i < N_words_to_print; i++) { /* Centers obtained by counting the characters, * not the bytes in the string. * len = strlen(linkage->word[i]); */ len = mbsrtowcs(NULL, &linkage->word[i], 0, &mbss); center[i] = tot + (len/2); tot += len+1; } } /* the following are all for generating postscript */ typedef struct { int N_rows; /* N_rows -- the number of rows */ /* tells the height of the links above the sentence */ int link_heights[MAX_LINKS]; /* the word beginning each row of the display */ int row_starts[MAX_SENTENCE]; } ps_ctxt_t; /** * prints s then prints the last |t|-|s| characters of t. * if s is longer than t, it truncates s. */ static void left_append_string(String * string, const char * s, const char * t) { int i, j, k; j = strlen(t); k = strlen(s); for (i=0; idict; int l, r; const char *label, *llabel, *rlabel; l = linkage_get_link_lword(linkage, link); r = linkage_get_link_rword(linkage, link); label = linkage_get_link_label(linkage, link); llabel = linkage_get_link_llabel(linkage, link); rlabel = linkage_get_link_rlabel(linkage, link); if ((l == 0) && dict->left_wall_defined) { left_append_string(s, LEFT_WALL_DISPLAY," "); } else if ((l == (linkage_get_num_words(linkage)-1)) && dict->right_wall_defined) { left_append_string(s, RIGHT_WALL_DISPLAY," "); } else { left_append_string(s, linkage_get_word(linkage, l), " "); } left_append_string(s, llabel, " "); append_string(s, " <---"); left_append_string(s, label, "-----"); append_string(s, "-> "); left_append_string(s, rlabel, " "); append_string(s, " %s\n", linkage_get_word(linkage, r)); } /** * To the left of each link, print the sequence of domains it is in. * Printing a domain means printing its type. * Takes info from pp_link_array and pp and chosen_words. */ char * linkage_print_links_and_domains(Linkage linkage) { int link, longest, j; int N_links = linkage_get_num_links(linkage); String * s = string_new(); char * links_string; const char ** dname; longest = 0; for (link=0; link longest) longest = linkage_get_link_num_domains(linkage, link); } for (link=0; linkinfo; Sense *sns; size_t w, nwords; lg_corpus_linkage_senses(linkage); nwords = lifo->nwords; for (w=0; wsent; int nwords = sent->length; /* Decrement nwords, so as to ignore the RIGHT-WALL */ nwords --; /* Loop over each word in the sentence (skipping LEFT-WALL, which is * word 0. */ for (w=1; wsent->parse_info->chosen_disjuncts[w]; if (NULL == disj) continue; infword = disj->string; dj = linkage_get_disjunct_str(linkage, w); cost = linkage_get_disjunct_cost(linkage, w); #if USE_CORPUS score = linkage_get_disjunct_corpus_score(linkage, w); append_string(s, "%21s %5.1f %6.3f %s\n", infword, cost, score, dj); #else append_string(s, "%21s %5.1f %s\n", infword, cost, dj); #endif } djs = string_copy(s); string_delete(s); return djs; } /** */ static char * build_linkage_postscript_string(Linkage linkage, ps_ctxt_t *pctx) { int link, i,j; int d; int print_word_0 = 0, print_word_N = 0, N_wall_connectors, suppressor_used; Sublinkage *sublinkage = &(linkage->sublinkage[linkage->current]); int N_links = sublinkage->num_links; Link **ppla = sublinkage->link; String * string; char * ps_string; Dictionary dict = linkage->sent->dict; Parse_Options opts = linkage->opts; int N_words_to_print; string = string_new(); N_wall_connectors = 0; if (dict->left_wall_defined) { suppressor_used = FALSE; if (!opts->display_walls) for (j=0; jl == 0) { if (ppla[j]->r == linkage->num_words-1) continue; N_wall_connectors ++; if (strcmp(ppla[j]->lc->string, LEFT_WALL_SUPPRESS)==0) { suppressor_used = TRUE; } } } print_word_0 = (((!suppressor_used) && (N_wall_connectors != 0)) || (N_wall_connectors > 1) || opts->display_walls); } else { print_word_0 = TRUE; } N_wall_connectors = 0; if (dict->right_wall_defined) { suppressor_used = FALSE; for (j=0; jr == linkage->num_words-1) { N_wall_connectors ++; if (strcmp(ppla[j]->lc->string, RIGHT_WALL_SUPPRESS)==0){ suppressor_used = TRUE; } } } print_word_N = (((!suppressor_used) && (N_wall_connectors != 0)) || (N_wall_connectors > 1) || opts->display_walls); } else { print_word_N = TRUE; } if (print_word_0) d=0; else d=1; i = 0; N_words_to_print = linkage->num_words; if (!print_word_N) N_words_to_print--; append_string(string, "["); for (j=d; j0)) append_string(string, "\n"); i++; append_string(string, "(%s)", linkage->word[j]); } append_string(string,"]"); append_string(string,"\n"); append_string(string,"["); j = 0; for (link=0; linkl == 0)) continue; if (!print_word_N && (ppla[link]->r == linkage->num_words-1)) continue; if (ppla[link]->l == -1) continue; if ((j%7 == 0) && (j>0)) append_string(string,"\n"); j++; append_string(string,"[%d %d %d", ppla[link]->l-d, ppla[link]->r-d, pctx->link_heights[link]); if (ppla[link]->lc->label < 0) { append_string(string," (%s)]", ppla[link]->name); } else { append_string(string," ()]"); } } append_string(string,"]"); append_string(string,"\n"); append_string(string,"["); for (j=0; j < pctx->N_rows; j++ ) { if (j>0) append_string(string, " %d", pctx->row_starts[j]); else append_string(string,"%d", pctx->row_starts[j]); } append_string(string,"]\n"); ps_string = string_copy(string); string_delete(string); return ps_string; } /** * This takes the current chosen_disjuncts array and uses it to * compute the chosen_words array. "I.xx" suffixes are eliminated. */ void compute_chosen_words(Sentence sent, Linkage linkage) { int i, l; const char *t; char * s, *u; Parse_info pi = sent->parse_info; const char * chosen_words[MAX_SENTENCE]; Parse_Options opts = linkage->opts; for (i=0; ilength; i++) { /* get rid of those ugly ".Ixx" */ chosen_words[i] = sent->word[i].string; if (pi->chosen_disjuncts[i] == NULL) { /* no disjunct is used on this word because of null-links */ t = chosen_words[i]; l = strlen(t) + 2; s = (char *) xalloc(l+1); sprintf(s, "[%s]", t); t = string_set_add(s, sent->string_set); xfree(s, l+1); chosen_words[i] = t; } else if (opts->display_word_subscripts) { t = pi->chosen_disjuncts[i]->string; if (is_idiom_word(t)) { l = strlen(t); s = (char *) xalloc(l+1); strcpy(s,t); for (u=s; *u != '.'; u++) ; *u = '\0'; t = string_set_add(s, sent->string_set); xfree(s, l+1); chosen_words[i] = t; } else { chosen_words[i] = t; } } } if (sent->dict->left_wall_defined) { chosen_words[0] = LEFT_WALL_DISPLAY; } if (sent->dict->right_wall_defined) { chosen_words[sent->length-1] = RIGHT_WALL_DISPLAY; } for (i=0; inum_words; ++i) { s = (char *) exalloc(strlen(chosen_words[i])+1); strcpy(s, chosen_words[i]); linkage->word[i] = s; } } #define MAX_HEIGHT 30 /** * String allocated with exalloc. * Needs to be freed with linkage_free_diagram() */ static char * linkage_print_diagram_ctxt(Linkage linkage, ps_ctxt_t *pctx) { int i, j, k, cl, cr, row, top_row, width, flag; const char *s; char *t; int print_word_0 = 0, print_word_N = 0, N_wall_connectors, suppressor_used; int center[MAX_SENTENCE]; char connector[MAX_TOKEN_LENGTH]; int line_len, link_length; Sublinkage *sublinkage=&(linkage->sublinkage[linkage->current]); int N_links = sublinkage->num_links; Link **ppla = sublinkage->link; String * string; char * gr_string; Dictionary dict = linkage->sent->dict; Parse_Options opts = linkage->opts; int x_screen_width = parse_options_get_screen_width(opts); int N_words_to_print; char picture[MAX_HEIGHT][MAX_LINE]; char xpicture[MAX_HEIGHT][MAX_LINE]; string = string_new(); N_wall_connectors = 0; if (dict->left_wall_defined) { suppressor_used = FALSE; if (!opts->display_walls) { for (j=0; jl == 0)) { if (ppla[j]->r == linkage->num_words-1) continue; N_wall_connectors ++; if (strcmp(ppla[j]->lc->string, LEFT_WALL_SUPPRESS)==0) { suppressor_used = TRUE; } } } } print_word_0 = (((!suppressor_used) && (N_wall_connectors != 0)) || (N_wall_connectors > 1) || opts->display_walls); } else { print_word_0 = TRUE; } N_wall_connectors = 0; if (dict->right_wall_defined) { suppressor_used = FALSE; for (j=0; jr == linkage->num_words-1) { N_wall_connectors ++; if (strcmp(ppla[j]->lc->string, RIGHT_WALL_SUPPRESS)==0) { suppressor_used = TRUE; } } } print_word_N = (((!suppressor_used) && (N_wall_connectors != 0)) || (N_wall_connectors > 1) || opts->display_walls); } else { print_word_N = TRUE; } N_words_to_print = linkage->num_words; if (!print_word_N) N_words_to_print--; set_centers(linkage, center, print_word_0, N_words_to_print); line_len = center[N_words_to_print-1]+1; for (k=0; kl == -1) continue; if ((ppla[j]->r - ppla[j]->l) != link_length) continue; if (!print_word_0 && (ppla[j]->l == 0)) continue; /* gets rid of the irrelevant link to the left wall */ if (!print_word_N && (ppla[j]->r == linkage->num_words-1)) continue; /* gets rid of the irrelevant link to the right wall */ /* put it into the lowest position */ cl = center[ppla[j]->l]; cr = center[ppla[j]->r]; for (row=0; row < MAX_HEIGHT; row++) { for (k=cl+1; klink_heights[j] = row; if (2*row+2 > MAX_HEIGHT-1) { append_string(string, "The diagram is too high.\n"); gr_string = string_copy(string); string_delete(string); return gr_string; } if (row > top_row) top_row = row; picture[row][cl] = '+'; picture[row][cr] = '+'; for (k=cl+1; kname; if (opts->display_link_subscripts) { if (!is_utf8_alpha(s)) s = ""; } else { if (!is_utf8_upper(s)) { s = ""; /* Don't print fat link connector name */ } } strncpy(connector, s, MAX_TOKEN_LENGTH-1); connector[MAX_TOKEN_LENGTH-1] = '\0'; k=0; if (opts->display_link_subscripts) k = strlen(connector); else for (t=connector; isupper((int)*t); t++) k++; /* uppercase len of conn*/ if ((cl+cr-k)/2 + 1 <= cl) { t = picture[row] + cl + 1; } else { t = picture[row] + (cl+cr-k)/2 + 1; } s = connector; if (opts->display_link_subscripts) while((*s != '\0') && (*t == '-')) *t++ = *s++; else while(isupper((int)*s) && (*t == '-')) *t++ = *s++; /* now put in the | below this one, where needed */ for (k=0; kword[k]; i=0; while(*s != '\0') { *t++ = *s++; i++; } *t++ = ' '; } *t = '\0'; if (opts->display_short) { for (k=0; picture[0][k] != '\0'; k++) { if ((picture[0][k] == '+') || (picture[0][k] == '|')) { xpicture[1][k] = '|'; } else { xpicture[1][k] = ' '; } } xpicture[1][k] = '\0'; for (row=0; row < top_row+1; row++) { strcpy(xpicture[row+2],picture[row]); } top_row = top_row+2; } else { for (row=0; row < top_row+1; row++) { strcpy(xpicture[2*row+2],picture[row]); for (k=0; picture[row][k] != '\0'; k++) { if ((picture[row][k] == '+') || (picture[row][k] == '|')) { xpicture[2*row+1][k] = '|'; } else { xpicture[2*row+1][k] = ' '; } } xpicture[2*row+1][k] = '\0'; } top_row = 2*top_row + 2; } /* we've built the picture, now print it out */ if (print_word_0) i = 0; else i = 1; k = 0; pctx->N_rows = 0; pctx->row_starts[pctx->N_rows] = 0; pctx->N_rows++; while(i < N_words_to_print) { append_string(string, "\n"); width = 0; do { width += strlen(linkage->word[i])+1; i++; } while((iword[i]))+1 < x_screen_width)); pctx->row_starts[pctx->N_rows] = i - (!print_word_0); /* PS junk */ if (iN_rows++; /* same */ for (row = top_row; row >= 0; row--) { flag = TRUE; for (j=k;flag&&(jlength; i++) { c = 0; for (d=sent->word[i].d; d != NULL; d = d->next) { c++; } printf("%s(%d) ",sent->word[i].string, c); } printf("\n\n"); } void print_expression_sizes(Sentence sent) { X_node * x; int w, size; for (w=0; wlength; w++) { size = 0; for (x=sent->word[w].x; x!=NULL; x = x->next) { size += size_of_expression(x->exp); } printf("%s[%d] ",sent->word[w].string, size); } printf("\n\n"); } /** * this version just prints it on one line. */ void print_sentence(FILE *fp, Sentence sent, int w) { int i; if (sent->dict->left_wall_defined) i=1; else i=0; for (; ilength - sent->dict->right_wall_defined; i++) { fprintf(fp, "%s ", sent->word[i].string); } fprintf(fp, "\n"); } const char * trailer(int mode) { static const char * trailer_string= "diagram\n" "\n" "%%EndDocument\n" ; if (mode==1) return trailer_string; else return ""; } const char * header(int mode) { static const char * header_string= "%!PS-Adobe-2.0 EPSF-1.2\n" "%%Pages: 1\n" "%%BoundingBox: 0 -20 500 200\n" "%%EndComments\n" "%%BeginDocument: \n" "\n" "% compute size of diagram by adding\n" "% #rows x 8.5\n" "% (#rows -1) x 10\n" "% \\sum maxheight x 10\n" "/nulllink () def % The symbol of a null link\n" "/wordfontsize 11 def % the size of the word font\n" "/labelfontsize 9 def % the size of the connector label font\n" "/ex 10 def % the horizontal radius of all the links\n" "/ey 10 def % the height of the level 0 links\n" "/ed 10 def % amount to add to this height per level\n" "/radius 10 def % radius for rounded arcs\n" "/row-spacing 10 def % the space between successive rows of the diagram\n" "\n" "/gap wordfontsize .5 mul def % the gap between words\n" "/top-of-words wordfontsize .85 mul def\n" " % the delta y above where the text is written where\n" " % the major axis of the ellipse is located\n" "/label-gap labelfontsize .1 mul def\n" "\n" "/xwordfontsize 10 def % the size of the word font\n" "/xlabelfontsize 10 def % the size of the connector label font\n" "/xex 10 def % the horizontal radius of all the links\n" "/xey 10 def % the height of the level 0 links\n" "/xed 10 def % amount to add to this height per level\n" "/xradius 10 def % radius for rounded arcs\n" "/xrow-spacing 10 def % the space between successive rows of the diagram\n" "/xgap wordfontsize .5 mul def % the gap between words\n" "\n" "/centerpage 6.5 72 mul 2 div def\n" " % this number of points from the left margin is the center of page\n" "\n" "/rightpage 6.5 72 mul def\n" " % number of points from the left margin is the the right margin\n" "\n" "/show-string-centered-dict 5 dict def\n" "\n" "/show-string-centered {\n" " show-string-centered-dict begin\n" " /string exch def\n" " /ycenter exch def\n" " /xcenter exch def\n" " xcenter string stringwidth pop 2 div sub\n" " ycenter labelfontsize .3 mul sub\n" " moveto\n" " string show\n" " end\n" "} def\n" "\n" "/clear-word-box {\n" " show-string-centered-dict begin\n" " /string exch def\n" " /ycenter exch def\n" " /xcenter exch def\n" " newpath\n" " /urx string stringwidth pop 2 div def\n" " /ury labelfontsize .3 mul def\n" " xcenter urx sub ycenter ury sub moveto\n" " xcenter urx add ycenter ury sub lineto\n" " xcenter urx add ycenter ury add lineto\n" " xcenter urx sub ycenter ury add lineto\n" " closepath\n" " 1 setgray fill\n" " 0 setgray\n" " end\n" "} def\n" "\n" "/diagram-sentence-dict 20 dict def\n" "\n" "/diagram-sentence-circle\n" "{diagram-sentence-dict begin \n" " /links exch def\n" " /words exch def\n" " /n words length def\n" " /Times-Roman findfont wordfontsize scalefont setfont\n" " /x 0 def\n" " /y 0 def\n" "\n" " /left-ends [x dup words {stringwidth pop add gap add dup}\n" " forall pop pop] def\n" " /right-ends [x words {stringwidth pop add dup gap add} forall pop] def\n" " /centers [0 1 n 1 sub {/i exch def\n" " left-ends i get\n" " right-ends i get\n" " add 2 div\n" " } for ] def\n" "\n" " x y moveto\n" " words {show gap 0 rmoveto} forall\n" "\n" " .5 setlinewidth \n" "\n" " links {dup 0 get /leftword exch def\n" " dup 1 get /rightword exch def\n" " dup 2 get /level exch def\n" " 3 get /string exch def\n" " newpath\n" " string nulllink eq {[2] 1 setdash}{[] 0 setdash} ifelse\n" "% string nulllink eq {.8 setgray}{0 setgray} ifelse\n" " centers leftword get\n" " y top-of-words add\n" " moveto\n" " \n" " centers rightword get\n" " centers leftword get\n" " sub 2 div dup\n" " radius \n" " lt {/radiusx exch def}{pop /radiusx radius def} ifelse\n" " \n" " \n" " \n" " centers leftword get\n" " y top-of-words add ey ed level mul add add\n" " centers rightword get\n" " y top-of-words add ey ed level mul add add\n" " radiusx\n" " arcto\n" " 4 {pop} repeat\n" " centers rightword get\n" " y top-of-words add ey ed level mul add add\n" " centers rightword get\n" " y top-of-words add\n" " radiusx\n" " arcto\n" " 4 {pop} repeat\n" " centers rightword get\n" " y top-of-words add\n" " lineto\n" "\n" " stroke\n" "\n" " /radius-y ey ed level mul add def\n" "\n" " /center-arc-x\n" " centers leftword get centers rightword get add 2 div\n" " def\n" " \n" " /center-arc-y\n" " y top-of-words radius-y add add\n" " def\n" "\n" " /Courier-Bold findfont labelfontsize scalefont setfont \n" " center-arc-x center-arc-y string clear-word-box\n" " center-arc-x center-arc-y string show-string-centered\n" " } forall\n" " end\n" " } def\n" "\n" "/diagramdict 20 dict def\n" "\n" "/diagram\n" "{diagramdict begin\n" " /break-words exch def\n" " /links exch def\n" " /words exch def\n" " /n words length def\n" " /n-rows break-words length def\n" " /Times-Roman findfont wordfontsize scalefont setfont\n" "\n" " /left-ends [0 dup words {stringwidth pop add gap add dup}\n" " forall pop pop] def\n" " /right-ends [0 words {stringwidth pop add dup gap add} forall pop] def\n" "\n" " /lwindows [ break-words {left-ends exch get gap 2 div sub } forall ] def\n" " /rwindows [1 1 n-rows 1 sub {/i exch def\n" " lwindows i get } for\n" " right-ends n 1 sub get gap 2 div add\n" " ] def\n" "\n" "\n" " /max 0 def\n" " 0 1 links length 1 sub {\n" " /i exch def\n" " /t links i get 2 get def\n" " t max gt {/max t def} if\n" " } for\n" "\n" " /max-height ed max mul ey add top-of-words add row-spacing add def\n" " /total-height n-rows max-height mul row-spacing sub def\n" "\n" " /max-width 0 def % compute the widest window\n" " 0 1 n-rows 1 sub {\n" " /i exch def\n" " /t rwindows i get lwindows i get sub def\n" " t max-width gt {/max-width t def} if\n" " } for\n" "\n" " centerpage max-width 2 div sub 0 translate % centers it\n" " % rightpage max-width sub 0 translate % right justified\n" " % Delete both of these to make it left justified\n" "\n" " n-rows 1 sub -1 0\n" " {/i exch def\n" " gsave\n" " newpath\n" " %/centering centerpage rwindows i get lwindows i get sub 2 div sub def\n" " % this line causes each row to be centered\n" " /centering 0 def\n" " % set centering to 0 to prevent centering of each row \n" "\n" " centering -100 moveto % -100 because some letters go below zero\n" " centering max-height n-rows mul lineto\n" " rwindows i get lwindows i get sub centering add\n" " max-height n-rows mul lineto\n" " rwindows i get lwindows i get sub centering add\n" " -100 lineto\n" " closepath\n" " clip\n" " lwindows i get neg n-rows i sub 1 sub max-height mul translate\n" " centerpage centering 0 translate\n" " words links diagram-sentence-circle\n" " grestore\n" " } for\n" " end\n" "} def \n" "\n" "/diagramx\n" "{diagramdict begin\n" " /break-words exch def\n" " /links exch def\n" " /words exch def\n" " /n words length def\n" " /n-rows break-words length def\n" " /Times-Roman findfont xwordfontsize scalefont setfont\n" "\n" " /left-ends [0 dup words {stringwidth pop add gap add dup}\n" " forall pop pop] def\n" " /right-ends [0 words {stringwidth pop add dup gap add} forall pop] def\n" "\n" " /lwindows [ break-words {left-ends exch get gap 2 div sub } forall ] def\n" " /rwindows [1 1 n-rows 1 sub {/i exch def\n" " lwindows i get } for\n" " right-ends n 1 sub get xgap 2 div add\n" " ] def\n" "\n" "\n" " /max 0 def\n" " 0 1 links length 1 sub {\n" " /i exch def\n" " /t links i get 2 get def\n" " t max gt {/max t def} if\n" " } for\n" "\n" " /max-height xed max mul xey add top-of-words add xrow-spacing add def\n" " /total-height n-rows max-height mul xrow-spacing sub def\n" "\n" " /max-width 0 def % compute the widest window\n" " 0 1 n-rows 1 sub {\n" " /i exch def\n" " /t rwindows i get lwindows i get sub def\n" " t max-width gt {/max-width t def} if\n" " } for\n" "\n" " centerpage max-width 2 div sub 0 translate % centers it\n" " % rightpage max-width sub 0 translate % right justified\n" " % Delete both of these to make it left justified\n" "\n" " n-rows 1 sub -1 0\n" " {/i exch def\n" " gsave\n" " newpath\n" " %/centering centerpage rwindows i get lwindows i get sub 2 div sub def\n" " % this line causes each row to be centered\n" " /centering 0 def\n" " % set centering to 0 to prevent centering of each row \n" "\n" " centering -100 moveto % -100 because some letters go below zero\n" " centering max-height n-rows mul lineto\n" " rwindows i get lwindows i get sub centering add\n" " max-height n-rows mul lineto\n" " rwindows i get lwindows i get sub centering add\n" " -100 lineto\n" " closepath\n" " clip\n" " lwindows i get neg n-rows i sub 1 sub max-height mul translate\n" " centerpage centering 0 translate\n" " words links diagram-sentence-circle\n" " grestore\n" " } for\n" " end\n" "} def \n" "\n" "/ldiagram\n" "{diagramdict begin\n" " /break-words exch def\n" " /links exch def\n" " /words exch def\n" " /n words length def\n" " /n-rows break-words length def\n" " /Times-Roman findfont wordfontsize scalefont setfont\n" "\n" " /left-ends [0 dup words {stringwidth pop add gap add dup}\n" " forall pop pop] def\n" " /right-ends [0 words {stringwidth pop add dup gap add} forall pop] def\n" "\n" " /lwindows [ break-words {left-ends exch get gap 2 div sub } forall ] def\n" " /rwindows [1 1 n-rows 1 sub {/i exch def\n" " lwindows i get } for\n" " right-ends n 1 sub get gap 2 div add\n" " ] def\n" "\n" "\n" " /max 0 def\n" " 0 1 links length 1 sub {\n" " /i exch def\n" " /t links i get 2 get def\n" " t max gt {/max t def} if\n" " } for\n" "\n" " /max-height ed max mul ey add top-of-words add row-spacing add def\n" " /total-height n-rows max-height mul row-spacing sub def\n" "\n" " /max-width 0 def % compute the widest window\n" " 0 1 n-rows 1 sub {\n" " /i exch def\n" " /t rwindows i get lwindows i get sub def\n" " t max-width gt {/max-width t def} if\n" " } for\n" "\n" " % centerpage max-width 2 div sub 0 translate % centers it\n" " % rightpage max-width sub 0 translate % right justified\n" " % Delete both of these to make it left justified\n" "\n" " n-rows 1 sub -1 0\n" " {/i exch def\n" " gsave\n" " newpath\n" " %/centering centerpage rwindows i get lwindows i get sub 2 div sub def\n" " % this line causes each row to be centered\n" " /centering 0 def\n" " % set centering to 0 to prevent centering of each row \n" "\n" " centering -100 moveto % -100 because some letters go below zero\n" " centering max-height n-rows mul lineto\n" " rwindows i get lwindows i get sub centering add\n" " max-height n-rows mul lineto\n" " rwindows i get lwindows i get sub centering add\n" " -100 lineto\n" " closepath\n" " clip\n" " lwindows i get neg n-rows i sub 1 sub max-height mul translate\n" " centerpage centering 0 translate\n" " words links diagram-sentence-circle\n" " grestore\n" " } for\n" " end\n" "} def \n" ; if (mode==1) return header_string; else return ""; } link-grammar/link-grammar/.cvsignore0000644000000000000000000000012712536650433014715 0ustar Makefile Makefile.in link-parser link-features.h svn-commit.tmp* .deps .libs *.la *.lo link-grammar/link-grammar/expand.h0000644000000000000000000000156112536650433014350 0ustar /*************************************************************************/ /* Copyright (c) 2009 Linas Vepstas */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ int lg_expand_disjunct_list(Sentence sent); link-grammar/link-grammar/pp_knowledge.h0000644000000000000000000000176512536650433015555 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ pp_knowledge *pp_knowledge_open(const char *path); void pp_knowledge_close(pp_knowledge *knowledge); link-grammar/link-grammar/Makefile.in0000644000000000000000000011641712537603121014765 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Automake file for building both liblink-grammar.so and # the command line application link-parser. # VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_JAVA_TRUE@am__append_1 = liblink-grammar-java.la @OS_WIN32_TRUE@am__append_2 = -D_JNI_IMPLEMENTATION_ -Wl,--kill-at @OS_WIN32_TRUE@am__append_3 = -D_JNI_IMPLEMENTATION_ -Wl,--kill-at @HAVE_HUNSPELL_TRUE@am__append_4 = ${HUNSPELL_LIBS} @HAVE_HUNSPELL_TRUE@am__append_5 = ${HUNSPELL_LIBS} @HAVE_ASPELL_TRUE@am__append_6 = ${ASPELL_LIBS} @WITH_SAT_SOLVER_TRUE@am__append_7 = $(top_builddir)/link-grammar/sat-solver/libsat-solver.la \ @WITH_SAT_SOLVER_TRUE@ $(top_builddir)/link-grammar/minisat/libminisat.la @WITH_SAT_SOLVER_TRUE@am__append_8 = $(top_builddir)/link-grammar/sat-solver/libsat-solver.la \ @WITH_SAT_SOLVER_TRUE@ $(top_builddir)/link-grammar/minisat/libminisat.la @WITH_CORPUS_TRUE@am__append_9 = $(top_builddir)/link-grammar/corpus/liblink-corpus.la ${SQLITE3_LIBS} @WITH_CORPUS_TRUE@am__append_10 = $(top_builddir)/link-grammar/corpus/liblink-corpus.la ${SQLITE3_LIBS} @WITH_BINRELOC_TRUE@am__append_11 = -lpthread @WITH_BINRELOC_TRUE@am__append_12 = -lpthread @WITH_PTHREADS_TRUE@am__append_13 = -lpthread @WITH_PTHREADS_TRUE@am__append_14 = -lpthread bin_PROGRAMS = link-parser$(EXEEXT) @WITH_SAT_SOLVER_TRUE@am__append_15 = $(top_builddir)/link-grammar/sat-solver/libsat-solver.la \ @WITH_SAT_SOLVER_TRUE@ $(top_builddir)/link-grammar/minisat/libminisat.la subdir = link-grammar DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/link-features.h.in $(top_srcdir)/depcomp \ $(liblink_grammar_include_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = link-features.h 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)$(bindir)" \ "$(DESTDIR)$(liblink_grammar_includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @HAVE_HUNSPELL_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) @WITH_CORPUS_TRUE@am__DEPENDENCIES_3 = $(top_builddir)/link-grammar/corpus/liblink-corpus.la \ @WITH_CORPUS_TRUE@ $(am__DEPENDENCIES_1) liblink_grammar_java_la_DEPENDENCIES = liblink-grammar.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) $(am__append_8) \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_liblink_grammar_java_la_OBJECTS = jni-client.lo liblink_grammar_java_la_OBJECTS = \ $(am_liblink_grammar_java_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 = liblink_grammar_java_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(liblink_grammar_java_la_LDFLAGS) \ $(LDFLAGS) -o $@ @HAVE_JAVA_TRUE@am_liblink_grammar_java_la_rpath = -rpath $(libdir) @HAVE_ASPELL_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) liblink_grammar_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_4) $(am__append_7) \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_liblink_grammar_la_OBJECTS = analyze-linkage.lo and.lo api.lo \ build-disjuncts.lo command-line.lo constituents.lo count.lo \ disjunct-utils.lo disjuncts.lo error.lo expand.lo \ extract-links.lo fast-match.lo idiom.lo massage.lo \ post-process.lo pp_knowledge.lo pp_lexer.lo pp_linkset.lo \ preparation.lo print.lo print-util.lo prune.lo read-dict.lo \ read-regex.lo regex-morph.lo resources.lo spellcheck-aspell.lo \ spellcheck-hun.lo string-set.lo tokenize.lo utilities.lo \ word-file.lo word-utils.lo prefix.lo liblink_grammar_la_OBJECTS = $(am_liblink_grammar_la_OBJECTS) liblink_grammar_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(liblink_grammar_la_LDFLAGS) \ $(LDFLAGS) -o $@ PROGRAMS = $(bin_PROGRAMS) am_link_parser_OBJECTS = link-parser.$(OBJEXT) link_parser_OBJECTS = $(am_link_parser_OBJECTS) link_parser_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__append_15) \ liblink-grammar.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@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(liblink_grammar_java_la_SOURCES) \ $(liblink_grammar_la_SOURCES) $(link_parser_SOURCES) DIST_SOURCES = $(liblink_grammar_java_la_SOURCES) \ $(liblink_grammar_la_SOURCES) $(link_parser_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 = $(liblink_grammar_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 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 = corpus minisat sat-solver 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@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ -DVERSION=\"@VERSION@\" -DDICTIONARY_DIR=\"$(pkgdatadir)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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@ @WITH_CORPUS_TRUE@SUBDIRS = corpus @WITH_SAT_SOLVER_TRUE@SUBDIRS = minisat sat-solver INCLUDES = -I$(top_srcdir) $(ANSI_CFLAGS) $(LINK_CFLAGS) $(HUNSPELL_CFLAGS) lib_LTLIBRARIES = liblink-grammar.la $(am__append_1) liblink_grammar_la_LDFLAGS = -version-info @VERSION_INFO@ \ -export-dynamic -no-undefined -export-symbols \ $(srcdir)/link-grammar.def $(am__append_2) liblink_grammar_java_la_LDFLAGS = -version-info @VERSION_INFO@ \ -export-dynamic -no-undefined -export-symbols \ $(srcdir)/link-grammar-java.def $(am__append_3) # Math libraries are needed for floorf, etc. liblink_grammar_la_LIBADD = ${REGEX_LIBS} $(am__append_4) \ $(am__append_6) $(am__append_7) $(am__append_9) \ $(am__append_11) $(am__append_13) -lm liblink_grammar_java_la_LIBADD = liblink-grammar.la ${REGEX_LIBS} \ $(am__append_5) $(am__append_8) $(am__append_10) \ $(am__append_12) $(am__append_14) liblink_grammar_la_SOURCES = \ analyze-linkage.c \ and.c \ api.c \ build-disjuncts.c \ command-line.c \ constituents.c \ count.c \ disjunct-utils.c \ disjuncts.c \ error.c \ expand.c \ extract-links.c \ fast-match.c \ idiom.c \ massage.c \ post-process.c \ pp_knowledge.c \ pp_lexer.c \ pp_linkset.c \ preparation.c \ print.c \ print-util.c \ prune.c \ read-dict.c \ read-regex.c \ regex-morph.c \ resources.c \ spellcheck-aspell.c \ spellcheck-hun.c \ string-set.c \ tokenize.c \ utilities.c \ word-file.c \ word-utils.c \ prefix.c \ api.h \ api-structures.h \ api-types.h \ analyze-linkage.h \ and.h \ build-disjuncts.h \ command-line.h \ constituents.h \ count.h \ disjunct-utils.h \ disjuncts.h \ error.h \ expand.h \ externs.h \ extract-links.h \ fast-match.h \ idiom.h \ link-includes.h \ massage.h \ post-process.h \ pp_knowledge.h \ pp_lexer.h \ pp_linkset.h \ preparation.h \ print.h \ print-util.h \ prune.h \ read-dict.h \ read-regex.h \ regex-morph.h \ resources.h \ spellcheck.h \ string-set.h \ structures.h \ tokenize.h \ utilities.h \ word-file.h \ word-utils.h liblink_grammar_includedir = $(includedir)/link-grammar liblink_grammar_include_HEADERS = \ link-includes.h \ link-features.h liblink_grammar_java_la_SOURCES = \ jni-client.h \ jni-client.c EXTRA_DIST = \ prefix.h \ autoit/_LGTest.au3 \ autoit/_LinkGrammar.au3 \ autoit/README \ java/README \ java/org/linkgrammar/JSONReader.java \ java/org/linkgrammar/LGConfig.java \ java/org/linkgrammar/LGRemoteClient.java \ java/org/linkgrammar/LGService.java \ java/org/linkgrammar/Linkage.java \ java/org/linkgrammar/LinkGrammar.java \ java/org/linkgrammar/Link.java \ java/org/linkgrammar/ParseResult.java \ link-grammar.def \ link-grammar-java.def link_parser_SOURCES = link-parser.c link_parser_LDADD = $(LIBEDIT_LIBS) $(am__append_15) \ liblink-grammar.la all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign link-grammar/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign link-grammar/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): link-features.h: $(top_builddir)/config.status $(srcdir)/link-features.h.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}; \ } liblink-grammar-java.la: $(liblink_grammar_java_la_OBJECTS) $(liblink_grammar_java_la_DEPENDENCIES) $(EXTRA_liblink_grammar_java_la_DEPENDENCIES) $(AM_V_CCLD)$(liblink_grammar_java_la_LINK) $(am_liblink_grammar_java_la_rpath) $(liblink_grammar_java_la_OBJECTS) $(liblink_grammar_java_la_LIBADD) $(LIBS) liblink-grammar.la: $(liblink_grammar_la_OBJECTS) $(liblink_grammar_la_DEPENDENCIES) $(EXTRA_liblink_grammar_la_DEPENDENCIES) $(AM_V_CCLD)$(liblink_grammar_la_LINK) -rpath $(libdir) $(liblink_grammar_la_OBJECTS) $(liblink_grammar_la_LIBADD) $(LIBS) 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 link-parser$(EXEEXT): $(link_parser_OBJECTS) $(link_parser_DEPENDENCIES) $(EXTRA_link_parser_DEPENDENCIES) @rm -f link-parser$(EXEEXT) $(AM_V_CCLD)$(LINK) $(link_parser_OBJECTS) $(link_parser_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/analyze-linkage.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/and.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/api.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/build-disjuncts.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/command-line.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/constituents.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/count.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/disjunct-utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/disjuncts.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expand.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extract-links.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast-match.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/idiom.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jni-client.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link-parser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/massage.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/post-process.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pp_knowledge.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pp_lexer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pp_linkset.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prefix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/preparation.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-util.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prune.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read-dict.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read-regex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex-morph.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resources.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spellcheck-aspell.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spellcheck-hun.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string-set.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tokenize.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utilities.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/word-file.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/word-utils.Plo@am__quote@ .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 install-liblink_grammar_includeHEADERS: $(liblink_grammar_include_HEADERS) @$(NORMAL_INSTALL) @list='$(liblink_grammar_include_HEADERS)'; test -n "$(liblink_grammar_includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(liblink_grammar_includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(liblink_grammar_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)$(liblink_grammar_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(liblink_grammar_includedir)" || exit $$?; \ done uninstall-liblink_grammar_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(liblink_grammar_include_HEADERS)'; test -n "$(liblink_grammar_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(liblink_grammar_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: $(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) $(PROGRAMS) $(HEADERS) install-binPROGRAMS: install-libLTLIBRARIES installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(liblink_grammar_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." clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local \ install-liblink_grammar_includeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES \ uninstall-liblink_grammar_includeHEADERS uninstall-local .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-binPROGRAMS 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-binPROGRAMS \ 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-libLTLIBRARIES install-liblink_grammar_includeHEADERS \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-libLTLIBRARIES \ uninstall-liblink_grammar_includeHEADERS uninstall-local @OS_WIN32_TRUE@install-libtool-import-lib: @OS_WIN32_TRUE@ $(INSTALL) .libs/liblink-grammar.dll.a $(DESTDIR)$(libdir) @OS_WIN32_TRUE@uninstall-libtool-import-lib: @OS_WIN32_TRUE@ -rm $(DESTDIR)$(libdir)/liblink-grammar.dll.a @OS_WIN32_FALSE@install-libtool-import-lib: @OS_WIN32_FALSE@uninstall-libtool-import-lib: # ----------------------------------------------------------- install-data-local: install-libtool-import-lib uninstall-local: uninstall-libtool-import-lib # 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: link-grammar/link-grammar/word-file.c0000644000000000000000000000703012536650433014751 0ustar /***************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /***************************************************************************/ #include #include #include #include "error.h" /** * Reads in one word from the file, allocates space for it, * and returns it. */ static const char * get_a_word(Dictionary dict, FILE * fp) { char word[MAX_WORD+4]; /* allow for 4-byte wide chars */ const char * s; wint_t c; mbstate_t mbss; int j; do { c = fgetwc(fp); } while ((c != WEOF) && iswspace(c)); if (c == WEOF) return NULL; memset(&mbss, 0, sizeof(mbss)); for (j=0; (j <= MAX_WORD-1) && (!iswspace(c)) && (c != WEOF);) { j += wctomb_check(&word[j], c, &mbss); c = fgetwc(fp); } if (j >= MAX_WORD) { word[MAX_WORD] = 0x0; prt_error("Fatal Error: The dictionary contains a word that " "is too long. The word was: %s", word); exit(1); } word[j] = '\0'; s = string_set_add(word, dict->string_set); return s; } /** * * (1) opens the word file and adds it to the word file list * (2) reads in the words * (3) puts each word in a Dict_node * (4) links these together by their left pointers at the * front of the list pointed to by dn * (5) returns a pointer to the first of this list */ Dict_node * read_word_file(Dictionary dict, Dict_node * dn, char * filename) { Dict_node * dn_new; Word_file * wf; FILE * fp; const char * s; char file_name_copy[MAX_PATH_NAME+1]; safe_strcpy(file_name_copy, filename+1, sizeof(file_name_copy)); /* get rid of leading '/' */ if ((fp = dictopen(file_name_copy, "r")) == NULL) { prt_error("Error opening word file %s\n", file_name_copy); return NULL; } /*printf(" Reading \"%s\"\n", file_name_copy);*/ /*printf("*"); fflush(stdout);*/ wf = (Word_file *) xalloc(sizeof (Word_file)); safe_strcpy(wf->file, file_name_copy, sizeof(wf->file)); wf->changed = FALSE; wf->next = dict->word_file_header; dict->word_file_header = wf; while ((s = get_a_word(dict, fp)) != NULL) { dn_new = (Dict_node *) xalloc(sizeof(Dict_node)); dn_new->left = dn; dn = dn_new; dn->string = s; dn->file = wf; } fclose(fp); return dn; } void save_files(Dictionary dict) { Word_file *wf; FILE *fp; for (wf = dict->word_file_header; wf != NULL; wf = wf->next) { if (wf->changed) { if ((fp = fopen(wf->file, "w")) == NULL) { printf("\nCannot open %s. Gee, this shouldn't happen.\n", wf->file); printf("file not saved\n"); return; } printf(" saving file \"%s\"\n", wf->file); /*output_dictionary(dict_root, fp, wf);*/ fclose(fp); wf->changed = FALSE; } } } int files_need_saving(Dictionary dict) { Word_file *wf; for (wf = dict->word_file_header; wf != NULL; wf = wf->next) { if (wf->changed) return TRUE; } return FALSE; } link-grammar/link-grammar/link-parser.c0000644000000000000000000005342612536650433015322 0ustar /***************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* Copyright (c) 2008 Linas Vepstas */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /***************************************************************************/ /**************************************************************************** * * This is a simple example of the link parser API. It similates most of * the functionality of the original link grammar parser, allowing sentences * to be typed in either interactively or in "batch" mode (if -batch is * specified on the command line, and stdin is redirected to a file). * The program: * Opens up a dictionary * Iterates: * 1. Reads from stdin to get an input string to parse * 2. Tokenizes the string to form a Sentence * 3. Tries to parse it with cost 0 * 4. Tries to parse with increasing cost * When a parse is found: * 1. Extracts each Linkage * 2. Passes it to process_some_linkages() * 3. Deletes linkage * After parsing each Sentence is deleted by making a call to * sentence_delete. * ****************************************************************************/ #include #include #include #include #include #include /* Used for terminal resizing */ #ifndef _WIN32 #include #include #include #include #endif #ifdef HAVE_EDITLINE #include #endif #ifdef _MSC_VER #define LINK_GRAMMAR_DLL_EXPORT 0 #endif #include #include #include #include "command-line.h" #include "expand.h" #define MAX_INPUT 1024 #define DISPLAY_MAX 1024 #define COMMENT_CHAR '%' /* input lines beginning with this are ignored */ static int batch_errors = 0; static int input_pending=FALSE; static Parse_Options opts; static Parse_Options panic_parse_opts; static int verbosity = 0; typedef enum { UNGRAMMATICAL='*', PARSE_WITH_DISJUNCT_COST_GT_0=':', /* Not used anywhere, currently ... */ NO_LABEL=' ' } Label; static char * fget_input_string(FILE *in, FILE *out, Parse_Options opts) { #ifdef HAVE_EDITLINE static char * pline = NULL; const char * prompt = "linkparser> "; if (in != stdin) { static char input_string[MAX_INPUT]; input_pending = FALSE; if (fgets(input_string, MAX_INPUT, in)) return input_string; return NULL; } if (input_pending && pline != NULL) { input_pending = FALSE; return pline; } if (parse_options_get_batch_mode(opts) || (verbosity == 0) || input_pending) { prompt = ""; } input_pending = FALSE; if (pline) free(pline); pline = readline(prompt); /* Save non-blank lines */ if (pline && *pline) { if (*pline) add_history(pline); } return pline; #else static char input_string[MAX_INPUT]; if ((!parse_options_get_batch_mode(opts)) && (verbosity > 0) && (!input_pending)) { fprintf(out, "linkparser> "); fflush(out); } input_pending = FALSE; /* For UTF-8 input, I think its still technically correct to * use fgets() and not fgetws() at this point. */ if (fgets(input_string, MAX_INPUT, in)) return input_string; else return NULL; #endif } static int fget_input_char(FILE *in, FILE *out, Parse_Options opts) { #ifdef HAVE_EDITLINE char * pline = fget_input_string(in, out, opts); if (NULL == pline) return EOF; if (*pline) { input_pending = TRUE; return *pline; } return '\n'; #else int c; if (!parse_options_get_batch_mode(opts) && (verbosity > 0)) fprintf(out, "linkparser> "); fflush(out); /* For UTF-8 input, I think its still technically correct to * use fgetc() and not fgetwc() at this point. */ c = fgetc(in); if (c != '\n') { ungetc(c, in); input_pending = TRUE; } return c; #endif } /************************************************************************** * * This procedure displays a linkage graphically. Since the diagrams * are passed as character strings, they need to be deleted with a * call to free. * **************************************************************************/ static void process_linkage(Linkage linkage, Parse_Options opts) { char * string; int j, mode, first_sublinkage; int nlink; if (!linkage) return; /* Can happen in timeout mode */ if (parse_options_get_use_fat_links(opts) && parse_options_get_display_union(opts)) { linkage_compute_union(linkage); first_sublinkage = linkage_get_num_sublinkages(linkage)-1; } else { first_sublinkage = 0; } nlink = linkage_get_num_sublinkages(linkage); for (j=first_sublinkage; j 0) { if (sentence_num_linkages_found(sent) > parse_options_get_linkage_limit(opts)) { fprintf(stdout, "Found %d linkage%s (%d of %d random " \ "linkages had no P.P. violations)", sentence_num_linkages_found(sent), sentence_num_linkages_found(sent) == 1 ? "" : "s", sentence_num_valid_linkages(sent), sentence_num_linkages_post_processed(sent)); } else { fprintf(stdout, "Found %d linkage%s (%d had no P.P. violations)", sentence_num_linkages_post_processed(sent), sentence_num_linkages_found(sent) == 1 ? "" : "s", sentence_num_valid_linkages(sent)); } if (sentence_null_count(sent) > 0) { fprintf(stdout, " at null count %d", sentence_null_count(sent)); } fprintf(stdout, "\n"); } } static int process_some_linkages(Sentence sent, Parse_Options opts) { int c; int i, num_to_query, num_to_display, num_displayed; Linkage linkage; double corpus_cost; if (verbosity > 0) print_parse_statistics(sent, opts); num_to_query = MIN(sentence_num_linkages_post_processed(sent), DISPLAY_MAX); if (!parse_options_get_display_bad(opts)) { num_to_display = MIN(sentence_num_valid_linkages(sent), DISPLAY_MAX); } else { num_to_display = MIN(sentence_num_linkages_post_processed(sent), DISPLAY_MAX); } for (i=0, num_displayed=0; i 0) && (!parse_options_get_display_bad(opts))) { continue; } linkage = linkage_create(i, sent, opts); /* Currently, sat solver returns NULL when there ain't no more */ if (!linkage) break; if (verbosity > 0) { if ((sentence_num_valid_linkages(sent) == 1) && (!parse_options_get_display_bad(opts))) { fprintf(stdout, " Unique linkage, "); } else if ((parse_options_get_display_bad(opts)) && (sentence_num_violations(sent, i) > 0)) { fprintf(stdout, " Linkage %d (bad), ", num_displayed+1); } else { fprintf(stdout, " Linkage %d, ", num_displayed+1); } if (!linkage_is_canonical(linkage)) { fprintf(stdout, "non-canonical, "); } if (linkage_is_improper(linkage)) { fprintf(stdout, "improper fat linkage, "); } if (linkage_has_inconsistent_domains(linkage)) { fprintf(stdout, "inconsistent domains, "); } corpus_cost = linkage_corpus_cost(linkage); if (corpus_cost < 0.0f) { fprintf(stdout, "cost vector = (UNUSED=%d DIS=%d FAT=%d AND=%d LEN=%d)\n", linkage_unused_word_cost(linkage), linkage_disjunct_cost(linkage), linkage_is_fat(linkage), linkage_and_cost(linkage), linkage_link_cost(linkage)); } else { fprintf(stdout, "cost vector = (CORP=%6.4f UNUSED=%d DIS=%d FAT=%d AND=%d LEN=%d)\n", corpus_cost, linkage_unused_word_cost(linkage), linkage_disjunct_cost(linkage), linkage_is_fat(linkage), linkage_and_cost(linkage), linkage_link_cost(linkage)); } } process_linkage(linkage, opts); linkage_delete(linkage); if (++num_displayed < num_to_display) { if (verbosity > 0) { fprintf(stdout, "Press RETURN for the next linkage.\n"); } c = fget_input_char(stdin, stdout, opts); if (c != '\n') return c; } else { break; } } return 'x'; } static int there_was_an_error(Label label, Sentence sent, Parse_Options opts) { if (sentence_num_valid_linkages(sent) > 0) { if (label == UNGRAMMATICAL) { batch_errors++; return UNGRAMMATICAL; } if ((sentence_disjunct_cost(sent, 0) == 0) && (label == PARSE_WITH_DISJUNCT_COST_GT_0)) { batch_errors++; return PARSE_WITH_DISJUNCT_COST_GT_0; } } else { if (label != UNGRAMMATICAL) { batch_errors++; return UNGRAMMATICAL; } } return FALSE; } static void batch_process_some_linkages(Label label, Sentence sent, Parse_Options opts) { Linkage linkage; if (there_was_an_error(label, sent, opts)) { /* Note: sentence_num_linkages_found returns total linkages * not valid linkages. So the printed linkage might be bad... */ if (sentence_num_linkages_found(sent) > 0) { linkage = linkage_create(0, sent, opts); process_linkage(linkage, opts); linkage_delete(linkage); } fprintf(stdout, "+++++ error %d\n", batch_errors); } } static int special_command(char *input_string, Dictionary dict) { if (input_string[0] == '\n') return TRUE; if (input_string[0] == COMMENT_CHAR) return TRUE; if (input_string[0] == '!') { if (strncmp(input_string, "!panic_", 7) == 0) { issue_special_command(input_string+7, panic_parse_opts, dict); return TRUE; } issue_special_command(input_string+1, opts, dict); return TRUE; } return FALSE; } static Label strip_off_label(char * input_string) { Label c; c = (Label) input_string[0]; switch(c) { case UNGRAMMATICAL: case PARSE_WITH_DISJUNCT_COST_GT_0: input_string[0] = ' '; return c; case NO_LABEL: default: return NO_LABEL; } } static void setup_panic_parse_options(Parse_Options opts) { parse_options_set_disjunct_costf(opts, 3.0f); parse_options_set_min_null_count(opts, 1); parse_options_set_max_null_count(opts, MAX_SENTENCE); parse_options_set_max_parse_time(opts, 60); parse_options_set_use_fat_links(opts, 0); parse_options_set_islands_ok(opts, 1); parse_options_set_short_length(opts, 6); parse_options_set_all_short_connectors(opts, 1); parse_options_set_linkage_limit(opts, 100); parse_options_set_spell_guess(opts, FALSE); } static void print_usage(char *str) { fprintf(stderr, "Usage: %s [language|dictionary location]\n" " [-]\n" " [--version]\n", str); fprintf(stderr, "\nSpecial commands are:\n"); opts = parse_options_create(); issue_special_command("var", opts, NULL); exit(-1); } /** * On Unix, this checks for the current window size, * and sets the output screen width accordingly. * Not sure how MS Windows does this. */ static void check_winsize(Parse_Options popts) { /* Neither windows nor MSYS have the ioctl support needed for this. */ #ifdef _WIN32 parse_options_set_screen_width(popts, 79); #else struct winsize ws; int fd = open("/dev/tty", O_RDWR); if (0 != ioctl(fd, TIOCGWINSZ, &ws)) { perror("ioctl(/dev/tty, TIOCGWINSZ)"); close(fd); return; } close(fd); /* printf("rows %i\n", ws.ws_row); */ /* printf("cols %i\n", ws.ws_col); */ /* Set the screen width only if the returned value seems * rational: its positive and not insanely tiny. */ if ((10 < ws.ws_col) && (16123 > ws.ws_col)) { parse_options_set_screen_width(popts, ws.ws_col - 1); } #endif /* _WIN32 */ } int main(int argc, char * argv[]) { FILE *input_fh = stdin; Dictionary dict; const char *language="en"; /* default to english, and not locale */ int num_linkages, i; Label label = NO_LABEL; const char *codeset; #if LATER /* Try to catch the SIGNWINCH ... except this is not working. */ struct sigaction winch_act; winch_act.sa_handler = winch_handler; winch_act.sa_sigaction = NULL; sigemptyset (&winch_act.sa_mask); winch_act.sa_flags = 0; sigaction (SIGWINCH, &winch_act, NULL); #endif i = 1; if ((argc > 1) && (argv[1][0] != '-')) { /* the dictionary is the first argument if it doesn't begin with "-" */ language = argv[1]; i++; } /* Get the locale from the environment... * perhaps we should someday get it from the dictionary ?? */ setlocale(LC_ALL, ""); /* Check to make sure the current locale is UTF8; if its not, * then force-set this to the english utf8 locale */ codeset = nl_langinfo(CODESET); if (!strstr(codeset, "UTF") && !strstr(codeset, "utf")) { fprintf(stderr, "%s: Warning: locale %s was not UTF-8; force-setting to en_US.UTF-8\n", argv[0], codeset); setlocale(LC_CTYPE, "en_US.UTF-8"); } for (; i parse_options_get_max_sentence_length(opts)) { if (verbosity > 0) { fprintf(stdout, "Sentence length (%d words) exceeds maximum allowable (%d words)\n", sentence_length(sent), parse_options_get_max_sentence_length(opts)); } sentence_delete(sent); sent = NULL; continue; } /* First parse with cost 0 or 1 and no null links */ // parse_options_set_disjunct_costf(opts, 2.0f); parse_options_set_min_null_count(opts, 0); parse_options_set_max_null_count(opts, 0); parse_options_reset_resources(opts); num_linkages = sentence_parse(sent, opts); if (num_linkages < 0) { sentence_delete(sent); sent = NULL; continue; } #if 0 /* Try again, this time ommitting the requirement for * definite articles, etc. This should allow for the parsing * of newspaper headlines and other clipped speech. * * XXX Unfortunately, this also allows for the parsing of * all sorts of ungrammatical sentences which should not * parse, and leads to bad parses of many other unparsable * but otherwise grammatical sentences. Thus, this trick * pretty much fails; we leave it here to document the * experiment. */ if (num_linkages == 0) { parse_options_set_disjunct_costf(opts, 3.5f); num_linkages = sentence_parse(sent, opts); if (num_linkages < 0) continue; } #endif /* Try using a larger list of disjuncts */ if ((num_linkages == 0) && parse_options_get_use_cluster_disjuncts(opts)) { int expanded; if (verbosity > 0) fprintf(stdout, "No standard linkages, expanding disjunct set.\n"); parse_options_set_disjunct_costf(opts, 2.9f); expanded = lg_expand_disjunct_list(sent); if (expanded) { num_linkages = sentence_parse(sent, opts); } if (0 < num_linkages) printf("Got One !!!!!!!!!!!!!!!!!\n"); } /* If asked to show bad linkages, then show them. */ if ((num_linkages == 0) && (!parse_options_get_batch_mode(opts))) { if (parse_options_get_display_bad(opts)) { num_linkages = sentence_num_linkages_found(sent); } } /* Now parse with null links */ if ((num_linkages == 0) && (!parse_options_get_batch_mode(opts))) { if (verbosity > 0) fprintf(stdout, "No complete linkages found.\n"); if (parse_options_get_allow_null(opts)) { /* XXX should use expanded disjunct list here too */ parse_options_set_min_null_count(opts, 1); parse_options_set_max_null_count(opts, sentence_length(sent)); num_linkages = sentence_parse(sent, opts); } } if (parse_options_timer_expired(opts)) { if (verbosity > 0) fprintf(stdout, "Timer is expired!\n"); } if (parse_options_memory_exhausted(opts)) { if (verbosity > 0) fprintf(stdout, "Memory is exhausted!\n"); } if ((num_linkages == 0) && parse_options_resources_exhausted(opts) && parse_options_get_panic_mode(opts)) { /* print_total_time(opts); */ batch_errors++; if (verbosity > 0) fprintf(stdout, "Entering \"panic\" mode...\n"); parse_options_reset_resources(panic_parse_opts); parse_options_set_verbosity(panic_parse_opts, verbosity); num_linkages = sentence_parse(sent, panic_parse_opts); if (parse_options_timer_expired(panic_parse_opts)) { if (verbosity > 0) fprintf(stdout, "Timer is expired!\n"); } } /* print_total_time(opts); */ if (parse_options_get_batch_mode(opts)) { batch_process_some_linkages(label, sent, opts); } else { int c = process_some_linkages(sent, opts); if (c == EOF) { sentence_delete(sent); sent = NULL; break; } } fflush(stdout); sentence_delete(sent); sent = NULL; } if (parse_options_get_batch_mode(opts)) { /* print_time(opts, "Total"); */ fprintf(stderr, "%d error%s.\n", batch_errors, (batch_errors==1) ? "" : "s"); } /* Free stuff, so that mem-leak detectors don't commplain. */ parse_options_delete(panic_parse_opts); parse_options_delete(opts); dictionary_delete(dict); printf ("Bye.\n"); return 0; } link-grammar/link-grammar/command-line.c0000644000000000000000000003422112536650433015426 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* Copyright (c) 2008, 2009, 2011 Linas Vepstas */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include #include #include "utilities.h" // For MSWindows portability static struct { int verbosity; int timeout; int memory; int linkage_limit; int null_block; int islands_ok; int spell_guess; int short_length; int batch_mode; int panic_mode; int allow_null; int use_cluster_disjuncts; int use_fat_links; int use_sat_solver; int echo_on; int cost_model; float max_cost; int screen_width; int display_on; int display_constituents; int max_sentence_length; int display_postscript; int display_bad; int display_links; int display_walls; int display_union; int display_disjuncts; int display_senses; } local; typedef enum { Int, Bool, Float, } ParamType; typedef struct { const char *string; ParamType param_type; const char *description; void *ptr; } Switch; static Switch default_switches[] = { {"bad", Bool, "Display of bad linkages", &local.display_bad}, {"batch", Bool, "Batch mode", &local.batch_mode}, {"cluster", Bool, "Use clusters to loosen parsing", &local.use_cluster_disjuncts}, {"constituents", Int, "Generate constituent output", &local.display_constituents}, {"cost-model", Int, "Cost model used for ranking", &local.cost_model}, {"cost-max", Float, "Largest cost to be considered", &local.max_cost}, {"disjuncts", Bool, "Display of disjunct used", &local.display_disjuncts}, {"echo", Bool, "Echoing of input sentence", &local.echo_on}, {"graphics", Bool, "Graphical display of linkage", &local.display_on}, {"islands-ok", Bool, "Use of null-linked islands", &local.islands_ok}, {"limit", Int, "The maximum linkages processed", &local.linkage_limit}, {"links", Bool, "Display of complete link data", &local.display_links}, {"max-length", Int, "Maximum sentence length", &local.max_sentence_length}, {"memory", Int, "Max memory allowed", &local.memory}, {"null", Bool, "Allow null links", &local.allow_null}, {"null-block", Int, "Size of blocks with null count 1", &local.null_block}, {"panic", Bool, "Use of \"panic mode\"", &local.panic_mode}, {"postscript", Bool, "Generate postscript output", &local.display_postscript}, {"senses", Bool, "Display of word senses", &local.display_senses}, {"short", Int, "Max length of short links", &local.short_length}, #if defined HAVE_HUNSPELL || defined HAVE_ASPELL {"spell", Bool, "Use spell-guesser for unknown words", &local.spell_guess}, #endif /* HAVE_HUNSPELL */ {"timeout", Int, "Abort parsing after this many seconds", &local.timeout}, {"union", Bool, "Display of 'union' linkage", &local.display_union}, {"use-fat", Bool, "Use fat links when parsing", &local.use_fat_links}, #ifdef USE_SAT_SOLVER {"use-sat", Bool, "Use Boolean SAT-based parser", &local.use_sat_solver}, #endif /* USE_SAT_SOLVER */ {"verbosity", Int, "Level of detail in output", &local.verbosity}, {"walls", Bool, "Display wall words", &local.display_walls}, {"width", Int, "The width of the display", &local.screen_width}, {NULL, Bool, NULL, NULL} }; struct {const char * s; const char * str;} user_command[] = { {"variables", "List user-settable variables and their functions"}, {"help", "List the commands and what they do"}, {"file", "Read input from the specified filename"}, {NULL, NULL} }; /** * Gets rid of all the white space in the string s. Changes s */ static void clean_up_string(char * s) { char * x, * y; wchar_t p; size_t len, w; mbstate_t state; memset (&state, 0, sizeof(mbstate_t)); len = strlen(s); y = x = s; while(*x != '\0') { w = mbrtowc(&p, x, len, &state); if (0 == w) break; len -= w; if (!iswspace(p)) { while(w) { *y = *x; x++; y++; w--; } } else { x += w; } } *y = '\0'; } /** * Return TRUE if s points to a number: * optional + or - followed by 1 or more * digits. */ static int is_numerical_rhs(char *s) { wchar_t p; size_t len, w; mbstate_t state; memset (&state, 0, sizeof(mbstate_t)); len = strlen(s); if (*s=='+' || *s == '-') s++; if (*s == '\0') return FALSE; for (; *s != '\0'; s+=w) { w = mbrtowc(&p, s, len, &state); if (0 == w) break; len -= w; if(!iswdigit(p)) return FALSE; } return TRUE; } static inline int ival(Switch s) { return *((int *) s.ptr); } static inline void setival(Switch s, int val) { *((int *) s.ptr) = val; } static int x_issue_special_command(const char * line, Parse_Options opts, Dictionary dict) { char *s, myline[1000], *x, *y; int i, count, j, k; Switch * as = default_switches; strncpy(myline, line, sizeof(myline)); myline[sizeof(myline)-1] = '\0'; clean_up_string(myline); s = myline; j = k = -1; count = 0; /* Look for boolean flippers */ for (i=0; as[i].string != NULL; i++) { if ((Bool == as[i].param_type) && strncasecmp(s, as[i].string, strlen(s)) == 0) { count++; j = i; } } /* Look for abbreviations */ for (i=0; user_command[i].s != NULL; i++) { if (strncasecmp(s, user_command[i].s, strlen(s)) == 0) { count++; k = i; } } if (count > 1) { printf("Ambiguous command. Type \"!help\" or \"!variables\"\n"); return -1; } else if (count == 1) { /* flip boolean value */ if (j >= 0) { setival(as[j], (0 == ival(as[j]))); printf("%s turned %s.\n", as[j].description, (ival(as[j]))? "on" : "off"); return 0; } else { /* Found an abbreviated command, but it wasn't a boolean */ /* Replace the abbreviated command by the full one */ /* Basically, this just fixes !v and !h for use below. */ strcpy(s, user_command[k].s); } } if (strcmp(s, "variables") == 0) { printf(" Variable Controls Value\n"); printf(" -------- -------- -----\n"); for (i = 0; as[i].string != NULL; i++) { printf(" "); left_print_string(stdout, as[i].string, " "); left_print_string(stdout, as[i].description, " "); if (Float == as[i].param_type) { /* Float point print! */ printf("%5.2f", (double) (*((float *)as[i].ptr))); } else { printf("%5d", ival(as[i])); } if (Bool == as[i].param_type) { if (ival(as[i])) printf(" (On)"); else printf(" (Off)"); } printf("\n"); } printf("\n"); printf("Toggle a boolean variable as in \"!batch\"; "); printf("set a variable as in \"!width=100\".\n"); return 0; } if (strcmp(s, "help") == 0) { printf("Special commands always begin with \"!\". Command and variable names\n"); printf("can be abbreviated. Here is a list of the commands:\n\n"); for (i=0; user_command[i].s != NULL; i++) { printf(" !"); left_print_string(stdout, user_command[i].s, " "); left_print_string(stdout, user_command[i].str, " "); printf("\n"); } printf(" !! Print all the dictionary words matching .\n"); printf(" Also print the number of disjuncts of each.\n"); printf("\n"); printf(" ! Toggle the specified boolean variable.\n"); printf(" != Assign that value to that variable.\n"); return 0; } if (s[0] == '!') { dict_display_word_info(dict, s+1); dict_display_word_expr(dict, s+1); return 0; } /* Test here for an equation i.e. does the command line hold an equals sign? */ for (x=s; (*x != '=') && (*x != '\0') ; x++) ; if (*x == '=') { *x = '\0'; y = x+1; x = s; /* now x is the first word and y is the rest */ /* Figure out which command it is .. it'll be the j'th one */ j = -1; for (i=0; as[i].string != NULL; i++) { if (strncasecmp(x, as[i].string, strlen(x)) == 0) { j = i; count ++; } } if (j<0) { printf("There is no user variable called \"%s\".\n", x); return -1; } if (count > 1) { printf("Ambiguous variable. Type \"!help\" or \"!variables\"\n"); return -1; } if (as[j].param_type != Float) { int val = -1; if (is_numerical_rhs(y)) val = atoi(y); if ((0 == strcasecmp(y, "true")) || (0 == strcasecmp(y, "t"))) val = 1; if ((0 == strcasecmp(y, "false")) || (0 == strcasecmp(y, "f"))) val = 0; if (val < 0) { printf("Invalid value %s for variable %s Type \"!help\" or \"!variables\"\n", y, as[j].string); return -1; } setival(as[j], val); printf("%s set to %d\n", as[j].string, val); return 0; } else { float val = -1.0; val = atof(y); if (val < 0.0f) { printf("Invalid value %s for variable %s Type \"!help\" or \"!variables\"\n", y, as[j].string); return -1; } *((float *) as[j].ptr) = val; printf("%s set to %5.2f\n", as[j].string, val); return 0; } } /* Look for valid commands, but ones that needed an argument */ j = -1; count = 0; for (i = 0; as[i].string != NULL; i++) { if ((Bool != as[i].param_type) && strncasecmp(s, as[i].string, strlen(s)) == 0) { j = i; count++; } } if (0 < count) { printf("Variable \"%s\" requires a value. Try \"!help\".\n", as[j].string); return -1; } printf("I can't interpret \"%s\" as a command. Try \"!help\".\n", myline); return -1; } static void put_opts_in_local_vars(Parse_Options opts) { local.verbosity = parse_options_get_verbosity(opts); local.timeout = parse_options_get_max_parse_time(opts);; local.memory = parse_options_get_max_memory(opts);; local.linkage_limit = parse_options_get_linkage_limit(opts); local.null_block = parse_options_get_null_block(opts); local.islands_ok = parse_options_get_islands_ok(opts); local.spell_guess = parse_options_get_spell_guess(opts); local.short_length = parse_options_get_short_length(opts); local.cost_model = parse_options_get_cost_model_type(opts); local.max_cost = parse_options_get_disjunct_costf(opts); local.echo_on = parse_options_get_echo_on(opts); local.batch_mode = parse_options_get_batch_mode(opts); local.panic_mode = parse_options_get_panic_mode(opts); local.screen_width = parse_options_get_screen_width(opts); local.allow_null = parse_options_get_allow_null(opts); local.use_cluster_disjuncts = parse_options_get_use_cluster_disjuncts(opts); local.use_fat_links = parse_options_get_use_fat_links(opts); local.use_sat_solver = parse_options_get_use_sat_parser(opts); local.screen_width = parse_options_get_screen_width(opts); local.display_on = parse_options_get_display_on(opts); local.display_postscript = parse_options_get_display_postscript(opts); local.display_constituents = parse_options_get_display_constituents(opts); local.max_sentence_length = parse_options_get_max_sentence_length(opts); local.display_bad = parse_options_get_display_bad(opts); local.display_disjuncts = parse_options_get_display_disjuncts(opts); local.display_links = parse_options_get_display_links(opts); local.display_senses = parse_options_get_display_senses(opts); local.display_walls = parse_options_get_display_walls(opts); local.display_union = parse_options_get_display_union(opts); } static void put_local_vars_in_opts(Parse_Options opts) { parse_options_set_verbosity(opts, local.verbosity); parse_options_set_max_parse_time(opts, local.timeout); parse_options_set_max_memory(opts, local.memory); parse_options_set_linkage_limit(opts, local.linkage_limit); parse_options_set_null_block(opts, local.null_block); parse_options_set_islands_ok(opts, local.islands_ok); parse_options_set_spell_guess(opts, local.spell_guess); parse_options_set_short_length(opts, local.short_length); parse_options_set_echo_on(opts, local.echo_on); parse_options_set_cost_model_type(opts, local.cost_model); parse_options_set_disjunct_costf(opts, local.max_cost); parse_options_set_batch_mode(opts, local.batch_mode); parse_options_set_panic_mode(opts, local.panic_mode); parse_options_set_screen_width(opts, local.screen_width); parse_options_set_allow_null(opts, local.allow_null); parse_options_set_use_cluster_disjuncts(opts, local.use_cluster_disjuncts); parse_options_set_use_fat_links(opts, local.use_fat_links); #ifdef USE_SAT_SOLVER parse_options_set_use_sat_parser(opts, local.use_sat_solver); #endif parse_options_set_screen_width(opts, local.screen_width); parse_options_set_display_on(opts, local.display_on); parse_options_set_display_postscript(opts, local.display_postscript); parse_options_set_display_constituents(opts, local.display_constituents); parse_options_set_max_sentence_length(opts, local.max_sentence_length); parse_options_set_display_bad(opts, local.display_bad); parse_options_set_display_disjuncts(opts, local.display_disjuncts); parse_options_set_display_links(opts, local.display_links); parse_options_set_display_senses(opts, local.display_senses); parse_options_set_display_walls(opts, local.display_walls); parse_options_set_display_union(opts, local.display_union); } int issue_special_command(const char * line, Parse_Options opts, Dictionary dict) { int rc; put_opts_in_local_vars(opts); rc = x_issue_special_command(line, opts, dict); put_local_vars_in_opts(opts); return rc; } link-grammar/link-grammar/constituents.c0000644000000000000000000014756612536650433015646 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include #include #include "error.h" #include "constituents.h" #define MAXCONSTITUENTS 8192 #define MAXSUBL 16 #define OPEN_BRACKET '[' #define CLOSE_BRACKET ']' typedef enum {OPEN_TOK, CLOSE_TOK, WORD_TOK} CType; typedef enum {NONE, STYPE, PTYPE, QTYPE, QDTYPE} WType; typedef struct { int left; int right; const char * type; char domain_type; const char * start_link; int start_num; int subl; int canon; int valid; #ifdef AUX_CODE_IS_DEAD /* The only code that actually sets aux to a non-zero value is code * followed by code that zets it to zero. -- its dead code, and so * aux is never actually used. Comment this code out. */ int aux; /* 0: it's an ordinary VP (or other type); * 1: it's an AUX, don't print it; * 2: it's an AUX, and print it */ #endif /* AUX_CODE_IS_DEAD */ } constituent_t; /* XXX it seems like the old code worked fine with MAX_ELTS=10 */ #define MAX_ELTS 100 typedef struct { int num; int e[MAX_ELTS]; int valid; } andlist_t; /* * Context used to store assorted intermediate data * when the constituent string is being generated. */ #define MAX_ANDS 1024 typedef struct { String_set * phrase_ss; WType wordtype[MAX_SENTENCE]; int word_used[MAXSUBL][MAX_SENTENCE]; int templist[MAX_ELTS]; constituent_t constituent[MAXCONSTITUENTS]; andlist_t andlist[MAX_ANDS]; } con_context_t; /* ================================================================ */ static inline int uppercompare(const char * s, const char * t) { return (FALSE == utf8_upper_match(s,t)); } /** * If a constituent c has a comma at either end, we exclude the * comma. (We continue to shift the boundary until we get to * something inside the current sublinkage) */ static void adjust_for_left_comma(con_context_t * ctxt, Linkage linkage, int c) { int w; w = ctxt->constituent[c].left; if (strcmp(linkage->word[w], ",") == 0) { w++; while (1) { if (ctxt->word_used[linkage->current][w] == 1) break; w++; } } ctxt->constituent[c].left = w; } static void adjust_for_right_comma(con_context_t *ctxt, Linkage linkage, int c) { int w; w = ctxt->constituent[c].right; if ((strcmp(linkage->word[w], ",") == 0) || (strcmp(linkage->word[w], "RIGHT-WALL") == 0)) { w--; while (1) { if (ctxt->word_used[linkage->current][w]==1) break; w--; } } ctxt->constituent[c].right = w; } static void print_constituent(con_context_t *ctxt, Linkage linkage, int c) { int w; if (verbosity < 2) return; printf(" c %2d %4s [%c] (%2d-%2d): ", c, ctxt->constituent[c].type, ctxt->constituent[c].domain_type, ctxt->constituent[c].left, ctxt->constituent[c].right); for (w = ctxt->constituent[c].left; w <= ctxt->constituent[c].right; w++) { printf("%s ", linkage->word[w]); /**PV**/ } printf("\n"); } /****************************************************** * These functions do the bulk of the actual * constituent-generating; they're called once for each * sublinkage *********************************************************/ /** * This function looks for constituents of type ctype1. Say it finds * one, call it c1. It searches for the next larger constituent of * type ctype2, call it c2. It then generates a new constituent of * ctype3, containing all the words in c2 but not c1. */ static int gen_comp(con_context_t *ctxt, Linkage linkage, int numcon_total, int numcon_subl, const char * ctype1, const char * ctype2, const char * ctype3, int x) { int w, w2, w3, c, c1, c2, done; c = numcon_total + numcon_subl; for (c1=numcon_total; c1constituent[c1].start_link)==0)) continue; /* If ctype1 is X, and domain_type is t, it's an infinitive - skip it */ if ((x==2) && (ctxt->constituent[c1].domain_type=='t')) continue; /* If it's domain-type z, it's a subject-relative clause; the VP doesn't need an NP */ if (ctxt->constituent[c1].domain_type=='z') continue; /* If ctype1 is X or VP, and it's not started by an S, don't generate an NP (Neither of the two previous checks are necessary now, right?) */ if ((x==1 || x==2) && (((post_process_match("S", ctxt->constituent[c1].start_link) == 0) && (post_process_match("SX", ctxt->constituent[c1].start_link) == 0) && (post_process_match("SF", ctxt->constituent[c1].start_link) == 0)) || (post_process_match("S##w", ctxt->constituent[c1].start_link) != 0))) continue; /* If it's an SBAR (relative clause case), it has to be a relative clause */ if ((x==3) && ((post_process_match("Rn", ctxt->constituent[c1].start_link) == 0) && (post_process_match("R*", ctxt->constituent[c1].start_link) == 0) && (post_process_match("MX#r", ctxt->constituent[c1].start_link) == 0) && (post_process_match("Mr", ctxt->constituent[c1].start_link) == 0) && (post_process_match("MX#d", ctxt->constituent[c1].start_link) == 0))) continue; /* If ctype1 is SBAR (clause opener case), it has to be an f domain */ if ((x==5) && (ctxt->constituent[c1].domain_type!='f')) continue; /* If ctype1 is SBAR (pp opener case), it has to be a g domain */ if ((x==6) && (ctxt->constituent[c1].domain_type!='g')) continue; /* If ctype1 is NP (paraphrase case), it has to be started by an SI */ if ((x==7) && (post_process_match("SI", ctxt->constituent[c1].start_link)==0)) continue; /* If ctype1 is VP (participle modifier case), it has to be started by an Mv or Mg */ if ((x==8) && (post_process_match("M", ctxt->constituent[c1].start_link)==0)) continue; /* If ctype1 is VP (participle opener case), it has to be started by a COp */ if ((x==9) && (post_process_match("COp", ctxt->constituent[c1].start_link)==0)) continue; /* Now start at the bounds of c1, and work outwards until you find a larger constituent of type ctype2 */ if (!(strcmp(ctxt->constituent[c1].type, ctype1)==0)) continue; if (verbosity >= 2) printf("Generating complement constituent for c %d of type %s\n", c1, ctype1); done = 0; for (w2=ctxt->constituent[c1].left; (done==0) && (w2>=0); w2--) { for (w3=ctxt->constituent[c1].right; w3num_words; w3++) { for (c2=numcon_total; (done==0) && (c2 < numcon_total + numcon_subl); c2++) { if (!((ctxt->constituent[c2].left==w2) && (ctxt->constituent[c2].right==w3)) || (c2==c1)) continue; if (!(strcmp(ctxt->constituent[c2].type, ctype2)==0)) continue; /* if the new constituent (c) is to the left of c1, its right edge should be adjacent to the left edge of c1 - or as close as possible without going outside the current sublinkage. (Or substituting right and left as necessary.) */ if ((x==5) || (x==6) || (x==9)) { /* This is the case where c is to the RIGHT of c1 */ w = ctxt->constituent[c1].right+1; while(1) { if (ctxt->word_used[linkage->current][w]==1) break; w++; } if (w > ctxt->constituent[c2].right) { done=1; continue; } ctxt->constituent[c].left = w; ctxt->constituent[c].right = ctxt->constituent[c2].right; } else { w = ctxt->constituent[c1].left-1; while(1) { if (ctxt->word_used[linkage->current][w] == 1) break; w--; } if (w < ctxt->constituent[c2].left) { done=1; continue; } ctxt->constituent[c].right = w; ctxt->constituent[c].left = ctxt->constituent[c2].left; } adjust_for_left_comma(ctxt, linkage, c1); adjust_for_right_comma(ctxt, linkage, c1); ctxt->constituent[c].type = string_set_add(ctype3, ctxt->phrase_ss); ctxt->constituent[c].domain_type = 'x'; ctxt->constituent[c].start_link = string_set_add("XX", ctxt->phrase_ss); ctxt->constituent[c].start_num = ctxt->constituent[c1].start_num; /* bogus */ if (verbosity >= 2) { printf("Larger c found: c %d (%s); ", c2, ctype2); printf("Adding constituent:\n"); print_constituent(ctxt, linkage, c); } c++; if (MAXCONSTITUENTS <= c) { err_ctxt ec; ec.sent = linkage->sent; err_msg(&ec, Error, "Error: Too many constituents (a).\n"); c--; } done = 1; } } } if (verbosity >= 2) { if (done == 0) printf("No constituent added, because no larger %s " \ " was found\n", ctype2); } } numcon_subl = c - numcon_total; return numcon_subl; } /** * Look for a constituent started by an MVs or MVg. * Find any VP's or ADJP's that contain it (without going * beyond a larger S or NP). Adjust them so that * they end right before the m domain starts. */ static void adjust_subordinate_clauses(con_context_t *ctxt, Linkage linkage, int numcon_total, int numcon_subl) { int c, w, c2, w2, done; for (c=numcon_total; cconstituent[c].start_link) == 1) || (post_process_match("MVg", ctxt->constituent[c].start_link)==1)) { done=0; for (w2=ctxt->constituent[c].left-1; (done==0) && w2>=0; w2--) { for (c2=numcon_total; c2constituent[c2].left==w2) && (ctxt->constituent[c2].right >= ctxt->constituent[c].right))) continue; if ((strcmp(ctxt->constituent[c2].type, "S") == 0) || (strcmp(ctxt->constituent[c2].type, "NP") == 0)) { done=1; break; } if ((ctxt->constituent[c2].domain_type == 'v') || (ctxt->constituent[c2].domain_type == 'a')) { w = ctxt->constituent[c].left-1; while (1) { if (ctxt->word_used[linkage->current][w] == 1) break; w--; } ctxt->constituent[c2].right = w; if (verbosity >= 2) printf("Adjusting constituent %d:\n", c2); print_constituent(ctxt, linkage, c2); } } } if (strcmp(linkage->word[ctxt->constituent[c].left], ",") == 0) ctxt->constituent[c].left++; } } } /****************************************************** * These functions are called once, after constituents * for each sublinkage have been generated, to merge them * together and fix up some other things. * ********************************************************/ /** * Here we're looking for the next andlist element to add on * to a conjectural andlist, stored in the array templist. * We go through the constituents, starting at "start". */ static int find_next_element(con_context_t *ctxt, Linkage linkage, int start, int numcon_total, int num_elements, int num_lists) { int c, a, ok, c2, c3, addedone=0, n; assert(num_elements <= MAX_ELTS, "Constutent element array overflow!\n"); n = num_lists; for (c=start+1; cconstituent[c]; if (cc->valid == 0) continue; if (strcmp(ctxt->constituent[ctxt->templist[0]].type, cc->type)!=0) continue; ok = 1; /* We're considering adding constituent c to the andlist. If c is in the same sublinkage as one of the other andlist elements, don't add it. If it overlaps with one of the other constituents, don't add it. If there's a constituent identical to c that occurs in a sublinkage in which one of the other elements occurs, don't add it. */ for (a=0; atemplist[a]; constituent_t *ct = &ctxt->constituent[t]; if (cc->subl == ct->subl) ok=0; if (((cc->left < ct->left) && (cc->right > ct->left)) || ((cc->right > ct->right) && (cc->left < ct->right)) || ((cc->right > ct->right) && (cc->left < ct->right)) || ((cc->left > ct->left) && (cc->right < ct->right))) ok=0; for (c2=0; c2constituent[c2].canon != cc->canon) continue; for (c3=0; c3constituent[c3].canon == ct->canon) && (ctxt->constituent[c3].subl == ctxt->constituent[c2].subl)) ok=0; } } } if (ok == 0) continue; ctxt->templist[num_elements] = c; addedone = 1; num_lists = find_next_element(ctxt, linkage, c, numcon_total, num_elements+1, num_lists); /* Test for overlow of the and-list. * With the current parser, the following will cause an * overflow: * * I have not seen the grysbok, or the suni, or the dibitag, or * the lechwi, or the aoul, or the gerenuk, or the blaauwbok, * or the chevrotain, or lots of others, but who in the world * could guess what they were or what they looked like, judging * only from the names? */ if (MAX_ANDS <= num_lists) { err_ctxt ec; ec.sent = linkage->sent; err_msg(&ec, Error, "Error: Constituent overflowed andlist!\n"); return MAX_ANDS; } } if (addedone == 0 && num_elements > 1) { for (a=0; aandlist[num_lists].e[a] = ctxt->templist[a]; ctxt->andlist[num_lists].num = num_elements; } num_lists++; } return num_lists; } static int merge_constituents(con_context_t *ctxt, Linkage linkage, int numcon_total) { int c1, c2=0, c3, ok, a, n, a2, n2, match, listmatch, a3; int num_lists, num_elements; int leftend, rightend; for (c1=0; c1constituent[c1].valid = 1; /* Find and invalidate any constituents with negative length */ if(ctxt->constituent[c1].right < ctxt->constituent[c1].left) { if(verbosity >= 2) { err_ctxt ec; ec.sent = linkage->sent; err_msg(&ec, Warn, "Warning: Constituent %d has negative length. Deleting it.\n", c1); } ctxt->constituent[c1].valid = 0; } ctxt->constituent[c1].canon = c1; } /* First go through and give each constituent a canonical number (the index number of the lowest-numbered constituent identical to it) */ for (c1 = 0; c1 < numcon_total; c1++) { if (ctxt->constituent[c1].canon != c1) continue; for (c2 = c1 + 1; c2 < numcon_total; c2++) { if ((ctxt->constituent[c1].left == ctxt->constituent[c2].left) && (ctxt->constituent[c1].right == ctxt->constituent[c2].right) && (strcmp(ctxt->constituent[c1].type, ctxt->constituent[c2].type) == 0)) { ctxt->constituent[c2].canon = c1; } } } /* If constituents A and B in different sublinkages X and Y * have one endpoint in common, but A is larger at the other end, * and B has no duplicate in X, then declare B invalid. (Example: * " [A [B We saw the cat B] and the dog A] " */ for (c1 = 0; c1 < numcon_total; c1++) { if (ctxt->constituent[c1].valid == 0) continue; for (c2 = 0; c2 < numcon_total; c2++) { if (ctxt->constituent[c2].subl == ctxt->constituent[c1].subl) continue; ok = 1; /* Does c2 have a duplicate in the sublinkage containing c1? If so, bag it */ for (c3 = 0; c3 < numcon_total; c3++) { if ((ctxt->constituent[c2].canon == ctxt->constituent[c3].canon) && (ctxt->constituent[c3].subl == ctxt->constituent[c1].subl)) ok = 0; } for (c3 = 0; c3 < numcon_total; c3++) { if ((ctxt->constituent[c1].canon == ctxt->constituent[c3].canon) && (ctxt->constituent[c3].subl == ctxt->constituent[c2].subl)) ok = 0; } if (ok == 0) continue; if ((ctxt->constituent[c1].left == ctxt->constituent[c2].left) && (ctxt->constituent[c1].right > ctxt->constituent[c2].right) && (strcmp(ctxt->constituent[c1].type, ctxt->constituent[c2].type) == 0)) { ctxt->constituent[c2].valid = 0; } if ((ctxt->constituent[c1].left < ctxt->constituent[c2].left) && (ctxt->constituent[c1].right == ctxt->constituent[c2].right) && (strcmp(ctxt->constituent[c1].type, ctxt->constituent[c2].type) == 0)) { ctxt->constituent[c2].valid = 0; } } } /* Now go through and find duplicates; if a pair is found, * mark one as invalid. (It doesn't matter if they're in the * same sublinkage or not) */ for (c1 = 0; c1 < numcon_total; c1++) { if (ctxt->constituent[c1].valid == 0) continue; for (c2 = c1 + 1; c2 < numcon_total; c2++) { if (ctxt->constituent[c2].canon == ctxt->constituent[c1].canon) ctxt->constituent[c2].valid = 0; } } /* Now we generate the and-lists. An and-list is a set of mutually * exclusive constituents. Each constituent in the list may not * be present in the same sublinkage as any of the others. */ num_lists = 0; for (c1 = 0; c1 < numcon_total; c1++) { if (ctxt->constituent[c1].valid == 0) continue; num_elements = 1; ctxt->templist[0] = c1; num_lists = find_next_element(ctxt, linkage, c1, numcon_total, num_elements, num_lists); /* If we're overflowing, then punt */ if (MAX_ANDS <= num_lists) break; } if (verbosity >= 2) { printf("And-lists:\n"); for (n=0; nandlist[n].num; a++) { printf("%d ", ctxt->andlist[n].e[a]); } printf("\n"); } } /* Now we prune out any andlists that are subsumed by other * andlists--e.g. if andlist X contains constituents A and B, * and Y contains A B and C, we throw out X */ for (n = 0; n < num_lists; n++) { ctxt->andlist[n].valid = 1; for (n2 = 0; n2 < num_lists; n2++) { if (n2 == n) continue; if (ctxt->andlist[n2].num < ctxt->andlist[n].num) continue; listmatch = 1; for (a = 0; a < ctxt->andlist[n].num; a++) { match = 0; for (a2 = 0; a2 < ctxt->andlist[n2].num; a2++) { if (ctxt->andlist[n2].e[a2] == ctxt->andlist[n].e[a]) match = 1; } if (match == 0) listmatch = 0; /* At least one element was not matched by n2 */ } if (listmatch == 1) ctxt->andlist[n].valid = 0; } } /* If an element of an andlist contains an element of another * andlist, it must contain the entire andlist. */ for (n = 0; n < num_lists; n++) { if (ctxt->andlist[n].valid == 0) continue; for (a = 0; (a < ctxt->andlist[n].num) && (ctxt->andlist[n].valid); a++) { for (n2 = 0; (n2 < num_lists) && (ctxt->andlist[n].valid); n2++) { if ((n2 == n) || (ctxt->andlist[n2].valid == 0)) continue; for (a2 = 0; (a2 < ctxt->andlist[n2].num) && (ctxt->andlist[n].valid); a2++) { c1 = ctxt->andlist[n].e[a]; c2 = ctxt->andlist[n2].e[a2]; if (c1 == c2) continue; if (!((ctxt->constituent[c2].left <= ctxt->constituent[c1].left) && (ctxt->constituent[c2].right >= ctxt->constituent[c1].right))) continue; if (verbosity >= 2) printf("Found that c%d in list %d is bigger " \ "than c%d in list %d\n", c2, n2, c1, n); ok = 1; /* An element of n2 contains an element of n. * Now, we check to see if that element of n2 * contains ALL the elements of n. * If not, n is invalid. */ for (a3 = 0; a3 < ctxt->andlist[n].num; a3++) { c3 = ctxt->andlist[n].e[a3]; if ((ctxt->constituent[c2].left>ctxt->constituent[c3].left) || (ctxt->constituent[c2].rightconstituent[c3].right)) ok = 0; } if (ok != 0) continue; ctxt->andlist[n].valid = 0; if (verbosity >= 2) { printf("Eliminating andlist, " \ "n=%d, a=%d, n2=%d, a2=%d: ", n, a, n2, a2); for (a3 = 0; a3 < ctxt->andlist[n].num; a3++) { printf("%d ", ctxt->andlist[n].e[a3]); } printf("\n"); } } } } } if (verbosity >= 2) { printf("And-lists after pruning:\n"); for (n=0; nandlist[n].valid==0) continue; printf(" %d: ", n); for (a=0; aandlist[n].num; a++) { printf("%d ", ctxt->andlist[n].e[a]); } printf("\n"); } } c1 = numcon_total; for (n = 0; n < num_lists; n++) { if (ctxt->andlist[n].valid == 0) continue; leftend = 256; rightend = -1; for (a = 0; a < ctxt->andlist[n].num; a++) { c2 = ctxt->andlist[n].e[a]; if (ctxt->constituent[c2].left < leftend) { leftend = ctxt->constituent[c2].left; } if (ctxt->constituent[c2].right > rightend) { rightend=ctxt->constituent[c2].right; } } ctxt->constituent[c1].left = leftend; ctxt->constituent[c1].right = rightend; ctxt->constituent[c1].type = ctxt->constituent[c2].type; ctxt->constituent[c1].domain_type = 'x'; ctxt->constituent[c1].valid = 1; ctxt->constituent[c1].start_link = ctxt->constituent[c2].start_link; /* bogus */ ctxt->constituent[c1].start_num = ctxt->constituent[c2].start_num; /* bogus */ #ifdef AUX_CODE_IS_DEAD /* See comments above */ /* If a constituent within the andlist is an aux (aux==1), * set aux for the whole-list constituent to 2, also set * aux for the smaller constituent to 2, meaning they'll both * be printed (as an "X"). (If aux is 2 for the smaller * constituent going in, the same thing should be done, * though I doubt this ever happens.) */ for (a = 0; a < ctxt->andlist[n].num; a++) { c2 = ctxt->andlist[n].e[a]; if ((ctxt->constituent[c2].aux == 1) || (ctxt->constituent[c2].aux == 2)) { ctxt->constituent[c1].aux = 2; ctxt->constituent[c2].aux = 2; } } #endif /* AUX_CODE_IS_DEAD */ if (verbosity >= 2) printf("Adding constituent:\n"); print_constituent(ctxt, linkage, c1); c1++; } numcon_total = c1; return numcon_total; } /** * Go through all the words. If a word is on the right end of * an S (or SF or SX), wordtype[w]=STYPE. If it's also on the left end of a * Pg*b, I, PP, or Pv, wordtype[w]=PTYPE. If it's a question-word * used in an indirect question, wordtype[w]=QTYPE. If it's a * question-word determiner, wordtype[w]=QDTYPE. Else wordtype[w]=NONE. * (This function is called once for each sublinkage.) */ static void generate_misc_word_info(con_context_t * ctxt, Linkage linkage) { int l1, l2, w1, w2; const char * label1, * label2; for (w1=0; w1num_words; w1++) ctxt->wordtype[w1]=NONE; for (l1=0; l1wordtype[w1] = STYPE; for (l2=0; l2wordtype[w1] = PTYPE; } } } if (post_process_match("QI#d", label1)==1) { ctxt->wordtype[w1] = QTYPE; for (l2=0; l2wordtype[w1] = QDTYPE; } } } if (post_process_match("Mr", label1)==1) ctxt->wordtype[w1] = QDTYPE; if (post_process_match("MX#d", label1)==1) ctxt->wordtype[w1] = QDTYPE; } } static int last_minute_fixes(con_context_t *ctxt, Linkage linkage, int numcon_total) { int c, c2, global_leftend_found, adjustment_made, global_rightend_found, lastword, newcon_total = 0; Sentence sent; sent = linkage_get_sentence(linkage); for (c = 0; c < numcon_total; c++) { /* In a paraphrase construction ("John ran, he said"), the paraphrasing clause doesn't get an S. (This is true in Treebank II, not Treebank I) */ if (uppercompare(ctxt->constituent[c].start_link, "CP") == 0) { ctxt->constituent[c].valid = 0; } /* If it's a possessive with an "'s", the NP on the left should be extended to include the "'s". */ if ((uppercompare(ctxt->constituent[c].start_link, "YS") == 0) || (uppercompare(ctxt->constituent[c].start_link, "YP") == 0)) { ctxt->constituent[c].right++; } /* If a constituent has starting link MVpn, it's a time expression like "last week"; label it as a noun phrase (incorrectly) */ if (strcmp(ctxt->constituent[c].start_link, "MVpn") == 0) { ctxt->constituent[c].type = string_set_add("NP", ctxt->phrase_ss); } if (strcmp(ctxt->constituent[c].start_link, "COn") == 0) { ctxt->constituent[c].type = string_set_add("NP", ctxt->phrase_ss); } if (strcmp(ctxt->constituent[c].start_link, "Mpn") == 0) { ctxt->constituent[c].type = string_set_add("NP", ctxt->phrase_ss); } /* If the constituent is an S started by "but" or "and" at the beginning of the sentence, it should be ignored. */ if ((strcmp(ctxt->constituent[c].start_link, "Wdc") == 0) && (ctxt->constituent[c].left == 2)) { ctxt->constituent[c].valid = 0; } /* For prenominal adjectives, an ADJP constituent is assigned if it's a hyphenated (Ah) or comparative (Am) adjective; otherwise no ADJP is assigned, unless the phrase is more than one word long (e.g. "very big"). The same with certain types of adverbs. */ /* That was for Treebank I. For Treebank II, the rule only seems to apply to prenominal adjectives (of all kinds). However, it also applies to number expressions ("QP"). */ if ((post_process_match("A", ctxt->constituent[c].start_link) == 1) || (ctxt->constituent[c].domain_type == 'd') || (ctxt->constituent[c].domain_type == 'h')) { if (ctxt->constituent[c].right-ctxt->constituent[c].left == 0) { ctxt->constituent[c].valid = 0; } } if ((ctxt->constituent[c].domain_type == 'h') && (strcmp(linkage->word[ctxt->constituent[c].left - 1], "$") == 0)) { ctxt->constituent[c].left--; } #ifdef AUX_CODE_IS_DEAD /* See comments at top */ /* If a constituent has type VP and its aux value is 2, this means it's an aux that should be printed; change its type to "X". If its aux value is 1, set "valid" to 0. (This applies to Treebank I only) */ if (ctxt->constituent[c].aux == 2) { ctxt->constituent[c].type = string_set_add("X", ctxt->phrase_ss); } if (ctxt->constituent[c].aux == 1) { ctxt->constituent[c].valid = 0; } #endif /* AUX_CODE_IS_DEAD */ } numcon_total = numcon_total + newcon_total; /* If there's a global S constituent that includes everything except a final period or question mark, extend it by one word */ for (c = 0; c < numcon_total; c++) { if ((ctxt->constituent[c].right == linkage->num_words -3) && (ctxt->constituent[c].left == 1) && (strcmp(ctxt->constituent[c].type, "S") == 0) && (strcmp(sent->word[linkage->num_words -2].string, ".") == 0)) ctxt->constituent[c].right++; } /* If there's no S boundary at the very left end of the sentence, or the very right end, create a new S spanning the entire sentence */ lastword = linkage->num_words - 2; global_leftend_found = 0; global_rightend_found = 0; for (c = 0; c < numcon_total; c++) { if ((ctxt->constituent[c].left == 1) && (strcmp(ctxt->constituent[c].type, "S") == 0) && (ctxt->constituent[c].valid == 1)) { global_leftend_found = 1; } } for (c = 0; c < numcon_total; c++) { if ((ctxt->constituent[c].right >= lastword) && (strcmp(ctxt->constituent[c].type, "S") == 0) && (ctxt->constituent[c].valid == 1)) { global_rightend_found = 1; } } if ((global_leftend_found == 0) || (global_rightend_found == 0)) { c = numcon_total; ctxt->constituent[c].left = 1; ctxt->constituent[c].right = linkage->num_words-1; ctxt->constituent[c].type = string_set_add("S", ctxt->phrase_ss); ctxt->constituent[c].valid = 1; ctxt->constituent[c].domain_type = 'x'; numcon_total++; if (verbosity >= 2) printf("Adding global sentence constituent:\n"); print_constituent(ctxt, linkage, c); } /* Check once more to see if constituents are nested (checking BETWEEN sublinkages this time) */ while (1) { adjustment_made=0; for (c = 0; c < numcon_total; c++) { if(ctxt->constituent[c].valid == 0) continue; for (c2 = 0; c2 < numcon_total; c2++) { if(ctxt->constituent[c2].valid == 0) continue; if ((ctxt->constituent[c].left < ctxt->constituent[c2].left) && (ctxt->constituent[c].right < ctxt->constituent[c2].right) && (ctxt->constituent[c].right >= ctxt->constituent[c2].left)) { if (verbosity >= 2) { err_ctxt ec; ec.sent = linkage->sent; err_msg(&ec, Warn, "Warning: the constituents aren't nested! " "Adjusting them. (%d, %d)\n", c, c2); } ctxt->constituent[c].left = ctxt->constituent[c2].left; } } } if (adjustment_made == 0) break; } return numcon_total; } /** * This function generates a table, word_used[i][w], showing * whether each word w is used in each sublinkage i; if so, * the value for that cell of the table is 1. */ static void count_words_used(con_context_t *ctxt, Linkage linkage) { int i, w, link, num_subl; num_subl = linkage->num_sublinkages; if(linkage->unionized == 1 && num_subl > 1) num_subl--; if (verbosity >= 2) printf("Number of sublinkages = %d\n", num_subl); for (i=0; inum_words; w++) ctxt->word_used[i][w] = 0; linkage->current = i; for (link = 0; link < linkage_get_num_links(linkage); link++) { ctxt->word_used[i][linkage_get_link_lword(linkage, link)] = 1; ctxt->word_used[i][linkage_get_link_rword(linkage, link)] = 1; } if (verbosity >= 2) { printf("Sublinkage %d: ", i); for (w = 0; w < linkage->num_words; w++) { if (ctxt->word_used[i][w] == 0) printf("0 "); if (ctxt->word_used[i][w] == 1) printf("1 "); } printf("\n"); } } } static int add_constituent(con_context_t *ctxt, int c, Linkage linkage, Domain domain, int l, int r, const char * name) { int nwords = linkage->num_words-2; c++; /* Avoid running off end, to walls. */ if (l < 1) l=1; if (r > nwords) r = nwords; if (l > nwords) l = nwords; assert(l <= r, "negative constituent length!" ); ctxt->constituent[c].left = l; ctxt->constituent[c].right = r; ctxt->constituent[c].domain_type = domain.type; ctxt->constituent[c].start_link = linkage_get_link_label(linkage, domain.start_link); ctxt->constituent[c].start_num = domain.start_link; ctxt->constituent[c].type = string_set_add(name, ctxt->phrase_ss); return c; } static const char * cons_of_domain(Linkage linkage, char domain_type) { switch (domain_type) { case 'a': return "ADJP"; case 'b': return "SBAR"; case 'c': return "VP"; case 'd': return "QP"; case 'e': return "ADVP"; case 'f': return "SBAR"; case 'g': return "PP"; case 'h': return "QP"; case 'i': return "ADVP"; case 'k': return "PRT"; case 'n': return "NP"; case 'p': return "PP"; case 'q': return "SINV"; case 's': return "S"; case 't': return "VP"; case 'u': return "ADJP"; case 'v': return "VP"; case 'y': return "NP"; case 'z': return "VP"; default: { err_ctxt ec; ec.sent = linkage->sent; err_msg(&ec, Error, "Error: Illegal domain: %c\n", domain_type); return ""; } } } static int read_constituents_from_domains(con_context_t *ctxt, Linkage linkage, int numcon_total, int s) { int d, c, leftlimit, l, leftmost, rightmost, w, c2, numcon_subl = 0, w2; List_o_links * dlink; int rootright, rootleft, adjustment_made; Sublinkage * subl; const char * name; Domain domain; subl = &linkage->sublinkage[s]; for (d = 0, c = numcon_total; d < subl->pp_data.N_domains; d++, c++) { domain = subl->pp_data.domain_array[d]; rootright = linkage_get_link_rword(linkage, domain.start_link); rootleft = linkage_get_link_lword(linkage, domain.start_link); if ((domain.type=='c') || (domain.type=='d') || (domain.type=='e') || (domain.type=='f') || (domain.type=='g') || (domain.type=='u') || (domain.type=='y')) { leftlimit = 0; leftmost = linkage_get_link_lword(linkage, domain.start_link); rightmost = linkage_get_link_lword(linkage, domain.start_link); } else { leftlimit = linkage_get_link_lword(linkage, domain.start_link) + 1; leftmost = linkage_get_link_rword(linkage, domain.start_link); rightmost = linkage_get_link_rword(linkage, domain.start_link); } /* Start by assigning both left and right limits to the * right word of the start link. This will always be contained * in the constituent. This will also handle the case * where the domain contains no links. */ for (dlink = domain.lol; dlink != NULL; dlink = dlink->next) { l = dlink->link; if ((linkage_get_link_lword(linkage, l) < leftmost) && (linkage_get_link_lword(linkage, l) >= leftlimit)) { leftmost = linkage_get_link_lword(linkage, l); } if (linkage_get_link_rword(linkage, l) > rightmost) { rightmost = linkage_get_link_rword(linkage, l); } } c--; c = add_constituent(ctxt, c, linkage, domain, leftmost, rightmost, cons_of_domain(linkage, domain.type)); if (domain.type == 'z') { c = add_constituent(ctxt, c, linkage, domain, leftmost, rightmost, "S"); } if (domain.type=='c') { c = add_constituent(ctxt, c, linkage, domain, leftmost, rightmost, "S"); } if ((post_process_match("Ce*", ctxt->constituent[c].start_link)==1) || (post_process_match("Rn", ctxt->constituent[c].start_link)==1)) { c = add_constituent(ctxt, c, linkage, domain, leftmost, rightmost, "SBAR"); } if ((post_process_match("R*", ctxt->constituent[c].start_link)==1) || (post_process_match("MX#r", ctxt->constituent[c].start_link)==1)) { w = leftmost; if (strcmp(linkage->word[w], ",") == 0) w++; c = add_constituent(ctxt, c, linkage, domain, w, w, "WHNP"); } if (post_process_match("Mj", ctxt->constituent[c].start_link) == 1) { w = leftmost; if (strcmp(linkage->word[w], ",") == 0) w++; c = add_constituent(ctxt, c, linkage, domain, w, w+1, "WHPP"); c = add_constituent(ctxt, c, linkage, domain, w+1, w+1, "WHNP"); } if ((post_process_match("Ss#d", ctxt->constituent[c].start_link)==1) || (post_process_match("B#d", ctxt->constituent[c].start_link)==1)) { c = add_constituent(ctxt, c, linkage, domain, rootleft, rootleft, "WHNP"); c = add_constituent(ctxt, c, linkage, domain, rootleft, ctxt->constituent[c-1].right, "SBAR"); } if (post_process_match("CP", ctxt->constituent[c].start_link)==1) { if (strcmp(linkage->word[leftmost], ",") == 0) ctxt->constituent[c].left++; c = add_constituent(ctxt, c, linkage, domain, 1, linkage->num_words-1, "S"); } if ((post_process_match("MVs", ctxt->constituent[c].start_link)==1) || (domain.type=='f')) { w = ctxt->constituent[c].left; if (strcmp(linkage->word[w], ",") == 0) w++; if (strcmp(linkage->word[w], "when") == 0) { c = add_constituent(ctxt, c, linkage, domain, w, w, "WHADVP"); } } if (domain.type=='t') { c = add_constituent(ctxt, c, linkage, domain, leftmost, rightmost, "S"); } if ((post_process_match("QI", ctxt->constituent[c].start_link) == 1) || (post_process_match("Mr", ctxt->constituent[c].start_link) == 1) || (post_process_match("MX#d", ctxt->constituent[c].start_link) == 1)) { w = leftmost; if (strcmp(linkage->word[w], ",") == 0) w++; if (ctxt->wordtype[w] == NONE) name = "WHADVP"; else if (ctxt->wordtype[w] == QTYPE) name = "WHNP"; else if (ctxt->wordtype[w] == QDTYPE) name = "WHNP"; else assert(0, "Unexpected word type"); c = add_constituent(ctxt, c, linkage, domain, w, w, name); if (ctxt->wordtype[w] == QDTYPE) { /* Now find the finite verb to the right, start an S */ /* Limit w2 to sentence length. */ // for( w2=w+1; w2 < ctxt->r_limit-1; w2++ ) for (w2 = w+1; w2 < rightmost; w2++) if ((ctxt->wordtype[w2] == STYPE) || (ctxt->wordtype[w2] == PTYPE)) break; /* Adjust the right boundary of previous constituent */ ctxt->constituent[c].right = w2 - 1; c = add_constituent(ctxt, c, linkage, domain, w2, rightmost, "S"); } } if (ctxt->constituent[c].domain_type == '\0') { err_ctxt ec; ec.sent = linkage->sent; err_msg(&ec, Error, "Error: no domain type assigned to constituent\n"); } if (ctxt->constituent[c].start_link == NULL) { err_ctxt ec; ec.sent = linkage->sent; err_msg(&ec, Error, "Error: no type assigned to constituent\n"); } } numcon_subl = c - numcon_total; /* numcon_subl = handle_islands(linkage, numcon_total, numcon_subl); */ if (verbosity >= 2) printf("Constituents added at first stage for subl %d:\n", linkage->current); for (c = numcon_total; c < numcon_total + numcon_subl; c++) { print_constituent(ctxt, linkage, c); } /* Opener case - generates S around main clause. (This must be done first; the S generated will be needed for later cases.) */ numcon_subl = gen_comp(ctxt, linkage, numcon_total, numcon_subl, "SBAR", "S", "S", 5); /* pp opener case */ numcon_subl = gen_comp(ctxt, linkage, numcon_total, numcon_subl, "PP", "S", "S", 6); /* participle opener case */ numcon_subl = gen_comp(ctxt, linkage, numcon_total, numcon_subl, "S", "S", "S", 9); /* Subject-phrase case; every main VP generates an S */ numcon_subl = gen_comp(ctxt, linkage, numcon_total, numcon_subl, "VP", "S", "NP", 1); /* Relative clause case; an SBAR generates a complement NP */ numcon_subl = gen_comp(ctxt, linkage, numcon_total, numcon_subl, "SBAR", "NP", "NP", 3); /* Participle modifier case */ numcon_subl = gen_comp(ctxt, linkage, numcon_total, numcon_subl, "VP", "NP", "NP", 8); /* PP modifying NP */ numcon_subl = gen_comp(ctxt, linkage, numcon_total, numcon_subl, "PP", "NP", "NP", 8); /* Appositive case */ numcon_subl = gen_comp(ctxt, linkage, numcon_total, numcon_subl, "NP", "NP", "NP", 4); /* S-V inversion case; an NP generates a complement VP */ numcon_subl = gen_comp(ctxt, linkage, numcon_total, numcon_subl, "NP", "SINV", "VP", 7); adjust_subordinate_clauses(ctxt, linkage, numcon_total, numcon_subl); for (c = numcon_total; c < numcon_total + numcon_subl; c++) { if ((ctxt->constituent[c].domain_type=='p') && (strcmp(linkage->word[ctxt->constituent[c].left], ",")==0)) { ctxt->constituent[c].left++; } } /* Make sure the constituents are nested. If two constituents * are not nested: whichever constituent has the furthest left * boundary, shift that boundary rightwards to the left boundary * of the other one. */ while (1) { adjustment_made = 0; for (c = numcon_total; c < numcon_total + numcon_subl; c++) { for (c2 = numcon_total; c2 < numcon_total + numcon_subl; c2++) { if ((ctxt->constituent[c].left < ctxt->constituent[c2].left) && (ctxt->constituent[c].right < ctxt->constituent[c2].right) && (ctxt->constituent[c].right >= ctxt->constituent[c2].left)) { /* We've found two overlapping constituents. If one is larger, except the smaller one includes an extra comma, adjust the smaller one to exclude the comma */ if ((strcmp(linkage->word[ctxt->constituent[c2].right], ",") == 0) || (strcmp(linkage->word[ctxt->constituent[c2].right], "RIGHT-WALL") == 0)) { if (verbosity >= 2) printf("Adjusting %d to fix comma overlap\n", c2); adjust_for_right_comma(ctxt, linkage, c2); adjustment_made = 1; } else if (strcmp(linkage->word[ctxt->constituent[c].left], ",") == 0) { if (verbosity >= 2) printf("Adjusting c %d to fix comma overlap\n", c); adjust_for_left_comma(ctxt, linkage, c); adjustment_made = 1; } else { if (verbosity >= 2) { err_ctxt ec; ec.sent = linkage->sent; err_msg(&ec, Warn, "Warning: the constituents aren't nested! " "Adjusting them. (%d, %d)\n", c, c2); } ctxt->constituent[c].left = ctxt->constituent[c2].left; } } } } if (adjustment_made == 0) break; } #ifdef AUX_CODE_IS_DEAD /* The code here is ifdef-dead as it appears to be dead, as the computation it does * is immediately undone in the very next block. */ /* This labels certain words as auxiliaries (such as forms of "be" * with passives, forms of "have" wth past participles, * "to" with infinitives). These words start VP's which include * them. In Treebank I, these don't get printed unless they're part of an * andlist, in which case they get labeled "X". (this is why we need to * label them as "aux".) In Treebank II, however, they seem to be treated * just like other verbs, so the "aux" stuff isn't needed. */ for (c = numcon_total; c < numcon_total + numcon_subl; c++) { ctxt->constituent[c].subl = linkage->current; if (((ctxt->constituent[c].domain_type == 'v') && (ctxt->wordtype[linkage_get_link_rword(linkage, ctxt->constituent[c].start_num)] == PTYPE)) || ((ctxt->constituent[c].domain_type == 't') && (strcmp(ctxt->constituent[c].type, "VP") == 0))) { ctxt->constituent[c].aux = 1; } else { ctxt->constituent[c].aux = 0; } } #endif /* AUX_CODE_IS_DEAD */ if (MAXCONSTITUENTS <= numcon_total + numcon_subl) { err_ctxt ec; ec.sent = linkage->sent; err_msg(&ec, Error, "Error: Too many constituents (a2).\n"); numcon_total = MAXCONSTITUENTS - numcon_subl; } for (c = numcon_total; c < numcon_total + numcon_subl; c++) { ctxt->constituent[c].subl = linkage->current; #ifdef AUX_CODE_IS_DEAD /* See comments at top */ ctxt->constituent[c].aux = 0; #endif /* AUX_CODE_IS_DEAD */ } return numcon_subl; } static char * exprint_constituent_structure(con_context_t *ctxt, Linkage linkage, int numcon_total) { int have_opened = 1; int c, w; int leftdone[MAXCONSTITUENTS]; int rightdone[MAXCONSTITUENTS]; int best, bestright, bestleft; Sentence sent; char s[100], * p; String * cs = string_new(); assert (numcon_total < MAXCONSTITUENTS, "Too many constituents (b)"); sent = linkage_get_sentence(linkage); for (c = 0; c < numcon_total; c++) { leftdone[c] = 0; rightdone[c] = 0; } if (verbosity >= 2) printf("\n"); for (w = 1; w < linkage->num_words; w++) { /* Skip left wall; don't skip right wall, since it may have constituent boundaries */ while(1) { best = -1; bestright = -1; for (c = 0; c < numcon_total; c++) { if ((ctxt->constituent[c].left == w) && (leftdone[c] == 0) && (ctxt->constituent[c].valid == 1) && (ctxt->constituent[c].right >= bestright)) { best = c; bestright = ctxt->constituent[c].right; } } if (best == -1) break; leftdone[best] = 1; /* have_open is a hack to avoid printing anything until * bracket is opened */ if (w == 1) have_opened = 0; #ifdef AUX_CODE_IS_DEAD /* See comments at top */ if (ctxt->constituent[best].aux == 1) continue; #endif /* AUX_CODE_IS_DEAD */ have_opened = 1; append_string(cs, "%c%s ", OPEN_BRACKET, ctxt->constituent[best].type); } /* Don't print out right wall */ if (have_opened && (w < linkage->num_words - 1)) { char *p; strcpy(s, sent->word[w].string); /* Constituent processing will crash if the sentence contains * square brackets, so we have to do something ... replace * them with curly braces ... will have to do. */ p = strchr(s, OPEN_BRACKET); while(p) { *p = '{'; p = strchr(p, OPEN_BRACKET); } p = strchr(s, CLOSE_BRACKET); while(p) { *p = '}'; p = strchr(p, CLOSE_BRACKET); } /* Now, if the first character of the word was originally uppercase, we put it back that way */ if (sent->word[w].firstupper == 1) upcase_utf8_str(s, s, MAX_WORD); append_string(cs, "%s ", s); } while(1) { best = -1; bestleft = -1; for(c = 0; c < numcon_total; c++) { if ((ctxt->constituent[c].right == w) && (rightdone[c] == 0) && (ctxt->constituent[c].valid == 1) && (ctxt->constituent[c].left > bestleft)) { best = c; bestleft = ctxt->constituent[c].left; } } if (best == -1) break; rightdone[best] = 1; #ifdef AUX_CODE_IS_DEAD /* See comments at top */ if (ctxt->constituent[best].aux == 1) continue; #endif /* AUX_CODE_IS_DEAD */ append_string(cs, "%s%c ", ctxt->constituent[best].type, CLOSE_BRACKET); } } append_string(cs, "\n"); p = string_copy(cs); string_delete(cs); return p; } static char * do_print_flat_constituents(con_context_t *ctxt, Linkage linkage) { int num_words; Sentence sent; Postprocessor * pp; int s, numcon_total, numcon_subl, num_subl; char * q; sent = linkage_get_sentence(linkage); ctxt->phrase_ss = string_set_create(); pp = linkage->sent->dict->constituent_pp; numcon_total = 0; count_words_used(ctxt, linkage); num_subl = linkage->num_sublinkages; if (num_subl > MAXSUBL) { num_subl = MAXSUBL; if (verbosity >= 2) printf("Number of sublinkages exceeds maximum: only considering first %d sublinkages\n", MAXSUBL); } if (linkage->unionized == 1 && num_subl > 1) num_subl--; for (s = 0; s < num_subl; s++) { linkage_set_current_sublinkage(linkage, s); linkage_post_process(linkage, pp); num_words = linkage_get_num_words(linkage); generate_misc_word_info(ctxt, linkage); numcon_subl = read_constituents_from_domains(ctxt, linkage, numcon_total, s); numcon_total = numcon_total + numcon_subl; if (MAXCONSTITUENTS <= numcon_total) { err_ctxt ec; ec.sent = linkage->sent; err_msg(&ec, Error, "Error: Too many constituents (c).\n"); numcon_total = MAXCONSTITUENTS-1; break; } } numcon_total = merge_constituents(ctxt, linkage, numcon_total); if (MAXCONSTITUENTS <= numcon_total) { err_ctxt ec; ec.sent = linkage->sent; err_msg(&ec, Error, "Error: Too many constituents (d).\n"); numcon_total = MAXCONSTITUENTS-1; } numcon_total = last_minute_fixes(ctxt, linkage, numcon_total); if (MAXCONSTITUENTS <= numcon_total) { err_ctxt ec; ec.sent = linkage->sent; err_msg(&ec, Error, "Error: Too many constituents (e).\n"); numcon_total = MAXCONSTITUENTS-1; } q = exprint_constituent_structure(ctxt, linkage, numcon_total); string_set_delete(ctxt->phrase_ss); ctxt->phrase_ss = NULL; return q; } static char * print_flat_constituents(Linkage linkage) { /* In principle, the ctxt could be allocated on stack, instead of * with malloc(). However, The java6 jvm (and MS Windows jvm's) * gives JNI clients only a small amount of stack space. Alloc'ing * this (rather large) structure on stack will blow up the JVM. * This was discovered only after much work. Bummer. */ char * p; con_context_t *ctxt = (con_context_t *) malloc (sizeof(con_context_t)); memset(ctxt, 0, sizeof(con_context_t)); p = do_print_flat_constituents(ctxt, linkage); free(ctxt); return p; } static CType token_type (char *token) { if ((token[0] == OPEN_BRACKET) && (strlen(token) > 1)) return OPEN_TOK; if ((strlen(token) > 1) && (token[strlen(token) - 1] == CLOSE_BRACKET)) return CLOSE_TOK; return WORD_TOK; } static CNode * make_CNode(char *q) { CNode * cn; cn = (CNode *) exalloc(sizeof(CNode)); cn->label = (char *) exalloc(sizeof(char)*(strlen(q)+1)); strcpy(cn->label, q); cn->child = cn->next = (CNode *) NULL; cn->next = (CNode *) NULL; cn->start = cn->end = -1; return cn; } static CNode * parse_string(CNode * n, char **saveptr) { char *q; CNode *m, *last_child=NULL; while ((q = strtok_r(NULL, " ", saveptr))) { switch (token_type(q)) { case CLOSE_TOK : q[strlen(q)-1]='\0'; assert(strcmp(q, n->label)==0, "Constituent tree: Labels do not match."); return n; break; case OPEN_TOK: m = make_CNode(q+1); m = parse_string(m, saveptr); break; case WORD_TOK: m = make_CNode(q); break; default: assert(0, "Constituent tree: Illegal token type"); } if (n->child == NULL) { last_child = n->child = m; } else { last_child->next = m; last_child = m; } } assert(0, "Constituent tree: Constituent did not close"); return NULL; } static void print_tree(String * cs, int indent, CNode * n, int o1, int o2) { int i, child_offset; CNode * m; if (n == NULL) return; if (indent) for (i = 0; i < o1; ++i) append_string(cs, " "); append_string(cs, "(%s ", n->label); child_offset = o2 + strlen(n->label) + 2; for (m = n->child; m != NULL; m = m->next) { if (m->child == NULL) { char * p; /* If the original string has left or right parens in it, * the printed string will be messed up by these ... * so replace them by curly braces. What else can one do? */ p = strchr(m->label, '('); while(p) { *p = '{'; p = strchr(p, '('); } p = strchr(m->label, ')'); while(p) { *p = '}'; p = strchr(p, ')'); } append_string(cs, "%s", m->label); if ((m->next != NULL) && (m->next->child == NULL)) append_string(cs, " "); } else { if (m != n->child) { if (indent) append_string(cs, "\n"); else append_string(cs, " "); print_tree(cs, indent, m, child_offset, child_offset); } else { print_tree(cs, indent, m, 0, child_offset); } if ((m->next != NULL) && (m->next->child == NULL)) { if (indent) { append_string(cs, "\n"); for (i = 0; i < child_offset; ++i) append_string(cs, " "); } else append_string(cs, " "); } } } append_string(cs, ")"); } static int assign_spans(CNode * n, int start) { int num_words=0; CNode * m=NULL; if (n==NULL) return 0; n->start = start; if (n->child == NULL) { n->end = start; return 1; } else { for (m=n->child; m!=NULL; m=m->next) { num_words += assign_spans(m, start+num_words); } n->end = start+num_words-1; } return num_words; } CNode * linkage_constituent_tree(Linkage linkage) { char *p, *q, *saveptr; int len; CNode * root; p = print_flat_constituents(linkage); len = strlen(p); q = strtok_r(p, " ", &saveptr); assert(token_type(q) == OPEN_TOK, "Illegal beginning of string"); root = make_CNode(q+1); root = parse_string(root, &saveptr); assign_spans(root, 0); exfree(p, sizeof(char)*(len+1)); return root; } void linkage_free_constituent_tree(CNode * n) { CNode *m, *x; for (m=n->child; m!=NULL; m=x) { x=m->next; linkage_free_constituent_tree(m); } exfree(n->label, sizeof(char)*(strlen(n->label)+1)); exfree(n, sizeof(CNode)); } /** * Print out the constituent tree. * mode 1: treebank-style constituent tree * mode 2: flat, bracketed tree [A like [B this B] A] * mode 3: flat, treebank-style tree (A like (B this) ) */ char * linkage_print_constituent_tree(Linkage linkage, int mode) { String * cs; CNode * root; char * p; if ((mode == 0) || (linkage->sent->dict->constituent_pp == NULL)) { return NULL; } else if (mode == 1 || mode == 3) { cs = string_new(); root = linkage_constituent_tree(linkage); print_tree(cs, (mode==1), root, 0, 0); linkage_free_constituent_tree(root); append_string(cs, "\n"); p = string_copy(cs); string_delete(cs); return p; } else if (mode == 2) { return print_flat_constituents(linkage); } assert(0, "Illegal mode in linkage_print_constituent_tree"); return NULL; } void linkage_free_constituent_tree_str(char * s) { exfree(s, strlen(s)+1); } const char * linkage_constituent_node_get_label(const CNode *n) { return n->label; } CNode * linkage_constituent_node_get_child(const CNode *n) { return n->child; } CNode * linkage_constituent_node_get_next(const CNode *n) { return n->next; } int linkage_constituent_node_get_start(const CNode *n) { return n->start; } int linkage_constituent_node_get_end(const CNode *n) { return n->end; } link-grammar/link-grammar/structures.h0000644000000000000000000003727112536650433015323 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #ifndef _STRUCTURES_H_ #define _STRUCTURES_H_ #include "api-types.h" #include "utilities.h" /* Needed for inline defn in Windows */ /* Global variable descriptions -- Most of these global variables have been eliminated. I've left this comment here for historical purposes --DS 4/98 N_words: The number of words in the current sentence. Computed by separate_sentence(). N_links: The number of links in the current linkage. Computed by extract_linkage(). sentence[].string: Contains a slightly modified form of the words typed by the user. Computed by separate_sentence(). sentence[].x: Contains, for each word, a pointer to a list of expressions from the dictionary that match the word in sentence[].string. Computed by build_sentence_expressions(). sentence[].d Contains for each word, a pointer to a list of disjuncts for this word. Computed by: parepare_to_parse(), but modified by pruning and power pruning. link_array[] This is an array of links. These links define the current linkage. It is computed by extract_links(). It is used by analyze_linkage() to compute pp_linkage[]. It may contain fat links. pp_link_array[] ** eliminated (ALB) Another array of links. Here all fat links have been expunged. It is computed by analyze_linkage(), and used by post_process() and by print_links(); chosen_disjuncts[] This is an array pointers to disjuncts, one for each word, that is computed by extract_links(). It represents the chosen disjuncts for the current linkage. It is used to compute the cost of the linkage, and also by compute_chosen_words() to compute the chosen_words[]. chosen_words[] An array of pointers to strings. These are the words to be displayed when printing the solution, the links, etc. Computed as a function of chosen_disjuncts[] by compute_chosen_words(). This differs from sentence[].string because it contains the suffixes. It differs from chosen_disjunct[].string in that the idiom symbols have been removed. has_fat_down[] An array of chars, one for each word. TRUE if there is a fat link down from this word, FALSE otherwise. (Only set if there is at least one fat link.) Set by set_has_fat_down_array() and used by analyze_linkage() and is_canonical(). is_conjunction[] An array of chars, one for each word. TRUE if the word is a conjunction ("and", "or", "nor", or "but" at the moment). False otherwise. */ #define NEGATIVECOST -1000000 /* This is a hack that allows one to discard disjuncts containing connectors whose cost is greater than given a bound. This number plus the cost of any connectors on a disjunct must remain negative, and this number multiplied times the number of costly connectors on any disjunct must fit into an integer. */ /* Upper bound on the cost of any connector. */ #define MAX_CONNECTOR_COST 1000.0f #define LEFT_WALL_DISPLAY ("LEFT-WALL") /* the string to use to show the wall */ #define LEFT_WALL_SUPPRESS ("Wd") /* If this connector is used on the wall, */ /* then suppress the display of the wall */ /* bogus name to prevent ever suppressing */ #define RIGHT_WALL_DISPLAY ("RIGHT-WALL") /* the string to use to show the wall */ #define RIGHT_WALL_SUPPRESS ("RW") /* If this connector is used on the wall, */ /* The following define the names of the special strings in the dictionary. */ #define LEFT_WALL_WORD ("LEFT-WALL") #define RIGHT_WALL_WORD ("RIGHT-WALL") #define POSTPROCESS_WORD ("POSTPROCESS") #define ANDABLE_CONNECTORS_WORD ("ANDABLE-CONNECTORS") #define UNLIMITED_CONNECTORS_WORD ("UNLIMITED-CONNECTORS") #if DONT_USE_REGEX_GUESSING /* English-language-specific morphology guessing */ /* Obsolete, replaced by regex-based morphology handler */ #define PROPER_WORD ("CAPITALIZED-WORDS") #define PL_PROPER_WORD ("PL-CAPITALIZED-WORDS") #define HYPHENATED_WORD ("HYPHENATED-WORDS") #define NUMBER_WORD ("NUMBERS") #define ING_WORD ("ING-WORDS") #define S_WORD ("S-WORDS") #define ED_WORD ("ED-WORDS") #define LY_WORD ("LY-WORDS") #endif /* DONT_USE_REGEX_GUESSING */ #define UNKNOWN_WORD ("UNKNOWN-WORD") #define MAX_PATH_NAME 200 /* file names (including paths) should not be longer than this */ /* Some size definitions. Reduce these for small machines */ #define MAX_WORD 60 /* maximum number of chars in a word */ #define MAX_LINE 1500 /* maximum number of chars in a sentence */ #define MAX_DISJUNCT_COST 10000 /* conditional compiling flags */ #define PLURALIZATION /* If defined, Turns on the pluralization operation in */ /* "and", "or" and "nor" */ #define INFIX_NOTATION /* If defined, then we're using infix notation for the dictionary */ /* otherwise we're using prefix notation */ #define DOWN_priority 2 #define UP_priority 1 #define THIN_priority 0 #define NORMAL_LABEL (-1) /* used for normal connectors */ /* the labels >= 0 are used by fat links */ #define UNLIMITED_LEN 255 #define SHORT_LEN 6 #define NO_WORD 255 #ifndef _MSC_VER typedef long long s64; /* signed 64-bit integer, even on 32-bit cpus */ #define PARSE_NUM_OVERFLOW (1LL<<24) #else /* Microsoft Visual C Version 6 doesn't support long long. */ typedef signed __int64 s64; /* signed 64-bit integer, even on 32-bit cpus */ #define PARSE_NUM_OVERFLOW (((s64)1)<<24) #endif struct Connector_struct { short label; short hash; unsigned char word; /* The nearest word to my left (or right) that this could connect to. Computed by power pruning */ unsigned char length_limit; /* If this is a length limited connector, this gives the limit of the length of the link that can be used on this connector. Since this is strictly a funcion of the connector name, efficiency is the only reason to store this. If no limit, the value is set to 255. */ char priority;/* one of the three priorities above */ char multi; /* TRUE if this is a multi-connector */ Connector * next; const char * string; /* Hash table next pointer, used only during pruning. */ Connector * tableNext; const char * prune_string; }; static inline void connector_set_string(Connector *c, const char *s) { c->string = s; c->hash = -1; } static inline const char * connector_get_string(Connector *c) { return c->string; } struct Disjunct_struct { Disjunct *next; const char * string; Connector *left, *right; float cost; char marked; }; typedef struct Match_node_struct Match_node; struct Match_node_struct { Match_node * next; Disjunct * d; }; typedef struct X_node_struct X_node; struct X_node_struct { const char * string; /* the word itself */ Exp * exp; X_node *next; }; struct Word_struct { char string[MAX_WORD+1]; X_node * x; /* sentence starts out with these */ Disjunct * d; /* eventually these get generated */ int firstupper; }; /** * Types of Exp_struct structures */ #define OR_type 0 #define AND_type 1 #define CONNECTOR_type 2 /** * The E_list and Exp structures defined below comprise the expression * trees that are stored in the dictionary. The expression has a type * (AND, OR or TERMINAL). If it is not a terminal it has a list * (an E_list) of children. */ struct Exp_struct { Exp * next; /* Used only for mem management,for freeing */ char type; /* One of three types, see above */ char dir; /* '-' means to the left, '+' means to right (for connector) */ char multi; /* TRUE if a multi-connector (for connector) */ union { E_list * l; /* only needed for non-terminals */ const char * string; /* only needed if it's a connector */ } u; float cost; /* The cost of using this expression. Only used for non-terminals */ }; struct E_list_struct { E_list * next; Exp * e; }; /* The structure below stores a list of dictionary word files. */ struct Word_file_struct { char file[MAX_PATH_NAME+1]; /* the file name */ int changed; /* TRUE if this file has been changed */ Word_file * next; }; /** * The dictionary is stored as a binary tree comprised of the following * nodes. A list of these (via right pointers) is used to return * the result of a dictionary lookup. */ struct Dict_node_struct { const char * string; /* the word itself */ Word_file * file; /* the file the word came from (NULL if dict file) */ Exp * exp; Dict_node *left, *right; }; /* The regexs are stored as a linked list of the following nodes. */ struct Regex_node_s { char *name; /* The identifying name of the regex */ char *pattern; /* The regular expression pattern */ void *re; /* The compiled regex. void * to avoid * having re library details invading the * rest of the LG system; regex-morph.c * takes care of all matching. */ Regex_node *next; }; /* The following three structs comprise what is returned by post_process(). */ typedef struct D_type_list_struct D_type_list; struct D_type_list_struct { D_type_list * next; int type; }; typedef struct PP_node_struct PP_node; struct PP_node_struct { D_type_list *d_type_array[MAX_LINKS]; const char *violation; }; /* Davy added these */ typedef struct Andlist_struct Andlist; struct Andlist_struct { Andlist * next; int conjunction; int num_elements; int element[MAX_SENTENCE]; int num_outside_words; int outside_word[MAX_SENTENCE]; int cost; }; /** * This is for building the graphs of links in post-processing and * fat link extraction. */ struct Linkage_info_struct { int index; Boolean fat; Boolean canonical; Boolean improper_fat_linkage; Boolean inconsistent_domains; short N_violations; short null_cost, unused_word_cost, and_cost, link_cost; float disjunct_cost; double corpus_cost; Andlist * andlist; int island[MAX_SENTENCE]; size_t nwords; char **disjunct_list_str; #ifdef USE_CORPUS Sense **sense_list; #endif }; struct List_o_links_struct { int link; /* the link number */ int word; /* the word at the other end of this link */ int dir; /* 0: undirected, 1: away from me, -1: toward me */ List_o_links * next; }; /* These parameters tell power_pruning, to tell whether this is before * or after generating and disjuncts. GENTLE is before RUTHLESS is * after. */ #define GENTLE 1 #define RUTHLESS 0 typedef struct string_node_struct String_node; struct string_node_struct { char * string; int size; String_node * next; }; typedef struct Parse_choice_struct Parse_choice; struct Link_s { int l, r; Connector * lc, * rc; const char * name; /* spelling of full link name */ }; struct Parse_choice_struct { Parse_choice * next; Parse_set * set[2]; Link link[2]; /* the lc fields of these is NULL if there is no link used */ Disjunct *ld, *md, *rd; /* the chosen disjuncts for the relevant three words */ }; struct Parse_set_struct { s64 count; /* the number of ways */ Parse_choice * first; Parse_choice * current; /* used to enumerate linkages */ }; struct X_table_connector_struct { short lw, rw; short cost; Parse_set *set; Connector *le, *re; X_table_connector *next; }; /* from string-set.c */ struct String_set_s { int size; /* the current size of the table */ int count; /* number of things currently in the table */ char ** table; /* the table itself */ }; /* from pp_linkset.c */ typedef struct pp_linkset_node_s { const char *str; struct pp_linkset_node_s *next; } pp_linkset_node; typedef struct pp_linkset_s { int hash_table_size; int population; pp_linkset_node **hash_table; /* data actually lives here */ } pp_linkset; /* from pp_lexer.c */ #define PP_LEXER_MAX_LABELS 512 typedef struct pp_label_node_s { /* linked list of strings associated with a label in the table */ const char *str; struct pp_label_node_s *next; } pp_label_node; /* next=NULL: end of list */ typedef struct PPLexTable_s { String_set *string_set; const char *labels[PP_LEXER_MAX_LABELS]; /* array of labels */ pp_label_node *nodes_of_label[PP_LEXER_MAX_LABELS]; /*str. for each label*/ pp_label_node *last_node_of_label[PP_LEXER_MAX_LABELS]; /* efficiency */ pp_label_node *current_node_of_active_label;/* state: curr node of label */ int idx_of_active_label; /* read state: current label */ } PPLexTable; /* from pp_knowledge.c */ typedef struct StartingLinkAndDomain_s { const char *starting_link; int domain; /* domain which the link belongs to (-1: terminator)*/ } StartingLinkAndDomain; typedef struct pp_rule_s { /* Holds a single post-processing rule. Since rules come in many flavors, not all fields of the following are always relevant */ const char *selector; /* name of link to which rule applies */ int domain; /* type of domain to which rule applies */ pp_linkset *link_set; /* handle to set of links relevant to rule */ int link_set_size; /* size of this set */ const char **link_array; /* array holding the spelled-out names */ const char *msg; /* explanation (NULL=end sentinel in array)*/ } pp_rule; struct pp_knowledge_s { PPLexTable *lt; /* Internal rep'n of sets of strings from knowledge file */ const char *path; /* Name of file we loaded from */ /* handles to sets of links specified in knowledge file. These constitute auxiliary data, necessary to implement the rules, below. See comments in post-process.c for a description of these. */ pp_linkset *domain_starter_links; pp_linkset *urfl_domain_starter_links; pp_linkset *urfl_only_domain_starter_links; pp_linkset *domain_contains_links; pp_linkset *must_form_a_cycle_links; pp_linkset *restricted_links; pp_linkset *ignore_these_links; pp_linkset *left_domain_starter_links; /* arrays of rules specified in knowledge file */ pp_rule *connected_rules, *form_a_cycle_rules; pp_rule *contains_one_rules, *contains_none_rules; pp_rule *bounded_rules; int n_connected_rules, n_form_a_cycle_rules; int n_contains_one_rules, n_contains_none_rules; int n_bounded_rules; pp_linkset *set_of_links_starting_bounded_domain; StartingLinkAndDomain *starting_link_lookup_table; int nStartingLinks; String_set *string_set; }; #endif link-grammar/link-grammar/analyze-linkage.h0000644000000000000000000000246712536650433016152 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ void init_analyze(Sentence); void free_analyze(Sentence); void extract_thin_linkage(Sentence, Parse_Options, Linkage); void extract_fat_linkage (Sentence, Parse_Options, Linkage); Linkage_info analyze_fat_linkage (Sentence, Parse_Options, int pass); Linkage_info analyze_thin_linkage(Sentence, Parse_Options, int pass); void free_DIS_tree(DIS_node *); void zero_sublinkage(Sublinkage *s); link-grammar/link-grammar/spellcheck-hun.c0000644000000000000000000000735512536650433016000 0ustar /*************************************************************************/ /* Copyright (c) 2009 Linas Vepstas */ /* Copyright (c) 2009 Vikas N. Kumar */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include #include "link-includes.h" #include "spellcheck.h" #include "utilities.h" /* For Win32 compatibility */ #ifdef HAVE_HUNSPELL #ifndef HUNSPELL_DICT_DIR #define HUNSPELL_DICT_DIR (char *)0 #endif /* HUNSPELL_DICT_DIR */ static const char *hunspell_dict_dirs[] = { "/usr/share/myspell/dicts", "/usr/share/hunspell/dicts", "/usr/local/share/myspell/dicts", "/usr/local/share/hunspell/dicts", "/usr/share/myspell", "/usr/share/hunspell", "/usr/local/share/myspell", "/usr/local/share/hunspell", HUNSPELL_DICT_DIR }; static const char *spellcheck_lang_mapping[] = { "en" /* link-grammar language */, "en-US" /* hunspell filename */, "en" /* link-grammar language */, "en_US" /* hunspell filename */ }; #define FPATHLEN 256 static char hunspell_aff_file[FPATHLEN]; static char hunspell_dic_file[FPATHLEN]; #include #include void * spellcheck_create(const char * lang) { size_t i = 0, j = 0; Hunhandle *h = NULL; memset(hunspell_aff_file, 0, FPATHLEN); memset(hunspell_dic_file, 0, FPATHLEN); for (i = 0; i < sizeof(spellcheck_lang_mapping)/sizeof(char *); i += 2) { if (0 != strcmp(lang, spellcheck_lang_mapping[i])) continue; /* check in each hunspell_dict_dir if the files exist */ for (j = 0; j < sizeof(hunspell_dict_dirs)/sizeof(char *); ++j) { FILE *fh; /* if the directory name is NULL then ignore */ if (hunspell_dict_dirs[j] == NULL) continue; snprintf(hunspell_aff_file, FPATHLEN, "%s/%s.aff", hunspell_dict_dirs[j], spellcheck_lang_mapping[i+1]); snprintf(hunspell_dic_file, FPATHLEN, "%s/%s.dic", hunspell_dict_dirs[j], spellcheck_lang_mapping[i+1]); /* Some versions of Hunspell_create() will succeed even if * there are no dictionary files. So test for permissions. */ fh = fopen(hunspell_aff_file, "r"); if (fh) fclose (fh); else continue; fh = fopen(hunspell_dic_file, "r"); if (fh) fclose (fh); else continue; h = Hunspell_create(hunspell_aff_file, hunspell_dic_file); /* if hunspell handle was created break from loop */ if (h != NULL) break; } /* if hunspell handle was created break from loop */ if (h != NULL) break; } return h; } void spellcheck_destroy(void * chk) { Hunhandle *h = (Hunhandle *) chk; Hunspell_destroy(h); } /** * Return boolean: 1 if spelling looks good, else zero */ int spellcheck_test(void * chk, const char * word) { if (NULL == chk) { prt_error("Error: no spell-check handle specified!\n"); return 0; } return Hunspell_spell((Hunhandle *)chk, word); } int spellcheck_suggest(void * chk, char ***sug, const char * word) { if (NULL == chk) { prt_error("Error: no spell-check handle specified!\n"); return 0; } return Hunspell_suggest((Hunhandle *)chk, sug, word); } void spellcheck_free_suggest(char **sug, int size) { free(sug); } #endif /* #ifdef HAVE_HUNSPELL */ link-grammar/link-grammar/and.c0000644000000000000000000014220512536650433013627 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include "disjunct-utils.h" /* Notes about AND A large fraction of the code of this parser seems to deal with handling conjunctions. This comment (combined with reading the paper) should give an idea of how it works. First of all, we need a more detailed discussion of strings, what they match, etc. (This entire discussion ignores the labels, which are semantically the same as the leading upper case letters of the connector.) We'll deal with infinite strings from an alphabet of three types of characters: "*". "^" and ordinary characters (denoted "a" and "b"). (The end of a string should be thought of as an infinite sequence of "*"s). Let match(s) be the set of strings that will match the string s. This is defined as follows. A string t is in match(s) if (1) its leading upper case letters exactly match those of s. (2) traversing through both strings, from left to right in step, no missmatch is found between corresponding letters. A missmatch is a pair of differing ordinary characters, or a "^" and any ordinary letter or two "^"s. In other words, a match is exactly a "*" and anything, or two identical ordinary letters. Alternative definition of the set match(s): {t | t is obtained from s by replacing each "^" and any other characters by "*"s, and replacing any original "*" in s by any other character (or "^").} Theorem: if t in match(s) then s in match(t). It is also a theorem that given any two strings s and t, there exists a unique new string u with the property that: match(u) = match(s) intersect match(t) This string is called the GCD of s and t. Here are some examples. GCD(N*a,Nb) = Nba GCD(Na, Nb) = N^ GCD(Nab,Nb) = N^b GCD(N^,N*a) = N^a GCD(N^, N) = N^ GCD(N^^,N^) = N^^ We need an algorithm for computing the GCD of two strings. Here is one. First get by the upper case letters (which must be equal, otherwise there is no intersection), issuing them. Traverse the rest of the characters of s and t in lockstep until there is nothing left but "*"s. If the two characters are: "a" and "a", issue "a" "a" and "b", issue "^" "a" and "*", issue "a" "*" and "*", issue "*" "*" and "^", issue "^" "a" and "^", issue "^" "^" and "^", issue "^" A simple case analysis suffices to show that any string that matches the right side, must match both of the left sides, and any string not matching the right side must not match at least one of the left sides. This proves that the GCD operator is associative and commutative. (There must be a name for a mathematical structure with these properties.) To elaborate further on this theory, define the notion of two strings matching in the dual sense as follows: s and t dual-match if match(s) is contained in match(t) or vice versa--- Full development of this theory could lead to a more efficient algorithm for this problem. I'll defer this until such time as it appears necessary. We need a data structure that stores a set of fat links. Each fat link has a number (called its label). The fat link operates in liu of a collection of links. The particular stuff it is a substitute for is defined by a disjunct. This disjunct is stored in the data structure. The type of a disjunct is defined by the sequence of connector types (defined by their upper case letters) that comprises it. Each entry of the label_table[] points to a list of disjuncts that have the same type (a hash table is uses so that, given a disjunct, we can efficiently compute the element of the label table in which it belongs). We begin by loading up the label table with all of the possible fat links that occur through the words of the sentence. These are obtained by taking every sub-range of the connectors of each disjunct (containing the center). We also compute the closure (under the GCD operator) of these disjuncts and store also store these in the label_table. Each disjunct in this table has a string which represents the subscripts of all of its connectors (and their multi-connector bits). It is possible to generate a fat connector for any one of the disjuncts in the label_table. This connector's label field is given the label from the disjunct from which it arose. It's string field is taken from the string of the disjunct (mentioned above). It will be given a priority with a value of UP_priority or DOWN_priority (depending on how it will be used). A connector of UP_priority can match one of DOWN_priority, but neither of these can match any other priority. (Of course, a fat connector can match only another fat connector with the same label.) The paper describes in some detail how disjuncts are given to words and to "and" and ",", etc. Each word in the sentence gets many more new disjuncts. For each contiguous set of connectors containing (or adjacent to) the center of the disjunct, we generate a fat link, and replace these connector in the word by a fat link. (Actually we do this twice. Once pointing to the right, once to the left.) These fat links have priority UP_priority. What do we generate for ","? For each type of fat link (each label) we make a disjunct that has two down connectors (to the right and left) and one up connector (to the right). There will be a unique way of hooking together a comma-separated and-list. The disjuncts on "and" are more complicated. Here we have to do just what we did for comma (but also include the up link to the left), then we also have to allow the process to terminate. So, there is a disjunct with two down fat links, and between them are the original thin links. These are said to "blossom" out. However, this is not all that is necessary. It's possible for an and-list to be part of another and list with a different labeled fat connector. To make this possible, we regroup the just blossomed disjuncts (in all possible ways about the center) and install them as fat links. If this sounds like a lot of disjuncts -- it is! The program is currently fairly slow on long sentence with and. It is slightly non-obvious that the fat-links in a linkage constructed from disjuncts defined in this way form a binary tree. Naturally, connectors with UP_priority point up the tree, and those with DOWN_priority point down the tree. Think of the string x on the connector as representing a set X of strings. X = match(x). So, for example, if x="S^" then match(x) = {"S", "S*a", "S*b", etc}. The matching rules for UP and DOWN priority connectors are such that as you go up (the tree of ands) the X sets get no larger. So, for example, a "Sb" pointing up can match an "S^" pointing down. (Because more stuff can match "Sb" than can match "S^".) This guarantees that whatever connector ultimately gets used after the fat connector blossoms out (see below), it is a powerful enough connector to be able to match to any of the connectors associated with it. One problem with the scheme just descibed is that it sometimes generates essentially the same linkage several times. This happens if there is a gap in the connective power, and the mismatch can be moved around in different ways. Here is an example of how this happens. (Left is DOWN, right is UP) Sa <---> S^ <---> S or Sa <---> Sa <---> S fat thin fat thin Here two of the disjunct types are given by "S^" and "Sa". Notice that the criterion of shrinking the matching set is satisfied by the the fat link (traversing from left to right). How do I eliminate one of these? I use the technique of canonization. I generate all the linkages. There is then a procedure that can check to see of a linkage is canonical. If it is, it's used, otherwise it's ignored. It's claimed that exactly one canonical one of each equivalence class will be generated. We basically insist that the intermediate fat disjuncts (ones that have a fat link pointing down) are all minimal -- that is, that they cannot be replaced by by another (with a strictly) smaller match set. If one is not minimal, then the linkage is rejected. Here's a proof that this is correct. Consider the set of equivalent linkages that are generated. These Pick a disjunct that is the root of its tree. Consider the set of all disjuncts which occur in that positon among the equivalent linkages. The GCD of all of these can fit in that position (it matches down the tree, since its match set has gotten smaller, and it also matches to the THIN links.) Since the GCD is put on "and" this particular one will be generated. Therefore rejecting a linkage in which a root fat disjunct can be replaced by a smaller one is ok (since the smaller one will be generated separately). What about a fat disjunct that is not the root. We consider the set of linkages in which the root is minimal (the ones for which it's not have already been eliminated). Now, consider one of the children of the root in precisely the way we just considered the root. The same argument holds. The only difference is that the root node gives another constraint on how small you can make the disjunct -- so, within these constraints, if we can go smaller, we reject. The code to do all of this is fairly ugly, but I think it works. Problems with this stuff: 1) There is obviously a combinatorial explosion that takes place. As the number of disjuncts (and the number of their subscripts increase) the number of disjuncts that get put onto "and" will increase tremendously. When we made the transcript for the tech report (Around August 1991) most of the sentence were processed in well under 10 seconds. Now (Jan 1992), some of these sentences take ten times longer. As of this writing I don't really know the reason, other than just the fact that the dictionary entries are more complex than they used to be. The number of linkages has also increased significantly. 2) Each element of an and list must be attached through only one word. This disallows "there is time enough and space enough for both of us", and many other reasonable sounding things. The combinatorial explosion that would occur if you allowed two different connection points would be tremendous, and the number of solutions would also probably go up by another order of magnitude. Perhaps if there were strong constraints on the type of connectors in which this would be allowed, then this would be a conceivable prospect. 3) A multi-connector must be either all "outside" or all "inside" the and. For example, "the big black dog and cat ran" has only two ways to linkages (instead of three). Possible bug: It seems that the following two linkages should be the same under the canonical linkage test. Could this have to do with the pluralization system? > I am big and the bike and the car were broken Accepted (4 linkages, 4 with no P.P. violations) at stage 1 Linkage 1, cost vector = (0, 0, 18) +------Spx-----+ +-----CC-----+------Wd------+-d^^*i^-+ | +-Wd-+Spi+-Pa+ | +--Ds-+d^^*+ +-Ds-+ +--Pv-+ | | | | | | | | | | | | ///// I.p am big.a and the bike.n and the car.n were broken ///// RW <---RW----> RW ///// ///// Wd <---Wd----> Wd I.p I.p CC <---CC----> CC and I.p Sp*i <---Spii--> Spi am am Pa <---Pa----> Pa big.a and Wd <---Wd----> Wd and bike.n d^s** 6<---d^^*i-> d^^*i 6 and the D <---Ds----> Ds bike.n and Sp <---Spx---> Spx were and d^^*i 6<---d^^*i-> d^s** 6 car.n the D <---Ds----> Ds car.n were Pv <---Pv----> Pv broken (press return for another) > Linkage 2, cost vector = (0, 0, 18) +------Spx-----+ +-----CC-----+------Wd------+-d^s**^-+ | +-Wd-+Spi+-Pa+ | +--Ds-+d^s*+ +-Ds-+ +--Pv-+ | | | | | | | | | | | | ///// I.p am big.a and the bike.n and the car.n were broken ///// RW <---RW----> RW ///// ///// Wd <---Wd----> Wd I.p I.p CC <---CC----> CC and I.p Sp*i <---Spii--> Spi am am Pa <---Pa----> Pa big.a and Wd <---Wd----> Wd and bike.n d^s** 6<---d^s**-> d^s** 6 and the D <---Ds----> Ds bike.n and Sp <---Spx---> Spx were and d^s** 6<---d^s**-> d^s** 6 car.n the D <---Ds----> Ds car.n were Pv <---Pv----> Pv broken */ static void init_LT(Sentence sent) { sent->and_data.LT_bound = 20; sent->and_data.LT_size = 0; sent->and_data.label_table = (Disjunct **) xalloc(sent->and_data.LT_bound * sizeof(Disjunct *)); } static void grow_LT(Sentence sent) { size_t oldsize = sent->and_data.LT_bound * sizeof(Disjunct *); sent->and_data.LT_bound = (3*sent->and_data.LT_bound)/2; sent->and_data.label_table = (Disjunct **) xrealloc(sent->and_data.label_table, oldsize, sent->and_data.LT_bound * sizeof(Disjunct *)); } static void init_HT(Sentence sent) { memset(sent->and_data.hash_table, 0, HT_SIZE*sizeof(Label_node *)); } static void free_HT(Sentence sent) { int i; Label_node * la, * la1; for (i=0; iand_data.hash_table[i]; la != NULL; la = la1) { la1 = la->next; xfree((char *)la, sizeof(Label_node)); } sent->and_data.hash_table[i] = NULL; } } static void free_LT(Sentence sent) { int i; for (i=0; iand_data.LT_size; i++) { free_disjuncts(sent->and_data.label_table[i]); } xfree((char *) sent->and_data.label_table, sent->and_data.LT_bound * sizeof(Disjunct*)); sent->and_data.LT_bound = 0; sent->and_data.LT_size = 0; sent->and_data.label_table = NULL; } void free_AND_tables(Sentence sent) { free_LT(sent); free_HT(sent); } void initialize_conjunction_tables(Sentence sent) { int i; sent->and_data.LT_bound = 0; sent->and_data.LT_size = 0; sent->and_data.label_table = NULL; for (i=0; iand_data.hash_table[i] = NULL; } } /** * This is a hash function for disjuncts */ static inline int and_hash_disjunct(Disjunct *d) { unsigned int i; Connector *e; i = 0; for (e = d->left ; e != NULL; e = e->next) { i += connector_hash(e); } i += (i<<5); for (e = d->right ; e != NULL; e = e->next) { i += connector_hash(e); } return (i & (HT_SIZE-1)); } /** * Returns TRUE if the disjunct is appropriate to be made into fat links. * Check here that the connectors are from some small set. * This will disallow, for example "the and their dog ran". */ static int is_appropriate(Sentence sent, Disjunct * d) { Connector * c; if (sent->dict->andable_connector_set == NULL) return TRUE; /* if no set, then everything is considered andable */ for (c = d->right; c!=NULL; c=c->next) { if (!match_in_connector_set(sent, sent->dict->andable_connector_set, c, '+')) return FALSE; } for (c = d->left; c!=NULL; c=c->next) { if (!match_in_connector_set(sent, sent->dict->andable_connector_set, c, '-')) return FALSE; } return TRUE; } /** * Two connectors are said to be of the same type if they have * the same label, and the initial upper case letters of their * strings match. */ static int connector_types_equal(Connector * c1, Connector * c2) { if (c1->label != c2->label) return FALSE; return utf8_upper_match(c1->string, c2->string); } /** * Two disjuncts are said to be the same type if they're the same * ignoring the multi fields, the priority fields, and the subscripts * of the connectors (and the string field of the disjunct of course). * Disjuncts of the same type are located in the same label_table list. * * This returns TRUE if they are of the same type. */ static int disjunct_types_equal(Disjunct * d1, Disjunct * d2) { Connector *e1, *e2; e1 = d1->left; e2 = d2->left; while((e1!=NULL) && (e2!=NULL)) { if (!connector_types_equal(e1,e2)) break; e1 = e1->next; e2 = e2->next; } if ((e1!=NULL) || (e2!=NULL)) return FALSE; e1 = d1->right; e2 = d2->right; while((e1!=NULL) && (e2!=NULL)) { if (!connector_types_equal(e1,e2)) break; e1 = e1->next; e2 = e2->next; } if ((e1!=NULL) || (e2!=NULL)) return FALSE; return TRUE; } /** * This returns a string that is the the GCD of the two given strings. * If the GCD is equal to one of them, a pointer to it is returned. * Otherwise a new string for the GCD is xalloced and put on the * "free later" list. */ const char * intersect_strings(Sentence sent, const char * s, const char * t) { int len, i, j, d; const char *w, *s0; char u0[MAX_TOKEN_LENGTH]; /* Links are *always* less than 10 chars long */ char *u; if (strcmp(s,t)==0) return s; /* would work without this */ i = strlen(s); j = strlen(t); if (j > i) { w = s; s = t; t = w; len = j; } else { len = i; } /* s is now the longer (at least not the shorter) string */ /* and len is its length */ u = u0; d = 0; s0 = s; while (*t != '\0') { if ((*s == *t) || (*t == '*')) { *u = *s; } else { d++; if (*s == '*') *u = *t; else *u = '^'; } s++; t++; u++; } if (d==0) { return s0; } else { strcpy(u, s); /* get the remainder of s */ return string_set_add(u0, sent->string_set); } } /** * Two connectors are said to be equal if they are of the same type * (defined above), they have the same multi field, and they have * exactly the same connectors (including lower case chars). * (priorities ignored). */ static int connectors_equal_AND(Connector *c1, Connector *c2) { return (c1->label == c2->label) && (c1->multi == c2->multi) && (strcmp(c1->string, c2->string) == 0); } /** * Return true if the disjuncts are equal (ignoring priority fields) * and the string of the disjunct. */ static int disjuncts_equal_AND(Sentence sent, Disjunct * d1, Disjunct * d2) { Connector *e1, *e2; sent->and_data.STAT_calls_to_equality_test++; e1 = d1->left; e2 = d2->left; while((e1!=NULL) && (e2!=NULL)) { if (!connectors_equal_AND(e1, e2)) break; e1 = e1->next; e2 = e2->next; } if ((e1!=NULL) || (e2!=NULL)) return FALSE; e1 = d1->right; e2 = d2->right; while((e1!=NULL) && (e2!=NULL)) { if (!connectors_equal_AND(e1, e2)) break; e1 = e1->next; e2 = e2->next; } if ((e1!=NULL) || (e2!=NULL)) return FALSE; return TRUE; } /** * Create a new disjunct that is the GCD of d1 and d2. * It assumes that the disjuncts are of the same type, so the * GCD will not be empty. */ static Disjunct * intersect_disjuncts(Sentence sent, Disjunct * d1, Disjunct * d2) { Disjunct * d; Connector *c1, *c2, *c; d = copy_disjunct(d1); c = d->left; c1 = d1->left; c2 = d2->left; while (c1!=NULL) { connector_set_string (c, intersect_strings(sent, c1->string, c2->string)); c->multi = (c1->multi) && (c2->multi); c = c->next; c1 = c1->next; c2 = c2->next; } c = d->right; c1 = d1->right; c2 = d2->right; while (c1!=NULL) { connector_set_string (c, intersect_strings(sent, c1->string, c2->string)); c->multi = (c1->multi) && (c2->multi); c = c->next; c1 = c1->next; c2 = c2->next; } return d; } /** * (1) look for the given disjunct in the table structures * if it's already in the table structures, do nothing * (2) otherwise make a copy of it, and put it into the table structures * (3) also put all of the GCDs of this disjunct with all of the * other matching disjuncts into the table. * * The costs are set to zero. * Note that this has no effect on disjunct d. */ static void put_disjunct_into_table(Sentence sent, Disjunct *d) { Disjunct *d1=NULL, *d2, *di, *d_copy; Label_node * lp; int h, k; h = and_hash_disjunct(d); for (lp = sent->and_data.hash_table[h]; lp != NULL; lp = lp->next) { d1 = sent->and_data.label_table[lp->label]; if (disjunct_types_equal(d,d1)) break; } if (lp != NULL) { /* there is already a label for disjuncts of this type */ /* d1 points to the list of disjuncts of this type already there */ while(d1 != NULL) { if (disjuncts_equal_AND(sent, d1, d)) return; d1 = d1->next; } /* now we must put the d disjunct in there, and all of the GCDs of it with the ones already there. This is done as follows. We scan through the list of disjuncts computing the gcd of the new one with each of the others, putting the resulting disjuncts onto another list rooted at d2. Now insert d into the the list already there. Now for each one on the d2 list, put it in if it isn't already there. Here we're making use of the following theorem: Given a collection of sets s1, s2 ... sn closed under intersection, to if we add a new set s to the collection and also add all the intersections between s and s1...sn to the collection, then the collection is still closed under intersection. Use a Venn diagram to prove this theorem. */ d_copy = copy_disjunct(d); d_copy->cost = 0; k = lp->label; d2 = NULL; for (d1=sent->and_data.label_table[k]; d1!=NULL; d1 = d1->next) { di = intersect_disjuncts(sent, d_copy, d1); di->next = d2; d2 = di; } d_copy->next = sent->and_data.label_table[k]; sent->and_data.label_table[k] = d_copy; for (;d2 != NULL; d2 = di) { di = d2->next; for (d1 = sent->and_data.label_table[k]; d1 != NULL; d1 = d1->next) { if (disjuncts_equal_AND(sent, d1, d2)) break; } if (d1 == NULL) { sent->and_data.STAT_N_disjuncts++; d2->next = sent->and_data.label_table[k]; sent->and_data.label_table[k] = d2; } else { d2->next = NULL; free_disjuncts(d2); } } } else { /* create a new label for disjuncts of this type */ d_copy = copy_disjunct(d); d_copy->cost = 0; d_copy->next = NULL; if (sent->and_data.LT_size == sent->and_data.LT_bound) grow_LT(sent); lp = (Label_node *) xalloc(sizeof(Label_node)); lp->next = sent->and_data.hash_table[h]; sent->and_data.hash_table[h] = lp; lp->label = sent->and_data.LT_size; sent->and_data.label_table[sent->and_data.LT_size] = d_copy; sent->and_data.LT_size++; sent->and_data.STAT_N_disjuncts++; } } /** * A sub disjuct of d is any disjunct obtained by killing the tail * of either connector list at any point. * Here we go through each sub-disjunct of d, and put it into our * table data structure. * * The function has no side effects on d. */ static void extract_all_fat_links(Sentence sent, Disjunct * d) { Connector * cl, * cr, *tl, *tr; tl = d->left; d->left = NULL; for (cr = d->right; cr!=NULL; cr = cr->next) { tr = cr->next; cr->next = NULL; if (is_appropriate(sent, d)) put_disjunct_into_table(sent, d); cr->next = tr; } d->left = tl; tr = d->right; d->right = NULL; for (cl = d->left; cl!=NULL; cl = cl->next) { tl = cl->next; cl->next = NULL; if (is_appropriate(sent, d)) put_disjunct_into_table(sent, d); cl->next = tl; } d->right = tr; for (cl = d->left; cl!=NULL; cl = cl->next) { for (cr = d->right; cr!=NULL; cr = cr->next) { tl = cl->next; tr = cr->next; cl->next = cr->next = NULL; if (is_appropriate(sent, d)) put_disjunct_into_table(sent, d); cl->next = tl; cr->next = tr; } } } /** * put the next len characters from c->string (skipping upper * case ones) into s. If there are fewer than this, pad with '*'s. * Then put in a character for the multi match bit of c. * Then put in a '\0', and return a pointer to this place. */ static char * stick_in_one_connector(char *s, Connector *c, int len) { const char * t; t = skip_utf8_upper(c->string); while (*t != '\0') { *s++ = *t++; len--; } while (len > 0) { *s++ = '*'; len--; } if (c->multi) *s++ = '*'; else *s++ = '^'; /* check this sometime */ *s = '\0'; return s; } /** * This takes a label k, modifies the list of disjuncts with that * label. For each such disjunct, it computes the string that * will be used in the fat connector that represents it. * * The only hard part is finding the length of each of the strings * so that "*" can be put in. A better explanation will have to wait. */ static void compute_matchers_for_a_label(Sentence sent, int k) { char buff[2*MAX_WORD]; int lengths[MAX_LINKS]; int N_connectors, i, j; Connector * c; Disjunct * d; const char *cs; char *s; d = sent->and_data.label_table[k]; N_connectors = 0; for (c=d->left; c != NULL; c = c->next) N_connectors ++; for (c=d->right; c != NULL; c = c->next) N_connectors ++; for (i=0; ileft; c != NULL; c = c->next) { cs = skip_utf8_upper(c->string); j = strlen(cs); if (j > lengths[i]) lengths[i] = j; i++; } for (c=d->right; c != NULL; c = c->next) { cs = c->string; cs = skip_utf8_upper(cs); j = strlen(cs); if (j > lengths[i]) lengths[i] = j; i++; } d = d->next; } for (d = sent->and_data.label_table[k]; d!= NULL; d = d->next) { i=0; s = buff; for (c=d->left; c != NULL; c = c->next) { s = stick_in_one_connector(s, c, lengths[i]); i++; } for (c=d->right; c != NULL; c = c->next) { s = stick_in_one_connector(s, c, lengths[i]); i++; } d->string = string_set_add(buff, sent->string_set); } } /** * Goes through the entire sentence and builds the fat link tables * for all the disjuncts of all the words. */ void build_conjunction_tables(Sentence sent) { int w; int k; Disjunct * d; init_HT(sent); init_LT(sent); sent->and_data.STAT_N_disjuncts = 0; sent->and_data.STAT_calls_to_equality_test = 0; for (w=0; wlength; w++) { for (d=sent->word[w].d; d!=NULL; d=d->next) { extract_all_fat_links(sent, d); } } for (k=0; kand_data.LT_size; k++) { compute_matchers_for_a_label(sent, k); } } void print_AND_statistics(Sentence sent) { printf("Number of disjunct types (labels): %d\n", sent->and_data.LT_size); printf("Number of disjuncts in the table: %d\n", sent->and_data.STAT_N_disjuncts); if (sent->and_data.LT_size != 0) { printf("average list length: %f\n", (float)sent->and_data.STAT_N_disjuncts/sent->and_data.LT_size); } printf("Number of equality tests: %d\n", sent->and_data.STAT_calls_to_equality_test); } /** * Fill in the fields of c for the disjunct. This must be in * the table data structures. The label field and the string field * are filled in appropriately. Priority is set to UP_priority. */ static void connector_for_disjunct(Sentence sent, Disjunct * d, Connector * c) { int h; Disjunct * d1 = NULL; Label_node * lp; h = and_hash_disjunct(d); for (lp = sent->and_data.hash_table[h]; lp != NULL; lp = lp->next) { d1 = sent->and_data.label_table[lp->label]; if (disjunct_types_equal(d,d1)) break; } assert(lp != NULL, "A disjunct I inserted was not there. (1)"); while(d1 != NULL) { if (disjuncts_equal_AND(sent, d1, d)) break; d1 = d1->next; } assert(d1 != NULL, "A disjunct I inserted was not there. (2)"); c->label = lp->label; connector_set_string(c, d1->string); c->priority = UP_priority; c->multi = FALSE; } /** * This function allocates and returns a list of disjuncts. * This is the one obtained by substituting each contiguous * non-empty subrange of d (incident on the center) by an appropriate * fat link, in two possible positions. Does not effect d. * The cost of d is inherited by all of the disjuncts in the result. */ static Disjunct * build_fat_link_substitutions(Sentence sent, Disjunct *d) { Connector * cl, * cr, *tl, *tr, *wc, work_connector; Disjunct *d1, *wd, work_disjunct, *d_list; if (d==NULL) return NULL; wd = &work_disjunct; wc = init_connector(&work_connector); d_list = NULL; *wd = *d; tl = d->left; d->left = NULL; for (cr = d->right; cr!=NULL; cr = cr->next) { tr = cr->next; cr->next = NULL; if (is_appropriate(sent, d)) { connector_for_disjunct(sent, d, wc); wd->left = tl; wd->right = wc; wc->next = tr; d1 = copy_disjunct(wd); d1->next = d_list; d_list = d1; wd->left = wc; wc->next = tl; wd->right = tr; d1 = copy_disjunct(wd); d1->next = d_list; d_list = d1; } cr->next = tr; } d->left = tl; tr = d->right; d->right = NULL; for (cl = d->left; cl!=NULL; cl = cl->next) { tl = cl->next; cl->next = NULL; if (is_appropriate(sent, d)) { connector_for_disjunct(sent, d, wc); wd->left = tl; wd->right = wc; wc->next = tr; d1 = copy_disjunct(wd); d1->next = d_list; d_list = d1; wd->left = wc; wc->next = tl; wd->right = tr; d1 = copy_disjunct(wd); d1->next = d_list; d_list = d1; } cl->next = tl; } d->right = tr; for (cl = d->left; cl!=NULL; cl = cl->next) { for (cr = d->right; cr!=NULL; cr = cr->next) { tl = cl->next; tr = cr->next; cl->next = cr->next = NULL; if (is_appropriate(sent, d)) { connector_for_disjunct(sent, d, wc); wd->left = tl; wd->right = wc; wc->next = tr; d1 = copy_disjunct(wd); d1->next = d_list; d_list = d1; wd->left = wc; wc->next = tl; wd->right = tr; d1 = copy_disjunct(wd); d1->next = d_list; d_list = d1; } cl->next = tl; cr->next = tr; } } return d_list; } /** * This is basically a "map" function for build_fat_link_substitutions. * It's applied to the disjuncts for all regular words of the sentence. */ Disjunct * explode_disjunct_list(Sentence sent, Disjunct *d) { Disjunct *d1; d1 = NULL; for (; d!=NULL; d = d->next) { d1 = catenate_disjuncts(d1, build_fat_link_substitutions(sent, d)); } return d1; } /** * Builds and returns a disjunct list for the comma. These are the * disjuncts that are used when "," operates in conjunction with "and". * Does not deal with the ", and" issue, nor the other uses * of comma. */ Disjunct * build_COMMA_disjunct_list(Sentence sent) { int lab; Disjunct *d1, *d2, *d, work_disjunct, *wd; Connector work_connector1, work_connector2, *c1, *c2; Connector work_connector3, *c3; c1 = init_connector(&work_connector1); c2 = init_connector(&work_connector2); c3 = init_connector(&work_connector3); wd = &work_disjunct; d1 = NULL; /* where we put the list we're building */ c1->next = NULL; c2->next = c3; c3->next = NULL; c1->priority = c3->priority = DOWN_priority; c2->priority = UP_priority; c1->multi = c2->multi = c3->multi = FALSE; wd->left = c1; wd->right = c2; wd->string = ","; /* *** fix this later?? */ wd->next = NULL; wd->cost = 0; for (lab = 0; lab < sent->and_data.LT_size; lab++) { for (d = sent->and_data.label_table[lab]; d!=NULL; d=d->next) { c1->string = c2->string = c3->string = d->string; c1->label = c2->label = c3->label = lab; d2 = copy_disjunct(wd); d2->next = d1; d1 = d2; } } return d1; } /** * Builds and returns a disjunct list for "and", "or" and "nor" * for each disjunct in the label_table, we build three disjuncts * this means that "Danny and Tycho and Billy" will be parsable in * two ways. I don't know an easy way to avoid this * the string is either "and", or "or", or "nor" at the moment. */ Disjunct * build_AND_disjunct_list(Sentence sent, char * s) { int lab; Disjunct *d_list, *d1, *d3, *d, *d_copy; Connector *c1, *c2, *c3; d_list = NULL; /* where we put the list we're building */ for (lab = 0; lab < sent->and_data.LT_size; lab++) { for (d = sent->and_data.label_table[lab]; d!=NULL; d=d->next) { d1 = build_fat_link_substitutions(sent, d); d_copy = copy_disjunct(d); /* also include the thing itself! */ d_copy->next = d1; d1 = d_copy; for(;d1 != NULL; d1 = d3) { d3 = d1->next; c1 = connector_new(); c2 = connector_new(); c1->priority = c2->priority = DOWN_priority; connector_set_string(c1, d->string); connector_set_string(c2, d->string); c1->label = c2->label = lab; d1->string = s; if (d1->right == NULL) { d1->right = c2; } else { for (c3=d1->right; c3->next != NULL; c3 = c3->next) ; c3->next = c2; } if (d1->left == NULL) { d1->left = c1; } else { for (c3=d1->left; c3->next != NULL; c3 = c3->next) ; c3->next = c1; } d1->next = d_list; d_list = d1; } } } #if defined(PLURALIZATION) /* here is where "and" makes singular into plural. */ /* must accommodate "he and I are good", "Davy and I are good" "Danny and Davy are good", and reject all of these with "is" instead of "are". The SI connectors must also be modified to accommodate "are John and Dave here", but kill "is John and Dave here" */ if (strcmp(s, "and") == 0) { for (d1 = d_list; d1 != NULL; d1 = d1->next) { for (c1 = d1->right; c1 != NULL; c1 = c1->next) { if ((c1->string[0] == 'S') && ((c1->string[1] == '^') || (c1->string[1] == 's') || (c1->string[1] == 'p') || (c1->string[1] == '\0'))) { connector_set_string(c1, "Sp"); } } for (c1 = d1->left; c1 != NULL; c1 = c1->next) { if ((c1->string[0] == 'S') && (c1->string[1] == 'I') && ((c1->string[2] == '^') || (c1->string[2] == 's') || (c1->string[2] == 'p') || (c1->string[2] == '\0'))) { connector_set_string(c1, "SIp"); } } } } /* "a cat or a dog is here" vs "a cat or a dog are here" The first seems right, the second seems wrong. I'll stick with this. That is, "or" has the property that if both parts are the same in number, we use that but if they differ, we use plural. The connectors on "I" must be handled specially. We accept "I or the dogs are here" but reject "I or the dogs is here" */ /* the code here still does now work "right", rejecting "is John or I invited" and accepting "I or my friend know what happened" The more generous code for "nor" has been used instead */ /* else if (strcmp(s, "or") == 0) { for (d1 = d_list; d1!=NULL; d1=d1->next) { for (c1=d1->right; c1!=NULL; c1=c1->next) { if (c1->string[0] == 'S') { if (c1->string[1]=='^') { if (c1->string[2]=='a') { connector_set_string(c1, "Ss"); } else { connector_set_string(c1, "Sp"); } } else if ((c1->string[1]=='p') && (c1->string[2]=='a')){ connector_set_string(c1, "Sp"); } } } for (c1=d1->left; c1!=NULL; c1=c1->next) { if ((c1->string[0] == 'S') && (c1->string[1] == 'I')) { if (c1->string[2]=='^') { if (c1->string[3]=='a') { connector_set_string(c1, "Ss"); } else { connector_set_string(c1, "Sp"); } } else if ((c1->string[2]=='p') && (c1->string[3]=='a')){ connector_set_string(c1, "Sp"); } } } } } */ /* It appears that the "nor" of two things can be either singular or plural. "neither she nor John likes dogs" "neither she nor John like dogs" */ else if ((strcmp(s,"nor")==0) || (strcmp(s,"or")==0)) { for (d1 = d_list; d1!=NULL; d1=d1->next) { for (c1=d1->right; c1!=NULL; c1=c1->next) { if ((c1->string[0] == 'S') && ((c1->string[1]=='^') || (c1->string[1]=='s') || (c1->string[1]=='p'))) { connector_set_string(c1, "S"); } } for (c1=d1->left; c1!=NULL; c1=c1->next) { if ((c1->string[0] == 'S') && (c1->string[1] == 'I') && ((c1->string[2]=='^') || (c1->string[2]=='s') || (c1->string[2]=='p'))) { connector_set_string(c1, "SI"); } } } } #endif return d_list; } /* The following routines' purpose is to eliminate all but the canonical linkage (of a collection of linkages that are identical except for fat links). An example of the problem is "I went to a talk and ate lunch". Without the canonical checker this has two linkages with identical structure. We restrict our attention to a collection of linkages that are all isomorphic. Consider the set of all disjuncts that are used on one word (over the collection of linkages). This set is closed under GCD, since two linkages could both be used in that position, then so could their GCD. The GCD has been constructed and put in the label table. The canonical linkage is the one in which the minimal disjunct that ever occurrs in a position is used in that position. It is easy to prove that a disjunct is not canonical -- just find one of it's fat disjuncts that can be replaced by a smaller one. If this can not be done, then the linkage is canonical. The algorithm uses link_array[] and chosen_disjuncts[] as input to describe the linkage, and also uses the label_table. (1) find all the words with fat disjuncts (2) scan all links and build, for each fat disjucnt used, an "image" structure that contains what this disjunct must connect to in the rest of the linkage. (3) For each fat disjunct, run through the label_table for disjuncts with the same label, considering only those with strictly more restricted match sets (this uses the string fields of the disjuncts from the table). (4) For each that passes this test, we see if it can replace the chosen disjunct. This is performed by examining how this disjunct compares with the image structure for this word. */ struct Image_node_struct { Image_node * next; Connector * c; /* the connector the place on the disjunct must match */ int place; /* Indicates the place in the fat disjunct where this connector must connect. If 0 then this is a fat connector. If >0 then go place to the right, if <0 then go -place to the left. */ }; /** * Fill in the has_fat_down array. Uses link_array[]. * Returns TRUE if there exists at least one word with a * fat down label. */ int set_has_fat_down(Sentence sent) { int link, w, N_fat; Parse_info pi = sent->parse_info; N_fat = 0; for (w = 0; w < pi->N_words; w++) { pi->has_fat_down[w] = FALSE; } for (link = 0; link < pi->N_links; link++) { if (pi->link_array[link].lc->priority == DOWN_priority) { N_fat ++; pi->has_fat_down[pi->link_array[link].l] = TRUE; } else if (pi->link_array[link].rc->priority == DOWN_priority) { N_fat ++; pi->has_fat_down[pi->link_array[link].r] = TRUE; } } return (N_fat > 0); } static void free_image_array(Parse_info pi) { int w; Image_node * in, * inx; for (w = 0; w < pi->N_words; w++) { for (in = pi->image_array[w]; in != NULL; in = inx) { inx = in->next; xfree((char *)in, sizeof(Image_node)); } pi->image_array[w] = NULL; } } /** * Uses link_array, chosen_disjuncts, and down_label to construct * image_array */ static void build_image_array(Sentence sent) { int link, end, word; Connector * this_end_con, *other_end_con, * upcon, * updiscon, *clist; Disjunct * dis, * updis; Image_node * in; Parse_info pi = sent->parse_info; for (word=0; wordN_words; word++) { pi->image_array[word] = NULL; } for (end = -1; end <= 1; end += 2) { for (link = 0; link < pi->N_links; link++) { if (end < 0) { word = pi->link_array[link].l; if (!pi->has_fat_down[word]) continue; this_end_con = pi->link_array[link].lc; other_end_con = pi->link_array[link].rc; dis = pi->chosen_disjuncts[word]; clist = dis->right; } else { word = pi->link_array[link].r; if (!pi->has_fat_down[word]) continue; this_end_con = pi->link_array[link].rc; other_end_con = pi->link_array[link].lc; dis = pi->chosen_disjuncts[word]; clist = dis->left; } if (this_end_con->priority == DOWN_priority) continue; if ((this_end_con->label != NORMAL_LABEL) && (this_end_con->label < 0)) continue; /* no need to construct an image node for down links, or commas links or either/neither links */ in = (Image_node *) xalloc(sizeof(Image_node)); in->next = pi->image_array[word]; pi->image_array[word] = in; in->c = other_end_con; /* the rest of this code is for computing in->place */ if (this_end_con->priority == UP_priority) { in->place = 0; } else { in->place = 1; if ((dis->left != NULL) && (dis->left->priority == UP_priority)) { upcon = dis->left; } else if ((dis->right != NULL) && (dis->right->priority == UP_priority)) { upcon = dis->right; } else { upcon = NULL; } if (upcon != NULL) { /* add on extra for a fat up link */ updis = sent->and_data.label_table[upcon->label]; if (end > 0) { updiscon = updis->left; } else { updiscon = updis->right; } for (;updiscon != NULL; updiscon = updiscon->next) { in->place ++; } } for (; clist != this_end_con; clist = clist->next) { if (clist->label < 0) in->place++; } in->place = in->place * (-end); } } } } /** * returns TRUE if string s represents a strictly smaller match set * than does t */ static int strictly_smaller(const char * s, const char * t) { int strictness; strictness = 0; for (;(*s!='\0') && (*t!='\0'); s++,t++) { if (*s == *t) continue; if ((*t == '*') || (*s == '^')) { strictness++; } else { return FALSE; } } assert(! ((*s!='\0') || (*t!='\0')), "s and t should be the same length!"); return (strictness > 0); } /** * dis points to a disjunct in the label_table. label is the label * of a different set of disjuncts. These can be derived from the label * of dis. Find the specific disjunct of in label_table[label] * which corresponds to dis. */ static Disjunct * find_subdisjunct(Sentence sent, Disjunct * dis, int label) { Disjunct * d; Connector * cx, *cy; for (d=sent->and_data.label_table[label]; d!=NULL; d=d->next) { for (cx=d->left, cy=dis->left; cx!=NULL; cx=cx->next,cy=cy->next) { /* if ((cx->string != cy->string) || */ if ((strcmp(connector_get_string(cx), connector_get_string(cy)) != 0) || (cx->multi != cy->multi)) break;/* have to check multi? */ } if (cx!=NULL) continue; for (cx=d->right, cy=dis->right; cx!=NULL; cx=cx->next,cy=cy->next) { /* if ((cx->string != cy->string) || */ if ((strcmp(connector_get_string(cx), connector_get_string(cy)) != 0) || (cx->multi != cy->multi)) break; } if (cx==NULL) break; } assert(d!=NULL, "Never found subdisjunct"); return d; } /** * is_canonical_linkage -- * This uses link_array[], chosen_disjuncts[], has_fat_down[]. * It assumes that there is a fat link in the current linkage. * See the comments above for more information about how it works */ int is_canonical_linkage(Sentence sent) { int w, d_label=0, place; Connector *d_c, *c, dummy_connector, *upcon; Disjunct *dis, *chosen_d; Image_node * in; Parse_info pi = sent->parse_info; init_connector(&dummy_connector); dummy_connector.priority = UP_priority; build_image_array(sent); for (w=0; wN_words; w++) { if (!pi->has_fat_down[w]) continue; chosen_d = pi->chosen_disjuncts[w]; /* there must be a down connector in both the left and right list */ for (d_c = chosen_d->left; d_c!=NULL; d_c=d_c->next) { if (d_c->priority == DOWN_priority) { d_label = d_c->label; break; } } assert(d_c != NULL, "Should have found the down link."); if ((chosen_d->left != NULL) && (chosen_d->left->priority == UP_priority)) { upcon = chosen_d->left; } else if ((chosen_d->right != NULL) && (chosen_d->right->priority == UP_priority)) { upcon = chosen_d->right; } else { upcon = NULL; } /* check that the disjunct on w is minimal (canonical) */ for (dis=sent->and_data.label_table[d_label]; dis!=NULL; dis=dis->next) { /* now, reject a disjunct if it's not strictly below the old */ if(!strictly_smaller(dis->string, connector_get_string(d_c))) continue; /* Now, it has to match the image connectors */ for (in = pi->image_array[w]; in != NULL; in = in->next) { place = in->place; if (place == 0) { assert(upcon != NULL, "Should have found an up link"); dummy_connector.label = upcon->label; /* now we have to compute the string of the disjunct with upcon->label that corresponds to dis */ if (upcon->label == d_label) { connector_set_string(&dummy_connector, dis->string); } else { connector_set_string(&dummy_connector, find_subdisjunct(sent, dis, upcon->label)->string); } /* I hope using x_match here is right */ if (!x_match(sent, &dummy_connector, in->c)) break; } else if (place > 0) { for (c=dis->right; place > 1; place--) { c = c->next; } if (!x_match(sent, c, in->c)) break; /* Ditto above comment --DS 07/97*/ } else { for (c=dis->left; place < -1; place++) { c = c->next; } if (!x_match(sent, c, in->c)) break; /* Ditto Ditto */ } } if (in == NULL) break; } if (dis != NULL) break; /* there is a better disjunct that the one we're using, so this word is bad, so we're done */ } free_image_array(pi); return (w == pi->N_words); } /** * This takes as input link_array[], sublinkage->link[]->l and * sublinkage->link[]->r (and also has_fat_down[word], which has been * computed in a prior call to is_canonical()), and from these * computes sublinkage->link[].lc and .rc. We assume these have * been initialized with the values from link_array. We also assume * that there are fat links. */ void compute_pp_link_array_connectors(Sentence sent, Sublinkage *sublinkage) { int link, end, word, place; Connector * this_end_con, * upcon, * updiscon, *clist, *con, *mycon; Disjunct * dis, * updis, *mydis; Parse_info pi = sent->parse_info; for (end = -1; end <= 1; end += 2) { for (link=0; linkN_links; link++) { if (sublinkage->link[link]->l == -1) continue; if (end < 0) { word = pi->link_array[link].l; if (!pi->has_fat_down[word]) continue; this_end_con = pi->link_array[link].lc; dis = pi->chosen_disjuncts[word]; mydis = pi->chosen_disjuncts[sublinkage->link[link]->l]; clist = dis->right; } else { word = pi->link_array[link].r; if (!pi->has_fat_down[word]) continue; this_end_con = pi->link_array[link].rc; dis = pi->chosen_disjuncts[word]; mydis = pi->chosen_disjuncts[sublinkage->link[link]->r]; clist = dis->left; } if (this_end_con->label != NORMAL_LABEL) continue; /* no need to construct a connector for up links, or commas links or either/neither links */ /* Now compute the place */ place = 0; if ((dis->left != NULL) && (dis->left->priority == UP_priority)) { upcon = dis->left; } else if ((dis->right != NULL) && (dis->right->priority == UP_priority)) { upcon = dis->right; } else { upcon = NULL; } if (upcon != NULL) { /* add on extra for a fat up link */ updis = sent->and_data.label_table[upcon->label]; if (end > 0) { updiscon = updis->left; } else { updiscon = updis->right; } for (;updiscon != NULL; updiscon = updiscon->next) { place ++; } } for (; clist != this_end_con; clist = clist->next) { if (clist->label < 0) place++; } /* place has just been computed */ /* now find the right disjunct in the table */ if ((mydis->left != NULL) && (mydis->left->priority == UP_priority)) { mycon = mydis->left; } else if ((mydis->right != NULL) && (mydis->right->priority == UP_priority)) { mycon = mydis->right; } else { printf("word = %d\n", word); printf("fat link: [%d, %d]\n", pi->link_array[link].l, pi->link_array[link].r); printf("thin link: [%d, %d]\n", sublinkage->link[link]->l, sublinkage->link[link]->r); assert(FALSE, "There should be a fat UP link here"); } for (dis=sent->and_data.label_table[mycon->label]; dis != NULL; dis=dis->next) { if (dis->string == connector_get_string(mycon)) break; } assert(dis!=NULL, "Should have found this connector string"); /* the disjunct in the table has just been found */ if (end < 0) { for (con = dis->right; place > 0; place--, con=con->next) {} /* sublinkage->link[link]->lc = con; OLD CODE */ exfree_connectors(sublinkage->link[link]->lc); sublinkage->link[link]->lc = excopy_connectors(con); } else { for (con = dis->left; place > 0; place--, con=con->next) {} /* sublinkage->link[link]->rc = con; OLD CODE */ exfree_connectors(sublinkage->link[link]->rc); sublinkage->link[link]->rc = excopy_connectors(con); } } } } link-grammar/link-grammar/api-structures.h0000644000000000000000000003202512536650433016062 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ /***************************************************************************** * * NOTE: There are five basic "types" in the link parser API. These are: * * Dictionary, Parse_Options, Sentence, Linkage, PostProcessor * * To make the use of the API simpler, each of these is typedef'ed as a pointer * to a data structure. As a result, some of the code may look a little funny, * since it uses pointers in a way that is syntactically inconsistent. After * working a bit with these basic types enough, this should not be confusing. * ******************************************************************************/ #ifndef _API_STRUCTURESH_ #define _API_STRUCTURESH_ #include #include "api-types.h" #include "structures.h" /* for definition of Link */ #include "corpus/corpus.h" #include "error.h" typedef enum { VDAL=1, /* Sort by Violations, Disjunct cost, And cost, Link cost */ CORPUS, /* Sort by Corpus cost */ } Cost_Model_type; struct Cost_Model_s { Cost_Model_type type; int (*compare_fn)(Linkage_info *, Linkage_info *); }; struct Resources_s { int max_parse_time; /* in seconds */ size_t max_memory; /* in bytes */ double time_when_parse_started; size_t space_when_parse_started; double when_created; double when_last_called; double cumulative_time; int memory_exhausted; int timer_expired; }; struct Parse_Options_s { int verbosity; /* Level of detail to give about the computation 0 */ int use_sat_solver; /* Use the Boolean SAT based parser */ int linkage_limit; /* The maximum number of linkages processed 100 */ float disjunct_cost; /* Max disjunct cost to allow */ int use_fat_links; /* Look for fat linkages */ int min_null_count; /* The minimum number of null links to allow */ int max_null_count; /* The maximum number of null links to allow */ int null_block; /* consecutive blocks of this many words are considered as one null link (default=1) */ int islands_ok; /* If TRUE, then linkages with islands (separate component of the link graph) will be generated (default=FALSE) */ int twopass_length; /* min length for two-pass post processing */ int max_sentence_length; int short_length; /* Links that are limited in length can be * no longer than this. Default = 6 */ int all_short; /* If true, there can be no connectors that are exempt */ int use_spell_guess; /* Perform spell-guessing of unknown words. */ Cost_Model cost_model; /* For sorting linkages in post_processing */ Resources resources; /* For deciding when to abort the parsing */ /* Flags governing the command-line client; not used by parser */ int display_short; int display_word_subscripts; /* as in "dog.n" as opposed to "dog" */ int display_link_subscripts; /* as in "Ss" as opposed to "S" */ int display_walls; int display_union; /* print squashed version of linkage with conjunction? */ int allow_null; /* true if we allow null links in parsing */ int use_cluster_disjuncts; /* if true, atttempt using a borader list of disjuncts */ int echo_on; /* true if we should echo the input sentence */ int batch_mode; /* if true, process sentences non-interactively */ int panic_mode; /* if true, parse in "panic mode" after all else fails */ int screen_width; /* width of screen for displaying linkages */ int display_on; /* if true, output graphical linkage diagram */ int display_postscript; /* if true, output postscript linkage */ int display_constituents; /* if true, output treebank-style constituent structure */ int display_bad; /* if true, bad linkages are displayed */ int display_disjuncts; /* if true, print disjuncts that were used */ int display_links; /* if true, a list o' links is printed out */ int display_senses; /* if true, sense candidates are printed out */ }; struct Connector_set_s { Connector ** hash_table; int table_size; int is_defined; /* if 0 then there is no such set */ }; struct Dictionary_s { Dict_node * root; Regex_node * regex_root; const char * name; const char * lang; int use_unknown_word; int unknown_word_defined; /* If not null, then use spelling guesser for unknown words */ void * spell_checker; /* spell checker handle */ #if USE_CORPUS Corpus * corpus; /* Statistics database */ #endif #if DONT_USE_REGEX_GUESSING /* English language morphology bits * replaced by regex-based morpho guesser * Dead code, remove at leisure. */ int capitalized_word_defined; int pl_capitalized_word_defined; int hyphenated_word_defined; int number_word_defined; int ing_word_defined; int s_word_defined; int ed_word_defined; int ly_word_defined; #endif /* DONT_USE_REGEX_GUESSING */ int left_wall_defined; int right_wall_defined; /* Affixes are used during the tokenization stage. */ Dictionary affix_table; int r_strippable; /* right */ int l_strippable; /* left */ int u_strippable; /* units on left */ int s_strippable; /* generic suffix */ int p_strippable; /* generic prefix */ const char ** strip_left; const char ** strip_right; const char ** strip_units; const char ** prefix; const char ** suffix; Postprocessor * postprocessor; Postprocessor * constituent_pp; int andable_defined; Connector_set * andable_connector_set; /* NULL=everything is andable */ Connector_set * unlimited_connector_set; /* NULL=everthing is unlimited */ int max_cost; String_set * string_set; /* Set of link names constructed during parsing */ int num_entries; Word_file * word_file_header; /* exp_list links together all the Exp structs that are allocated * in reading this dictionary. Needed for freeing the dictionary */ Exp * exp_list; /* Private data elements that come in play only while the * dictionary is being read, and are not otherwise used. */ FILE * fp; char token[MAX_TOKEN_LENGTH]; int is_special; /* boolean */ wint_t already_got_it; int line_number; int recursive_error; /* boolean */ mbstate_t mbss; /* multi-byte shift state */ }; struct Label_node_s { int label; Label_node * next; }; #define HT_SIZE (1<<10) struct And_data_s { int LT_bound; int LT_size; Disjunct ** label_table; Label_node * hash_table[HT_SIZE]; /* keeping statistics */ int STAT_N_disjuncts; int STAT_calls_to_equality_test; }; struct Parse_info_struct { int x_table_size; int log2_x_table_size; X_table_connector ** x_table; Parse_set * parse_set; int N_words; Disjunct ** chosen_disjuncts; int N_links; Link link_array[MAX_LINKS]; /* Points to the image structure for each word. * NULL if not a fat word. */ Image_node ** image_array; /* Array of boolean flags, one per word. Set to TRUE if this * word has a fat down link. FALSE otherise */ Boolean *has_fat_down; /* thread-safe random number state */ unsigned int rand_state; }; struct Sentence_s { Dictionary dict; /* words are defined from this dictionary */ const char *orig_sentence; /* Copy of original sentence */ int length; /* number of words */ Word word[MAX_SENTENCE]; /* array of words after tokenization */ char * is_conjunction; /* Array of flags, one per word; set to TRUE if conjunction, as defined by dictionary */ char** deletable; /* deletable regions in a sentence with conjunction */ char** dptr; /* private pointer for mem management only */ char** effective_dist; int num_linkages_found; /* total number before postprocessing. This is returned by the count() function */ int num_linkages_alloced;/* total number of linkages allocated. the number post-processed might be fewer because some are non-canonical */ int num_linkages_post_processed; /* The number of linkages that are actually put into the array that was alloced. This is not the same as num alloced because some may be non-canonical. */ int num_valid_linkages; /* number with no pp violations */ int num_thin_linkages; /* valid linkages which are not fat */ int null_links; /* null links allowed */ int null_count; /* number of null links in linkages */ Parse_info parse_info; /* set of parses for the sentence */ Linkage_info * link_info; /* array of valid and invalid linkages (sorted) */ String_set * string_set; /* used for word names, not connectors */ And_data and_data; /* used to keep track of fat disjuncts */ char q_pruned_rules; /* don't prune rules more than once in p.p. */ int post_quote[MAX_SENTENCE]; /* Used only by tokenizer. */ analyze_context_t * analyze_ctxt; /* private state used for analyzing */ count_context_t * count_ctxt; /* private state info used for counting */ match_context_t * match_ctxt; /* private state info used for matching */ /* thread-safe random number state */ unsigned int rand_state; /* Hook for the SAT solver */ void *hook; }; /********************************************************* * * Post processing * **********************************************************/ struct Domain_s { const char * string; int size; List_o_links * lol; int start_link; /* the link that started this domain */ int type; /* one letter name */ DTreeLeaf * child; Domain * parent; }; struct DTreeLeaf_s { Domain * parent; int link; DTreeLeaf * next; }; struct PP_data_s { int N_domains; List_o_links * word_links[MAX_SENTENCE]; List_o_links * links_to_ignore; Domain domain_array[MAX_LINKS]; /* the domains, sorted by size */ int length; /* length of current sentence */ }; struct PP_info_s { int num_domains; const char ** domain_name; }; struct Postprocessor_s { pp_knowledge *knowledge; /* internal rep'n of the actual rules */ int n_global_rules_firing; /* this & the next are diagnostic */ int n_local_rules_firing; pp_linkset *set_of_links_of_sentence; /* seen in *any* linkage of sent */ pp_linkset *set_of_links_in_an_active_rule;/*used in *some* linkage of sent*/ int *relevant_contains_one_rules; /* -1-terminated list of indices */ int *relevant_contains_none_rules; /* the following maintain state during a call to post_process() */ String_set *sentence_link_name_set; /* link names seen for sentence */ int visited[MAX_SENTENCE]; /* for the depth-first search */ PP_node *pp_node; PP_data pp_data; }; /********************************************************* * * Linkages * **********************************************************/ struct Sublinkage_s { int num_links; /* Number of links in array */ Link ** link; /* Array of links */ PP_info * pp_info; /* PP info for each link */ const char * violation; /* Name of violation, if any */ PP_data pp_data; }; typedef struct DIS_node_struct DIS_node; struct Linkage_s { int num_words; /* number of (tokenized) words */ const char * * word; /* array of word spellings */ Linkage_info* info; /* index and cost information */ int num_sublinkages; /* One for thin linkages, bigger for fat */ int current; /* Allows user to select particular sublinkage */ Sublinkage * sublinkage; /* A parse with conjunctions will have several */ int unionized; /* if TRUE, union of links has been computed */ Sentence sent; Parse_Options opts; DIS_node * dis_con_tree; /* Disjunction-conjunction tree */ }; #endif link-grammar/link-grammar/word-utils.c0000644000000000000000000003121412536650433015173 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ /* * Miscellaneous utilities for dealing with word types. */ #include #include #include #include "disjunct-utils.h" #include "word-utils.h" /* ======================================================== */ /* Exp utilities ... */ void free_E_list(E_list *); void free_Exp(Exp * e) { if (e->type != CONNECTOR_type) { free_E_list(e->u.l); } xfree((char *)e, sizeof(Exp)); } void free_E_list(E_list * l) { if (l == NULL) return; free_E_list(l->next); free_Exp(l->e); xfree((char *)l, sizeof(E_list)); } /* Returns the number of connectors in the expression e */ int size_of_expression(Exp * e) { int size; E_list * l; if (e->type == CONNECTOR_type) return 1; size = 0; for (l=e->u.l; l!=NULL; l=l->next) { size += size_of_expression(l->e); } return size; } /** * Build a copy of the given expression (don't copy strings, of course) */ static E_list * copy_E_list(E_list * l); Exp * copy_Exp(Exp * e) { Exp * n; if (e == NULL) return NULL; n = (Exp *) xalloc(sizeof(Exp)); *n = *e; if (e->type != CONNECTOR_type) { n->u.l = copy_E_list(e->u.l); } return n; } static E_list * copy_E_list(E_list * l) { E_list * nl; if (l == NULL) return NULL; nl = (E_list *) xalloc(sizeof(E_list)); nl->next = copy_E_list(l->next); nl->e = copy_Exp(l->e); return nl; } /** * Compare two expressions, return 1 for equal, 0 for unequal */ static int exp_compare(Exp * e1, Exp * e2) { E_list *el1, *el2; if ((e1 == NULL) && (e2 == NULL)) return 1; /* they are equal */ if ((e1 == NULL) || (e2 == NULL)) return 0; /* they are not equal */ if (e1->type != e2->type) return 0; if (fabs (e1->cost - e2->cost) > 0.001) return 0; if (e1->type == CONNECTOR_type) { if (e1->dir != e2->dir) return 0; /* printf("%s %s\n",e1->u.string,e2->u.string); */ if (strcmp(e1->u.string,e2->u.string)!=0) return 0; } else { el1 = e1->u.l; el2 = e2->u.l; /* while at least 1 is non-null */ for (;(el1!=NULL)||(el2!=NULL);) { /*fail if 1 is null */ if ((el1==NULL)||(el2==NULL)) return 0; /* fail if they are not compared */ if (exp_compare(el1->e, el2->e) == 0) return 0; if (el1!=NULL) el1 = el1->next; if (el2!=NULL) el2 = el2->next; } } return 1; /* if never returned 0, return 1 */ } /** * Sub-expression matcher -- return 1 if sub is non-NULL and * contained in super, 0 otherwise. */ static int exp_contains(Exp * super, Exp * sub) { E_list * el; #ifdef DEBUG printf("SUP: "); if (super) print_expression(super); printf("\n"); #endif if (sub==NULL || super==NULL) return 0; if (exp_compare(sub,super)==1) return 1; if (super->type==CONNECTOR_type) return 0; /* super is a leaf */ /* proceed through supers children and return 1 if sub is contained in any of them */ for(el = super->u.l; el!=NULL; el=el->next) { if (exp_contains(el->e, sub)==1) return 1; } return 0; } /* ======================================================== */ /* X_node utilities ... */ /** * frees the list of X_nodes pointed to by x, and all of the expressions */ void free_X_nodes(X_node * x) { X_node * y; for (; x!= NULL; x = y) { y = x->next; free_Exp(x->exp); xfree((char *)x, sizeof(X_node)); } } /** * Destructively catenates the two disjunct lists d1 followed by d2. * Doesn't change the contents of the disjuncts. * Traverses the first list, but not the second. */ X_node * catenate_X_nodes(X_node *d1, X_node *d2) { X_node * dis = d1; if (d1 == NULL) return d2; if (d2 == NULL) return d1; while (dis->next != NULL) dis = dis->next; dis->next = d2; return d1; } /* ======================================================== */ /* Connector utilities ... */ /** * free_connectors() -- free the list of connectors pointed to by e * (does not free any strings) */ void free_connectors(Connector *e) { Connector * n; for (; e != NULL; e = n) { n = e->next; xfree((char *)e, sizeof(Connector)); } } void exfree_connectors(Connector *e) { Connector * n; for(;e != NULL; e = n) { n = e->next; exfree((void *) e->string, sizeof(char)*(strlen(e->string)+1)); exfree(e, sizeof(Connector)); } } Connector * connector_new(void) { Connector *c = (Connector *) xalloc(sizeof(Connector)); c->length_limit = UNLIMITED_LEN; c->string = ""; c->label = NORMAL_LABEL; c->hash = -1; c->priority = THIN_priority; c->multi = FALSE; c->next = NULL; c->tableNext = NULL; return c; } Connector * init_connector(Connector *c) { c->hash = -1; c->length_limit = UNLIMITED_LEN; return c; } /** * This builds a new copy of the connector list pointed to by c. * Strings, as usual, are not copied. */ Connector * copy_connectors(Connector * c) { Connector *c1; if (c == NULL) return NULL; c1 = connector_new(); *c1 = *c; c1->next = copy_connectors(c->next); return c1; } Connector * excopy_connectors(Connector * c) { char * s; Connector *c1; if (c == NULL) return NULL; c1 = connector_new(); *c1 = *c; s = (char *) exalloc(sizeof(char)*(strlen(c->string)+1)); strcpy(s, c->string); c1->string = s; c1->next = excopy_connectors(c->next); return c1; } /* ======================================================== */ /* Link utilities ... */ Link * excopy_link(Link * l) { char * s; Link * newl; if (l == NULL) return NULL; newl = (Link *) exalloc(sizeof(Link)); s = (char *) exalloc(sizeof(char)*(strlen(l->name)+1)); strcpy(s, l->name); newl->name = s; newl->l = l->l; newl->r = l->r; newl->lc = excopy_connectors(l->lc); newl->rc = excopy_connectors(l->rc); return newl; } void exfree_link(Link * l) { exfree_connectors(l->rc); exfree_connectors(l->lc); exfree((void *)l->name, sizeof(char)*(strlen(l->name)+1)); exfree(l, sizeof(Link)); } /* ======================================================== */ /* Connector-set utilities ... */ /** * This hash function only looks at the leading upper case letters of * the string, and the direction, '+' or '-'. */ static int connector_set_hash(Connector_set *conset, const char * s, int d) { unsigned int i; /* djb2 hash */ i = 5381; i = ((i << 5) + i) + d; while (isupper((int) *s)) /* connector tables cannot contain UTF8, yet */ { i = ((i << 5) + i) + *s; s++; } return (i & (conset->table_size-1)); } static void build_connector_set_from_expression(Connector_set * conset, Exp * e) { E_list * l; Connector * c; int h; if (e->type == CONNECTOR_type) { c = connector_new(); c->string = e->u.string; c->word = e->dir; /* just use the word field to give the dir */ h = connector_set_hash(conset, c->string, c->word); c->next = conset->hash_table[h]; conset->hash_table[h] = c; } else { for (l=e->u.l; l!=NULL; l=l->next) { build_connector_set_from_expression(conset, l->e); } } } Connector_set * connector_set_create(Exp *e) { int i; Connector_set *conset; conset = (Connector_set *) xalloc(sizeof(Connector_set)); conset->table_size = next_power_of_two_up(size_of_expression(e)); conset->hash_table = (Connector **) xalloc(conset->table_size * sizeof(Connector *)); for (i=0; itable_size; i++) conset->hash_table[i] = NULL; build_connector_set_from_expression(conset, e); return conset; } void connector_set_delete(Connector_set * conset) { int i; if (conset == NULL) return; for (i=0; itable_size; i++) free_connectors(conset->hash_table[i]); xfree(conset->hash_table, conset->table_size * sizeof(Connector *)); xfree(conset, sizeof(Connector_set)); } /** * Returns TRUE the given connector is in this conset. FALSE otherwise. * d='+' means this connector is on the right side of the disjunct. * d='-' means this connector is on the left side of the disjunct. */ int match_in_connector_set(Sentence sent, Connector_set *conset, Connector * c, int d) { int h; Connector * c1; if (conset == NULL) return FALSE; h = connector_set_hash(conset, c->string, d); for (c1 = conset->hash_table[h]; c1 != NULL; c1 = c1->next) { if (x_match(sent, c1, c) && (d == c1->word)) return TRUE; } return FALSE; } /* ======================================================== */ /* More connector utilities ... */ /** * This is like the basic "match" function in count.c - the basic * connector-matching function used in parsing - except it ignores * "priority" (used to handle fat links) */ static int easy_match(const char * s, const char * t) { while(isupper((int)*s) || isupper((int)*t)) { if (*s != *t) return FALSE; s++; t++; } while ((*s!='\0') && (*t!='\0')) { if ((*s == '*') || (*t == '*') || ((*s == *t) && (*s != '^'))) { s++; t++; } else return FALSE; } return TRUE; } /** * word_has_connector() -- return TRUE if dictionary expression has connector * This function takes a dict_node (corresponding to an entry in a * given dictionary), a string (representing a connector), and a * direction (0 = right-pointing, 1 = left-pointing); it returns 1 * if the dictionary expression for the word includes the connector, * 0 otherwise. This can be used to see if a word is in a certain * category (checking for a category connector in a table), or to see * if a word has a connector in a normal dictionary. The connector * check uses a "smart-match", the same kind used by the parser. */ int word_has_connector(Dict_node * dn, const char * cs, int direction) { Connector * c2=NULL; Disjunct * d, *d0; if(dn == NULL) return -1; d0 = d = build_disjuncts_for_dict_node(dn); if(d == NULL) return 0; for(; d!=NULL; d=d->next) { if(direction==0) c2 = d->right; if(direction==1) c2 = d->left; for(; c2!=NULL; c2=c2->next) { if(easy_match(c2->string, cs)==1) { free_disjuncts(d0); return 1; } } } free_disjuncts(d0); return 0; } /* ======================================================== */ /* Dictionary utilities ... */ static int dn_word_contains(Dictionary dict, Dict_node * w_dn, const char * macro) { Exp * m_exp; Dict_node *m_dn; if (w_dn == NULL) return 0; m_dn = dictionary_lookup_list(dict, macro); if (m_dn == NULL) return 0; m_exp = m_dn->exp; free_lookup_list(m_dn); #ifdef DEBUG printf("\nWORD: "); print_expression(w_dn->exp); printf("\nMACR: "); print_expression(m_exp); printf("\n"); #endif for (;w_dn != NULL; w_dn = w_dn->right) { if (1 == exp_contains(w_dn->exp, m_exp)) return 1; } return 0; } /** * word_contains: return true if the word may involve application of * a rule. * * @return: true if word's expression contains macro's expression, * false otherwise. */ int word_contains(Dictionary dict, const char * word, const char * macro) { Dict_node *w_dn; int ret; w_dn = abridged_lookup_list(dict, word); ret = dn_word_contains(dict, w_dn, macro); free_lookup_list(w_dn); return ret; } Dict_node * list_whole_dictionary(Dict_node *root, Dict_node *dn) { Dict_node *c, *d; if (root == NULL) return dn; c = (Dict_node *) xalloc(sizeof(Dict_node)); *c = *root; d = list_whole_dictionary(root->left, dn); c->right = list_whole_dictionary(root->right, d); return c; } #define PAST_TENSE_FORM_MARKER "" #define ENTITY_MARKER "" #define COMMON_ENTITY_MARKER "" /* This is exported to public API (for Java) * @deprecated -- past-tense verbs are tagged with .v-d or .w-d or .q-d * subscripts. use those instead to figure out if a verb is past tense. */ int dictionary_is_past_tense_form(Dictionary dict, const char * str) { if (word_contains(dict, str, PAST_TENSE_FORM_MARKER) == 1) return 1; return 0; } /** * dictionary_is_entity - Return true if word is entity. * Entities are proper names (geographical names, * names of people), street addresses, phone numbers, * etc. */ /* This is exported to public API (for Java) */ int dictionary_is_entity(Dictionary dict, const char * str) { if (word_contains(dict, str, ENTITY_MARKER) == 1) return 1; return 0; } /* ========================= END OF FILE ============================== */ link-grammar/link-grammar/pp_linkset.h0000644000000000000000000000251212536650433015236 0ustar /********************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /********************************************************************************/ pp_linkset *pp_linkset_open(int size); void pp_linkset_close (pp_linkset *ls); void pp_linkset_clear (pp_linkset *ls); int pp_linkset_add (pp_linkset *ls, const char *str); int pp_linkset_match (pp_linkset *ls, const char *str); int pp_linkset_match_bw (pp_linkset *ls, const char *str); int pp_linkset_population(pp_linkset *ls); link-grammar/link-grammar/and.h0000644000000000000000000000347412536650433013640 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ link_private void free_AND_tables(Sentence sent); link_private void print_AND_statistics(Sentence sent); link_private void init_andable_hash_table(Dictionary dict); link_private void free_andable_hash_table(Dictionary dict); link_private void initialize_conjunction_tables(Sentence sent); link_private int is_canonical_linkage(Sentence sent); link_private Disjunct * build_AND_disjunct_list(Sentence sent, char *); link_private Disjunct * build_COMMA_disjunct_list(Sentence sent); link_private Disjunct * explode_disjunct_list(Sentence sent, Disjunct *); link_private void build_conjunction_tables(Sentence); link_private void compute_pp_link_array_connectors(Sentence sent, Sublinkage *sublinkage); /* Following need to be visible to sat solver, can't be private */ int set_has_fat_down(Sentence sent); const char * intersect_strings(Sentence sent, const char * s, const char * t); link-grammar/link-grammar/.deps/0000755000000000000000000000000012537603145013725 5ustar link-grammar/link-grammar/.deps/analyze-linkage.Plo0000644000000000000000000000001012537603145017443 0ustar # dummy link-grammar/link-grammar/.deps/print-util.Plo0000644000000000000000000000001012537603145016477 0ustar # dummy link-grammar/link-grammar/.deps/build-disjuncts.Plo0000644000000000000000000000001012537603145017473 0ustar # dummy link-grammar/link-grammar/.deps/utilities.Plo0000644000000000000000000000001012537603145016403 0ustar # dummy link-grammar/link-grammar/.deps/spellcheck-aspell.Plo0000644000000000000000000000001012537603145017763 0ustar # dummy link-grammar/link-grammar/.deps/disjuncts.Plo0000644000000000000000000000001012537603145016376 0ustar # dummy link-grammar/link-grammar/.deps/word-utils.Plo0000644000000000000000000000001012537603145016501 0ustar # dummy link-grammar/link-grammar/.deps/regex-morph.Plo0000644000000000000000000000001012537603145016625 0ustar # dummy link-grammar/link-grammar/.deps/prune.Plo0000644000000000000000000000001012537603145015521 0ustar # dummy link-grammar/link-grammar/.deps/word-file.Plo0000644000000000000000000000001012537603145016260 0ustar # dummy link-grammar/link-grammar/.deps/count.Plo0000644000000000000000000000001012537603145015520 0ustar # dummy link-grammar/link-grammar/.deps/spellcheck-hun.Plo0000644000000000000000000000001012537603145017275 0ustar # dummy link-grammar/link-grammar/.deps/string-set.Plo0000644000000000000000000000001012537603145016467 0ustar # dummy link-grammar/link-grammar/.deps/pp_lexer.Plo0000644000000000000000000000001012537603145016206 0ustar # dummy link-grammar/link-grammar/.deps/preparation.Plo0000644000000000000000000000001012537603145016714 0ustar # dummy link-grammar/link-grammar/.deps/tokenize.Plo0000644000000000000000000000001012537603145016220 0ustar # dummy link-grammar/link-grammar/.deps/idiom.Plo0000644000000000000000000000001012537603145015471 0ustar # dummy link-grammar/link-grammar/.deps/print.Plo0000644000000000000000000000001012537603145015524 0ustar # dummy link-grammar/link-grammar/.deps/disjunct-utils.Plo0000644000000000000000000000001012537603145017351 0ustar # dummy link-grammar/link-grammar/.deps/prefix.Plo0000644000000000000000000000001012537603145015665 0ustar # dummy link-grammar/link-grammar/.deps/and.Plo0000644000000000000000000000001012537603145015132 0ustar # dummy link-grammar/link-grammar/.deps/extract-links.Plo0000644000000000000000000000001012537603145017160 0ustar # dummy link-grammar/link-grammar/.deps/api.Plo0000644000000000000000000000001012537603145015141 0ustar # dummy link-grammar/link-grammar/.deps/command-line.Plo0000644000000000000000000000001012537603145016733 0ustar # dummy link-grammar/link-grammar/.deps/jni-client.Plo0000644000000000000000000000001012537603145016424 0ustar # dummy link-grammar/link-grammar/.deps/fast-match.Plo0000644000000000000000000000001012537603145016417 0ustar # dummy link-grammar/link-grammar/.deps/error.Plo0000644000000000000000000000001012537603145015521 0ustar # dummy link-grammar/link-grammar/.deps/post-process.Plo0000644000000000000000000000001012537603145017031 0ustar # dummy link-grammar/link-grammar/.deps/constituents.Plo0000644000000000000000000000001012537603145017132 0ustar # dummy link-grammar/link-grammar/.deps/massage.Plo0000644000000000000000000000001012537603145016010 0ustar # dummy link-grammar/link-grammar/.deps/expand.Plo0000644000000000000000000000001012537603145015647 0ustar # dummy link-grammar/link-grammar/.deps/link-parser.Po0000644000000000000000000000001012537603145016443 0ustar # dummy link-grammar/link-grammar/.deps/read-regex.Plo0000644000000000000000000000001012537603145016413 0ustar # dummy link-grammar/link-grammar/.deps/pp_knowledge.Plo0000644000000000000000000000001012537603145017046 0ustar # dummy link-grammar/link-grammar/.deps/read-dict.Plo0000644000000000000000000000001012537603145016224 0ustar # dummy link-grammar/link-grammar/.deps/resources.Plo0000644000000000000000000000001012537603145016402 0ustar # dummy link-grammar/link-grammar/.deps/pp_linkset.Plo0000644000000000000000000000001012537603145016540 0ustar # dummy link-grammar/link-grammar/disjunct-utils.h0000644000000000000000000000250412536650433016050 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #ifndef _LINK_GRAMMAR_DISJUNCT_UTILS_H_ #define _LINK_GRAMMAR_DISJUNCT_UTILS_H_ #include "api-types.h" /* Disjunct utilities ... */ void free_disjuncts(Disjunct *); int count_disjuncts(Disjunct *); Disjunct * copy_disjunct(Disjunct * ); Disjunct * catenate_disjuncts(Disjunct *, Disjunct *); Disjunct * eliminate_duplicate_disjuncts(Disjunct * ); char * print_one_disjunct(Disjunct *); #endif /* _LINK_GRAMMAR_DISJUNCT_UTILS_H_ */ link-grammar/link-grammar/expand.c0000644000000000000000000000403712536650433014344 0ustar /*************************************************************************/ /* Copyright (c) 2009 Linas Vepstas */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ /* * expand.c * * Enlarge the range of possible disjunct to consider while parsing. */ #include "api-structures.h" #include "expand.h" #include "disjunct-utils.h" #include "word-utils.h" #include "corpus/cluster.h" /* ========================================================= */ static Disjunct * build_expansion_disjuncts(Cluster *clu, X_node *x) { Disjunct *dj; dj = lg_cluster_get_disjuncts(clu, x->string); if (dj) printf("Expanded %s \n", x->string); return dj; } /** * Increase the number of disjuncts associated to each word in the * sentence by working with word-clusters. Return true if the number * of disjuncts were expanded, else return false. */ int lg_expand_disjunct_list(Sentence sent) { int w; Cluster *clu = lg_cluster_new(); int expanded = FALSE; for (w = 0; w < sent->length; w++) { X_node * x; Disjunct * d = sent->word[w].d; for (x = sent->word[w].x; x != NULL; x = x->next) { Disjunct *dx = build_expansion_disjuncts(clu, x); if (dx) { int cnt = count_disjuncts(d); d = catenate_disjuncts(dx, d); d = eliminate_duplicate_disjuncts(d); if (cnt < count_disjuncts(d)) expanded = TRUE; } } sent->word[w].d = d; } lg_cluster_delete(clu); return expanded; } link-grammar/link-grammar/autoit/0000755000000000000000000000000012536650433014222 5ustar link-grammar/link-grammar/autoit/README0000644000000000000000000000033012536650433015076 0ustar Link-grammar bindings for AutoIt -------------------------------- Developed by J Rowe March 2010 AutoIt is a scripting language for MS Windows. See http://www.autoitscript.com link-grammar/link-grammar/autoit/_LGTest.au30000644000000000000000000000120012536650433016126 0ustar #include "_LinkGrammar.au3" $Test = "My dog likes dog food." $options = _LG_ParseOptionsCreate() $dict = _LG_DictionaryCreateLang("en") $Sentence = _LG_SentenceCreate($Test, $dict) _LG_SentenceSplit($Sentence, $options) $num_linkages = _LG_SentenceParse($Sentence, $options) If $num_linkages > 0 Then $linkage = _LG_LinkageCreate(0, $Sentence, $options) $diagram = _LG_LinkagePrintDiagram($linkage) $diagram2 = _LG_LinkagePrintConstituentTree($linkage, 3) $diagram3 = _LG_LinkagePrintDisjuncts($linkage) ConsoleWrite($diagram & @CRLF) ConsoleWrite($diagram2 & @CRLF) ConsoleWrite($diagram3 & @CRLF) EndIf link-grammar/link-grammar/autoit/_LinkGrammar.au30000644000000000000000000006025212536650433017204 0ustar Global $_LG_DLL = DllOpen("link-grammar.dll") Func _LG_GetVersion() ;const char * linkgrammar_get_version(void); $result = DllCall($_LG_DLL, "str:cdecl", "linkgrammar_get_version") Return $result[0] EndFunc ;==>_LG_GetVersion Func _LG_DictionaryCreateDefault() ;Dictionary dictionary_create_default_lang(void); $result = DllCall($_LG_DLL, "ptr:cdecl", "dictionary_create_default_lang") Return $result[0] EndFunc ;==>_LG_DictionaryCreateDefault Func _LG_DictionaryCreateLang($sLanguage) ;Dictionary dictionary_create_lang(const char * lang); $result = DllCall($_LG_DLL, "ptr:cdecl", "dictionary_create_lang", "str", $sLanguage) Return $result[0] EndFunc ;==>_LG_DictionaryCreateLang ;Func _LG_Dictionary_Create($sDictName, $sPostProcessFileName, $sConstituentKnowledgeName, $sAffixName) ;Dictionary dictionary_create(const char *dict_name, ; const char *post_process_file_name, ; const char *constituent_knowledge_name, ; const char *affix_name);EndFunc ;EndFunc Func _LG_DictionaryDelete($hDictionary) ;int dictionary_delete(Dictionary dict); DllCall($_LG_DLL, "none:cdecl", "dictionary_delete", "ptr", $hDictionary) EndFunc ;==>_LG_DictionaryDelete Func _LG_DictionarySetData($sPath) ;void dictionary_set_data_dir(const char * path); DllCall($_LG_DLL, "none:cdecl", "dictionary_set_data_dir", "str", $sPath) EndFunc ;==>_LG_DictionarySetData Func _LG_DictionaryGetDataDir() ;const char * dictionary_get_data_dir(void); $result = DllCall($_LG_DLL, "str:cdecl", "dictionary_get_data_dir") Return $result[0] EndFunc ;==>_LG_DictionaryGetDataDir Func _LG_DictionaryGetMaxCost($hDictionary) ;int dictionary_get_max_cost(Dictionary dict); $result = DllCall($_LG_DLL, "int:cdecl", "dictionary_get_max_cost", "ptr", $hDictionary) Return $result[0] EndFunc ;==>_LG_DictionaryGetMaxCost Func _LG_ParseOptionsCreate() ;Parse_Options parse_options_create(); $result = DllCall($_LG_DLL, "ptr:cdecl", "parse_options_create") Return $result[0] EndFunc ;==>_LG_ParseOptionsCreate Func _LG_ParseOptionsDelete($hOptions) ;int parse_options_delete(Parse_Options opts); DllCall($_LG_DLL, "none:cdecl", "parse_options_delete", "ptr", $hOptions) EndFunc ;==>_LG_ParseOptionsDelete Func _LG_ParseOptionsSetVerbosity($hOptions, $iVerbosity) ;void parse_options_set_verbosity(Parse_Options opts, int verbosity); DllCall($_LG_DLL, "none:cdecl", "parse_options_set_verbosity", "ptr", $hOptions, "int", $iVerbosity) EndFunc ;==>_LG_ParseOptionsSetVerbosity Func _LG_ParseOptionsGetVerbosity($hOptions) ;int parse_options_get_verbosity(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_get_verbosity", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsGetVerbosity Func _LG_ParseOptionsSetLinkageLimit($hOptions, $iLinkageLimit) ;void parse_options_set_linkage_limit(Parse_Options opts, int linkage_limit); DllCall($_LG_DLL, "none:cdecl", "parse_options_set_linkage_limit", "ptr", $hOptions, "int", $iLinkageLimit) EndFunc ;==>_LG_ParseOptionsSetLinkageLimit Func _LG_ParseOptionsGetLinkageLimit($hOptions) ;int parse_options_get_linkage_limit(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_get_linkage_limit", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsGetLinkageLimit Func _LG_ParseOptionsSetDisjunctCost($hOptions, $iDisjunctCost) ;void parse_options_set_disjunct_cost(Parse_Options opts, int disjunct_cost); DllCall($_LG_DLL, "none:cdecl", "parse_options_set_disjunct_cost", "ptr", $hOptions, "int", $iDisjunctCost) EndFunc ;==>_LG_ParseOptionsSetDisjunctCost Func _LG_ParseOptionsGetDisjunctCost($hOptions) ;int parse_options_get_disjunct_cost(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_get_disjunct_cost", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsGetDisjunctCost Func _LG_ParseOptionsSetMinNullCount($hOptions, $iNullCount) ;void parse_options_set_min_null_count(Parse_Options opts, int null_count); DllCall($_LG_DLL, "none:cdecl", "parse_options_set_min_null_count", "ptr", $hOptions, "int", $iNullCount) EndFunc ;==>_LG_ParseOptionsSetMinNullCount Func _LG_ParseOptionsGetMinNullCount($hOptions) ;int parse_options_get_min_null_count(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_get_min_null_count", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsGetMinNullCount Func _LG_ParseOptionsSetMaxNullCount($hOptions, $iNullCount) ;void parse_options_set_max_null_count(Parse_Options opts, int null_count); DllCall($_LG_DLL, "none:cdecl", "parse_options_set_max_null_count", "ptr", $hOptions, "int", $iNullCount) EndFunc ;==>_LG_ParseOptionsSetMaxNullCount Func _LG_ParseOptionsGetMaxNullCount($hOptions) ;int parse_options_get_max_null_count(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_get_max_null_count", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsGetMaxNullCount Func _LG_ParseOptionsSetNullBlock($hOptions, $iNullBlock) ;void parse_options_set_null_block(Parse_Options opts, int null_block); DllCall($_LG_DLL, "none:cdecl", "parse_options_set_null_block", "ptr", $hOptions, "int", $iNullBlock) EndFunc ;==>_LG_ParseOptionsSetNullBlock Func _LG_ParseOptionsGetNullBlock($hOptions) ;int parse_options_get_null_block(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_get_null_block", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsGetNullBlock Func _LG_ParseOptionsSetShortLength($hOptions, $iShortLength) ;void parse_options_set_short_length(Parse_Options opts, int short_length); DllCall($_LG_DLL, "none:cdecl", "parse_options_set_short_length", "ptr", $hOptions, "int", $iShortLength) EndFunc ;==>_LG_ParseOptionsSetShortLength Func _LG_ParseOptionsGetShortLength($hOptions) ;int parse_options_get_short_length(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_get_short_length", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsGetShortLength Func _LG_ParseOptionsSetIslandsOk($hOptions, $iIslandsOk) ;void parse_options_set_islands_ok(Parse_Options opts, int islands_ok); DllCall($_LG_DLL, "none:cdecl", "parse_options_set_islands_ok", "ptr", $hOptions, "int", $iIslandsOk) EndFunc ;==>_LG_ParseOptionsSetIslandsOk Func _LG_ParseOptionsGetIslandsOk($hOptions) ;int parse_options_get_islands_ok(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_get_islands_ok", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsGetIslandsOk Func _LG_ParseOptionsSetMaxParseTime($hOptions, $iSeconds) ;void parse_options_set_max_parse_time(Parse_Options opts, int secs); DllCall($_LG_DLL, "none:cdecl", "parse_options_set_max_parse_time", "ptr", $hOptions, "int", $iSeconds) EndFunc ;==>_LG_ParseOptionsSetMaxParseTime Func _LG_ParseOptionsGetMaxParseTime($hOptions) ;int parse_options_get_max_parse_time(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_get_max_parse_time", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsGetMaxParseTime Func _LG_ParseOptionsSetMaxMemory($hOptions, $iMemory) ;void parse_options_set_max_memory(Parse_Options opts, int mem); DllCall($_LG_DLL, "none:cdecl", "parse_options_set_max_memory", "ptr", $hOptions, "int", $iMemory) EndFunc ;==>_LG_ParseOptionsSetMaxMemory Func _LG_ParseOptionsGetMaxMemory($hOptions) ;int parse_options_get_max_memory(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_get_max_memory", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsGetMaxMemory Func _LG_ParseOptionsTimerExpired($hOptions) ;int parse_options_timer_expired(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_timer_expired", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsTimerExpired Func _LG_ParseOptionsMemoryExhausted($hOptions) ;int parse_options_memory_exhausted(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_memory_exhausted", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsMemoryExhausted Func _LG_ParseOptionsResourcesExhausted($hOptions) ;int parse_options_resources_exhausted(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_resources_exhausted", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsResourcesExhausted Func _LG_ParseOptionsResetResources($hOptions) ;void parse_options_reset_resources(Parse_Options opts); DllCall($_LG_DLL, "none:cdecl", "parse_options_reset_resources", "ptr", $hOptions) EndFunc ;==>_LG_ParseOptionsResetResources Func _LG_ParseOptionsSetCostModelType($hOptions, $iCostModel) ;void parse_options_set_cost_model_type(Parse_Options opts, int cm); DllCall($_LG_DLL, "none:cdecl", "parse_options_set_cost_model_type", "ptr", $hOptions, "int", $iCostModel) EndFunc ;==>_LG_ParseOptionsSetCostModelType Func _LG_ParseOptionsGetCostModelType($hOptions) ;int parse_options_get_cost_model_type(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_get_cost_model_type", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsGetCostModelType Func _LG_ParseOptionsSetScreenWidth($hOptions, $iWidth) ;void parse_options_set_screen_width(Parse_Options opts, int val); DllCall($_LG_DLL, "none:cdecl", "parse_options_set_screen_width", "ptr", $hOptions, "int", $iWidth) EndFunc ;==>_LG_ParseOptionsSetScreenWidth Func _LG_ParseOptionsGetScreenWidth($hOptions) ;int parse_options_get_screen_width(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_get_screen_width", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsGetScreenWidth Func _LG_ParseOptionsSetAllowNull($hOptions, $iAllowNull) ;void parse_options_set_allow_null(Parse_Options opts, int val); DllCall($_LG_DLL, "none:cdecl", "parse_options_set_allow_null", "ptr", $hOptions, "int", $iAllowNull) EndFunc ;==>_LG_ParseOptionsSetAllowNull Func _LG_ParseOptionsGetAllowNull($hOptions) ;int parse_options_get_allow_null(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_get_allow_null", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsGetAllowNull Func _LG_ParseOptionsSetDisplayWalls($hOptions, $iDisplayWalls) ;void parse_options_set_display_walls(Parse_Options opts, int val); DllCall($_LG_DLL, "none:cdecl", "parse_options_set_display_walls", "ptr", $hOptions, "int", $iDisplayWalls) EndFunc ;==>_LG_ParseOptionsSetDisplayWalls Func _LG_ParseOptionsGetDisplayWalls($hOptions) ;int parse_options_get_display_walls(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_get_display_walls", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsGetDisplayWalls Func _LG_ParseOptionsSetAllShortConnectors($hOptions, $iShortConnectors) ;void parse_options_set_all_short_connectors(Parse_Options opts, int val); DllCall($_LG_DLL, "none:cdecl", "parse_options_set_all_short_connectors", "ptr", $hOptions, "int", $iShortConnectors) EndFunc ;==>_LG_ParseOptionsSetAllShortConnectors Func _LG_ParseOptionsGetAllShortConnectors($hOptions) ;int parse_options_get_all_short_connectors(Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "parse_options_get_all_short_connectors", "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_ParseOptionsGetAllShortConnectors Func _LG_SentenceCreate($sInputString, $hDictionary) ;Sentence sentence_create(const char *input_string, Dictionary dict); $result = DllCall($_LG_DLL, "ptr:cdecl", "sentence_create", "str", $sInputString, "ptr", $hDictionary) Return $result[0] EndFunc ;==>_LG_SentenceCreate Func _LG_SentenceDelete($hSentence) ;void sentence_delete(Sentence sent); DllCall($_LG_DLL, "none:cdecl", "sentence_delete", "ptr", $hSentence) EndFunc ;==>_LG_SentenceDelete Func _LG_SentenceSplit($hSentence, $hOptions) ;int sentence_split(Sentence sent, Parse_Options opts); DllCall($_LG_DLL, "none:cdecl", "sentence_split", "ptr", $hSentence, "ptr", $hOptions) EndFunc ;==>_LG_SentenceSplit Func _LG_SentenceParse($hSentence, $hOptions) ;int sentence_parse(Sentence sent, Parse_Options opts); $result = DllCall($_LG_DLL, "int:cdecl", "sentence_parse", "ptr", $hSentence, "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_SentenceParse Func _LG_SentenceLength($hSentence) ;int sentence_length(Sentence sent); $result = DllCall($_LG_DLL, "int:cdecl", "sentence_length", "ptr", $hSentence) Return $result[0] EndFunc ;==>_LG_SentenceLength Func _LG_SentenceGetWord($hSentence, $iWord) ;const char * sentence_get_word(Sentence sent, int w); $result = DllCall($_LG_DLL, "str:cdecl", "sentence_get_word", "ptr", $hSentence, "int", $iWord) Return $result[0] EndFunc ;==>_LG_SentenceGetWord Func _LG_SentenceNullCount($hSentence) ;int sentence_null_count(Sentence sent); $result = DllCall($_LG_DLL, "int:cdecl", "sentence_null_count", "ptr", $hSentence) Return $result[0] EndFunc ;==>_LG_SentenceNullCount Func _LG_SentenceNumLinkagesFound($hSentence) ;int sentence_num_linkages_found(Sentence sent); $result = DllCall($_LG_DLL, "int:cdecl", "sentence_num_linkages_found", "ptr", $hSentence) Return $result[0] EndFunc ;==>_LG_SentenceNumLinkagesFound Func _LG_SentenceNumValidLinkages($hSentence) ;int sentence_num_valid_linkages(Sentence sent); $result = DllCall($_LG_DLL, "int:cdecl", "sentence_num_valid_linkages", "ptr", $hSentence) Return $result[0] EndFunc ;==>_LG_SentenceNumValidLinkages Func _LG_SentenceNumLinkagesPostProcessed($hSentence) ;int sentence_num_linkages_post_processed(Sentence sent); $result = DllCall($_LG_DLL, "int:cdecl", "sentence_num_linkages_post_processed", "ptr", $hSentence) Return $result[0] EndFunc ;==>_LG_SentenceNumLinkagesPostProcessed Func _LG_SentenceNumViolations($hSentence, $iNumber) ;int sentence_num_violations(Sentence sent, int i); $result = DllCall($_LG_DLL, "int:cdecl", "sentence_num_violations", "ptr", $hSentence, "int", $iNumber) Return $result[0] EndFunc ;==>_LG_SentenceNumViolations Func _LG_SentenceDisjunctCost($hSentence, $iNumber) ;int sentence_disjunct_cost(Sentence sent, int i); $result = DllCall($_LG_DLL, "int:cdecl", "sentence_disjunct_cost", "ptr", $hSentence, "int", $iNumber) Return $result[0] EndFunc ;==>_LG_SentenceDisjunctCost Func _LG_SentenceLinkCost($hSentence, $iNumber) ;int sentence_link_cost(Sentence sent, int i); $result = DllCall($_LG_DLL, "int:cdecl", "sentence_link_cost", "ptr", $hSentence, "int", $iNumber) Return $result[0] EndFunc ;==>_LG_SentenceLinkCost Func _LG_SentenceAndCost($hSentence, $iNumber) ;int sentence_and_cost(Sentence sent, int i); $result = DllCall($_LG_DLL, "int:cdecl", "sentence_and_cost", "ptr", $hSentence, "int", $iNumber) Return $result[0] EndFunc ;==>_LG_SentenceAndCost Func _LG_LinkageCreate($iIndex, $hSentence, $hOptions) ;Linkage linkage_create(int index, Sentence sent, Parse_Options opts); $result = DllCall($_LG_DLL, "ptr:cdecl", "linkage_create", "int", $iIndex, "ptr", $hSentence, "ptr", $hOptions) Return $result[0] EndFunc ;==>_LG_LinkageCreate Func _LG_LinkageGetNumSublinkages($hLinkage) ;int linkage_get_num_sublinkages(Linkage linkage); $result = DllCall($_LG_DLL, "int:cdecl", "linkage_get_num_sublinkages", "ptr", $hLinkage) Return $result[0] EndFunc ;==>_LG_LinkageGetNumSublinkages Func _LG_LinkageSetCurrentSublinkage($hLinkage, $iIndex) ;int linkage_set_current_sublinkage(Linkage linkage, int index); $result = DllCall($_LG_DLL, "int:cdecl", "linkage_set_current_sublinkage", "ptr", $hLinkage, "int", $iIndex) Return $result[0] EndFunc ;==>_LG_LinkageSetCurrentSublinkage Func _LG_LinkageComputeUnion($hLinkage) ;int linkage_compute_union(Linkage linkage); $result = DllCall($_LG_DLL, "int:cdecl", "linkage_compute_union", "ptr", $hLinkage) Return $result[0] EndFunc ;==>_LG_LinkageComputeUnion Func _LG_LinkageGetNumWords($hLinkage) ;int linkage_get_num_words(Linkage linkage); $result = DllCall($_LG_DLL, "int:cdecl", "linkage_get_num_words", "ptr", $hLinkage) Return $result[0] EndFunc ;==>_LG_LinkageGetNumWords Func _LG_LinkageGetNumLinks($hLinkage) ;int linkage_get_num_links(Linkage linkage); $result = DllCall($_LG_DLL, "int:cdecl", "linkage_get_num_links", "ptr", $hLinkage) Return $result[0] EndFunc ;==>_LG_LinkageGetNumLinks Func _LG_LinkageGetLinkLength($hLinkage, $iIndex) ;int linkage_get_link_length(Linkage linkage, int index); $result = DllCall($_LG_DLL, "int:cdecl", "linkage_get_link_length", "ptr", $hLinkage, "int", $iIndex) Return $result[0] EndFunc ;==>_LG_LinkageGetLinkLength Func _LG_LinkageGetLinkLWord($hLinkage, $iIndex) ;int linkage_get_link_lword(Linkage linkage, int index); $result = DllCall($_LG_DLL, "int:cdecl", "linkage_get_link_lword", "ptr", $hLinkage, "int", $iIndex) Return $result[0] EndFunc ;==>_LG_LinkageGetLinkLWord Func _LG_LinkageGetLinkRWord($hLinkage, $iIndex) ;int linkage_get_link_rword(Linkage linkage, int index); $result = DllCall($_LG_DLL, "int:cdecl", "linkage_get_link_rword", "ptr", $hLinkage, "int", $iIndex) Return $result[0] EndFunc ;==>_LG_LinkageGetLinkRWord Func _LG_LinkagePrintDiagram($hLinkage) ;char * linkage_print_diagram(Linkage linkage); $result = DllCall($_LG_DLL, "str:cdecl", "linkage_print_diagram", "ptr", $hLinkage) Return $result[0] EndFunc ;==>_LG_LinkagePrintDiagram Func _LG_LinkageFreeDiagram($hDiagram) ;void linkage_free_diagram(char * str); DllCall($_LG_DLL, "none:cdecl", "linkage_free_diagram", "ptr", $hDiagram) EndFunc ;==>_LG_LinkageFreeDiagram Func _LG_LinkagePrintPostscript($hLinkage, $iMode) ;char * linkage_print_postscript(Linkage linkage, int mode); $result = DllCall($_LG_DLL, "str:cdecl", "linkage_print_postscript", "ptr", $hLinkage, "int", $iMode) Return $result[0] EndFunc ;==>_LG_LinkagePrintPostscript Func _LG_LinkageFreePostscript($hPostscript) ;void linkage_free_postscript(char * str); DllCall($_LG_DLL, "none:cdecl", "linkage_free_postscript", "ptr", $hPostscript) EndFunc ;==>_LG_LinkageFreePostscript Func _LG_LinkagePrintLinksAndDomains($hLinkage) ;char * linkage_print_links_and_domains(Linkage linkage); $result = DllCall($_LG_DLL, "str:cdecl", "linkage_print_links_and_domains", "ptr", $hLinkage) Return $result[0] EndFunc ;==>_LG_LinkagePrintLinksAndDomains Func _LG_LinkageFreeLinksAndDomains($hLinksAndDomains) ;void linkage_free_links_and_domains(char *str); DllCall($_LG_DLL, "none:cdecl", "linkage_free_links_and_domains", "ptr", $hLinksAndDomains) EndFunc ;==>_LG_LinkageFreeLinksAndDomains Func _LG_LinkagePrintConstituentTree($hLinkage, $iOpt) ;char * linkage_print_constituent_tree(Linkage linkage int iOpt); $result = DllCall($_LG_DLL, "str:cdecl", "linkage_print_constituent_tree", "ptr", $hLinkage, "int", $iOpt) Return $result[0] EndFunc ;==>_LG_LinkagePrintConstituentTree Func _LG_LinkageGetLinkLabel($hLinkage, $iIndex) ;const char * linkage_get_link_label(Linkage linkage, int index); $result = DllCall($_LG_DLL, "str:cdecl", "linkage_get_link_label", "ptr", $hLinkage, "int", $iIndex) Return $result[0] EndFunc ;==>_LG_LinkageGetLinkLabel Func _LG_LinkageGetLinkLLabel($hLinkage, $iIndex) ;const char * linkage_get_link_llabel(Linkage linkage, int index); $result = DllCall($_LG_DLL, "str:cdecl", "linkage_get_link_llabel", "ptr", $hLinkage, "int", $iIndex) Return $result[0] EndFunc ;==>_LG_LinkageGetLinkLLabel Func _LG_LinkageGetLinkRLabel($hLinkage, $iIndex) ;const char * linkage_get_link_rlabel(Linkage linkage, int index); $result = DllCall($_LG_DLL, "str:cdecl", "linkage_get_link_rlabel", "ptr", $hLinkage, "int", $iIndex) Return $result[0] EndFunc ;==>_LG_LinkageGetLinkRLabel Func _LG_LinkageGetLinkNumDomains($hLinkage, $iIndex) ;int linkage_get_link_num_domains(Linkage linkage, int index); $result = DllCall($_LG_DLL, "int:cdecl", "linkage_get_link_num_domains", "ptr", $hLinkage, "int", $iIndex) Return $result[0] EndFunc ;==>_LG_LinkageGetLinkNumDomains Func _LG_LinkageGetLinkDomainNames($hLinkage, $iIndex) ;const char ** linkage_get_link_domain_names(Linkage linkage, int index); $result = DllCall($_LG_DLL, "str:cdecl", "linkage_get_link_domain_names", "ptr", $hLinkage, "int", $iIndex) Return $result[0] EndFunc ;==>_LG_LinkageGetLinkDomainNames Func _LG_LinkageGetViolationName($hLinkage) ;const char * linkage_get_violation_name(Linkage linkage); $result = DllCall($_LG_DLL, "str:cdecl", "linkage_get_violation_name", "ptr", $hLinkage) Return $result[0] EndFunc ;==>_LG_LinkageGetViolationName ;Func _LG_LinkageGetWords($hLinkage) ; ;const char ** linkage_get_words(Linkage linkage); ; $result = DllCall($_LG_DLL, "int:cdecl", "linkage_get_words", "ptr", $hLinkage) ; Return $result[0] ;EndFunc Func _LG_LinkageGetWord($hLinkage, $iWord) ;const char * linkage_get_word(Linkage linkage, int w); $result = DllCall($_LG_DLL, "str:cdecl", "linkage_get_word", "ptr", $hLinkage, "int", $iWord) Return $result[0] EndFunc ;==>_LG_LinkageGetWord Func _LG_LinkageGetDisjunct($hLinkage, $iWord) ;const char * linkage_get_disjunct(Linkage linkage, int w); $result = DllCall($_LG_DLL, "str:cdecl", "linkage_get_disjunct", "ptr", $hLinkage, "int", $iWord) Return $result[0] EndFunc ;==>_LG_LinkageGetDisjunct Func _LG_LinkageUnusedWordCost($hLinkage) ;int linkage_unused_word_cost(Linkage linkage); $result = DllCall($_LG_DLL, "int:cdecl", "linkage_unused_word_cost", "ptr", $hLinkage) Return $result[0] EndFunc ;==>_LG_LinkageUnusedWordCost Func _LG_LinkageDisjunctCost($hLinkage) ;int linkage_disjunct_cost(Linkage linkage); $result = DllCall($_LG_DLL, "int:cdecl", "linkage_disjunct_cost", "ptr", $hLinkage) Return $result[0] EndFunc ;==>_LG_LinkageDisjunctCost Func _LG_LinkageAndCost($hLinkage) ;int linkage_and_cost(Linkage linkage); $result = DllCall($_LG_DLL, "int:cdecl", "linkage_and_cost", "ptr", $hLinkage) Return $result[0] EndFunc ;==>_LG_LinkageAndCost Func _LG_LinkageLinkCost($hLinkage) ;int linkage_link_cost(Linkage linkage); $result = DllCall($_LG_DLL, "int:cdecl", "linkage_link_cost", "ptr", $hLinkage) Return $result[0] EndFunc ;==>_LG_LinkageLinkCost Func _LG_LinkageIsCanonical($hLinkage) ;int linkage_is_canonical(Linkage linkage); $result = DllCall($_LG_DLL, "int:cdecl", "linkage_is_canonical", "ptr", $hLinkage) Return $result[0] EndFunc ;==>_LG_LinkageIsCanonical Func _LG_LinkageIsImproper($hLinkage) ;int linkage_is_improper(Linkage linkage); $result = DllCall($_LG_DLL, "int:cdecl", "linkage_is_improper", "ptr", $hLinkage) Return $result[0] EndFunc ;==>_LG_LinkageIsImproper Func _LG_LinkageHasInconsistentDomains($hLinkage) ;int linkage_has_inconsistent_domains(Linkage linkage); $result = DllCall($_LG_DLL, "int:cdecl", "linkage_has_inconsistent_domains", "ptr", $hLinkage) Return $result[0] EndFunc ;==>_LG_LinkageHasInconsistentDomains Func _LG_LinkageDelete($hLinkage) ;void linkage_delete(Linkage linkage); $result = DllCall($_LG_DLL, "none:cdecl", "linkage_delete", "ptr", $hLinkage) EndFunc ;==>_LG_LinkageDelete Func _LG_PostProcessOpen($sName) ;PostProcessor post_process_open(const char * name); $result = DllCall($_LG_DLL, "ptr:cdecl", "post_process_open", "str", $sName) Return $result[0] EndFunc ;==>_LG_PostProcessOpen Func _LG_PostProcessClose($hPostProcessor) ;void post_process_close(PostProcessor postprocessor); DllCall($_LG_DLL, "none:cdecl", "post_process_close", "ptr", $hPostProcessor) EndFunc ;==>_LG_PostProcessClose Func _LG_LinkagePostProcess($hLinkage, $hPostProcessor) ;void linkage_post_process(Linkage linkage, PostProcessor postprocessor); DllCall($_LG_DLL, "none:cdecl", "linkage_post_process", "ptr", $hLinkage, "ptr", $hPostProcessor) EndFunc ;==>_LG_LinkagePostProcess Func _LG_LinkagePrintDisjuncts($hLinkage) $result = DllCall($_LG_DLL, "str:cdecl", "linkage_print_disjuncts", "ptr", $hLinkage) Return $result[0] EndFunc link-grammar/link-grammar/word-file.h0000644000000000000000000000206712536650433014763 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ int files_need_saving(Dictionary dict); void save_files(Dictionary dict); Dict_node * read_word_file(Dictionary dict, Dict_node * dn, char * filename); link-grammar/link-grammar/pp_linkset.c0000644000000000000000000001076412536650433015241 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ /*********************************************************************** pp_linkset.c maintains sets of pointers to link names Similar to string-set, except that the comparison and hashing functions are tailored for links. More importantly, all we store here is pointers. It's up to the caller to ensure that the pointers always point to something useful. **********************************************************************/ #include #include #define LINKSET_SPARSENESS 2 #define LINKSET_SEED_VALUE 37 static void clear_hash_table(pp_linkset *ls) { memset(ls->hash_table,0,ls->hash_table_size*sizeof(pp_linkset_node *)); } static void initialize(pp_linkset *ls, int size) { ls->hash_table_size = size*LINKSET_SPARSENESS; ls->population = 0; ls->hash_table = (pp_linkset_node**) xalloc (ls->hash_table_size*sizeof(pp_linkset_node *)); clear_hash_table(ls); } static int compute_hash(pp_linkset *ls, const char *str) { /* hash is computed from capitalized prefix only */ int i, hashval; hashval=LINKSET_SEED_VALUE; for (i=0; isupper((int)str[i]); i++) hashval = str[i] + 31*hashval; hashval = hashval % ls->hash_table_size; if (hashval<0) hashval*=-1; return hashval; } static pp_linkset_node *add_internal(pp_linkset *ls, const char *str) { pp_linkset_node *p, *n; int hashval; /* look for str (exactly) in linkset */ hashval = compute_hash(ls, str); for (p=ls->hash_table[hashval]; p!=0; p=p->next) if (!strcmp(p->str,str)) return NULL; /* already present */ /* create a new node for u; stick it at head of linked list */ n = (pp_linkset_node *) xalloc (sizeof(pp_linkset_node)); n->next = ls->hash_table[hashval]; n->str = str; ls->hash_table[hashval] = n; return n; } pp_linkset *pp_linkset_open(int size) { pp_linkset *ls; if (size==0) return NULL; ls = (pp_linkset *) xalloc (sizeof(pp_linkset)); initialize(ls, size); return ls; } void pp_linkset_close(pp_linkset *ls) { if (ls==NULL) return; pp_linkset_clear(ls); /* free memory taken by linked lists */ xfree((void*) ls->hash_table, ls->hash_table_size*sizeof(pp_linkset_node*)); xfree((void*) ls, sizeof(pp_linkset)); } void pp_linkset_clear(pp_linkset *ls) { /* clear dangling linked lists, but retain hash table itself */ int i; pp_linkset_node *p; if (ls==NULL) return; for (i=0; ihash_table_size; i++) { p=ls->hash_table[i]; while (p) { pp_linkset_node *q = p; p=p->next; xfree((void*) q, sizeof(pp_linkset_node)); } } clear_hash_table(ls); ls->population=0; } /** * returns 0 if already there, 1 if new. Stores only the pointer */ int pp_linkset_add(pp_linkset *ls, const char *str) { if (ls==NULL) { prt_error("Fatal Error: pp_linkset internal error: Trying to add to a null set"); exit(1); } if (add_internal(ls, str) == NULL) return 0; ls->population++; return 1; } /** * Set query. Returns 1 if str pp-matches something in the set, 0 otherwise */ int pp_linkset_match(pp_linkset *ls, const char *str) { int hashval; pp_linkset_node *p; if (ls==NULL) return 0; hashval = compute_hash(ls, str); p = ls->hash_table[hashval]; while(p!=0) { if (post_process_match(p->str,str)) return 1; p=p->next; } return 0; } int pp_linkset_match_bw(pp_linkset *ls, const char *str) { int hashval; pp_linkset_node *p; if (ls==NULL) return 0; hashval = compute_hash(ls, str); p = ls->hash_table[hashval]; while(p!=0) { if (post_process_match(str,p->str)) return 1; p=p->next; } return 0; } int pp_linkset_population(pp_linkset *ls) { return (ls==NULL)? 0 : ls->population; } link-grammar/link-grammar/post-process.c0000644000000000000000000010755412536650433015536 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ /* see bottom of file for comments on post processing */ #include #include #include #include "error.h" #define PP_MAX_DOMAINS 128 /***************** utility routines (not exported) ***********************/ static int string_in_list(const char * s, const char * a[]) { /* returns FALSE if the string s does not match anything in the array. The array elements are post-processing symbols */ int i; for (i=0; a[i] != NULL; i++) if (post_process_match(a[i], s)) return TRUE; return FALSE; } static int find_domain_name(Postprocessor *pp, const char *link) { /* Return the name of the domain associated with the provided starting link. Return -1 if link isn't associated with a domain. */ int i,domain; StartingLinkAndDomain *sllt = pp->knowledge->starting_link_lookup_table; for (i=0;;i++) { domain = sllt[i].domain; if (domain==-1) return -1; /* hit the end-of-list sentinel */ if (post_process_match(sllt[i].starting_link, link)) return domain; } } static int contained_in(Domain * d1, Domain * d2, Sublinkage *sublinkage) { /* returns TRUE if domain d1 is contained in domain d2 */ char mark[MAX_LINKS]; List_o_links * lol; memset(mark, 0, sublinkage->num_links*(sizeof mark[0])); for (lol=d2->lol; lol != NULL; lol = lol->next) mark[lol->link] = TRUE; for (lol=d1->lol; lol != NULL; lol = lol->next) if (!mark[lol->link]) return FALSE; return TRUE; } static int link_in_domain(int link, Domain * d) { /* returns the predicate "the given link is in the given domain" */ List_o_links * lol; for (lol = d->lol; lol != NULL; lol = lol->next) if (lol->link == link) return TRUE; return FALSE; } /* #define CHECK_DOMAIN_NESTING */ #if defined(CHECK_DOMAIN_NESTING) /* Although this is no longer used, I'm leaving the code here for future reference --DS 3/98 */ static int check_domain_nesting(Postprocessor *pp, int num_links) { /* returns TRUE if the domains actually form a properly nested structure */ Domain * d1, * d2; int counts[4]; char mark[MAX_LINKS]; List_o_links * lol; int i; for (d1=pp->pp_data.domain_array; d1 < pp->pp_data.domain_array + pp->pp_data.N_domains; d1++) { for (d2=d1+1; d2 < pp->pp_data.domain_array + pp->pp_data.N_domains; d2++) { memset(mark, 0, num_links*(sizeof mark[0])); for (lol=d2->lol; lol != NULL; lol = lol->next) { mark[lol->link] = 1; } for (lol=d1->lol; lol != NULL; lol = lol->next) { mark[lol->link] += 2; } counts[0] = counts[1] = counts[2] = counts[3] = 0; for (i=0; i 0) && (counts[2] > 0) && (counts[3] > 0)) return FALSE; } } return TRUE; } #endif /** * Free the list of links pointed to by lol * (does not free any strings) */ static void free_List_o_links(List_o_links *lol) { List_o_links * xlol; while(lol != NULL) { xlol = lol->next; xfree(lol, sizeof(List_o_links)); lol = xlol; } } static void free_D_tree_leaves(DTreeLeaf *dtl) { DTreeLeaf * xdtl; while(dtl != NULL) { xdtl = dtl->next; xfree(dtl, sizeof(DTreeLeaf)); dtl = xdtl; } } /** * Gets called after every invocation of post_process() */ void post_process_free_data(PP_data * ppd) { int w, d; for (w = 0; w < ppd->length; w++) { free_List_o_links(ppd->word_links[w]); ppd->word_links[w] = NULL; } for (d = 0; d < ppd->N_domains; d++) { free_List_o_links(ppd->domain_array[d].lol); ppd->domain_array[d].lol = NULL; free_D_tree_leaves(ppd->domain_array[d].child); ppd->domain_array[d].child = NULL; } free_List_o_links(ppd->links_to_ignore); ppd->links_to_ignore = NULL; } #ifdef THIS_FUNCTION_IS_NOT_CURRENTLY_USED static void connectivity_dfs(Postprocessor *pp, Sublinkage *sublinkage, int w, pp_linkset *ls) { List_o_links *lol; pp->visited[w] = TRUE; for (lol = pp->pp_data.word_links[w]; lol != NULL; lol = lol->next) { if (!pp->visited[lol->word] && !pp_linkset_match(ls, sublinkage->link[lol->link]->name)) connectivity_dfs(pp, sublinkage, lol->word, ls); } } #endif /* THIS_FUNCTION_IS_NOT_CURRENTLY_USED */ static void mark_reachable_words(Postprocessor *pp, int w) { List_o_links *lol; if (pp->visited[w]) return; pp->visited[w] = TRUE; for (lol = pp->pp_data.word_links[w]; lol != NULL; lol = lol->next) mark_reachable_words(pp, lol->word); } static int is_connected(Postprocessor *pp) { /* Returns true if the linkage is connected, considering words that have at least one edge....this allows conjunctive sentences not to be thrown out. */ int i; for (i=0; ipp_data.length; i++) pp->visited[i] = (pp->pp_data.word_links[i] == NULL); mark_reachable_words(pp, 0); for (i=0; ipp_data.length; i++) if (!pp->visited[i]) return FALSE; return TRUE; } static void build_type_array(Postprocessor *pp) { D_type_list * dtl; int d; List_o_links * lol; for (d=0; dpp_data.N_domains; d++) { for (lol=pp->pp_data.domain_array[d].lol; lol != NULL; lol = lol->next) { dtl = (D_type_list *) xalloc(sizeof(D_type_list)); dtl->next = pp->pp_node->d_type_array[lol->link]; pp->pp_node->d_type_array[lol->link] = dtl; dtl->type = pp->pp_data.domain_array[d].type; } } } void free_d_type(D_type_list * dtl) { D_type_list * dtlx; for (; dtl!=NULL; dtl=dtlx) { dtlx = dtl->next; xfree((void*) dtl, sizeof(D_type_list)); } } D_type_list * copy_d_type(D_type_list * dtl) { D_type_list *dtlx, *dtlcurr=NULL, *dtlhead=NULL; for (; dtl!=NULL; dtl=dtl->next) { dtlx = (D_type_list *) xalloc(sizeof(D_type_list)); *dtlx = *dtl; if (dtlhead == NULL) { dtlhead = dtlx; dtlcurr = dtlx; } else { dtlcurr->next = dtlx; dtlcurr = dtlx; } } return dtlhead; } /** free the pp node from last time */ static void free_pp_node(Postprocessor *pp) { int i; PP_node *ppn = pp->pp_node; pp->pp_node = NULL; if (ppn == NULL) return; for (i=0; id_type_array[i]); } xfree((void*) ppn, sizeof(PP_node)); } /** set up a fresh pp_node for later use */ static void alloc_pp_node(Postprocessor *pp) { int i; pp->pp_node=(PP_node *) xalloc(sizeof(PP_node)); pp->pp_node->violation = NULL; for (i=0; ipp_node->d_type_array[i] = NULL; } static void reset_pp_node(Postprocessor *pp) { free_pp_node(pp); alloc_pp_node(pp); } /************************ rule application *******************************/ static int apply_rules(Postprocessor *pp, int (applyfn) (Postprocessor *,Sublinkage *,pp_rule *), Sublinkage *sublinkage, pp_rule *rule_array, const char **msg) { int i; for (i=0; (*msg=rule_array[i].msg)!=NULL; i++) if (!applyfn(pp, sublinkage, &(rule_array[i]))) return 0; return 1; } static int apply_relevant_rules(Postprocessor *pp, int(applyfn)(Postprocessor *pp,Sublinkage*,pp_rule *rule), Sublinkage *sublinkage, pp_rule *rule_array, int *relevant_rules, const char **msg) { int i, idx; /* if we didn't accumulate link names for this sentence, we need to apply all rules */ if (pp_linkset_population(pp->set_of_links_of_sentence)==0) { return apply_rules(pp, applyfn, sublinkage, rule_array, msg); } /* we did, and we don't */ for (i=0; (idx=relevant_rules[i])!=-1; i++) { *msg = rule_array[idx].msg; /* Adam had forgotten this -- DS 4/9/98 */ if (!applyfn(pp, sublinkage, &(rule_array[idx]))) return 0; } return 1; } static int apply_contains_one(Postprocessor *pp, Sublinkage *sublinkage, pp_rule *rule) { /* returns TRUE if and only if all groups containing the specified link contain at least one from the required list. (as determined by exact string matching) */ DTreeLeaf * dtl; int d, count; for (d=0; dpp_data.N_domains; d++) { for (dtl = pp->pp_data.domain_array[d].child; dtl != NULL && !post_process_match(rule->selector, sublinkage->link[dtl->link]->name); dtl = dtl->next) {} if (dtl != NULL) { /* selector link of rule appears in this domain */ count=0; for (dtl = pp->pp_data.domain_array[d].child; dtl != NULL; dtl = dtl->next) if (string_in_list(sublinkage->link[dtl->link]->name, rule->link_array)) { count=1; break; } if (count == 0) return FALSE; } } return TRUE; } static int apply_contains_none(Postprocessor *pp,Sublinkage *sublinkage,pp_rule *rule) { /* returns TRUE if and only if: all groups containing the selector link do not contain anything from the link_array contained in the rule. Uses exact string matching. */ DTreeLeaf * dtl; int d; for (d=0; dpp_data.N_domains; d++) { for (dtl = pp->pp_data.domain_array[d].child; dtl != NULL && !post_process_match(rule->selector, sublinkage->link[dtl->link]->name); dtl = dtl->next) {} if (dtl != NULL) { /* selector link of rule appears in this domain */ for (dtl = pp->pp_data.domain_array[d].child; dtl != NULL; dtl = dtl->next) if (string_in_list(sublinkage->link[dtl->link]->name, rule->link_array)) return FALSE; } } return TRUE; } static int apply_contains_one_globally(Postprocessor *pp,Sublinkage *sublinkage,pp_rule *rule) { /* returns TRUE if and only if (1) the sentence doesn't contain the selector link for the rule, or (2) it does, and it also contains one or more from the rule's link set */ int i,j,count; for (i=0; inum_links; i++) { if (sublinkage->link[i]->l == -1) continue; if (post_process_match(rule->selector,sublinkage->link[i]->name)) break; } if (i==sublinkage->num_links) return TRUE; /* selector link of rule appears in sentence */ count=0; for (j=0; jnum_links && count==0; j++) { if (sublinkage->link[j]->l == -1) continue; if (string_in_list(sublinkage->link[j]->name, rule->link_array)) { count=1; break; } } if (count==0) return FALSE; else return TRUE; } static int apply_connected(Postprocessor *pp, Sublinkage *sublinkage, pp_rule *rule) { /* There is actually just one (or none, if user didn't specify it) rule asserting that linkage is connected. */ if (!is_connected(pp)) return 0; return 1; } #if 0 /* replaced in 3/98 with a slightly different algorithm shown below ---DS*/ static int apply_connected_without(Postprocessor *pp,Sublinkage *sublinkage,pp_rule *rule) { /* Returns true if the linkage is connected when ignoring the links whose names are in the given list of link names. Actually, what it does is this: it returns FALSE if the connectivity of the subgraph reachable from word 0 changes as a result of deleting these links. */ int i; memset(pp->visited, 0, pp->pp_data.length*(sizeof pp->visited[0])); mark_reachable_words(pp, 0); for (i=0; ipp_data.length; i++) pp->visited[i] = !pp->visited[i]; connectivity_dfs(pp, sublinkage, 0, rule->link_set); for (i=0; ipp_data.length; i++) if (pp->visited[i] == FALSE) return FALSE; return TRUE; } #else /* Here's the new algorithm: For each link in the linkage that is in the must_form_a_cycle list, we want to make sure that that link is in a cycle. We do this simply by deleting the link, then seeing if the end points of that link are still connected. */ static void reachable_without_dfs(Postprocessor *pp, Sublinkage *sublinkage, int a, int b, int w) { /* This is a depth first search of words reachable from w, excluding any direct edge between word a and word b. */ List_o_links *lol; pp->visited[w] = TRUE; for (lol = pp->pp_data.word_links[w]; lol != NULL; lol = lol->next) { if (!pp->visited[lol->word] && !(w == a && lol->word == b) && ! (w == b && lol->word == a)) { reachable_without_dfs(pp, sublinkage, a, b, lol->word); } } } /** * Returns TRUE if the linkage is connected when ignoring the links * whose names are in the given list of link names. * Actually, what it does is this: it returns FALSE if the connectivity * of the subgraph reachable from word 0 changes as a result of deleting * these links. */ static int apply_must_form_a_cycle(Postprocessor *pp,Sublinkage *sublinkage,pp_rule *rule) { List_o_links *lol; int w; for (w=0; wpp_data.length; w++) { for (lol = pp->pp_data.word_links[w]; lol != NULL; lol = lol->next) { if (w > lol->word) continue; /* only consider each edge once */ if (!pp_linkset_match(rule->link_set, sublinkage->link[lol->link]->name)) continue; memset(pp->visited, 0, pp->pp_data.length*(sizeof pp->visited[0])); reachable_without_dfs(pp, sublinkage, w, lol->word, w); if (!pp->visited[lol->word]) return FALSE; } } for (lol = pp->pp_data.links_to_ignore; lol != NULL; lol = lol->next) { w = sublinkage->link[lol->link]->l; /* (w, lol->word) are the left and right ends of the edge we're considering */ if (!pp_linkset_match(rule->link_set, sublinkage->link[lol->link]->name)) continue; memset(pp->visited, 0, pp->pp_data.length*(sizeof pp->visited[0])); reachable_without_dfs(pp, sublinkage, w, lol->word, w); if (!pp->visited[lol->word]) return FALSE; } return TRUE; } #endif static int apply_bounded(Postprocessor *pp,Sublinkage *sublinkage,pp_rule *rule) { /* Checks to see that all domains with this name have the property that all of the words that touch a link in the domain are not to the left of the root word of the domain. */ int d, lw, d_type; List_o_links * lol; d_type = rule->domain; for (d=0; dpp_data.N_domains; d++) { if (pp->pp_data.domain_array[d].type != d_type) continue; lw = sublinkage->link[pp->pp_data.domain_array[d].start_link]->l; for (lol = pp->pp_data.domain_array[d].lol; lol != NULL; lol = lol->next) { if (sublinkage->link[lol->link]->l < lw) return FALSE; } } return TRUE; } /********************* various non-exported functions ***********************/ static void build_graph(Postprocessor *pp, Sublinkage *sublinkage) { /* fill in the pp->pp_data.word_links array with a list of words neighboring each word (actually a list of links). The dir fields are not set, since this (after fat-link-extraction) is an undirected graph. */ int i, link; List_o_links * lol; for (i=0; ipp_data.length; i++) pp->pp_data.word_links[i] = NULL; for (link=0; linknum_links; link++) { if (sublinkage->link[link]->l == -1) continue; if (pp_linkset_match(pp->knowledge->ignore_these_links, sublinkage->link[link]->name)) { lol = (List_o_links *) xalloc(sizeof(List_o_links)); lol->next = pp->pp_data.links_to_ignore; pp->pp_data.links_to_ignore = lol; lol->link = link; lol->word = sublinkage->link[link]->r; continue; } lol = (List_o_links *) xalloc(sizeof(List_o_links)); lol->next = pp->pp_data.word_links[sublinkage->link[link]->l]; pp->pp_data.word_links[sublinkage->link[link]->l] = lol; lol->link = link; lol->word = sublinkage->link[link]->r; lol = (List_o_links *) xalloc(sizeof(List_o_links)); lol->next = pp->pp_data.word_links[sublinkage->link[link]->r]; pp->pp_data.word_links[sublinkage->link[link]->r] = lol; lol->link = link; lol->word = sublinkage->link[link]->l; } } static void setup_domain_array(Postprocessor *pp, int n, const char *string, int start_link) { /* set pp->visited[i] to FALSE */ memset(pp->visited, 0, pp->pp_data.length*(sizeof pp->visited[0])); pp->pp_data.domain_array[n].string = string; pp->pp_data.domain_array[n].lol = NULL; pp->pp_data.domain_array[n].size = 0; pp->pp_data.domain_array[n].start_link = start_link; } static void add_link_to_domain(Postprocessor *pp, int link) { List_o_links *lol; lol = (List_o_links *) xalloc(sizeof(List_o_links)); lol->next = pp->pp_data.domain_array[pp->pp_data.N_domains].lol; pp->pp_data.domain_array[pp->pp_data.N_domains].lol = lol; pp->pp_data.domain_array[pp->pp_data.N_domains].size++; lol->link = link; } static void depth_first_search(Postprocessor *pp, Sublinkage *sublinkage, int w, int root,int start_link) { List_o_links *lol; pp->visited[w] = TRUE; for (lol = pp->pp_data.word_links[w]; lol != NULL; lol = lol->next) { if (lol->word < w && lol->link != start_link) { add_link_to_domain(pp, lol->link); } } for (lol = pp->pp_data.word_links[w]; lol != NULL; lol = lol->next) { if (!pp->visited[lol->word] && (lol->word != root) && !(lol->word < root && lol->word < w && pp_linkset_match(pp->knowledge->restricted_links, sublinkage->link[lol->link]->name))) depth_first_search(pp, sublinkage, lol->word, root, start_link); } } static void bad_depth_first_search(Postprocessor *pp, Sublinkage *sublinkage, int w, int root, int start_link) { List_o_links * lol; pp->visited[w] = TRUE; for (lol = pp->pp_data.word_links[w]; lol != NULL; lol = lol->next) { if ((lol->word < w) && (lol->link != start_link) && (w != root)) { add_link_to_domain(pp, lol->link); } } for (lol = pp->pp_data.word_links[w]; lol != NULL; lol = lol->next) { if ((!pp->visited[lol->word]) && !(w == root && lol->word < w) && !(lol->word < root && lol->word < w && pp_linkset_match(pp->knowledge->restricted_links, sublinkage->link[lol->link]->name))) bad_depth_first_search(pp, sublinkage, lol->word, root, start_link); } } static void d_depth_first_search(Postprocessor *pp, Sublinkage *sublinkage, int w, int root, int right, int start_link) { List_o_links * lol; pp->visited[w] = TRUE; for (lol = pp->pp_data.word_links[w]; lol != NULL; lol = lol->next) { if ((lol->word < w) && (lol->link != start_link) && (w != root)) { add_link_to_domain(pp, lol->link); } } for (lol = pp->pp_data.word_links[w]; lol != NULL; lol = lol->next) { if (!pp->visited[lol->word] && !(w == root && lol->word >= right) && !(w == root && lol->word < root) && !(lol->word < root && lol->word < w && pp_linkset_match(pp->knowledge->restricted_links, sublinkage->link[lol->link]->name))) d_depth_first_search(pp,sublinkage,lol->word,root,right,start_link); } } static void left_depth_first_search(Postprocessor *pp, Sublinkage *sublinkage, int w, int right,int start_link) { List_o_links *lol; pp->visited[w] = TRUE; for (lol = pp->pp_data.word_links[w]; lol != NULL; lol = lol->next) { if (lol->word < w && lol->link != start_link) { add_link_to_domain(pp, lol->link); } } for (lol = pp->pp_data.word_links[w]; lol != NULL; lol = lol->next) { if (!pp->visited[lol->word] && (lol->word != right)) depth_first_search(pp, sublinkage, lol->word, right, start_link); } } static int domain_compare(const Domain * d1, const Domain * d2) { return (d1->size-d2->size); /* for sorting the domains by size */ } static void build_domains(Postprocessor *pp, Sublinkage *sublinkage) { int link, i, d; const char *s; pp->pp_data.N_domains = 0; for (link = 0; linknum_links; link++) { if (sublinkage->link[link]->l == -1) continue; s = sublinkage->link[link]->name; if (pp_linkset_match(pp->knowledge->ignore_these_links, s)) continue; if (pp_linkset_match(pp->knowledge->domain_starter_links, s)) { setup_domain_array(pp, pp->pp_data.N_domains, s, link); if (pp_linkset_match(pp->knowledge->domain_contains_links, s)) add_link_to_domain(pp, link); depth_first_search(pp,sublinkage,sublinkage->link[link]->r, sublinkage->link[link]->l, link); pp->pp_data.N_domains++; assert(pp->pp_data.N_domainsknowledge->urfl_domain_starter_links,s)) { setup_domain_array(pp, pp->pp_data.N_domains, s, link); /* always add the starter link to its urfl domain */ add_link_to_domain(pp, link); bad_depth_first_search(pp,sublinkage,sublinkage->link[link]->r, sublinkage->link[link]->l,link); pp->pp_data.N_domains++; assert(pp->pp_data.N_domainsknowledge->urfl_only_domain_starter_links,s)) { setup_domain_array(pp, pp->pp_data.N_domains, s, link); /* do not add the starter link to its urfl_only domain */ d_depth_first_search(pp,sublinkage, sublinkage->link[link]->l, sublinkage->link[link]->l, sublinkage->link[link]->r,link); pp->pp_data.N_domains++; assert(pp->pp_data.N_domainsknowledge->left_domain_starter_links,s)) { setup_domain_array(pp, pp->pp_data.N_domains, s, link); /* do not add the starter link to a left domain */ left_depth_first_search(pp,sublinkage, sublinkage->link[link]->l, sublinkage->link[link]->r,link); pp->pp_data.N_domains++; assert(pp->pp_data.N_domainspp_data.domain_array, pp->pp_data.N_domains, sizeof(Domain), (int (*)(const void *, const void *)) domain_compare); /* sanity check: all links in all domains have a legal domain name */ for (d=0; dpp_data.N_domains; d++) { i = find_domain_name(pp, pp->pp_data.domain_array[d].string); if (i == -1) prt_error("Error: post_process(): Need an entry for %s in LINK_TYPE_TABLE", pp->pp_data.domain_array[d].string); pp->pp_data.domain_array[d].type = i; } } static void build_domain_forest(Postprocessor *pp, Sublinkage *sublinkage) { int d, d1, link; DTreeLeaf * dtl; if (pp->pp_data.N_domains > 0) pp->pp_data.domain_array[pp->pp_data.N_domains-1].parent = NULL; for (d=0; d < pp->pp_data.N_domains-1; d++) { for (d1 = d+1; d1 < pp->pp_data.N_domains; d1++) { if (contained_in(&pp->pp_data.domain_array[d],&pp->pp_data.domain_array[d1],sublinkage)) { pp->pp_data.domain_array[d].parent = &pp->pp_data.domain_array[d1]; break; } } if (d1 == pp->pp_data.N_domains) { /* we know this domain is a root of a new tree */ pp->pp_data.domain_array[d].parent = NULL; /* It's now ok for this to happen. It used to do: printf("I can't find a parent domain for this domain\n"); print_domain(d); exit(1); */ } } /* the parent links of domain nodes have been established. now do the leaves */ for (d=0; d < pp->pp_data.N_domains; d++) { pp->pp_data.domain_array[d].child = NULL; } for (link=0; link < sublinkage->num_links; link++) { if (sublinkage->link[link]->l == -1) continue; /* probably not necessary */ for (d=0; dpp_data.N_domains; d++) { if (link_in_domain(link, &pp->pp_data.domain_array[d])) { dtl = (DTreeLeaf *) xalloc(sizeof(DTreeLeaf)); dtl->link = link; dtl->parent = &pp->pp_data.domain_array[d]; dtl->next = pp->pp_data.domain_array[d].child; pp->pp_data.domain_array[d].child = dtl; break; } } } } static int internal_process(Postprocessor *pp, Sublinkage *sublinkage, const char **msg) { int i; /* quick test: try applying just the relevant global rules */ if (!apply_relevant_rules(pp,apply_contains_one_globally, sublinkage, pp->knowledge->contains_one_rules, pp->relevant_contains_one_rules, msg)) { for (i=0; ipp_data.length; i++) pp->pp_data.word_links[i] = NULL; pp->pp_data.N_domains = 0; return -1; } /* build graph; confirm that it's legally connected */ build_graph(pp, sublinkage); build_domains(pp, sublinkage); build_domain_forest(pp, sublinkage); #if defined(CHECK_DOMAIN_NESTING) /* These messages were deemed to not be useful, so this code is commented out. See comment above. */ if(!check_domain_nesting(pp, sublinkage->num_links)) printf("WARNING: The domains are not nested.\n"); #endif /* The order below should be optimal for most cases */ if (!apply_relevant_rules(pp,apply_contains_one, sublinkage, pp->knowledge->contains_one_rules, pp->relevant_contains_one_rules, msg)) return 1; if (!apply_relevant_rules(pp,apply_contains_none, sublinkage, pp->knowledge->contains_none_rules, pp->relevant_contains_none_rules, msg)) return 1; if (!apply_rules(pp,apply_must_form_a_cycle, sublinkage, pp->knowledge->form_a_cycle_rules,msg)) return 1; if (!apply_rules(pp,apply_connected, sublinkage, pp->knowledge->connected_rules, msg)) return 1; if (!apply_rules(pp,apply_bounded, sublinkage, pp->knowledge->bounded_rules, msg)) return 1; return 0; /* This linkage satisfied all the rules */ } /** * Call this (a) after having called post_process_scan_linkage() on all * generated linkages, but (b) before calling post_process() on any * particular linkage. Here we mark all rules which we know (from having * accumulated a set of link names appearing in *any* linkage) won't * ever be needed. */ static void prune_irrelevant_rules(Postprocessor *pp) { pp_rule *rule; int coIDX, cnIDX, rcoIDX=0, rcnIDX=0; /* If we didn't scan any linkages, there's no pruning to be done. */ if (pp_linkset_population(pp->set_of_links_of_sentence)==0) return; for (coIDX=0;;coIDX++) { rule = &(pp->knowledge->contains_one_rules[coIDX]); if (rule->msg==NULL) break; if (pp_linkset_match_bw(pp->set_of_links_of_sentence, rule->selector)) { /* mark rule as being relevant to this sentence */ pp->relevant_contains_one_rules[rcoIDX++] = coIDX; pp_linkset_add(pp->set_of_links_in_an_active_rule, rule->selector); } } pp->relevant_contains_one_rules[rcoIDX] = -1; /* end sentinel */ for (cnIDX=0;;cnIDX++) { rule = &(pp->knowledge->contains_none_rules[cnIDX]); if (rule->msg==NULL) break; if (pp_linkset_match_bw(pp->set_of_links_of_sentence, rule->selector)) { pp->relevant_contains_none_rules[rcnIDX++] = cnIDX; pp_linkset_add(pp->set_of_links_in_an_active_rule, rule->selector); } } pp->relevant_contains_none_rules[rcnIDX] = -1; if (verbosity > 1) { printf("Saw %i unique link names in all linkages.\n", pp_linkset_population(pp->set_of_links_of_sentence)); printf("Using %i 'contains one' rules and %i 'contains none' rules\n", rcoIDX, rcnIDX); } } /***************** definitions of exported functions ***********************/ /** * read rules from path and initialize the appropriate fields in * a postprocessor structure, a pointer to which is returned. */ Postprocessor * post_process_open(const char *path) { Postprocessor *pp; if (path==NULL) return NULL; pp = (Postprocessor *) xalloc (sizeof(Postprocessor)); pp->knowledge = pp_knowledge_open(path); pp->sentence_link_name_set = string_set_create(); pp->set_of_links_of_sentence = pp_linkset_open(1024); pp->set_of_links_in_an_active_rule=pp_linkset_open(1024); pp->relevant_contains_one_rules = (int *) xalloc ((pp->knowledge->n_contains_one_rules+1) *(sizeof pp->relevant_contains_one_rules[0])); pp->relevant_contains_none_rules = (int *) xalloc ((pp->knowledge->n_contains_none_rules+1) *(sizeof pp->relevant_contains_none_rules[0])); pp->relevant_contains_one_rules[0] = -1; pp->relevant_contains_none_rules[0] = -1; pp->pp_node = NULL; pp->pp_data.links_to_ignore = NULL; pp->n_local_rules_firing = 0; pp->n_global_rules_firing = 0; return pp; } void post_process_close(Postprocessor *pp) { /* frees up memory associated with pp, previously allocated by open */ if (pp==NULL) return; string_set_delete(pp->sentence_link_name_set); pp_linkset_close(pp->set_of_links_of_sentence); pp_linkset_close(pp->set_of_links_in_an_active_rule); xfree(pp->relevant_contains_one_rules, (1+pp->knowledge->n_contains_one_rules) *(sizeof pp->relevant_contains_one_rules[0])); xfree(pp->relevant_contains_none_rules, (1+pp->knowledge->n_contains_none_rules) *(sizeof pp->relevant_contains_none_rules[0])); pp_knowledge_close(pp->knowledge); free_pp_node(pp); xfree(pp, sizeof(Postprocessor)); } void post_process_close_sentence(Postprocessor *pp) { if (pp==NULL) return; pp_linkset_clear(pp->set_of_links_of_sentence); pp_linkset_clear(pp->set_of_links_in_an_active_rule); string_set_delete(pp->sentence_link_name_set); pp->sentence_link_name_set = string_set_create(); pp->n_local_rules_firing = 0; pp->n_global_rules_firing = 0; pp->relevant_contains_one_rules[0] = -1; pp->relevant_contains_none_rules[0] = -1; free_pp_node(pp); } /** * During a first pass (prior to actual post-processing of the linkages * of a sentence), call this once for every generated linkage. Here we * simply maintain a set of "seen" link names for rule pruning later on */ void post_process_scan_linkage(Postprocessor *pp, Parse_Options opts, Sentence sent, Sublinkage *sublinkage) { const char *p; int i; if (pp == NULL) return; if (sent->length < opts->twopass_length) return; for (i=0; inum_links; i++) { if (sublinkage->link[i]->l == -1) continue; p = string_set_add(sublinkage->link[i]->name, pp->sentence_link_name_set); pp_linkset_add(pp->set_of_links_of_sentence, p); } } /** * Takes a sublinkage and returns: * . for each link, the domain structure of that link * . a list of the violation strings * NB: sublinkage->link[i]->l=-1 means that this connector * is to be ignored */ PP_node *post_process(Postprocessor *pp, Parse_Options opts, Sentence sent, Sublinkage *sublinkage, int cleanup) { const char *msg; if (pp==NULL) return NULL; pp->pp_data.links_to_ignore = NULL; pp->pp_data.length = sent->length; /* In the name of responsible memory management, we retain a copy of the * returned data structure pp_node as a field in pp, so that we can clear * it out after every call, without relying on the user to do so. */ reset_pp_node(pp); /* The first time we see a sentence, prune the rules which we won't be * needing during postprocessing the linkages of this sentence */ if (sent->q_pruned_rules==FALSE && sent->length >= opts->twopass_length) prune_irrelevant_rules(pp); sent->q_pruned_rules=TRUE; switch(internal_process(pp, sublinkage, &msg)) { case -1: /* some global test failed even before we had to build the domains */ pp->n_global_rules_firing++; pp->pp_node->violation = msg; return pp->pp_node; break; case 1: /* one of the "normal" post processing tests failed */ pp->n_local_rules_firing++; pp->pp_node->violation = msg; break; case 0: /* This linkage is legal according to the post processing rules */ pp->pp_node->violation = NULL; break; } build_type_array(pp); if (cleanup) { post_process_free_data(&pp->pp_data); } return pp->pp_node; } /* string comparison in postprocessing. The first parameter is a post-processing symbol. The second one is a connector name from a link. The upper case parts must match. We imagine that the first arg is padded with an infinite sequence of "#" and that the 2nd one is padded with "*". "#" matches anything, but "*" is just like an ordinary char for matching purposes. For efficiency sake there are several different versions of these functions */ int post_process_match(const char *s, const char *t) { char c; while(isupper((int)*s) || isupper((int)*t)) { if (*s != *t) return FALSE; s++; t++; } while (*s != '\0') { if (*s != '#') { if (*t == '\0') c = '*'; else c = *t; if (*s != c) return FALSE; } s++; if (*t != '\0') t++; } return TRUE; } /* OLD COMMENTS (OUT OF DATE): This file does the post-processing. The main routine is "post_process()". It uses the link names only, and not the connectors. A domain is a set of links. Each domain has a defining link. Only certain types of links serve to define a domain. These parameters are set by the lists of link names in a separate, human-readable file referred to herein as the 'knowledge file.' The domains are nested: given two domains, either they're disjoint, or one contains the other, i.e. they're tree structured. The set of links in a domain (but in no smaller domain) are called the "group" of the domain. Data structures are built to store all this stuff. The tree structured property is not mathematically guaranteed by the domain construction algorithm. Davy simply claims that because of how he built the dictionary, the domains will always be so structured. The program checks this and gives an error message if it's violated. Define the "root word" of a link (or domain) to be the word at the left end of the link. The other end of the defining link is called the "right word". The domain corresponding to a link is defined to be the set of links reachable by starting from the right word, following links and never using the root word or any word to its left. There are some minor exceptions to this. The "restricted_link" lists those connectors that, even if they point back before the root word, are included in the domain. Some of the starting links are included in their domain, these are listed in the "domain_contains_links" list. Such was the way it was. Now Davy tells me there should be another type of domain that's quite different. Let's call these "urfl" domains. Certain type of connectors start urfl domains. They're listed below. In a urfl domain, the search includes the root word. It does a separate search to find urfl domains. Restricted links should work just as they do with ordinary domains. If they come out of the right word, or anything to the right of it (that's in the domain), they should be included but should not be traced further. If they come out of the root word, they should not be included. */ /* I also, unfortunately, want to propose a new type of domain. These would include everything that can be reached from the root word of the link, to the right, that is closer than the right word of the link. (They would not include the link itself.) In the following sentence, then, the "Urfl_Only Domain" of the G link would include only the "O" link: +-----G----+ +---O--+ +-AI+ | | | | hitting dogs is fun.a In the following sentence it would include the "O", the "TT", the "I", the second "O", and the "A". +----------------G---------------+ +-----TT-----+ +-----O-----+ | +---O---+ +-I+ +---A--+ +-AI+ | | | | | | | | telling people to do stupid things is fun.a This would allow us to judge the following: kicking dogs bores me *kicking dogs kicks dogs explaining the program is easy *explaining the program is running (These are distinctions that I thought we would never be able to make, so I told myself they were semantic rather than syntactic. But with domains, they should be easy.) */ /* Modifications, 6/96 ALB: 1) Rules and link sets are relegated to a separate, user-written file(s), herein referred to as the 'knowledge file' 2) This information is read by a lexer, in pp_lexer.l (lex code) whose exported routines are all prefixed by 'pp_lexer' 3) when postprocessing a sentence, the links of each domain are placed in a set for quick lookup, ('contains one' and 'contains none') 4) Functions which were never called have been eliminated: link_inhabits(), match_in_list(), group_type_contains(), group_type_contains_one(), group_type_contains_all() 5) Some 'one-by-one' initializations have been replaced by faster block memory operations (memset etc.) 6) The above comments are correct but incomplete! (1/97) 7) observation: the 'contains one' is, empirically, by far the most violated rule, so it should come first in applying the rules. Modifications, 9/97 ALB: Deglobalization. Made code constistent with api. */ link-grammar/link-grammar/constituents.h0000644000000000000000000000227112536650433015632 0ustar /********************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /********************************************************************************/ #ifndef _CONSTITUENTSH_ #define _CONSTITUENTSH_ #include "link-includes.h" /* Invariant: Leaf if child==NULL */ struct CNode_s { char * label; CNode * child; CNode * next; int start, end; }; #endif link-grammar/link-grammar/print-util.c0000644000000000000000000000477212536650433015202 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include #include "utilities.h" /* This is a "safe" append function, used here to build up a link diagram incrementally. Because the diagram is built up a few characters at a time, we keep around a pointer to the end of string to prevent the algorithm from being quadratic. */ struct String_s { size_t allocated; /* Unsigned so VC++ doesn't complain about comparisons */ size_t eos; /* offset to end of string */ char * p; }; String * string_new(void) { #define INITSZ 30 String * string; string = (String *) exalloc(sizeof(String)); string->allocated = INITSZ; string->p = (char *) exalloc(INITSZ*sizeof(char)); string->p[0] = '\0'; string->eos = 0; return string; } void string_delete(String *s) { exfree(s->p, s->allocated*sizeof(char)); exfree(s, sizeof(String)); } char * string_copy(String *s) { char * p = (char *) exalloc(s->eos + 1); strcpy(p, s->p); return p; } void append_string(String * string, const char *fmt, ...) { #define TMPLEN 1024 char temp_string[TMPLEN]; size_t templen; char * p; size_t new_size; va_list args; va_start(args, fmt); templen = vsnprintf(temp_string, TMPLEN, fmt, args); va_end(args); if (string->allocated <= string->eos + templen) { new_size = 2 * string->allocated + templen + 1; p = (char *) exalloc(sizeof(char)*new_size); strcpy(p, string->p); strcpy(p + string->eos, temp_string); exfree(string->p, sizeof(char)*string->allocated); string->p = p; string->allocated = new_size; string->eos += templen; } else { strcpy(string->p + string->eos, temp_string); string->eos += templen; } } link-grammar/link-grammar/pp_lexer.h0000644000000000000000000000247212536650433014711 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ PPLexTable *pp_lexer_open(FILE *f); void pp_lexer_close (PPLexTable *lt); int pp_lexer_set_label (PPLexTable *lt, const char *label); int pp_lexer_count_tokens_of_label (PPLexTable *lt); const char *pp_lexer_get_next_token_of_label(PPLexTable *lt); int pp_lexer_count_commas_of_label (PPLexTable *lt); const char **pp_lexer_get_next_group_of_tokens_of_label(PPLexTable *lt,int *n_toks); link-grammar/link-grammar/command-line.h0000644000000000000000000000162312536650433015433 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ link-grammar/link-grammar/corpus/0000755000000000000000000000000012537603515014230 5ustar link-grammar/link-grammar/corpus/Makefile.am0000644000000000000000000000231212536650433016262 0ustar # # Makefile.am # Master automake file for building the corpus-statistics tools # DEFS = @DEFS@ -DVERSION=\"@VERSION@\" -DDICTIONARY_DIR=\"$(pkgdatadir)\" INCLUDES = -I$(top_srcdir) $(ANSI_CFLAGS) $(SQLITE3_CFLAGS) if WITH_CORPUS lib_LTLIBRARIES = liblink-corpus.la endif # Undefined symbols are allowed, as otherwise there is a circular # dependenincy on liblink-grammar. # liblink_corpus_la_LDFLAGS = -no-undefined liblink_corpus_la_LIBADD = ${SQLITE3_LIBS} liblink_corpus_la_SOURCES = \ cluster.h \ cluster.c \ corpus.h \ corpus.c EXTRA_DIST= \ README # Don't build the tools by default; only the maintainer (me) needs # to run this tool. # # Specifying the binaries here leads to circular Make dependencies # which I am too lazy to fix. To build the tool, you need to uncomment # the below, then run a two-step build process: # autogen.sh ; make # autogen.sh --enable-corpus-stats ; make # # noinst_PROGRAMS=cluster-pop sniff cluster_pop_SOURCES = cluster-pop.c cluster_pop_LDADD = ${SQLITE3_LIBS} cluster_pop_LDADD += $(top_builddir)/link-grammar/liblink-grammar.la sniff_SOURCES = sniff.c sniff_LDADD = ${SQLITE3_LIBS} link-grammar/link-grammar/corpus/Makefile.in0000644000000000000000000005243012537603121016272 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile.am # Master automake file for building the corpus-statistics tools # VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = link-grammar/corpus DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = liblink_corpus_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_liblink_corpus_la_OBJECTS = cluster.lo corpus.lo liblink_corpus_la_OBJECTS = $(am_liblink_corpus_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 = @WITH_CORPUS_TRUE@am_liblink_corpus_la_rpath = -rpath $(libdir) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(liblink_corpus_la_SOURCES) DIST_SOURCES = $(liblink_corpus_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ -DVERSION=\"@VERSION@\" -DDICTIONARY_DIR=\"$(pkgdatadir)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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@ INCLUDES = -I$(top_srcdir) $(ANSI_CFLAGS) $(SQLITE3_CFLAGS) @WITH_CORPUS_TRUE@lib_LTLIBRARIES = liblink-corpus.la # Undefined symbols are allowed, as otherwise there is a circular # dependenincy on liblink-grammar. # liblink_corpus_la_LDFLAGS = -no-undefined liblink_corpus_la_LIBADD = ${SQLITE3_LIBS} liblink_corpus_la_SOURCES = \ cluster.h \ cluster.c \ corpus.h \ corpus.c EXTRA_DIST = \ README # Don't build the tools by default; only the maintainer (me) needs # to run this tool. # # Specifying the binaries here leads to circular Make dependencies # which I am too lazy to fix. To build the tool, you need to uncomment # the below, then run a two-step build process: # autogen.sh ; make # autogen.sh --enable-corpus-stats ; make # # noinst_PROGRAMS=cluster-pop sniff cluster_pop_SOURCES = cluster-pop.c cluster_pop_LDADD = ${SQLITE3_LIBS} \ $(top_builddir)/link-grammar/liblink-grammar.la sniff_SOURCES = sniff.c sniff_LDADD = ${SQLITE3_LIBS} all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign link-grammar/corpus/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign link-grammar/corpus/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } liblink-corpus.la: $(liblink_corpus_la_OBJECTS) $(liblink_corpus_la_DEPENDENCIES) $(EXTRA_liblink_corpus_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_liblink_corpus_la_rpath) $(liblink_corpus_la_OBJECTS) $(liblink_corpus_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cluster.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/corpus.Plo@am__quote@ .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: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES # 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: link-grammar/link-grammar/corpus/corpus.h0000644000000000000000000000274112536650433015720 0ustar /* * corpus.h * * Data for corpus statistics, used to provide a parse ranking * to drive the SAT solver, as well as parse ranking with the * ordinary solver. * * Copyright (c) 2008, 2009 Linas Vepstas */ #ifndef _LINKGRAMMAR_CORPUS_H #define _LINKGRAMMAR_CORPUS_H #ifdef USE_CORPUS #include "../api-types.h" #include "../link-includes.h" Corpus * lg_corpus_new(void); void lg_corpus_delete(Corpus *); void lg_corpus_score(Sentence, Linkage_info *); double lg_corpus_disjunct_score(Linkage linkage, int w); void lg_corpus_linkage_senses(Linkage); Sense * lg_get_word_sense(Linkage_info *, int word); Sense * lg_sense_next(Sense *); int lg_sense_get_index(Sense *); const char * lg_sense_get_subscripted_word(Sense *); const char * lg_sense_get_disjunct(Sense *); const char * lg_sense_get_sense(Sense *); double lg_sense_get_score(Sense *); void lg_sense_delete(Linkage_info *); #else /* USE_CORPUS */ static inline void lg_corpus_score(Sentence s, Linkage_info *li) {} static inline void lg_corpus_linkage_senses(Linkage l) {} static inline Sense * lg_get_word_sense(Linkage_info *lif, int word) { return NULL; } static inline Sense * lg_sense_next(Sense *s ) {return NULL; } static inline const char * lg_sense_get_sense(Sense *s) { return NULL; } static inline double lg_sense_get_score(Sense *s) { return 0.0; } static inline double lg_corpus_disjunct_score(Linkage linkage, int w) { return 998.0; } #endif /* USE_CORPUS */ #endif /* _LINKGRAMMAR_CORPUS_H */ link-grammar/link-grammar/corpus/README0000644000000000000000000000134212536650433015110 0ustar Parse Ranking and Word Sense Statistics --------------------------------------- This directory contains code that computes a parse ranking, as well as a word-sense probability (based on WordNet 3.0) by looking up frequency statistics from an SQL database. The SQLite database engine is used because it is "administration-free" for the user, and because its license is compatbile with the current link-grammar license. This directory also contains code for "broadening" word linakges. See data/sql/README for more info. This directory contains one administrative tool, "cluster-pop", which is not built by default because users do not need this tool. See the Makefile.am for notes on how to build it. link-grammar/link-grammar/corpus/corpus.c0000644000000000000000000002651412536650433015717 0ustar /* * corpus.c * * Data for corpus statistics, used to provide a parse ranking * to drive the SAT solver, as well as parse ranking with the * ordinary solver. * * Copyright (c) 2008, 2009 Linas Vepstas */ #include #include #include #include #include "corpus.h" #include "../api-structures.h" #include "../disjuncts.h" #include "../utilities.h" struct corpus_s { char * dbname; sqlite3 *dbconn; sqlite3_stmt *rank_query; sqlite3_stmt *sense_query; char *errmsg; int rc; }; struct sense_s { int word; const char * inflected_word; const char * disjunct; char * sense; double score; Sense *next; }; /* ========================================================= */ static void * db_file_open(const char * dbname, void * user_data) { Corpus *c = (Corpus *) user_data; int rc; sqlite3 *dbconn; c->rc = sqlite3_open_v2(dbname, &dbconn, SQLITE_OPEN_READONLY, NULL); if (c->rc) { sqlite3_close(dbconn); return NULL; } c->dbname = strdup(dbname); return dbconn; } /** * Initialize the corpus statistics subsystem. */ Corpus * lg_corpus_new(void) { int rc; Corpus *c = (Corpus *) malloc(sizeof(Corpus)); c->rank_query = NULL; c->sense_query = NULL; c->errmsg = NULL; c->dbname = NULL; /* dbname = "/link-grammar/data/en/sql/disjuncts.db"; */ #define DBNAME "sql/disjuncts.db" c->dbconn = object_open(DBNAME, db_file_open, c); if (NULL == c->dbconn) { /* Very weird .. but if the database is not found, then sqlite * reports an "out of memory" error! So hide this misleading * error message. */ if (SQLITE_CANTOPEN == c->rc) { prt_error("Warning: Can't open database: File not found\n" "\tWas looking for: " DBNAME); } else { prt_error("Warning: Can't open database: %s\n" "\tWas looking for: " DBNAME, sqlite3_errmsg(c->dbconn)); } return c; } /* Now prepare the statements we plan to use */ rc = sqlite3_prepare_v2(c->dbconn, "SELECT log_cond_probability FROM Disjuncts " "WHERE inflected_word = ? AND disjunct = ?;", -1, &c->rank_query, NULL); if (rc != SQLITE_OK) { prt_error("Error: Can't prepare the ranking statment: %s\n", sqlite3_errmsg(c->dbconn)); } /* Results are returned in sorted order .. would it be faster * to sort locally? Don't know ... */ rc = sqlite3_prepare_v2(c->dbconn, "SELECT word_sense, log_cond_probability FROM DisjunctSenses " "WHERE inflected_word = ? AND disjunct = ? " "ORDER BY log_cond_probability ASC;", -1, &c->sense_query, NULL); if (rc != SQLITE_OK) { prt_error("Error: Can't prepare the sense statment: %s\n", sqlite3_errmsg(c->dbconn)); } prt_error("Info: Corpus statistics database found at %s\n", c->dbname); return c; } /** * lg_corpus_delete -- shut down the corpus statistics subsystem. */ void lg_corpus_delete(Corpus *c) { if (NULL == c) return; if (c->rank_query) { sqlite3_finalize(c->rank_query); c->rank_query = NULL; } if (c->sense_query) { sqlite3_finalize(c->sense_query); c->sense_query = NULL; } if (c->dbconn) { sqlite3_close(c->dbconn); c->dbconn = NULL; } if (c->dbname) { free(c->dbname); c->dbname = NULL; } free(c); } /* ========================================================= */ /* LOW_SCORE is what is assumed if a disjunct-word pair is not found * in the dictionary. It is meant to be -log_2(prob(d|w)) where * prob(d|w) is the conditional probability of seeing the disjunct d * given the word w. A value of 17 is about equal to 1 in 100,000. */ #define LOW_SCORE 17.0 /** * get_disjunct_score -- get log probability of observing disjunt. * * Given an "inflected" word and a disjunct, thris routine returns the * -log_2 conditional probability prob(d|w) of seeing the disjunct 'd' * given that the word 'w' was observed. Here, "inflected word" means * the link-grammar dictionary entry, complete with its trailing period * and tag -- e.g. run.v or running.g -- everything after the dot is the * "inflection". */ static double get_disjunct_score(Corpus *corp, const char * inflected_word, const char * disjunct) { double val; int rc; /* Look up the disjunct in the database */ rc = sqlite3_bind_text(corp->rank_query, 1, inflected_word, -1, SQLITE_STATIC); if (rc != SQLITE_OK) { prt_error("Error: SQLite can't bind word: rc=%d \n", rc); return LOW_SCORE; } rc = sqlite3_bind_text(corp->rank_query, 2, disjunct, -1, SQLITE_STATIC); if (rc != SQLITE_OK) { prt_error("Error: SQLite can't bind disjunct: rc=%d \n", rc); return LOW_SCORE; } rc = sqlite3_step(corp->rank_query); if (rc != SQLITE_ROW) { val = LOW_SCORE; #ifdef DEBUG printf ("Word=%s dj=%s not found in dict, assume score=%f\n", inflected_word, disjunct, val); #endif } else { val = sqlite3_column_double(corp->rank_query, 0); if (LOW_SCORE < val) val = LOW_SCORE; #ifdef DEBUG printf ("Word=%s dj=%s score=%f\n", inflected_word, disjunct, val); #endif } /* Failure to do both a reset *and* a clear will cause subsequent * binds tp fail. */ sqlite3_reset(corp->rank_query); sqlite3_clear_bindings(corp->rank_query); return val; } /* ========================================================= */ /** * lg_corpus_score -- compute parse-ranking score for sentence. * * Given a parsed sentence, this routine will compute a parse ranking * score, based on the probabilites of observing the indicated set of * disjuncts in the statistics database. * * The score is stored in the Linkage_info->corpus_cost struct member. * * The score is currently computed as the average -log_2 conditional * probability p(d|w) of observing disjunct 'd', given word 'w'. * Lower scores are better -- they indicate more likely parses. */ void lg_corpus_score(Sentence sent, Linkage_info *lifo) { const char *infword, *djstr; double tot_score = 0.0f; Corpus *corp = sent->dict->corpus; int nwords = sent->length; int w; /* No-op if the database is not open */ if (NULL == corp->dbconn) return; lg_compute_disjunct_strings(sent, lifo); /* Decrement nwords, so as to ignore the RIGHT-WALL */ nwords --; /* Loop over each word in the sentence (skipping LEFT-WALL, which is * word 0. */ for (w=1; wparse_info->chosen_disjuncts[w]; /* disj is NULL if word did not participate in parse */ if (NULL == disj) { tot_score += LOW_SCORE; continue; } infword = disj->string; djstr = lifo->disjunct_list_str[w]; tot_score += get_disjunct_score(corp, infword, djstr); } /* Decrement nwords, so as to ignore the LEFT-WALL */ --nwords; tot_score /= nwords; lifo->corpus_cost = tot_score; } double lg_corpus_disjunct_score(Linkage linkage, int w) { double score; const char *infword, *djstr; Sentence sent = linkage->sent; Linkage_info *lifo = linkage->info; Corpus *corp = sent->dict->corpus; Disjunct *disj; /* No-op if the database is not open */ if (NULL == corp->dbconn) return LOW_SCORE; /* disj is NULL if word did not participate in parse */ disj = sent->parse_info->chosen_disjuncts[w]; if (NULL == disj) return LOW_SCORE; lg_compute_disjunct_strings(sent, lifo); infword = disj->string; djstr = lifo->disjunct_list_str[w]; score = get_disjunct_score(corp, infword, djstr); return score; } /* ========================================================= */ /** * lg_corpus_senses -- Given word and disjunct, look up senses. * * Given a particular disjunct for a word, look up its most * likely sense assignments from the database. */ static Sense * lg_corpus_senses(Corpus *corp, const char * inflected_word, const char * disjunct, int wrd) { double log_prob; const unsigned char *sense; Sense *sns, *head = NULL; int rc; /* Look up the disjunct in the database */ rc = sqlite3_bind_text(corp->sense_query, 1, inflected_word, -1, SQLITE_STATIC); if (rc != SQLITE_OK) { prt_error("Error: SQLite can't bind word in sense query: rc=%d \n", rc); return NULL; } rc = sqlite3_bind_text(corp->sense_query, 2, disjunct, -1, SQLITE_STATIC); if (rc != SQLITE_OK) { prt_error("Error: SQLite can't bind disjunct in sense query: rc=%d \n", rc); return NULL; } rc = sqlite3_step(corp->sense_query); while (SQLITE_ROW == rc) { sense = sqlite3_column_text(corp->sense_query, 0); log_prob = sqlite3_column_double(corp->sense_query, 1); // printf ("Word=%s dj=%s sense=%s score=%f\n", // inflected_word, disjunct, sense, log_prob); sns = (Sense *) malloc(sizeof(Sense)); sns->next = head; head = sns; sns->inflected_word = inflected_word; sns->disjunct = disjunct; sns->sense = strdup(sense); sns->score = log_prob; sns->word = wrd; /* Get the next row, if any */ rc = sqlite3_step(corp->sense_query); } /* Failure to do both a reset *and* a clear will cause subsequent * binds tp fail. */ sqlite3_reset(corp->sense_query); sqlite3_clear_bindings(corp->sense_query); return head; } /* ========================================================= */ /** * lg_corpus_linkage_senses -- Given a linkage, look up senses. * * Given a particular linakge, look up the most likely sense * assignments from the database. * * This function is not used to guide the parsing process; it is * only an informational look-up. */ void lg_corpus_linkage_senses(Linkage linkage) { const char * infword; Sentence sent = linkage->sent; Dictionary dict = sent->dict; Corpus *corp = dict->corpus; int nwords = sent->length; Linkage_info *lifo = linkage->info; int w; if (lifo->sense_list) return; /* Set up the disjunct strings first */ lg_compute_disjunct_strings(sent, lifo); lifo->nwords = nwords; lifo->sense_list = (Sense **) malloc(nwords * sizeof (Sense *)); memset(lifo->sense_list, 0, nwords * sizeof (Sense *)); /* Decrement nwords, so as to ignore the RIGHT-WALL */ nwords --; /* Loop over each word in the sentence (skipping LEFT-WALL, which is * word 0. */ for (w=1; wparse_info->chosen_disjuncts[w]; /* disj is NULL if word did not participate in parse */ if (NULL == disj) { continue; } infword = disj->string; lifo->sense_list[w] = lg_corpus_senses(corp, infword, lifo->disjunct_list_str[w], w); } } /* ========================================================= */ /* Return bits and pieces of the sense assignments */ Sense * lg_get_word_sense(Linkage_info *lifo, int word) { if (!lifo->sense_list) return NULL; if (lifo->nwords <= word) return NULL; return lifo->sense_list[word]; } Sense * lg_sense_next(Sense *sns) { return sns->next; } int lg_sense_get_index(Sense *sns) { return sns->word; } const char * lg_sense_get_subscripted_word(Sense *sns) { return sns->inflected_word; } const char * lg_sense_get_disjunct(Sense *sns) { return sns->disjunct; } const char * lg_sense_get_sense(Sense *sns) { return sns->sense; } double lg_sense_get_score(Sense *sns) { return sns->score; } void lg_sense_delete(Linkage_info *lifo) { size_t nwords = lifo->nwords; size_t w; if (NULL == lifo->sense_list) return; for (w=0; wsense_list[w]; while (sns) { Sense * nxt = sns->next; free(sns->sense); free(sns); sns = nxt; } } free (lifo->sense_list); lifo->sense_list = NULL; } /* ======================= END OF FILE ===================== */ link-grammar/link-grammar/corpus/sniff.c0000644000000000000000000000165512536650433015510 0ustar #include #include #include static int callback(void *user_data, int argc, char **argv, char **colname) { int i; for (i=0; i */ #include #include #include #include #include "../build-disjuncts.h" #include "../externs.h" #include "../disjunct-utils.h" #include "../link-includes.h" #include "../read-dict.h" #include "../structures.h" int main (int argc, char * argv[]) { sqlite3 *dbconn; const char * dbname = "../../data/sql/clusters.db"; setlocale(LC_CTYPE, "en_US.UTF-8"); /* Open the database for update */ int rc = sqlite3_open_v2(dbname, &dbconn, SQLITE_OPEN_READWRITE, NULL); if (rc) { fprintf(stderr, "Error: cannot open the database\n"); sqlite3_close(dbconn); exit(1); } /* ------------------------------------------------- */ /* Prepare assorted queries */ sqlite3_stmt *cluname_query; rc = sqlite3_prepare_v2(dbconn, "SELECT DISTINCT cluster_name FROM ClusterMembers;", -1, &cluname_query, NULL); if (rc != SQLITE_OK) { fprintf(stderr, "Error: cannot prepare cluster-name stmt\n"); sqlite3_close(dbconn); exit(1); } /* ---- */ sqlite3_stmt *cluword_query; rc = sqlite3_prepare_v2(dbconn, "SELECT inflected_word FROM ClusterMembers WHERE cluster_name = ?;", -1, &cluword_query, NULL); if (rc != SQLITE_OK) { fprintf(stderr, "Error: cannot prepare cluword select stmt\n"); sqlite3_close(dbconn); exit(1); } /* ---- */ sqlite3_stmt *cludelete; rc = sqlite3_prepare_v2(dbconn, "DELETE FROM ClusterMembers WHERE cluster_name = ?;", -1, &cludelete, NULL); if (rc != SQLITE_OK) { fprintf(stderr, "Error: cannot prepare cluster delete stmt\n"); sqlite3_close(dbconn); exit(1); } /* ---- */ sqlite3_stmt *djinsert; rc = sqlite3_prepare_v2(dbconn, "INSERT INTO ClusterDisjuncts (cluster_name, disjunct, cost) " "VALUES (?,?,?);", -1, &djinsert, NULL); if (rc != SQLITE_OK) { fprintf(stderr, "Error: cannot prepare dj insert stmt\n"); sqlite3_close(dbconn); exit(1); } /* ------------------------------------------------- */ /* Open the dictionary */ Dictionary dict = dictionary_create_default_lang(); if (NULL == dict) { fprintf(stderr, "Error: couldn't read the dict\n"); exit(1); } /* Loop over all cluster names */ int clu_cnt = 0; int rec_cnt = 0; int dj_cnt = 0; int wrd_cnt = 0; int warn_cnt = 0; int del_cnt = 0; while(1) { rc = sqlite3_step(cluname_query); if (rc != SQLITE_ROW) break; const char * cluname = sqlite3_column_text(cluname_query,0); Disjunct *dj_union = NULL; int do_keep = 0; printf("Info: Processing cluster %s\n", cluname); rc = sqlite3_bind_text(cluword_query, 1, cluname, -1, SQLITE_STATIC); while(1) { rc = sqlite3_step(cluword_query); if (rc != SQLITE_ROW) break; const char * cluword = sqlite3_column_text(cluword_query,0); Dict_node *dn = dictionary_lookup_list(dict, cluword); if (NULL == dn) continue; Disjunct *dj = build_disjuncts_for_dict_node(dn); if (strcmp(dj->string, cluword)) { if (strncmp(dj->string, cluword, strlen(cluword))) { printf ("Error: asked for %s got %s\n", cluword, dj->string); // exit(1); } else { printf ("Warning: asked for %s got %s\n", cluword, dj->string); } warn_cnt++; free_disjuncts(dj); continue; } Disjunct *d = dj; int cnt = 0; while(d) { d->string = cluword; d = d->next; cnt ++; } dj_union = catenate_disjuncts(dj_union, dj); dj_union = eliminate_duplicate_disjuncts(dj_union); int ucnt = count_disjuncts(dj_union); if (cnt != ucnt) do_keep = 1; printf("\tprocessing word %s with %d disjuncts\n", cluword, cnt); wrd_cnt ++; } clu_cnt ++; if (do_keep) { int cnt = count_disjuncts(dj_union); printf("\tWill record %s of %d disjuncts\n", cluname, cnt); Disjunct *d = dj_union; while(d) { char * sdj = print_one_disjunct(d); // printf("duude %s -- %s\n", cluname, sdj); double cost = d->cost; rc = sqlite3_bind_text(djinsert, 1, cluname, -1, SQLITE_STATIC); rc = sqlite3_bind_text(djinsert, 2, sdj, -1, SQLITE_STATIC); rc = sqlite3_bind_double(djinsert, 3, cost); rc = sqlite3_step(djinsert); if (rc != SQLITE_DONE) { printf("Error: unexpected return value %d on insert!\n", rc); exit(1); } sqlite3_reset(djinsert); sqlite3_clear_bindings(djinsert); free(sdj); d = d->next; } rec_cnt ++; dj_cnt += cnt; } else { printf("\tDeleting pointless cluster %s\n", cluname); rc = sqlite3_bind_text(cludelete, 1, cluname, -1, SQLITE_STATIC); rc = sqlite3_step(cludelete); if (rc != SQLITE_DONE) { printf("Error: unexpected return value %d on delete!\n", rc); exit(1); } sqlite3_reset(cludelete); sqlite3_clear_bindings(cludelete); del_cnt ++; } free_disjuncts(dj_union); sqlite3_reset(cluword_query); sqlite3_clear_bindings(cluword_query); } sqlite3_reset(cluname_query); sqlite3_clear_bindings(cluname_query); sqlite3_close(dbconn); dictionary_delete(dict); printf("Examined %d clusters, recorded %d\n", clu_cnt, rec_cnt); printf("Examined %d words, and %d disjuncts\n", wrd_cnt, dj_cnt); float avg_wrd = ((float) wrd_cnt) / clu_cnt; float avg_dj = ((float) dj_cnt) / rec_cnt; printf("Average %f words/cluster; average %f dj's/recored-cluster\n", avg_wrd, avg_dj); printf("Got %d mismatch warnings\n", warn_cnt); printf("Deleted %d pointless clusters\n", del_cnt); return 0; } link-grammar/link-grammar/corpus/cluster.h0000644000000000000000000000145112536650433016063 0ustar /* * cluster.h * * Data for related-word clusters. Meant to expand disjunct covereage * for the case where a parse cannot be completed without ommitting * a word. * * Copyright (c) 2009 Linas Vepstas */ #ifndef _LINKGRAMMAR_CLUSTER_H #define _LINKGRAMMAR_CLUSTER_H #ifdef USE_CORPUS #include "../api-types.h" #include "../link-includes.h" Cluster * lg_cluster_new(void); void lg_cluster_delete(Cluster *); Disjunct * lg_cluster_get_disjuncts(Cluster *, const char * wrd); #else /* USE_CORPUS */ static inline Cluster * lg_cluster_new(void) { return NULL; } static inline void lg_cluster_delete(Cluster *c) {} static inline Disjunct * lg_cluster_get_disjuncts(Cluster *c, const char * wrd) { return NULL; } #endif /* USE_CORPUS */ #endif /* _LINKGRAMMAR_CLUSTER_H */ link-grammar/link-grammar/corpus/cluster.c0000644000000000000000000001327512536650433016065 0ustar /* * cluster.c * * Data for related-word clusters. Meant to expand disjunct coverage * for the case where a parse cannot be completed without ommitting * a word. * * Copyright (c) 2009 Linas Vepstas */ #include #include #include #include #include "cluster.h" #include "../build-disjuncts.h" #include "../disjunct-utils.h" #include "../structures.h" #include "../utilities.h" struct cluster_s { char * dbname; sqlite3 *dbconn; sqlite3_stmt *clu_query; sqlite3_stmt *dj_query; char *errmsg; int rc; }; /* ========================================================= */ static void * db_file_open(const char * dbname, void * user_data) { Cluster *c = (Cluster *) user_data; int rc; sqlite3 *dbconn; c->rc = sqlite3_open_v2(dbname, &dbconn, SQLITE_OPEN_READONLY, NULL); if (c->rc) { sqlite3_close(dbconn); return NULL; } c->dbname = strdup(dbname); return dbconn; } /** * Initialize the cluster statistics subsystem. */ Cluster * lg_cluster_new(void) { int rc; Cluster *c = (Cluster *) malloc(sizeof(Cluster)); c->clu_query = NULL; c->dj_query = NULL; c->errmsg = NULL; c->dbname = NULL; /* dbname = "/link-grammar/data/en/sql/clusters.db"; */ #define DBNAME "sql/clusters.db" c->dbconn = object_open(DBNAME, db_file_open, c); if (NULL == c->dbconn) { /* Very weird .. but if the database is not found, then sqlite * reports an "out of memory" error! So hide this misleading * error message. */ if (SQLITE_CANTOPEN == c->rc) { prt_error("Warning: Can't open database: File not found\n" "\tWas looking for: " DBNAME); } else { prt_error("Warning: Can't open database: %s\n" "\tWas looking for: " DBNAME, sqlite3_errmsg(c->dbconn)); } return c; } /* Now prepare the statements we plan to use */ rc = sqlite3_prepare_v2(c->dbconn, "SELECT cluster_name FROM ClusterMembers " "WHERE inflected_word = ?;", -1, &c->clu_query, NULL); if (rc != SQLITE_OK) { prt_error("Error: Can't prepare the cluster member statment: %s\n", sqlite3_errmsg(c->dbconn)); } rc = sqlite3_prepare_v2(c->dbconn, "SELECT disjunct, cost FROM ClusterDisjuncts " "WHERE cluster_name = ?;", -1, &c->dj_query, NULL); if (rc != SQLITE_OK) { prt_error("Error: Can't prepare the disjunct statment: %s\n", sqlite3_errmsg(c->dbconn)); } prt_error("Info: Cluster grouping database found at %s\n", c->dbname); return c; } /** * lg_cluster_delete -- shut down the cluster statistics subsystem. */ void lg_cluster_delete(Cluster *c) { if (NULL == c) return; if (c->clu_query) { sqlite3_finalize(c->clu_query); c->clu_query = NULL; } if (c->dj_query) { sqlite3_finalize(c->dj_query); c->dj_query = NULL; } if (c->dbconn) { sqlite3_close(c->dbconn); c->dbconn = NULL; } if (c->dbname) { free(c->dbname); c->dbname = NULL; } free(c); } /* ========================================================= */ static Exp * make_exp(const char *djstr, double cost) { Exp *e = (Exp *) malloc(sizeof(Exp)); e->multi = 0; e->dir = ' '; e->cost = cost; /* If its just a single connector, then do just that */ char *sp = strchr (djstr, ' '); if (NULL == sp || 0x0 == sp[1]) { e->type = CONNECTOR_type; if ('@' == djstr[0]) { e->multi = 1; djstr++; } size_t len = strlen(djstr) - 1; if (sp) len--; e->u.string = strndup(djstr, len); e->dir = djstr[len]; return e; } /* If there are multiple connectors, and them together */ size_t len = sp - djstr; char * tmp = strndup(djstr, len); Exp *p1 = make_exp(tmp, 0.0); free (tmp); Exp *p2 = make_exp(sp+1, 0.0); E_list *l; E_list *lhead = NULL; l = (E_list *) malloc(sizeof(E_list)); l->next = lhead; l->e = p2; lhead = l; l = (E_list *) malloc(sizeof(E_list)); l->next = lhead; l->e = p1; lhead = l; e->type = AND_type; e->u.l = lhead; return e; } #if NOT_NEEDED static Exp * or_exp(Exp *p1, Exp *p2) { if (NULL == p2) return p1; Exp *e = (Exp *) malloc(sizeof(Exp)); e->multi = 0; e->dir = ' '; e->cost = 0.0; e->type = OR_type; E_list *l; E_list *lhead = NULL; l = (E_list *) malloc(sizeof(E_list)); l->next = lhead; l->e = p2; lhead = l; l = (E_list *) malloc(sizeof(E_list)); l->next = lhead; l->e = p1; lhead = l; e->u.l = lhead; return e; } #endif static void free_exp(Exp *e) { if (CONNECTOR_type != e->type) { E_list *l = e->u.l; while(l) { free_exp(l->e); E_list *ln = l->next; free(l); l = ln; } return; } free((char *) e->u.string); free(e); } Disjunct * lg_cluster_get_disjuncts(Cluster *c, const char * wrd) { Disjunct *djl = NULL; int rc; /* Look for a cluster containing this word */ rc = sqlite3_bind_text(c->clu_query, 1, wrd, -1, SQLITE_STATIC); rc = sqlite3_step(c->clu_query); if (rc != SQLITE_ROW) goto noclust; /* Get the cluster name, and look for the disjuncts */ const char * cluname = sqlite3_column_text(c->clu_query,0); rc = sqlite3_bind_text(c->dj_query, 1, cluname, -1, SQLITE_STATIC); while(1) { rc = sqlite3_step(c->dj_query); if (rc != SQLITE_ROW) break; const char * djs = sqlite3_column_text(c->dj_query,0); double cost = sqlite3_column_double(c->dj_query,1); /* All expanded disjuncts are costly! */ // cost += 0.5; cost -= 6.0; if (cost < 0.0) cost = 0.0; /* Building expressions */ Exp *e = make_exp(djs, cost); X_node x; x.exp = e; x.string = wrd; Disjunct *dj = build_disjuncts_for_X_node(&x, MAX_CONNECTOR_COST); djl = catenate_disjuncts(dj, djl); free_exp(e); } sqlite3_reset(c->dj_query); sqlite3_clear_bindings(c->dj_query); noclust: sqlite3_reset(c->clu_query); sqlite3_clear_bindings(c->clu_query); return djl; } /* ======================= END OF FILE ===================== */ link-grammar/link-grammar/read-regex.c0000644000000000000000000000765512536650433015121 0ustar /*************************************************************************/ /* Copyright (c) 2005 Sampo Pyysalo */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include "link-includes.h" #include "api-structures.h" #include "structures.h" #include "read-regex.h" /* Function for reading regular expression name:pattern combinations into the Dictionary from a given file. The format of the regex file is as follows: Lines starting with "%" are comments and are ignored. All other nonempty lines must follow the following format: REGEX_NAME: /pattern/ here REGEX_NAME is an identifying unique name for the regex. This name is used to determine the disjuncts that will be assigned to tokens matching the pattern, so in the dictionary file (e.g. 4.0.dict) you must have something like REGEX_NAME: (({@MX+} & (JG- or )) or YS+)) or AN+ or G+); using the same name. The pattern itself must be surrounded by slashes. Extra whitespace is ignored. */ #define MAX_REGEX_NAME_LENGTH 50 #define MAX_REGEX_LENGTH 255 int read_regex_file(Dictionary dict, const char *file_name) { Regex_node **tail = &dict->regex_root; /* Last Regex_node * in list */ Regex_node *new_re; char name[MAX_REGEX_NAME_LENGTH]; char regex[MAX_REGEX_LENGTH]; int c,prev,i,line=1; FILE *fp; fp = dictopen(file_name, "r"); if (fp == NULL) { prt_error("Error: cannot open regex file %s\n", file_name); return 1; } /* read in regexs. loop broken on EOF. */ while (1) { /* skip whitespace and comments. */ do { do { c = fgetc(fp); if (c == '\n') { line++; } } while(isspace(c)); if (c == '%') { while ((c != EOF) && (c != '\n')) { c = fgetc(fp); } line++; } } while(isspace(c)); if (c == EOF) { break; } /* done. */ /* read in the name of the regex. */ i = 0; do { if (i > MAX_REGEX_NAME_LENGTH-1) { prt_error("Error: Regex name too long on line %d\n", line); goto failure; } name[i++] = c; c = fgetc(fp); } while ((!isspace(c)) && (c != ':') && (c != EOF)); name[i] = '\0'; /* Skip possible whitespace after name, expect colon. */ while (isspace(c)) { if (c == '\n') { line++; } c = fgetc(fp); } if (c != ':') { prt_error("Error: Regex missing colon on line %d\n", line); goto failure; } /* Skip whitespace after colon, expect slash. */ do { if (c == '\n') { line++; } c = fgetc(fp); } while (isspace(c)); if (c != '/') { prt_error("Error: Regex missing leading slash on line %d\n", line); goto failure; } /* Read in the regex. */ prev = 0; i = 0; do { if (i > MAX_REGEX_LENGTH-1) { prt_error("Error: Regex too long on line %d\n", line); goto failure; } prev = c; c = fgetc(fp); regex[i++] = c; } while ((c != '/' || prev == '\\') && (c != EOF)); regex[i-1] = '\0'; /* Expect termination by a slash. */ if (c != '/') { prt_error("Error: Regex missing trailing slash on line %d\n", line); goto failure; } /* Create new Regex_node and add to dict list. */ new_re = (Regex_node *) malloc(sizeof(Regex_node)); new_re->name = strdup(name); new_re->pattern = strdup(regex); new_re->re = NULL; new_re->next = NULL; *tail = new_re; tail = &new_re->next; } fclose(fp); return 0; failure: fclose(fp); return 1; } link-grammar/link-grammar/string-set.c0000644000000000000000000001203112536650433015155 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include /** * Suppose you have a program that generates strings and keeps pointers to them. The program never needs to change these strings once they're generated. If it generates the same string again, then it can reuse the one it generated before. This is what this package supports. String_set is the object. The functions are: char * string_set_add(char * source_string, String_set * ss); This function returns a pointer to a string with the same contents as the source_string. If that string is already in the table, then it uses that copy, otherwise it generates and inserts a new one. char * string_set_lookup(char * source_string, String_set * ss); This function returns a pointer to a string with the same contents as the source_string. If that string is not already in the table, returns NULL; String_set * string_set_create(void); Create a new empty String_set. string_set_delete(String_set *ss); Free all the space associated with this string set. The implementation uses probed hashing (i.e. not bucket). */ static int hash_string(const char *sa, const String_set *ss) { unsigned char *str = (unsigned char *) sa; unsigned int accum = 0; for (;*str != '\0'; str++) accum = ((256*accum) + (*str)) % (ss->size); return accum; } static int stride_hash_string(const char *sa, const String_set *ss) { unsigned char *str = (unsigned char *) sa; /* This is the stride used, so we have to make sure that its value is not 0 */ unsigned int accum = 0; for (;*str != '\0'; str++) accum = ((17*accum) + (*str)) % (ss->size); if (accum == 0) accum = 1; return accum; } /* return the next prime up from start */ static int next_prime_up(int start) { int i; start = start | 1; /* make it odd */ for (;;) { for (i=3; (i <= (start/i)); i += 2) { if (start % i == 0) break; } if (start % i == 0) { start += 2; } else { return start; } } } String_set * string_set_create(void) { String_set *ss; int i; ss = (String_set *) xalloc(sizeof(String_set)); ss->size = next_prime_up(100); ss->table = (char **) xalloc(ss->size * sizeof(char *)); ss->count = 0; for (i=0; isize; i++) ss->table[i] = NULL; return ss; } /** * lookup the given string in the table. Return a pointer * to the place it is, or the place where it should be. */ static int find_place(const char * str, String_set *ss) { int h, s, i; h = hash_string(str, ss); s = stride_hash_string(str, ss); for (i=h; 1; i = (i + s)%(ss->size)) { if ((ss->table[i] == NULL) || (strcmp(ss->table[i], str) == 0)) return i; } } static void grow_table(String_set *ss) { String_set old; int i, p; old = *ss; ss->size = next_prime_up(2 * old.size); /* at least double the size */ ss->table = (char **) xalloc(ss->size * sizeof(char *)); ss->count = 0; for (i=0; isize; i++) ss->table[i] = NULL; for (i=0; itable[p] = old.table[i]; ss->count++; } } /*printf("growing from %d to %d\n", old.size, ss->size);*/ fflush(stdout); xfree((char *) old.table, old.size * sizeof(char *)); } const char * string_set_add(const char * source_string, String_set * ss) { char * str; int len, p; assert(source_string != NULL, "STRING_SET: Can't insert a null string"); p = find_place(source_string, ss); if (ss->table[p] != NULL) return ss->table[p]; len = strlen(source_string); str = (char *) xalloc(len+1); strcpy(str, source_string); ss->table[p] = str; ss->count++; /* We just added it to the table. If the table got too big, we grow it. Too big is defined as being more than 3/4 full */ if ((4 * ss->count) > (3 * ss->size)) grow_table(ss); return str; } const char * string_set_lookup(const char * source_string, String_set * ss) { int p; p = find_place(source_string, ss); return ss->table[p]; } void string_set_delete(String_set *ss) { int i; if (ss == NULL) return; for (i=0; isize; i++) { if (ss->table[i] != NULL) xfree(ss->table[i], strlen(ss->table[i]) + 1); } xfree((char *) ss->table, ss->size * sizeof(char *)); xfree((char *) ss, sizeof(String_set)); } link-grammar/link-grammar/read-dict.c0000644000000000000000000013005712536650433014723 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include #include #include #include #include "disjunct-utils.h" #include "error.h" const char * linkgrammar_get_version(void) { const char *s = "link-grammar-" LINK_VERSION_STRING; return s; } const char * linkgrammar_get_dict_version(Dictionary dict) { static char * ver = NULL; char * p; Dict_node *dn; Exp *e; if (ver) return ver; /* The newer dictionaries should contain a macro of the form: * : V4v6v6+; * which would indicate dictionary verison 4.6.6 * Older dictionaries contain no version info. */ dn = dictionary_lookup_list(dict, ""); if (NULL == dn) return "[unknown]"; e = dn->exp; ver = strdup(&e->u.string[1]); p = strchr(ver, 'v'); while (p) { *p = '.'; p = strchr(p+1, 'v'); } free_lookup_list(dn); return ver; } /* The dictionary format: In what follows: Every "%" symbol and everything after it is ignored on every line. Every newline or tab is replaced by a space. The dictionary file is a sequence of ENTRIES. Each ENTRY is one or more WORDS (a sequence of upper or lower case letters) separated by spaces, followed by a ":", followed by an EXPRESSION followed by a ";". An EXPRESSION is an expression where the operators are "&" or "and" or "|" or "or", and there are three types of parentheses: "()", "{}", and "[]". The terminal symbols of this grammar are the connectors, which are strings of letters or numbers or *s. Expressions may be written in prefix or infix form. In prefix-form, the expressions are lisp-like, with the operators &, | preceeding the operands. In infix-form, the operators are in the middle. The current dictionaries are in infix form. If the C preprocessor constant INFIX_NOTATION is defined, then the dictionary is assumed to be in infix form. The connector begins with an optinal @, which is followed by an upper case sequence of letters. Each subsequent *, lower case letter or number is a subscript. At the end is a + or - sign. The "@" allows this connector to attach to one or more other connectors. Here is a sample dictionary entry (in infix form): gone: T- & {@EV+}; (See our paper for more about how to interpret the meaning of the dictionary expressions.) A previously defined word (such as "gone" above) may be used instead of a connector to specify the expression it was defined to be. Of course, in this case, it must uniquely specify a word in the dictionary, and have been previously defined. If a word is of the form "/foo", then the file current-dir/foo is a so-called word file, and is read in as a list of words. A word file is just a list of words separted by blanks or newlines. A word that contains the character "_" defines an idiomatic use of the words separated by the "_". For example "kind of" is an idiomatic expression, so a word "kind_of" is defined in the dictionary. Idomatic expressions of any number of words can be defined in this way. When the word "kind" is encountered, all the idiomatic uses of the word are considered. An expresion enclosed in "[..]" is give a cost of 1. This means that if any of the connectors inside the square braces are used, a cost of 1 is incurred. (This cost is the first element of the cost vector printed when a sentence is parsed.) Of course if something is inside of 10 levels of "[..]" then using it incurs a cost of 10. These costs are called "disjunct costs". The linkages are printed out in order of non-increasing disjunct cost. The expression "(A+ or ())" means that you can choose either "A+" or the empty expression "()", that is, that the connector "A+" is optional. This is more compactly expressed as "{A+}". In other words, curly braces indicate an optional expression. The expression "(A+ or [])" is the same as that above, but there is a cost of 1 incurred for choosing not to use "A+". The expression "(EXP1 & [EXP2])" is exactly the same as "[EXP1 & EXP2]". The difference between "({[A+]} & B+)" and "([{A+}] & B+)" is that the latter always incurrs a cost of 1, while the former only gets a cost of 1 if "A+" is used. The dictionary writer is not allowed to use connectors that begin in "ID". This is reserved for the connectors automatically generated for idioms. Dictionary words may be followed by a dot (period, "."), and a "subscript" identifying the word type. The subscript may be one or more letters or numbers, but must begin with a letter. Currently, the dictionary contains (mostly?) subscripts consisting of a single letter, and these serve mostly to identify the part-of-speech. In general, subscripts can also be used to distinguish different word senses. */ static int link_advance(Dictionary dict); static void dict_error2(Dictionary dict, const char * s, const char *s2) { int i; char tokens[1024], t[128]; if (dict->recursive_error) return; dict->recursive_error = TRUE; tokens[0] = '\0'; for (i=0; i<5 && dict->token[0] != '\0' ; i++) { sprintf(t, "\"%s\" ", dict->token); strcat(tokens, t); link_advance(dict); } if (s2) { err_ctxt ec; ec.sent = NULL; err_msg(&ec, Error, "Error parsing dictionary %s.\n" "%s %s\n\t line %d, tokens = %s\n", dict->name, s, s2, dict->line_number, tokens); } else { err_ctxt ec; ec.sent = NULL; err_msg(&ec, Error, "Error parsing dictionary %s.\n" "%s\n\t line %d, tokens = %s\n", dict->name, s, dict->line_number, tokens); } dict->recursive_error = FALSE; } static void dict_error(Dictionary dict, const char * s) { dict_error2(dict, s, NULL); } static void warning(Dictionary dict, const char * s) { err_ctxt ec; ec.sent = NULL; err_msg(&ec, Warn, "Warning: %s\n" "\tline %d, current token = \"%s\"\n", s, dict->line_number, dict->token); } /** * This gets the next character from the input, eliminating comments. * If we're in quote mode, it does not consider the % character for * comments. */ static wint_t get_character(Dictionary dict, int quote_mode) { wint_t c; c = fgetwc(dict->fp); if ((c == '%') && (!quote_mode)) { while((c != WEOF) && (c != '\n')) c = fgetwc(dict->fp); } if (c == '\n') dict->line_number++; return c; } /* * This set of 10 characters are the ones defining the syntax of the * dictionary. */ #define SPECIAL "(){};[]&|:" /** * Return true if the input wide-character is one of the special * characters used to define the syntax of the dictionary. */ static int is_special(wint_t wc, mbstate_t *ps) { char buff[MB_LEN_MAX]; int nr = wcrtomb(buff, wc, ps); if (1 != nr) return FALSE; return (NULL != strchr(SPECIAL, buff[0])); } /** * This reads the next token from the input into token. * Return 1 if a character was read, else return 0 (and print a warning). */ static int link_advance(Dictionary dict) { wint_t c; int nr, i; int quote_mode; dict->is_special = FALSE; if (dict->already_got_it != '\0') { dict->is_special = is_special(dict->already_got_it, &dict->mbss); if (dict->already_got_it == WEOF) { dict->token[0] = '\0'; } else { dict->token[0] = dict->already_got_it; /* specials are one byte */ dict->token[1] = '\0'; } dict->already_got_it = '\0'; return 1; } do { c = get_character(dict, FALSE); } while (iswspace(c)); quote_mode = FALSE; i = 0; for (;;) { if (i > MAX_TOKEN_LENGTH-3) { /* 3 for multi-byte tokens */ dict_error(dict, "Token too long"); return 0; } if (quote_mode) { if (c == '\"') { quote_mode = FALSE; dict->token[i] = '\0'; return 1; } if (iswspace(c)) { dict_error(dict, "White space inside of token"); return 0; } /* Although we read wide chars, we store UTF8 internally, always. */ nr = wcrtomb(&dict->token[i], c, &dict->mbss); if (nr < 0) { #ifndef _WIN32 dict_error2(dict, "Unable to read UTF8 string in current locale", nl_langinfo(CODESET)); fprintf (stderr, "\tTry setting the locale with \"export LANG=en_US.UTF-8\"\n"); #else dict_error(dict, "Unable to read UTF8 string in current locale"); #endif return 0; } i += nr; } else { if (is_special(c, &dict->mbss)) { if (i == 0) { dict->token[0] = c; /* special toks are one char always */ dict->token[1] = '\0'; dict->is_special = TRUE; return 1; } dict->token[i] = '\0'; dict->already_got_it = c; return 1; } if (c == WEOF) { if (i == 0) { dict->token[0] = '\0'; return 1; } dict->token[i] = '\0'; dict->already_got_it = c; return 1; } if (iswspace(c)) { dict->token[i] = '\0'; return 1; } if (c == '\"') { quote_mode = TRUE; } else { /* store UTF8 internally, always. */ nr = wctomb_check(&dict->token[i], c, &dict->mbss); if (nr < 0) { #ifndef _WIN32 dict_error2(dict, "Unable to read UTF8 string in current locale", nl_langinfo(CODESET)); fprintf (stderr, "\tTry setting the locale with \"export LANG=en_US.UTF-8\"\n"); #else dict_error(dict, "Unable to read UTF8 string in current locale"); #endif return 0; } i += nr; } } c = get_character(dict, quote_mode); } return 1; } /** * Returns TRUE if this token is a special token and it is equal to c */ static int is_equal(Dictionary dict, wint_t c) { return (dict->is_special && wctob(c) == dict->token[0] && dict->token[1] == '\0'); } /** * Make sure the string s is a valid connector. * Return 1 if the connector is valid, else return 0, * and print an appropriate warning message. */ static int check_connector(Dictionary dict, const char * s) { int i; i = strlen(s); if (i < 1) { dict_error(dict, "Expecting a connector."); return 0; } i = s[i-1]; /* the last character of the token */ if ((i!='+') && (i!='-')) { dict_error(dict, "A connector must end in a \"+\" or \"-\"."); return 0; } if (*s == '@') s++; if (!isupper((int)*s)) { dict_error(dict, "The first letter of a connector must be in [A--Z]."); return 0; } if ((*s == 'I') && (*(s+1) == 'D')) { dict_error(dict, "Connectors beginning with \"ID\" are forbidden"); return 0; } while (*(s+1)) { if ((!isalnum((int)*s)) && (*s != '*') && (*s != '^')) { dict_error(dict, "All letters of a connector must be ASCII alpha-numeric."); return 0; } s++; } return 1; } /* ======================================================================== */ /** * Dictionary entry comparison and ordering functions. * * The data structure storing the dictionary is simply a binary tree. * The entries in the binary tree are sorted by alphabetical order. * There is one catch, however: words may have suffixes (a dot, followed * by the suffix), and these suffixes are to be handled appripriately * during sorting and comparison. * * The use of suffixes means that the ordering of the words is not * exactly the order given by strcmp. The order must be such that, for * example, "make" < "make.n" < "make-up" -- suffixed words come after * the bare words, but before any other other words with non-ascii-alpha * characters (such as the hyphen in "make-up", or possibly UTF8 * characters). Thus, stright "strcmp" can't be used to determine * dictionary order. * * Thus, a set of specialized string comparison and ordering functions * are provided. These "do the right thing" when matching string with * and without suffixes. */ /** * dict_order - order two dictionary words in proper sort order. * Return zero if the strings match, else return standard * (locale-dependent) UTF8 sort order. */ /* verbose version */ /* int dict_order(char *s, char *t) { int ss, tt; while (*s != '\0' && *s == *t) { s++; t++; } if (*s == '.') { ss = 1; } else { ss = (*s)<<1; } if (*t == '.') { tt = 1; } else { tt = (*t)<<1; } return (ss - tt); } */ /* terse version */ static inline int dict_order(const char *s, const char *t) { while (*s != '\0' && *s == *t) {s++; t++;} return (((*s == '.')?(1):((*s)<<1)) - ((*t == '.')?(1):((*t)<<1))); } /** * dict_order_wild() -- order dictionary strings, with wildcard. * Assuming that s is a pointer to a dictionary string, and that * t is a pointer to a search string, this returns 0 if they * match, >0 if s>t, and <0 if s (ds-s)) return FALSE; /* we need to do this to ensure that */ return (strncmp(s, t, ds-s) == 0); /* "i.e." does not match "i.e" */ } else if (dt != NULL && ds == NULL) { if (((int)strlen(s)) > (dt-t)) return FALSE; return (strncmp(s, t, dt-t) == 0); } else { return (strcmp(s, t) == 0); } } /* ======================================================================== */ static inline Dict_node * dict_node_new(void) { return (Dict_node*) xalloc(sizeof(Dict_node)); } static inline void free_dict_node(Dict_node *dn) { xfree((char *)dn, sizeof(Dict_node)); } /** * prune_lookup_list -- discard all list entries that don't match string * Walk the lookup list (of right links), discarding all nodes that do * not match the dictionary string s. The matching is dictionary matching: * suffixed entries will match "bare" entries. */ static Dict_node * prune_lookup_list(Dict_node *llist, const char * s) { Dict_node *dn, *dnx, *list_new; list_new = NULL; for (dn = llist; dn != NULL; dn = dnx) { dnx = dn->right; /* now put dn onto the answer list, or free it */ if (dict_match(dn->string, s)) { dn->right = list_new; list_new = dn; } else { free_dict_node(dn); } } /* now reverse the list back */ llist = NULL; for (dn = list_new; dn != NULL; dn = dnx) { dnx = dn->right; dn->right = llist; llist = dn; } return llist; } void free_lookup_list(Dict_node *llist) { Dict_node * n; while(llist != NULL) { n = llist->right; free_dict_node(llist); llist = n; } } static void free_dict_node_recursive(Dict_node * dn) { if (dn == NULL) return; free_dict_node_recursive(dn->left); free_dict_node_recursive(dn->right); free_dict_node(dn); } /* ======================================================================== */ /** * rdictionary_lookup() -- recursive dictionary lookup * Walk binary tree, given by 'dn', looking for the string 's'. * For every node in the tree where 's' matches (including wildcards) * make a copy of that node, and append it to llist. */ static Dict_node * rdictionary_lookup(Dict_node *llist, Dict_node * dn, const char * s, int match_idiom) { /* see comment in dictionary_lookup below */ int m; Dict_node * dn_new; if (dn == NULL) return llist; m = dict_order_wild(s, dn->string); if (m >= 0) { llist = rdictionary_lookup(llist, dn->right, s, match_idiom); } if ((m == 0) && (match_idiom || !is_idiom_word(dn->string))) { dn_new = dict_node_new(); *dn_new = *dn; dn_new->right = llist; llist = dn_new; } if (m <= 0) { llist = rdictionary_lookup(llist, dn->left, s, match_idiom); } return llist; } /** * dictionary_lookup_list() - return lookup list of words in the dictionary * * Returns a pointer to a lookup list of the words in the dictionary. * Matches include word that appear in idioms. Use * abridged_lookup_list() to obtain matches, excluding idioms. * * This list is made up of Dict_nodes, linked by their right pointers. * The node, file and string fields are copied from the dictionary. * * The returned list must be freed with free_lookup_list(). */ Dict_node * dictionary_lookup_list(Dictionary dict, const char *s) { Dict_node * llist = rdictionary_lookup(NULL, dict->root, s, TRUE); llist = prune_lookup_list(llist, s); return llist; } /** * abridged_lookup_list() - return lookup list of words in the dictionary * * Returns a pointer to a lookup list of the words in the dictionary. * Excludes any idioms that contain the word; use * dictionary_lookup_list() to obtain the complete list. * * This list is made up of Dict_nodes, linked by their right pointers. * The node, file and string fields are copied from the dictionary. * * The returned list must be freed with free_lookup_list(). */ Dict_node * abridged_lookup_list(Dictionary dict, const char *s) { Dict_node *llist; llist = rdictionary_lookup(NULL, dict->root, s, FALSE); llist = prune_lookup_list(llist, s); return llist; } int boolean_dictionary_lookup(Dictionary dict, const char *s) { Dict_node *llist = dictionary_lookup_list(dict, s); int boool = (llist != NULL); free_lookup_list(llist); return boool; } /* ======================================================================== */ /** * Allocate a new Exp node and link it into the exp_list for freeing later. */ Exp * Exp_create(Dictionary dict) { Exp * e; e = (Exp *) xalloc(sizeof(Exp)); e->next = dict->exp_list; dict->exp_list = e; return e; } static inline void exp_free(Exp * e) { xfree((char *)e, sizeof(Exp)); } /* ======================================================================== */ /** * This creates a node with one child (namely e). Initializes * the cost to zero. */ static Exp * make_unary_node(Dictionary dict, Exp * e) { Exp * n; n = Exp_create(dict); n->type = AND_type; /* these must be AND types */ n->cost = 0.0f; n->u.l = (E_list *) xalloc(sizeof(E_list)); n->u.l->next = NULL; n->u.l->e = e; return n; } /** * connector() -- make a node for a connector or dictionary word. * * Assumes the current token is a connector or dictionary word. */ static Exp * connector(Dictionary dict) { Exp * n; Dict_node *dn, *dn_head; int i; i = strlen(dict->token) - 1; /* this must be + or - if a connector */ if ((dict->token[i] != '+') && (dict->token[i] != '-')) { /* If we are here, token is a word */ dn_head = abridged_lookup_list(dict, dict->token); dn = dn_head; while ((dn != NULL) && (strcmp(dn->string, dict->token) != 0)) { dn = dn->right; } if (dn == NULL) { free_lookup_list(dn_head); dict_error(dict, "\nPerhaps missing + or - in a connector.\n" "Or perhaps you forgot the suffix on a word.\n" "Or perhaps a word is used before it is defined.\n"); return NULL; } n = make_unary_node(dict, dn->exp); free_lookup_list(dn_head); } else { /* If we are here, token is a connector */ if (!check_connector(dict, dict->token)) { return NULL; } n = Exp_create(dict); n->dir = dict->token[i]; dict->token[i] = '\0'; /* get rid of the + or - */ if (dict->token[0] == '@') { n->u.string = string_set_add(dict->token+1, dict->string_set); n->multi = TRUE; } else { n->u.string = string_set_add(dict->token, dict->string_set); n->multi = FALSE; } n->type = CONNECTOR_type; n->cost = 0.0f; } if (!link_advance(dict)) { exp_free(n); return NULL; } return n; } /** * This creates a node with zero children. Initializes * the cost to zero. */ static Exp * make_zeroary_node(Dictionary dict) { Exp * n; n = Exp_create(dict); n->type = AND_type; /* these must be AND types */ n->cost = 0.0f; n->u.l = NULL; return n; } /** * This creates an OR node with two children, one the given node, * and the other as zeroary node. This has the effect of creating * what used to be called an optional node. */ static Exp * make_optional_node(Dictionary dict, Exp * e) { Exp * n; E_list *el, *elx; n = Exp_create(dict); n->type = OR_type; n->cost = 0.0f; n->u.l = el = (E_list *) xalloc(sizeof(E_list)); el->e = make_zeroary_node(dict); el->next = elx = (E_list *) xalloc(sizeof(E_list)); elx->next = NULL; elx->e = e; return n; } /* ======================================================================== */ #if ! defined INFIX_NOTATION Exp * expression(Dictionary dict); /** * We're looking at the first of the stuff after an "and" or "or". * Build a Exp node for this expression. Set the cost and optional * fields to the default values. Set the type field according to type */ Exp * operator_exp(Dictionary dict, int type) { Exp * n; E_list first; E_list * elist; n = Exp_create(dict); n->type = type; n->cost = 0.0f; elist = &first; while((!is_equal(dict, ')')) && (!is_equal(dict, ']')) && (!is_equal(dict, '}'))) { elist->next = (E_list *) xalloc(sizeof(E_list)); elist = elist->next; elist->next = NULL; elist->e = expression(dict); if (elist->e == NULL) { return NULL; } } if (elist == &first) { dict_error(dict, "An \"or\" or \"and\" of nothing"); return NULL; } n->u.l = first.next; return n; } /** * Looks for the stuff that is allowed to be inside of parentheses * either & or | followed by a list, or a terminal symbol. */ Exp * in_parens(Dictionary dict) { Exp * e; if (is_equal(dict, '&') || (strcmp(token, "and")==0)) { if (!link_advance(dict)) { return NULL; } return operator_exp(dict, AND_type); } else if (is_equal(dict, '|') || (strcmp(dict->token, "or")==0)) { if (!link_advance(dict)) { return NULL; } return operator_exp(dict, OR_type); } else { return expression(dict); } } /** * Build (and return the root of) the tree for the expression beginning * with the current token. At the end, the token is the first one not * part of this expression. */ Exp * expression(Dictionary dict) { Exp * n; if (is_equal(dict, '(')) { if (!link_advance(dict)) { return NULL; } n = in_parens(dict); if (!is_equal(dict, ')')) { dict_error(dict, "Expecting a \")\"."); return NULL; } if (!link_advance(dict)) { return NULL; } } else if (is_equal(dict, '{')) { if (!link_advance(dict)) { return NULL; } n = in_parens(dict); if (!is_equal(dict, '}')) { dict_error(dict, "Expecting a \"}\"."); return NULL; } if (!link_advance(dict)) { return NULL; } n = make_optional_node(dict, n); } else if (is_equal(dict, '[')) { if (!link_advance(dict)) { return NULL; } n = in_parens(dict); if (!is_equal(dict, ']')) { dict_error(dict, "Expecting a \"]\"."); return NULL; } if (!link_advance(dict)) { return NULL; } n->cost += 1.0f; } else if (!dict->is_special) { n = connector(dict); if (n == NULL) { return NULL; } } else if (is_equal(dict, ')') || is_equal(dict, ']')) { /* allows "()" or "[]" */ n = make_zeroary_node(dict); } else { dict_error(dict, "Connector, \"(\", \"[\", or \"{\" expected."); return NULL; } return n; } /* ======================================================================== */ #else /* This is for infix notation */ static Exp * restricted_expression(Dictionary dict, int and_ok, int or_ok); /** * Build (and return the root of) the tree for the expression beginning * with the current token. At the end, the token is the first one not * part of this expression. */ static Exp * expression(Dictionary dict) { return restricted_expression(dict, TRUE, TRUE); } static Exp * restricted_expression(Dictionary dict, int and_ok, int or_ok) { Exp *nl = NULL, *nr; E_list *ell, *elr; if (is_equal(dict, '(')) { if (!link_advance(dict)) { return NULL; } nl = expression(dict); if (nl == NULL) { return NULL; } if (!is_equal(dict, ')')) { dict_error(dict, "Expecting a \")\"."); return NULL; } if (!link_advance(dict)) { return NULL; } } else if (is_equal(dict, '{')) { if (!link_advance(dict)) { return NULL; } nl = expression(dict); if (nl == NULL) { return NULL; } if (!is_equal(dict, '}')) { dict_error(dict, "Expecting a \"}\"."); return NULL; } if (!link_advance(dict)) { return NULL; } nl = make_optional_node(dict, nl); } else if (is_equal(dict, '[')) { if (!link_advance(dict)) { return NULL; } nl = expression(dict); if (nl == NULL) { return NULL; } if (!is_equal(dict, ']')) { dict_error(dict, "Expecting a \"]\"."); return NULL; } if (!link_advance(dict)) { return NULL; } nl->cost += 1.0f; } else if (!dict->is_special) { nl = connector(dict); if (nl == NULL) { return NULL; } } else if (is_equal(dict, ')') || is_equal(dict, ']')) { /* allows "()" or "[]" */ nl = make_zeroary_node(dict); } else { dict_error(dict, "Connector, \"(\", \"[\", or \"{\" expected."); return NULL; } if (is_equal(dict, '&') || (strcmp(dict->token, "and") == 0)) { Exp *n; if (!and_ok) { warning(dict, "\"and\" and \"or\" at the same level in an expression"); } if (!link_advance(dict)) { return NULL; } nr = restricted_expression(dict, TRUE, FALSE); if (nr == NULL) { return NULL; } n = Exp_create(dict); n->u.l = ell = (E_list *) xalloc(sizeof(E_list)); ell->next = elr = (E_list *) xalloc(sizeof(E_list)); elr->next = NULL; ell->e = nl; elr->e = nr; n->type = AND_type; n->cost = 0.0f; return n; } else if (is_equal(dict, '|') || (strcmp(dict->token, "or") == 0)) { Exp *n; if (!or_ok) { warning(dict, "\"and\" and \"or\" at the same level in an expression"); } if (!link_advance(dict)) { return NULL; } nr = restricted_expression(dict, FALSE,TRUE); if (nr == NULL) { return NULL; } n = Exp_create(dict); n->u.l = ell = (E_list *) xalloc(sizeof(E_list)); ell->next = elr = (E_list *) xalloc(sizeof(E_list)); elr->next = NULL; ell->e = nl; elr->e = nr; n->type = OR_type; n->cost = 0.0f; return n; } return nl; } #endif /* ======================================================================== */ /* Tree balancing utilities, used to implement an AVL tree. * Unfortunately, AVL tree insertion is very slowww, unusably * slow for creating the dictionary. The code is thus ifdef'ed out * but is left here for debugging and other sundry purposes. * A better way to rebalance the tree is the DSW algo, implemented * further below. */ static Dict_node *rotate_right(Dict_node *root) { Dict_node *pivot = root->left; root->left = pivot->right; pivot->right = root; return pivot; } #ifdef USE_AVL_TREE_FOR_INSERTION static Dict_node *rotate_left(Dict_node *root) { Dict_node *pivot = root->right; root->right = pivot->left; pivot->left = root; return pivot; } /* Return tree height. XXX this is not tail-recursive! */ static int tree_depth (Dict_node *n) { int l, r; if (NULL == n) return 0; if (NULL == n->left) return 1+tree_depth(n->right); if (NULL == n->right) return 1+tree_depth(n->left); l = tree_depth(n->left); r = tree_depth(n->right); if (l < r) return r+1; return l+1; } static int tree_balance(Dict_node *n) { int l = tree_depth(n->left); int r = tree_depth(n->right); return r-l; } /** * Rebalance the dictionary tree. * This recomputes the tree depth wayy too often, but so what.. this * only wastes cpu time during the initial dictinary read. */ static Dict_node *rebalance(Dict_node *root) { int bal = tree_balance(root); if (2 == bal) { bal = tree_balance(root->right); if (-1 == bal) { root->right = rotate_right (root->right); } return rotate_left(root); } else if (-2 == bal) { bal = tree_balance(root->left); if (1 == bal) { root->left = rotate_left (root->left); } return rotate_right(root); } return root; } #endif /* USE_AVL_TREE_FOR_INSERTION */ /* ======================================================================== */ /* Implementation of the DSW algo for rebalancing a binary tree. * The point is -- after building the dictionary tree, we rebalance it * once at the end. This is a **LOT LOT** quicker than maintaing an * AVL tree along the way (less than quarter-of-a-second vs. about * a minute or more!) FWIW, the DSW tree is even more balanced than * the AVL tree is (its less deep, more full). * * The DSW algo, with C++ code, is described in * * Timothy J. Rolfe, "One-Time Binary Search Tree Balancing: * The Day/Stout/Warren (DSW) Algorithm", inroads, Vol. 34, No. 4 * (December 2002), pp. 85-88 * http://penguin.ewu.edu/~trolfe/DSWpaper/ */ static Dict_node * dsw_tree_to_vine (Dict_node *root) { Dict_node *vine_tail, *vine_head, *rest; Dict_node vh; vine_head = &vh; vine_head->left = NULL; vine_head->right = root; vine_tail = vine_head; rest = root; while (NULL != rest) { /* If no left, we are done, do the right */ if (NULL == rest->left) { vine_tail = rest; rest = rest->right; } /* eliminate the left subtree */ else { rest = rotate_right(rest); vine_tail->right = rest; } } return vh.right; } static void dsw_compression (Dict_node *root, unsigned int count) { unsigned int j; for (j = 0; j < count; j++) { /* Compound left rotation */ Dict_node * pivot = root->right; root->right = pivot->right; root = pivot->right; pivot->right = root->left; root->left = pivot; } } /* Return size of the full portion of the tree * Gets the next pow(2,k)-1 */ static inline unsigned int full_tree_size (unsigned int size) { unsigned int pk = 1; while (pk < size) pk = 2*pk + 1; return pk/2; } static Dict_node * dsw_vine_to_tree (Dict_node *root, int size) { Dict_node vine_head; unsigned int full_count = full_tree_size(size +1); vine_head.left = NULL; vine_head.right = root; dsw_compression(&vine_head, size - full_count); for (size = full_count ; size > 1 ; size /= 2) { dsw_compression(&vine_head, size / 2); } return vine_head.right; } /* ======================================================================== */ /** * Insert the new node into the dictionary below node n. * Give error message if the new element's string is already there. * Assumes that the "n" field of new is already set, and the left * and right fields of it are NULL. * * The resulting tree is highly unbalanced. It needs to be rebalanced * before used. */ Dict_node * insert_dict(Dictionary dict, Dict_node * n, Dict_node * newnode) { int comp; if (NULL == n) return newnode; comp = dict_order(newnode->string, n->string); if (comp < 0) { if (NULL == n->left) { n->left = newnode; return n; } n->left = insert_dict(dict, n->left, newnode); return n; /* return rebalance(n); Uncomment to get an AVL tree */ } else if (comp > 0) { if (NULL == n->right) { n->right = newnode; return n; } n->right = insert_dict(dict, n->right, newnode); return n; /* return rebalance(n); Uncomment to get an AVL tree */ } else { char t[256]; snprintf(t, 256, "The word \"%s\" has been multiply defined\n", newnode->string); dict_error(dict, t); return NULL; } } /** * insert_list() - * p points to a list of dict_nodes connected by their left pointers. * l is the length of this list (the last ptr may not be NULL). * It inserts the list into the dictionary. * It does the middle one first, then the left half, then the right. * * Note: I think this insert middle, then left, then right, has * its origins as a lame attempt to hack around the fact that the * resulting binary tree is rather badly unbalanced. This has been * fixed by using the DSW rebalancing algo. Now, that would seem * to render this crazy bisected-insertion algo obsoloete, but .. * oddly enough, it seems to make the DSW balancing go really fast! * Faster than a simple insertion. Go figure. I think this has * something to do with the fact that the dictionaries are in * alphabetical order! This subdivision helps randomize a bit. */ static void insert_list(Dictionary dict, Dict_node * p, int l) { Dict_node * dn, *dn_head, *dn_second_half; int k, i; /* length of first half */ if (l == 0) return; k = (l-1)/2; dn = p; for (i = 0; i < k; i++) { dn = dn->left; } /* dn now points to the middle element */ dn_second_half = dn->left; dn->left = dn->right = NULL; if (contains_underbar(dn->string)) { insert_idiom(dict, dn); } else if (is_idiom_word(dn->string)) { err_ctxt ec; ec.sent = NULL; err_msg(&ec, Warn, "Warning: Word \"%s\" found near line %d.\n" "\tWords ending \".Ix\" (x a number) are reserved for idioms.\n" "\tThis word will be ignored.\n", dn->string, dict->line_number); free_dict_node(dn); } else if ((dn_head = abridged_lookup_list(dict, dn->string)) != NULL) { Dict_node *dnx; err_ctxt ec; ec.sent = NULL; err_msg(&ec, Warn, "Warning: The word \"%s\" " "found near line %d of %s matches the following words:\n", dn->string, dict->line_number, dict->name); for (dnx = dn_head; dnx != NULL; dnx = dnx->right) { fprintf(stderr, "\t%s", dnx->string); } fprintf(stderr, "\n\tThis word will be ignored.\n"); free_lookup_list(dn_head); free_dict_node(dn); } else { dict->root = insert_dict(dict, dict->root, dn); dict->num_entries++; } insert_list(dict, p, k); insert_list(dict, dn_second_half, l-k-1); } /** * read_entry() -- read one dictionary entry * Starting with the current token parse one dictionary entry. * Add these words to the dictionary. */ static int read_entry(Dictionary dict) { Exp *n; int i; Dict_node *dn_new, *dnx, *dn = NULL; /* Reset multi-byte shift state every line. */ memset(&dict->mbss, 0, sizeof(dict->mbss)); while (!is_equal(dict, ':')) { if (dict->is_special) { dict_error(dict, "I expected a word but didn\'t get it."); return 0; } /* if it's a word-file name */ /* However, be careful to reject "/.v" which is the division symbol * used in equations (.v means verb-like) */ if ((dict->token[0] == '/') && (dict->token[1] != '.')) { dn = read_word_file(dict, dn, dict->token); if (dn == NULL) { err_ctxt ec; ec.sent = NULL; err_msg(&ec, Error, "Error opening word file %s\n", dict->token); return 0; } } else { dn_new = dict_node_new(); dn_new->left = dn; dn = dn_new; dn->file = NULL; dn->string = string_set_add(dict->token, dict->string_set); } /* Advance to next entry, unless error */ if (0 == link_advance(dict)) goto syntax_error; } /* pass the : */ if (!link_advance(dict)) { goto syntax_error; } n = expression(dict); if (n == NULL) { goto syntax_error; } if (!is_equal(dict, ';')) { dict_error(dict, "Expecting \";\" at the end of an entry."); goto syntax_error; } /* pass the ; */ if (!link_advance(dict)) { goto syntax_error; } /* At this point, dn points to a list of Dict_nodes connected by * their left pointers. These are to be inserted into the dictionary */ i = 0; for (dnx = dn; dnx != NULL; dnx = dnx->left) { dnx->exp = n; i++; } insert_list(dict, dn, i); return 1; syntax_error: free_lookup_list(dn); return 0; } #if ! defined INFIX_NOTATION /** * print the expression, in prefix-style */ void print_expression(Exp * n) { E_list * el; int i, icost; if (n == NULL) { printf("NULL expression"); return; } icost = (int) (n->cost); if (n->type == CONNECTOR_type) { for (i=0; imulti) printf("@"); printf("%s%c",n->u.string, n->dir); for (i=0; i 0) printf(" "); } else { for (i=0; itype == AND_type) printf("& "); if (n->type == OR_type) printf("or "); for (el = n->u.l; el != NULL; el = el->next) { print_expression(el->e); } for (i=0; i 0) printf(" "); if (icost == 0) printf(") "); } } #else /* INFIX_NOTATION */ /** * print the expression, in infix-style */ static void print_expression_parens(Exp * n, int need_parens) { E_list * el; int i, icost; if (n == NULL) { printf("NULL expression"); return; } icost = (int) (n->cost); /* print the connector only */ if (n->type == CONNECTOR_type) { for (i=0; imulti) printf("@"); printf("%s%c",n->u.string, n->dir); for (i=0; iu.l; if (el == NULL) { for (i=0; itype == OR_type) && el && el->e && (NULL == el->e->u.l)) { printf ("{"); print_expression_parens(el->next->e, FALSE); printf ("}"); return; } if ((icost == 0) && need_parens) printf("("); /* print left side of binary expr */ print_expression_parens(el->e, TRUE); /* get a funny "and optional" when its a named expression thing. */ if ((n->type == AND_type) && (el->next == NULL)) { return; } if (n->type == AND_type) printf(" & "); if (n->type == OR_type) printf(" or "); /* print right side of binary expr */ el = el->next; if (el == NULL) { printf ("()"); } else { if (el->e->type == n->type) { print_expression_parens(el->e, FALSE); } else { print_expression_parens(el->e, TRUE); } if (el->next != NULL) printf ("\nERROR! Unexpected list!\n"); } for (i=0; ileft); printf("%s: ", n->string); print_expression(n->exp); printf("\n"); rprint_dictionary_data(n->right); } /** * Dump the entire contents of the dictionary * XXX This is not currently called by anything, but is a "good thing * to keep around". */ void print_dictionary_data(Dictionary dict) { rprint_dictionary_data(dict->root); } int read_dictionary(Dictionary dict) { if (!link_advance(dict)) { return 0; } while (dict->token[0] != '\0') { if (!read_entry(dict)) { return 0; } } dict->root = dsw_tree_to_vine(dict->root); dict->root = dsw_vine_to_tree(dict->root, dict->num_entries); return 1; } /* ======================================================================= */ /* the following functions are for handling deletion */ /** * Returns true if it finds a non-idiom dict_node in a file that matches * the string s. * ** note: this now DOES include non-file words in its search. * * Also sets parent and to_be_deleted appropriately. */ static int find_one_non_idiom_node(Dict_node * p, Dict_node * dn, const char * s, Dict_node **parent, Dict_node **to_be_deleted) { int m; if (dn == NULL) return FALSE; m = dict_order_wild(s, dn->string); if (m <= 0) { if (find_one_non_idiom_node(dn,dn->left, s, parent, to_be_deleted)) return TRUE; } /* if ((m == 0) && (!is_idiom_word(dn->string)) && (dn->file != NULL)) { */ if ((m == 0) && (!is_idiom_word(dn->string))) { *to_be_deleted = dn; *parent = p; return TRUE; } if (m >= 0) { if (find_one_non_idiom_node(dn,dn->right, s, parent, to_be_deleted)) return TRUE; } return FALSE; } static void set_parent_of_node(Dictionary dict, Dict_node *p, Dict_node * del, Dict_node * newnode) { if (p == NULL) { dict->root = newnode; } else { if (p->left == del) { p->left = newnode; } else if (p->right == del) { p->right = newnode; } else { assert(FALSE, "Dictionary broken?"); } } } /** * This deletes all the non-idiom words of the dictionary that match * the given string. Returns TRUE if some deleted, FALSE otherwise. * * XXX Note: this function is not currently used anywhere in the code, * but it could be useful for general dictionary editing. */ int delete_dictionary_words(Dictionary dict, const char * s) { Dict_node *pred, *pred_parent; Dict_node *parent, *to_be_deleted; if (!find_one_non_idiom_node(NULL, dict->root, s, &parent, &to_be_deleted)) return FALSE; for(;;) { /* now parent and to_be_deleted are set */ if (to_be_deleted->file != NULL) { to_be_deleted->file->changed = TRUE; } if (to_be_deleted->left == NULL) { set_parent_of_node(dict, parent, to_be_deleted, to_be_deleted->right); free_dict_node(to_be_deleted); } else { pred_parent = to_be_deleted; pred = to_be_deleted->left; while(pred->right != NULL) { pred_parent = pred; pred = pred->right; } to_be_deleted->string = pred->string; to_be_deleted->file = pred->file; to_be_deleted->exp = pred->exp; set_parent_of_node(dict, pred_parent, pred, pred->left); free_dict_node(pred); } if (!find_one_non_idiom_node(NULL, dict->root, s, &parent, &to_be_deleted)) return TRUE; } } static void free_Word_file(Word_file * wf) { Word_file *wf1; for (;wf != NULL; wf = wf1) { wf1 = wf->next; xfree((char *) wf, sizeof(Word_file)); } } /** * The following two functions free the Exp s and the * E_lists of the dictionary. Not to be confused with * free_E_list in utilities.c */ static void free_Elist(E_list * l) { E_list * l1; for (; l != NULL; l = l1) { l1 = l->next; xfree(l, sizeof(E_list)); } } static void free_Exp_list(Exp * e) { Exp * e1; for (; e != NULL; e = e1) { e1 = e->next; if (e->type != CONNECTOR_type) { free_Elist(e->u.l); } exp_free(e); } } void free_dictionary(Dictionary dict) { free_dict_node_recursive(dict->root); free_Word_file(dict->word_file_header); free_Exp_list(dict->exp_list); } /** * dict_display_word_info() - display the information about the given word. */ void dict_display_word_info(Dictionary dict, const char * s) { Dict_node *dn, *dn_head; Disjunct * d1, * d2; int len; dn_head = dictionary_lookup_list(dict, s); if (dn_head == NULL) { printf(" \"%s\" matches nothing in the dictionary.\n", s); return; } printf("Matches:\n"); for (dn = dn_head; dn != NULL; dn = dn->right) { len = 0; d1 = build_disjuncts_for_dict_node(dn); for(d2 = d1 ; d2 != NULL; d2 = d2->next) { len++; } free_disjuncts(d1); printf(" "); left_print_string(stdout, dn->string, " "); printf(" %5d disjuncts ", len); if (dn->file != NULL) { printf("<%s>", dn->file->file); } printf("\n"); } free_lookup_list(dn_head); return; } /** * dict_display_word_expr() - display the connector info for a given word. */ void dict_display_word_expr(Dictionary dict, const char * s) { Dict_node *dn, *dn_head; dn_head = dictionary_lookup_list(dict, s); if (dn_head == NULL) { printf(" \"%s\" matches nothing in the dictionary.\n", s); return; } printf("\nExpressions:\n"); for (dn = dn_head; dn != NULL; dn = dn->right) { printf(" "); left_print_string(stdout, dn->string, " "); print_expression(dn->exp); printf("\n\n"); } free_lookup_list(dn_head); return; } link-grammar/link-grammar/link-grammar-java.def0000644000000000000000000000270412536650433016700 0ustar Java_org_linkgrammar_LinkGrammar_close Java_org_linkgrammar_LinkGrammar_getConstituentString Java_org_linkgrammar_LinkGrammar_getVersion Java_org_linkgrammar_LinkGrammar_getDictVersion Java_org_linkgrammar_LinkGrammar_getWord Java_org_linkgrammar_LinkGrammar_init Java_org_linkgrammar_LinkGrammar_isEntity Java_org_linkgrammar_LinkGrammar_isPastTenseForm Java_org_linkgrammar_LinkGrammar_getLinkLLabel Java_org_linkgrammar_LinkGrammar_getLinkLWord Java_org_linkgrammar_LinkGrammar_getLinkLabel Java_org_linkgrammar_LinkGrammar_getLinkRLabel Java_org_linkgrammar_LinkGrammar_getLinkRWord Java_org_linkgrammar_LinkGrammar_getLinkString Java_org_linkgrammar_LinkGrammar_getLinkageAndCost Java_org_linkgrammar_LinkGrammar_getLinkageDisjunctCost Java_org_linkgrammar_LinkGrammar_getLinkageLinkCost Java_org_linkgrammar_LinkGrammar_getLinkageNumViolations Java_org_linkgrammar_LinkGrammar_getLinkageDisjunct Java_org_linkgrammar_LinkGrammar_getLinkageWord Java_org_linkgrammar_LinkGrammar_getLinkageSense Java_org_linkgrammar_LinkGrammar_getLinkageSenseScore Java_org_linkgrammar_LinkGrammar_makeLinkage Java_org_linkgrammar_LinkGrammar_getNumLinkages Java_org_linkgrammar_LinkGrammar_getNumLinks Java_org_linkgrammar_LinkGrammar_getNumSkippedWords Java_org_linkgrammar_LinkGrammar_getNumWords Java_org_linkgrammar_LinkGrammar_parse Java_org_linkgrammar_LinkGrammar_setMaxCost Java_org_linkgrammar_LinkGrammar_setMaxParseSeconds Java_org_linkgrammar_LinkGrammar_setDictionariesPath link-grammar/link-grammar/api.h0000644000000000000000000000471312536650433013644 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #ifndef LINK_GRAMMAR_API_H #define LINK_GRAMMAR_API_H /* This file is somewhat misnamed, as everything here defines the * link-private, internal-use-only "api", which is subject to change * from revision to revision. No external code should link to this * stuff. */ #include #include #include #include #if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) #define link_private __attribute__((__visibility__("hidden"))) #else #define link_private #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif link-grammar/link-grammar/print.h0000644000000000000000000000213712536650433014225 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ void print_disjunct_counts(Sentence sent); void print_sentence(FILE *fp, Sentence sent, int w); void print_expression_sizes(Sentence sent); void compute_chosen_words(Sentence sent, Linkage linkage); link-grammar/link-grammar/read-dict.h0000644000000000000000000000317012536650433014723 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ int read_dictionary(Dictionary dict); void dict_display_word_info(Dictionary dict, const char * s); void dict_display_word_expr(Dictionary dict, const char * s); void print_dictionary_data(Dictionary dict); void print_dictionary_words(Dictionary dict); void print_expression(Exp *); int boolean_dictionary_lookup(Dictionary dict, const char *); int delete_dictionary_words(Dictionary dict, const char *); Dict_node * dictionary_lookup_list(Dictionary dict, const char *); Dict_node * abridged_lookup_list(Dictionary dict, const char *); void free_lookup_list(Dict_node *); Dict_node * insert_dict(Dictionary dict, Dict_node * n, Dict_node * newnode); void free_dictionary(Dictionary dict); Exp * Exp_create(Dictionary dict); link-grammar/link-grammar/java/0000755000000000000000000000000012536650433013636 5ustar link-grammar/link-grammar/java/.cvsignore0000644000000000000000000000000412536650433015630 0ustar bin link-grammar/link-grammar/java/org/0000755000000000000000000000000012536650433014425 5ustar link-grammar/link-grammar/java/org/linkgrammar/0000755000000000000000000000000012536650433016731 5ustar link-grammar/link-grammar/java/org/linkgrammar/Linkage.java0000644000000000000000000000557612536650433021163 0ustar /*************************************************************************/ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software. */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ package org.linkgrammar; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * A Linkage represents one of possibly many parses * returned by the Link Grammar parser. Each Linkage * is defined by a list of Links between the tokens * in a sentence. A Linkage also has some metadata * associated with it, e.g. for various cost measures. * * @author Borislav Iordanov */ public class Linkage implements Iterable { private List links = new ArrayList(); private String [] disjuncts; private String [] words; private String constituentString; private int linkedWordCount; private int andCost; private int disjunctCost; private int linkCost; private int numViolations; public List getLinks() { return links; } public Iterator iterator() { return links.iterator(); } public String disjunctAt(int i) { return disjuncts[i]; } public String[] getDisjuncts() { return disjuncts; } public void setDisjuncts(String[] disjuncts) { this.disjuncts = disjuncts; } public String wordAt(int i) { return words[i]; } public String[] getWords() { return words; } public void setWords(String[] words) { this.words = words; } public int getAndCost() { return andCost; } public void setAndCost(int andCost) { this.andCost = andCost; } public int getDisjunctCost() { return disjunctCost; } public void setDisjunctCost(int disjunctCost) { this.disjunctCost = disjunctCost; } public int getLinkCost() { return linkCost; } public void setLinkCost(int linkCost) { this.linkCost = linkCost; } public int getNumViolations() { return numViolations; } public void setNumViolations(int numViolations) { this.numViolations = numViolations; } public int getLinkedWordCount() { return linkedWordCount; } public void setLinkedWordCount(int linkedWordCount) { this.linkedWordCount = linkedWordCount; } public String getConstituentString() { return constituentString; } public void setConstituentString(String constituentString) { this.constituentString = constituentString; } } link-grammar/link-grammar/java/org/linkgrammar/LGService.java0000644000000000000000000005033312536650433021423 0ustar /*************************************************************************/ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software. */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ package org.linkgrammar; import java.io.File; import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.Reader; import java.net.ServerSocket; import java.net.Socket; import java.text.CharacterIterator; import java.text.SimpleDateFormat; import java.text.StringCharacterIterator; import java.util.HashMap; import java.util.Map; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * A simple server implementation for running Link Grammar as a * standalone server. The server accepts parsing requests and returns * the result as a JSON formatted string (see this * JSON website for more information). * There is no session maintained between client and server, it's a * simple, stateless, single round-trip, request-response protocol. * * Requests consist of a bag of parameters separated by the null '\0' * character. Each request must be terminated with the newline '\n' * character. Each parameter has the form name:value\0 where * name and value can contain any character except * '\0' and '\n'. The following parameters are recognized: * *
    *
  • maxCost - ??
  • *
  • storeConstituentString - whether to return the constituent * string for each Linkage as part of the result.
  • *
  • maxLinkages - maximum number of parses to return in the * result. Note that this does not affect the parser behavior which * computes all parses anyway.
  • *
  • maxParseSeconds - ??
  • *
  • text - The text to parse. Note that it must be stripped * from newlines.
  • *
* * The server maintains incoming requests in an unbounded queue and * handles them in thread pool whose size can be specified at the * command line. A thread pool of size > 1 will only work if the Link * Grammar version used is thread-safe. * * Execute this class as a main program to view a list of options. * * @author Borislav Iordanov * */ public class LGService { private static boolean verbose = false; private static SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); // // The current Java bindings require each concurrent thread to // initialize separately. This means that each thread has a // separate copy of the dictionaries, which in unfortunate design. // Nevertheless, we want to avoid initializing before every parse // activity so we maintain a thread local flag and initialize on // demand only. // // The C library itself does not have this restriction; one // dictionary can be shared by many threads. However, the java // bindings do have this restriction; the java bindings were // never designed to be run multi-threaded. XXX This needs to be // fixed. // // The main problem is to detect when a thread completes its work // and therefore LinkGrammar.close should be called to free // allocated memory. We leave that to the use of this class. // private static ThreadLocal initialized = new ThreadLocal() { protected Boolean initialValue() { return Boolean.FALSE; } }; /** *

Return true if LinkGrammar is initialized for the current thread * and false otherwise. */ public static boolean isInitialized() { return initialized.get(); } /** *

* Initialize LinkGrammar for the current is this is not already done. Note that * this method is called by all other methods in this class that invoke LinkGrammar * so there's no really need to call it yourself. It is safe to call the method repeatedly. *

*/ public static void init() { if (!initialized.get()) { LinkGrammar.init(); initialized.set(Boolean.TRUE); } } /** *

* Cleanup allocated memory for use of LinkGrammar in the current thread. *

*/ public static void close() { LinkGrammar.close(); initialized.set(Boolean.FALSE); } private static void trace(String s) { if (verbose) System.out.println("LG " + dateFormatter.format(new java.util.Date()) + " " + s); } private static boolean getBool(String name, Map msg, boolean def) { String x = msg.get(name); return x == null ? def : Boolean.valueOf(x); } private static int getInt(String name, Map msg, int def) { String x = msg.get(name); return x == null ? def : Integer.parseInt(x); } /** *

* Apply configuration parameters to the parser. *

*/ public static void configure(LGConfig config) { init(); if (config.getMaxCost() > -1) LinkGrammar.setMaxCost(config.getMaxCost()); if (config.getMaxParseSeconds() > -1) LinkGrammar.setMaxParseSeconds(config.getMaxParseSeconds()); if (config.getDictionaryLocation() != null) LinkGrammar.setDictionariesPath(config.getDictionaryLocation()); } /** * Assuming LinkGrammar.parse has already been called, * construct a full ParseResult given the passed in * configuration. For example, no more that * config.getMaxLinkages are returned, etc. * * @param config * @return */ public static ParseResult getAsParseResult(LGConfig config) { LinkGrammar.makeLinkage(0); // need to call at least once, otherwise it crashes ParseResult parseResult = new ParseResult(); parseResult.setParserVersion(LinkGrammar.getVersion()); parseResult.setDictVersion(LinkGrammar.getDictVersion()); parseResult.numSkippedWords = LinkGrammar.getNumSkippedWords(); parseResult.words = new String[LinkGrammar.getNumWords()]; parseResult.entityFlags = new boolean[LinkGrammar.getNumWords()]; parseResult.pastTenseFlags = new boolean[LinkGrammar.getNumWords()]; for (int i = 0; i < parseResult.words.length; i++) { String word = parseResult.words[i] = LinkGrammar.getWord(i); parseResult.entityFlags[i] = LinkGrammar.isEntity(word); parseResult.pastTenseFlags[i] = LinkGrammar.isPastTenseForm(word); } int maxLinkages = Math.min(config.getMaxLinkages(), LinkGrammar.getNumLinkages()); for (int li = 0; li < maxLinkages; li++) { LinkGrammar.makeLinkage(li); Linkage linkage = new Linkage(); linkage.setAndCost(LinkGrammar.getLinkageAndCost()); linkage.setDisjunctCost(LinkGrammar.getLinkageDisjunctCost()); linkage.setLinkCost(LinkGrammar.getLinkageLinkCost()); linkage.setLinkedWordCount(LinkGrammar.getNumWords()); linkage.setNumViolations(LinkGrammar.getLinkageNumViolations()); String [] disjuncts = new String[LinkGrammar.getNumWords()]; String [] words = new String[LinkGrammar.getNumWords()]; for (int i = 0; i < words.length; i++) { disjuncts[i] = LinkGrammar.getLinkageDisjunct(i); words[i] = LinkGrammar.getLinkageWord(i); } linkage.setWords(words); linkage.setDisjuncts(disjuncts); int numLinks = LinkGrammar.getNumLinks(); for (int i = 0; i < numLinks; i++) { Link link = new Link(); link.setLabel(LinkGrammar.getLinkLabel(i)); link.setLeft(LinkGrammar.getLinkLWord(i)); link.setRight(LinkGrammar.getLinkRWord(i)); link.setLeftLabel(LinkGrammar.getLinkLLabel(i)); link.setRightLabel(LinkGrammar.getLinkRLabel(i)); linkage.getLinks().add(link); } if (config.isStoreConstituentString()) linkage.setConstituentString(LinkGrammar.getConstituentString()); parseResult.linkages.add(linkage); } return parseResult; } /** * Construct a JSON formatted result for a parse which yielded 0 linkages. */ public static String getEmptyJSONResult(LGConfig config) { StringBuffer buf = new StringBuffer(); buf.append("{\"tokens\":[],"); buf.append("\"numSkippedWords\":0,"); buf.append("\"entity\":[],"); buf.append("\"pastTense\":[],"); buf.append("\"linkages\":[],"); buf.append("\"version\":\"" + LinkGrammar.getVersion() + "\","); buf.append("\"dictVersion\":\"" + LinkGrammar.getDictVersion() + "\"}"); return buf.toString(); } static char[] hex = "0123456789ABCDEF".toCharArray(); private static String jsonString(String s) { if (s == null) return null; StringBuffer b = new StringBuffer(); b.append("\""); CharacterIterator it = new StringCharacterIterator(s); for (char c = it.first(); c != CharacterIterator.DONE; c = it.next()) { if (c == '"') b.append("\\\""); else if (c == '\\') b.append("\\\\"); else if (c == '/') b.append("\\/"); else if (c == '\b') b.append("\\b"); else if (c == '\f') b.append("\\f"); else if (c == '\n') b.append("\\n"); else if (c == '\r') b.append("\\r"); else if (c == '\t') b.append("\\t"); else if (Character.isISOControl(c)) { int n = c; for (int i = 0; i < 4; ++i) { int digit = (n & 0xf000) >> 12; b.append(hex[digit]); n <<= 4; } } else { b.append(c); } } b.append("\""); return b.toString(); } /** * Format the current parsing result as a JSON string. This method * assume that LinkGrammar.parse has been called before. */ public static String getAsJSONFormat(LGConfig config) { LinkGrammar.makeLinkage(0); // need to call at least once, otherwise it crashes int numWords = LinkGrammar.getNumWords(); int maxLinkages = Math.min(config.getMaxLinkages(), LinkGrammar.getNumLinkages()); StringBuffer buf = new StringBuffer(); buf.append("{\"tokens\":["); for (int i = 0; i < numWords; i++) { buf.append(jsonString(LinkGrammar.getWord(i))); if (i + 1 < numWords) buf.append(","); } buf.append("],\"numSkippedWords\":" + LinkGrammar.getNumSkippedWords()); buf.append(",\"entity\":["); boolean first = true; for (int i = 0; i < numWords; i++) if (LinkGrammar.isEntity(LinkGrammar.getWord(i))) { if (!first) buf.append(","); first = false; buf.append(Integer.toString(i)); } buf.append("],\"pastTense\":["); first = true; for (int i = 0; i < numWords; i++) if (LinkGrammar.isPastTenseForm(LinkGrammar.getWord(i).toLowerCase())) { if (!first) buf.append(","); first = false; buf.append(Integer.toString(i)); } buf.append("],\"linkages\":["); for (int li = 0; li < maxLinkages; li++) { LinkGrammar.makeLinkage(li); buf.append("{\"words\":["); for (int i = 0; i < numWords; i++) { buf.append(jsonString(LinkGrammar.getLinkageWord(i))); if (i + 1 < numWords) buf.append(","); } buf.append("], \"disjuncts\":["); for (int i = 0; i < numWords; i++) { buf.append(jsonString(LinkGrammar.getLinkageDisjunct(i))); if (i + 1 < numWords) buf.append(","); } buf.append("], \"andCost\":"); buf.append(Integer.toString(LinkGrammar.getLinkageAndCost())); buf.append(", \"disjunctCost\":"); buf.append(Integer.toString(LinkGrammar.getLinkageDisjunctCost())); buf.append(", \"linkageCost\":"); buf.append(Integer.toString(LinkGrammar.getLinkageLinkCost())); buf.append(", \"numViolations\":"); buf.append(Integer.toString(LinkGrammar.getLinkageNumViolations())); if (config.isStoreConstituentString()) { buf.append(", \"constituentString\":"); buf.append(jsonString(LinkGrammar.getConstituentString())); } buf.append(", \"links\":["); int numLinks = LinkGrammar.getNumLinks(); for (int i = 0; i < numLinks; i++) { buf.append("{\"label\":" + jsonString(LinkGrammar.getLinkLabel(i)) + ","); buf.append("\"left\":" + LinkGrammar.getLinkLWord(i) + ","); buf.append("\"right\":" + LinkGrammar.getLinkRWord(i) + ","); buf.append("\"leftLabel\":" + jsonString(LinkGrammar.getLinkLLabel(i)) + ","); buf.append("\"rightLabel\":" + jsonString(LinkGrammar.getLinkRLabel(i)) + "}"); if (i + 1 < numLinks) buf.append(","); } buf.append("]"); buf.append("}"); if (li < maxLinkages - 1) buf.append(","); } buf.append("],\"version\":\"" + LinkGrammar.getVersion() + "\""); buf.append(",\"dictVersion\":\"" + LinkGrammar.getDictVersion() + "\""); buf.append("}"); return buf.toString(); } /** * A stub method for now for implementing a compact binary format * for parse results. * * @param config * @return */ public static byte [] getAsBinary(LGConfig config) { int size = 0; byte [] buf = new byte[1024]; // TODO ..... grow buf as needed byte [] result = new byte[size]; System.arraycopy(buf, 0, result, 0, size); return result; } private static Map readMsg(Reader in) throws java.io.IOException { int length = 0; char [] buf = new char[1024]; for (int count = in.read(buf, length, buf.length - length); count > -1; count = in.read(buf, length, buf.length - length)) { length += count; if (length == buf.length) { char [] nbuf = new char[buf.length + 512]; System.arraycopy(buf, 0, nbuf, 0, buf.length); buf = nbuf; } if (buf[length-1] == '\n') break; } Map result = new HashMap(); int start = -1; int column = -1; for (int offset = 0; offset < length - 1; offset++) { char c = buf[offset]; if (start == -1) start = offset; else if (c == ':' && column == -1) column = offset; else if (c == '\0') { if (start == -1 || column == -1) throw new RuntimeException("Malformat message:" + new String(buf, 0, length)); String name = new String(buf, start, column - start); String value = new String(buf, column + 1, offset - column - 1); result.put(name, value); start = column = -1; } } if (start != -1 || column != -1) throw new RuntimeException("Malformat message:" + new String(buf, 0, length)); return result; } private static void handleClient(Socket clientSocket) { init(); Reader in = null; PrintWriter out = null; try { trace("Connection accepted from : " + clientSocket.getInetAddress()); in = new InputStreamReader(clientSocket.getInputStream()); Map msg = readMsg(in); if (verbose) trace("Received msg '" + msg + "' from " + clientSocket.getInetAddress()); String json = "{}"; if ("version".equals(msg.get("get"))) // special case msg 'get:version' json = "{\"version\":\"" + LinkGrammar.getVersion() + "\"}"; else { LGConfig config = new LGConfig(); config.setStoreConstituentString(getBool("storeConstituentString", msg, config.isStoreConstituentString())); config.setMaxCost(getInt("maxCost", msg, config.getMaxCost())); config.setMaxLinkages(getInt("maxLinkages", msg, config.getMaxLinkages())); config.setMaxParseSeconds(getInt("maxParseSeconds", msg, config.getMaxParseSeconds())); configure(config); String text = msg.get("text"); if (text != null && text.trim().length() > 0) { LinkGrammar.parse(text); if (LinkGrammar.getNumLinkages() > 0) json = getAsJSONFormat(config); else json = getEmptyJSONResult(config); } else json = getEmptyJSONResult(config); } out = new PrintWriter(clientSocket.getOutputStream(), true); out.print(json.length() + 1); out.print('\n'); out.print(json); out.print('\n'); out.flush(); trace("Response written to " + clientSocket.getInetAddress() + ", closing client connection..."); } catch (Throwable t) { t.printStackTrace(System.err); } finally { if (out != null) try { out.close(); } catch (Throwable t) { } if (in != null) try { in.close(); } catch (Throwable t) { } if (clientSocket != null) try { clientSocket.close(); } catch (Throwable t) { } } } /** *

* Parse a piece of text with the given configuration and return the ParseResult. *

* * @param config The configuration to be used. If this is the first time the parse * method is called within the current thread, the dictionary location (if not null) * of this parameter will be used to initialize the parser. Otherwise the dictionary location is * ignored. * @param text The text to parse, normally a single sentence. * @return The ParseResult. Note that null is never returned. If parsing * failed, there will be 0 linkages in the result. */ public static ParseResult parse(LGConfig config, String text) { if (!isInitialized() && config.getDictionaryLocation() != null && config.getDictionaryLocation().trim().length() > 0) LinkGrammar.setDictionariesPath(config.getDictionaryLocation()); configure(config); LinkGrammar.parse(text); return getAsParseResult(config); } public static void main(String [] argv) { int threads = 1; int port = 0; String dictionaryPath = null; try { int argIdx = 0; if (argv[argIdx].equals("-verbose")) { verbose = true; argIdx++; } if (argv[argIdx].equals("-threads")) { threads = Integer.parseInt(argv[++argIdx]); argIdx++; } port = Integer.parseInt(argv[argIdx++]); if (argv.length > argIdx) dictionaryPath = argv[argIdx]; } catch (Throwable ex) { if (argv.length > 0) ex.printStackTrace(System.err); System.out.println("Syntax: java org.linkgrammar.LGService [-verbose] [-threads n] port [dictionaryPath]"); System.out.println("\t where 'port' is the TCP port the service should listen to and"); System.out.println("\t -verbose forces tracing of every message received and"); System.out.println("\t -threads specifies the number of concurrent threads/clients allowed (default 1) and "); System.out.println("\t 'dictionaryPath' full path to the Link Grammar dictionaries (optional)."); System.exit(-1); } if (dictionaryPath != null) { File f = new File(dictionaryPath); if (!f.exists()) { System.err.println("Dictionary path " + dictionaryPath + " not found."); System.exit(-1); } else if (!f.isDirectory()) { System.err.println("Dictionary path " + dictionaryPath + " not a directory."); System.exit(-1); } } System.out.println("Starting Link Grammar Server at port " + port + ", with " + threads + " available processing threads and " + ((dictionaryPath == null) ? " with default dictionary location." : "with dictionary location '" + dictionaryPath + "'.")); ThreadPoolExecutor threadPool = new ThreadPoolExecutor(threads, threads, Long.MAX_VALUE, TimeUnit.SECONDS, new LinkedBlockingQueue()); try { if (dictionaryPath != null) LinkGrammar.setDictionariesPath(dictionaryPath); ServerSocket serverSocket = new ServerSocket(port); while (true) { trace("Waiting for client connections..."); final Socket clientSocket = serverSocket.accept(); threadPool.submit(new Runnable() { public void run() { handleClient(clientSocket); } }); } } catch (Throwable t) { t.printStackTrace(System.err); System.exit(-1); } } } link-grammar/link-grammar/java/org/linkgrammar/LinkGrammar.java0000644000000000000000000000761412536650433022010 0ustar /*************************************************************************/ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software. */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ package org.linkgrammar; /** * This class serves as a wrapper to the C Link Grammar Parser library. * It provides a simple public Java API to the equivalent public C API. * * Unfortunately, this class is not at all OOP in style; it operates on * the single, current sentence and linkage. This could be improved. */ public class LinkGrammar { static { // On a Linux system, the actual name of the library // is prefixed with "lib" and suffixed with ".so" // -- e.g. "liblink-grammar-java.so" // Windows looks for "link-grammar-java.dll" // MacOS looks for "liblink-grammar-java.dylib" // // On a Windows system, we also need to load the prequisite // libraries first. (Linux loaders do this automatically). // Actually, I guess Windows does this too, unless the user // failed to add the working directory to %PATH // String osname = System.getProperty("os.name"); if (osname.indexOf("win") > -1 || osname.indexOf("Win") > -1) { System.loadLibrary("link-grammar"); } // if (osname.indexOf("Mac OS X") > -1) {} System.loadLibrary("link-grammar-java"); } //! Get the version string for the parser. public static native String getVersion(); //! Get the version string for the dictionary. public static native String getDictVersion(); // C functions for changing linkparser options public static native void setMaxParseSeconds(int maxParseSeconds); public static native void setMaxCost(int maxCost); // Defaults to /usr/local/share/link-grammar/ public static native void setDictionariesPath(String path); // C functions in the linkparser API public static native void init(); public static native void parse(String sent); public static native void close(); // C sentence access functions public static native int getNumWords(); public static native String getWord(int i); // Get the inflected form of the word. public static native String getLinkageWord(int i); // Get string representing the disjunct actually used. public static native String getLinkageDisjunct(int i); public static native int getNumSkippedWords(); // C linkage access functions public static native int getNumLinkages(); public static native void makeLinkage(int index); public static native int getLinkageNumViolations(); public static native int getLinkageAndCost(); public static native int getLinkageDisjunctCost(); public static native int getLinkageLinkCost(); public static native int getNumLinks(); public static native int getLinkLWord(int link); public static native int getLinkRWord(int link); public static native String getLinkLLabel(int link); public static native String getLinkRLabel(int link); public static native String getLinkLabel(int link); public static native String getConstituentString(); public static native String getLinkString(); public static native String getLinkageSense(int word, int sense); public static native double getLinkageSenseScore(int word, int sense); // OTHER UTILITY C FUNCTIONS public static native boolean isPastTenseForm(String word); public static native boolean isEntity(String word); } link-grammar/link-grammar/java/org/linkgrammar/LGRemoteClient.java0000644000000000000000000002174312536650433022420 0ustar package org.linkgrammar; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import java.util.List; import java.util.Map; /** *

* A client of the {@link LGService} when it is run in server mode. The main * method to call is {@link parse} which produces a {@link ParseResult}. At * a minimum, the hostname and port properties * must be set beforehand. Configuration settings of the remote parser itself * are specified with the config property. *

* *

* This client is persistent in its attempts to perform a parse. By default * it will keep trying to connect to a server indefinitely (unless the host is * unknown). To change that, * set the connectRetryCount property. Also, if call to the server * fails for whatever reason, it will retry at least once. The increase the number * of retries, set the parseRetryCount property. *

* * @author Borislav Iordanov * */ public class LGRemoteClient { private LGConfig config = new LGConfig(); private String parserVersion; private String hostname = "localhost"; private int port = 9000; private int parseRetryCount = 2; private int connectRetryCount = Integer.MAX_VALUE; private long connectRetryWait = 1000l; @SuppressWarnings("unchecked") private ParseResult jsonToParseResult(String json) { JSONReader reader = new JSONReader(); Map top = (Map)reader.read(json); ParseResult result = new ParseResult(); result.setParserVersion((String)top.get("version")); result.setWords(((List)(top.get("tokens"))).toArray(new String[0])); boolean [] A = new boolean[result.getWords().length]; for (Long idx : ((List)top.get("entity"))) A[idx.intValue()] = true; result.setEntityFlags(A); A = new boolean[result.getWords().length]; for (Long idx : ((List)top.get("pastTense"))) A[idx.intValue()] = true; result.setPastTenseFlags(A); result.setNumSkippedWords(((Number)top.get("numSkippedWords")).intValue()); for (Map x : (List)top.get("linkages")) { Linkage linkage = new Linkage(); linkage.setAndCost(((Number)x.get("andCost")).intValue()); linkage.setDisjunctCost(((Number)x.get("disjunctCost")).intValue()); linkage.setLinkCost(((Number)x.get("linkageCost")).intValue()); linkage.setNumViolations(((Number)x.get("numViolations")).intValue()); linkage.setWords(((List)(x.get("words"))).toArray(new String[0])); linkage.setDisjuncts(((List)(x.get("disjuncts"))).toArray(new String[0])); linkage.setLinkedWordCount(linkage.getWords().length); // TODO?? is this right? for (Map y : (List)x.get("links")) { Link link = new Link(); link.setLabel((String)y.get("label")); link.setLeftLabel((String)y.get("leftLabel")); link.setRightLabel((String)y.get("rightLabel")); link.setLeft(((Number)y.get("left")).intValue()); link.setRight(((Number)y.get("right")).intValue()); linkage.getLinks().add(link); } if (config.isStoreConstituentString()) linkage.setConstituentString((String)x.get("constituentString")); result.getLinkages().add(linkage); } return result; } private String makeLGRequest(String text) { if (config != null) return "storeConstituentString:" + config.isStoreConstituentString() + "\0" + "maxCost:" + config.getMaxCost() + "\0" + "maxLinkages:" + config.getMaxLinkages() + "\0" + "maxParseSeconds:" + config.getMaxParseSeconds() + "\0" + "text:" + text + "\0"; else return "text:" + text + "\0"; } private String readResponse(BufferedReader in, int size) throws IOException { char [] buf = new char[size]; for (int count = 0; count < size; ) count += in.read(buf, count, size-count); return new String(buf, 0, size); } private String callParser(String request) throws InterruptedException, IOException { if (hostname == null || hostname.length() == 0 || port <= 1024) throw new RuntimeException("No hostname for remote parser or invalid port number < 1024"); // // Connect: // Socket socket = null; for (int i = 0; i < connectRetryCount && socket == null; i++) { try { socket = new Socket(hostname, port); } catch (UnknownHostException ex) { throw new RuntimeException("Host '" + hostname + "' not found."); } catch (IOException ex) { // ignore, retry... } if (socket == null) Thread.sleep(connectRetryWait); } if (socket == null) throw new RuntimeException("Failed to connect to " + hostname + ":" + port); // // Call parser: // PrintWriter out = null; BufferedReader in = null; try { out = new PrintWriter(socket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out.print(request); out.print('\n'); out.flush(); String size = in.readLine(); if (size == null) throw new RuntimeException("Parser returned no response."); return readResponse(in, Integer.parseInt(size)); } finally { if (out != null) try { out.close(); } catch (Throwable t) { } if (in != null) try { in.close(); } catch (Throwable t) { } try { socket.close(); } catch (Throwable t) { } } } /** *

Return the link grammar version. A call to the server is made to * obtain the version which is henceforth cached.

*/ @SuppressWarnings("unchecked") public String getVersion() { if (parserVersion == null) { try { String json = callParser("get:version\0"); JSONReader reader = new JSONReader(); Map top = (Map)reader.read(json); parserVersion = (String)top.get("version"); } catch (IOException ex) { parserVersion = "unavailable"; } catch (InterruptedException ex) { throw new RuntimeException("Thread interrupted.", ex); } } return parserVersion; } public ParseResult parse(String sentence) throws InterruptedException { String parserResponse = null; for (int i = 0; i < parseRetryCount && parserResponse == null; i++) try { parserResponse = callParser(makeLGRequest(sentence)); } catch (IOException ex) { if (i == 0) // Trace exception only on the first failure. { System.err.println("Link grammar called failed on '" + sentence + "'" + ", will retry " + Integer.toString(parseRetryCount - 1) + " more time."); ex.printStackTrace(); } } if (parserResponse == null) return null; ParseResult parseResult = jsonToParseResult(parserResponse); parseResult.setText(sentence); return parseResult; } public LGConfig getConfig() { return config; } public void setConfig(LGConfig config) { this.config = config; } public String getHostname() { return hostname; } public void setHostname(String hostname) { this.hostname = hostname; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public int getParseRetryCount() { return parseRetryCount; } public void setParseRetryCount(int parseRetryCount) { this.parseRetryCount = parseRetryCount; } public int getConnectRetryCount() { return connectRetryCount; } public void setConnectRetryCount(int connectRetryCount) { this.connectRetryCount = connectRetryCount; } public long getConnectRetryWait() { return connectRetryWait; } public void setConnectRetryWait(long connectRetryWait) { this.connectRetryWait = connectRetryWait; } } link-grammar/link-grammar/java/org/linkgrammar/JSONReader.java0000644000000000000000000002422612536650433021476 0ustar /* * Copyright 2009 Borislav Iordanov * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.linkgrammar; import java.math.BigDecimal; import java.math.BigInteger; import java.text.CharacterIterator; import java.text.StringCharacterIterator; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class JSONReader { private static final Object OBJECT_END = new Object(); private static final Object ARRAY_END = new Object(); private static final Object COLON = new Object(); private static final Object COMMA = new Object(); public static final int FIRST = 0; public static final int CURRENT = 1; public static final int NEXT = 2; private static Map escapes = new HashMap(); static { escapes.put(new Character('"'), new Character('"')); escapes.put(new Character('\\'), new Character('\\')); escapes.put(new Character('/'), new Character('/')); escapes.put(new Character('b'), new Character('\b')); escapes.put(new Character('f'), new Character('\f')); escapes.put(new Character('n'), new Character('\n')); escapes.put(new Character('r'), new Character('\r')); escapes.put(new Character('t'), new Character('\t')); } private CharacterIterator it; private char c; // private Object token; private StringBuffer buf = new StringBuffer(); private void error(String msg) { throw new RuntimeException("JSON parse error near position " + it.getIndex() + ":" + msg); } private char next() { c = it.next(); return c; } private char previous() { c = it.previous(); return c; } private void skipWhiteSpace() { do { if (Character.isWhitespace(c)) ; else if (c == '/') { next(); if (c == '*') { // skip multiline comments while (c != CharacterIterator.DONE) if (next() == '*' && next() == '/') break; if (c == CharacterIterator.DONE) throw new RuntimeException( "Unterminated comment while parsing JSON string."); } else if (c == '/') while (c != '\n' && c != CharacterIterator.DONE) next(); else { previous(); break; } } else break; } while (next() != CharacterIterator.DONE); } public Object read(CharacterIterator ci, int start) { it = ci; switch (start) { case FIRST: c = it.first(); break; case CURRENT: c = it.current(); break; case NEXT: c = it.next(); break; } return read(); } public Object read(CharacterIterator it) { return read(it, NEXT); } public Object read(String string) { return read(new StringCharacterIterator(string), FIRST); } private Object read() { skipWhiteSpace(); char ch = c; next(); Object value = null; switch (ch) { case '"': value = string(); break; case '[': value = array(); break; case ']': value = ARRAY_END; break; case ',': value = COMMA; break; case '{': value = object(); break; case '}': value = OBJECT_END; break; case ':': value = COLON; break; case 't': if (c != 'r' || next() != 'u' || next() != 'e') error("Invalid JSON token: expected 'true' keyword."); next(); value = Boolean.TRUE; break; case 'f': if (c != 'a' || next() != 'l' || next() != 's' || next() != 'e') error( "Invalid JSON token: expected 'false' keyword."); next(); value = Boolean.FALSE; break; case 'n': if (c != 'u' || next() != 'l' || next() != 'l') error("Invalid JSON token: expected 'null' keyword."); next(); value = null; break; default: c = it.previous(); if (Character.isDigit(c) || c == '-') value = number(); else error("Invalid character '" + c + "', expecting a JSON token."); } return value; } private boolean isValue(Object x) { return x == null || x instanceof Boolean || x instanceof String || x instanceof Number || x instanceof Map || x instanceof List; } private Object object() { Map ret = new HashMap(); Object key = read(); while (key != OBJECT_END) { if (! (key instanceof String)) error("Expecting a string as key in object, but got '" + key + "'"); Object colon = read(); if (colon != COLON) error("Expecting a colon, but found '" + colon + "' after object key '" + key + "'"); Object value = read(); if (!isValue(value)) error("Unexpected value in object with key '" + key + "' -- '" + value + "', expecting boolean, number string, array or object."); ret.put(key, value); key = read(); if (key == COMMA) key = read(); else if (key != OBJECT_END) error("Unexpected token in object '" + key + "', expecting comma or }."); } return ret; } private Object array() { List ret = new ArrayList(); Object value = read(); while (value != ARRAY_END) { if (!isValue(value)) error("Unexpected value in array '" + value + "', expecting boolean, number string, array or object."); ret.add(value); value = read(); if (value == COMMA) value = read(); else if (value != ARRAY_END) error("Unexpected token in array '" + value + "', expecting comma or ]."); } return ret; } private Object number() { int length = 0; boolean isFloatingPoint = false; buf.setLength(0); if (c == '-') { add(c); } length += addDigits(); if (c == '.') { add(c); length += addDigits(); isFloatingPoint = true; } if (c == 'e' || c == 'E') { add(c); if (c == '+' || c == '-') { add(c); } addDigits(); isFloatingPoint = true; } String s = buf.toString(); return isFloatingPoint ? (length < 17) ? (Object) Double.valueOf(s) : new BigDecimal(s) : (length < 20) ? (Object) Long.valueOf(s) : new BigInteger(s); } private int addDigits() { int ret; for (ret = 0; Character.isDigit(c); ++ret) { add(c); } return ret; } private Object string() { buf.setLength(0); while (c != '"') { if (c == '\\') { next(); if (c == 'u') { add(unicode()); } else { Character value = escapes.get(new Character(c)); if (value != null) add(value); else add(c); } } else { add(c); } } next(); return buf.toString(); } private void add(char cc) { buf.append(cc); next(); } private char unicode() { int value = 0; for (int i = 0; i < 4; ++i) { switch (next()) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': value = (value << 4) + c - '0'; break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': value = (value << 4) + (c - 'a') + 10; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': value = (value << 4) + (c - 'A') + 10; break; } } return (char) value; } } link-grammar/link-grammar/java/org/linkgrammar/LGConfig.java0000644000000000000000000000456712536650433021240 0ustar /*************************************************************************/ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software. */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ package org.linkgrammar; /** * A plain Java bean to hold configuration of the Link Grammar parser. * Some configuration parameters are not really passed onto the parser, * but applied only when constructing a ParseResult. Those * are maxLinkages and allowSkippedWords. * * @author Borislav Iordanov */ public class LGConfig { private int maxLinkages = 25; private int maxParseSeconds = 60; private int maxCost = -1; private boolean allowSkippedWords = true; private String dictionaryLocation = null; // mis-named; if flag is set, then a load is done, // not a store. private boolean storeConstituentString = true; private boolean loadSense = false; public int getMaxLinkages() { return maxLinkages; } public void setMaxLinkages(int m) { maxLinkages = m; } public int getMaxParseSeconds() { return maxParseSeconds; } public void setMaxParseSeconds(int m) { maxParseSeconds = m; } public int getMaxCost() { return maxCost; } public void setMaxCost(int m) { maxCost = m; } public boolean isAllowSkippedWords() { return allowSkippedWords; } public void setAllowSkippedWords(boolean a) { allowSkippedWords = a; } public String getDictionaryLocation() { return dictionaryLocation; } public void setDictionaryLocation(String d) { dictionaryLocation = d; } // mis-named; if flag is set, then a load is done, // not a store. public boolean isStoreConstituentString() { return storeConstituentString; } public void setStoreConstituentString(boolean s) { storeConstituentString = s; } public boolean isLoadSense() { return loadSense; } public void setLoadSense(boolean s) { loadSense = s; } } link-grammar/link-grammar/java/org/linkgrammar/ParseResult.java0000644000000000000000000000651112536650433022050 0ustar /*************************************************************************/ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software. */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ package org.linkgrammar; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * *

* Represents the result of parsing a piece of text. The result * consists of some global meta information about the whole parse * and a list of Linkages returned by the parser. The * original parsed text is available as the text attribute * and a tokenized version as the String[] words attribute. *

* * @author Borislav Iordanov * */ public class ParseResult implements Iterable { String parserVersion; String dictVersion; String text; String [] words; boolean [] entityFlags; boolean [] pastTenseFlags; List linkages = new ArrayList(); int numSkippedWords; public String wordAt(int i) { return words[i]; } /** * past-tense verbs have a usbscript of .v-d, .w-d or .q-d * look at the subscript instead, to see if a verb is past-tense. * @deprecated */ @Deprecated public boolean isPastTenseForm(int i) { return pastTenseFlags[i]; } public boolean isEntity(int i) { return entityFlags[i]; } public Iterator iterator() { return linkages.iterator(); } public List getLinkages() { return linkages; } public String getText() { return text; } public void setText(String text) { this.text = text; } public String[] getWords() { return words; } public void setWords(String[] words) { this.words = words; } public boolean[] getEntityFlags() { return entityFlags; } public void setEntityFlags(boolean[] entityFlags) { this.entityFlags = entityFlags; } /** * past-tense verbs have a usbscript of .v-d, .w-d or .q-d * look at the subscript instead, to see if a verb is past-tense. * @deprecated */ @Deprecated public boolean[] getPastTenseFlags() { return pastTenseFlags; } /** * past-tense verbs have a usbscript of .v-d, .w-d or .q-d * look at the subscript instead, to see if a verb is past-tense. * @deprecated */ @Deprecated public void setPastTenseFlags(boolean[] pastTenseFlags) { this.pastTenseFlags = pastTenseFlags; } public int getNumSkippedWords() { return numSkippedWords; } public void setNumSkippedWords(int numSkippedWords) { this.numSkippedWords = numSkippedWords; } public String getParserVersion() { return parserVersion; } public void setParserVersion(String parserVersion) { this.parserVersion = parserVersion; } public String getDictVersion() { return dictVersion; } public void setDictVersion(String dictVersion) { this.dictVersion = dictVersion; } } link-grammar/link-grammar/java/org/linkgrammar/Link.java0000644000000000000000000000320612536650433020472 0ustar /*************************************************************************/ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software. */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ package org.linkgrammar; /** * Represents a Link Grammar link as part of a parse result. * Link objects contain the indices of the word they link to as well * as an identifier of the type of link and label for the left and * right connectors. * * @author Borislav Iordanov * */ public class Link { private int left, right; private String label, leftLabel, rightLabel; public int getLeft() { return left; } public void setLeft(int left) { this.left = left; } public int getRight() { return right; } public void setRight(int right) { this.right = right; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public String getLeftLabel() { return leftLabel; } public void setLeftLabel(String leftLabel) { this.leftLabel = leftLabel; } public String getRightLabel() { return rightLabel; } public void setRightLabel(String rightLabel) { this.rightLabel = rightLabel; } } link-grammar/link-grammar/java/README0000644000000000000000000000060012536650433014512 0ustar Java Bindings for Link Grammar ------------------------------ These files implement Java language bindings for Link Grammar. They do not extend the parsing algorithms already present in Link-Grammar in any way. They do, however, allow certain types of remote/server operation, and, in particular, are needed for use by the RelEx dependency parser. link-grammar/link-grammar/count.h0000644000000000000000000000264212536650433014222 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ s64 table_lookup(Sentence, int, int, Connector *, Connector *, int); int do_match(Sentence, Connector *a, Connector *b, int wa, int wb); int x_match(Sentence, Connector *a, Connector *b); s64 do_parse(Sentence sent, int mincost, Parse_Options opts); void conjunction_prune(Sentence sent, Parse_Options opts); void count_set_effective_distance(Sentence sent); void count_unset_effective_distance(Sentence sent); void delete_unmarked_disjuncts(Sentence sent); void init_count(Sentence sent); void free_count(Sentence sent); link-grammar/link-grammar/tokenize.c0000644000000000000000000007043412536650433014721 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* Copyright (c) 2009 Linas Vepstas */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #ifndef _WIN32 #include #endif #include #include "build-disjuncts.h" #include "error.h" #include "externs.h" #include "read-dict.h" #include "regex-morph.h" #include "spellcheck.h" #include "string-set.h" #include "structures.h" #include "tokenize.h" #include "utilities.h" #include "word-utils.h" #define MAX_STRIP 10 /* These are no longer in use, but are read from the 4.0.affix file */ /* I've left these here, as an axample of what to expect. */ /*static char * strip_left[] = {"(", "$", "``", NULL}; */ /*static char * strip_right[] = {")", "%", ",", ".", ":", ";", "?", "!", "''", "'", "'s", NULL};*/ #define ENTITY_MARKER "" #define COMMON_ENTITY_MARKER "" /** * is_common_entity - Return true if word is a common noun or adjective * Common nouns and adjectives are typically used in corporate entity * names -- e.g. "Sun State Bank" -- "sun", "state" and "bank" are all * common nouns. */ static int is_common_entity(Dictionary dict, const char * str) { if (word_contains(dict, str, COMMON_ENTITY_MARKER) == 1) return TRUE; return FALSE; } static int is_entity(Dictionary dict, const char * str) { const char * regex_name; if (word_contains(dict, str, ENTITY_MARKER) == 1) return TRUE; regex_name = match_regex(dict, str); if (NULL == regex_name) return FALSE; return word_contains(dict, regex_name, ENTITY_MARKER); } /** * Return TRUE if word is a proper name. * XXX This is a cheap hack that works only in English, and is * broken for German! We need to replace this with something * language-specific. * * Basically, if word starts with upper-case latter, we assume * its a proper name, and that's that. */ static int is_proper_name(const char * word) { return is_utf8_upper(word); } /* Create a string containing anything that can be construed to * be a quotation mark. This works, because link-grammar is more * or less ignorant of quotes at this time. */ static const wchar_t *list_of_quotes(void) { #define QUSZ 50 static wchar_t wqs[QUSZ]; mbstate_t mbs; /* Single-quotes are used for abbreviations, don't mess with them */ /* const char * qs = "\"\'«»《》【】『』‘’`„“"; */ const char * qs = "\"«»《》【】『』`„“"; const char *pqs = qs; memset(&mbs, 0, sizeof(mbs)); mbsrtowcs(wqs, &pqs, QUSZ, &mbs); return wqs; } /** * Return TRUE if the character is a quotation character. */ static int is_quote(wchar_t wc) { static const wchar_t *quotes = NULL; if (NULL == quotes) quotes = list_of_quotes(); if (NULL != wcschr(quotes, wc)) return TRUE; return FALSE; } /** * Returns true if the word can be interpreted as a number. * The ":" is included here so we allow "10:30" to be a number. * We also allow U+00A0 "no-break space" */ static int is_number(const char * s) { mbstate_t mbs; int nb = 1; wchar_t c; if (!is_utf8_digit(s)) return FALSE; memset(&mbs, 0, sizeof(mbs)); while ((*s != 0) && (0 < nb)) { nb = mbrtowc(&c, s, MB_CUR_MAX, &mbs); if (iswdigit(c)) { s += nb; } /* U+00A0 no break space */ else if (0xa0 == c) { s += nb; } else if ((*s == '.') || (*s == ',') || (*s == ':')) { s++; } else return FALSE; } return TRUE; } /** * Returns true if the word contains digits. */ static int contains_digits(const char * s) { mbstate_t mbs; int nb = 1; wchar_t c; memset(&mbs, 0, sizeof(mbs)); while ((*s != 0) && (0 < nb)) { nb = mbrtowc(&c, s, MB_CUR_MAX, &mbs); if (iswdigit(c)) return TRUE; s += nb; } return FALSE; } /** * The string s is the next word of the sentence. * Do not issue the empty string. * Return false if too many words or the word is too long. */ static int issue_sentence_word(Sentence sent, const char * s) { if (*s == '\0') return TRUE; if (strlen(s) > MAX_WORD) { err_ctxt ec; ec.sent = sent; err_msg(&ec, Error, "Error separating sentence. The word \"%s\" is too long.\n" "A word can have a maximum of %d characters.\n", s, MAX_WORD); return FALSE; } if (sent->length >= MAX_SENTENCE) { err_ctxt ec; ec.sent = sent; err_msg(&ec, Error, "Error separating sentence. The sentence has too many words.\n"); return FALSE; } strcpy(sent->word[sent->length].string, s); /* Now we record whether the first character of the word is upper-case. (The first character may be made lower-case later, but we may want to get at the original version) */ if (is_utf8_upper(s)) sent->word[sent->length].firstupper=1; else sent->word[sent->length].firstupper = 0; sent->length++; return TRUE; } /* Here's a summary of how subscripts are handled: Reading the dictionary: If the last "." in a string is followed by a non-digit character, then the "." and everything after it is considered to be the subscript of the word. The dictionary reader does not allow you to have two words that match according to the criterion below. (so you can't have "dog.n" and "dog") Quote marks are used to allow you to define words in the dictionary which would otherwise be considered part of the dictionary, as in ";": {@Xca-} & Xx- & (W+ or Qd+) & {Xx+}; "%" : (ND- & {DD-} & & ( or B*x+)) or (ND- & (OD- or AN+)); Rules for chopping words from the input sentence: First the prefix chars are stripped off of the word. These characters are "(" and "$" (and now "``") Now, repeat the following as long as necessary: Look up the word in the dictionary. If it's there, the process terminates. If it's not there and it ends in one of the right strippable strings (see "strip_right") then remove the strippable string and make it into a separate word. If there is no strippable string, then the process terminates. Rule for defining subscripts in input words: The subscript rule is followed just as when reading the dictionary. When does a word in the sentence match a word in the dictionary? Matching is done as follows: Two words with subscripts must match exactly. If neither has a subscript they must match exactly. If one does and one doesn't then they must match when the subscript is removed. Notice that this is symmetric. So, under this system, the dictonary could have the words "Ill" and also the word "Ill." It could also have the word "i.e.", which could be used in a sentence. */ #undef MIN #define MIN(a, b) (((a) < (b)) ? (a) : (b)) static int boolean_reg_dict_lookup(Dictionary dict, const char * word) { const char * regex_name; if (boolean_dictionary_lookup(dict, word)) return TRUE; regex_name = match_regex(dict, word); if (NULL == regex_name) return FALSE; return boolean_dictionary_lookup(dict, regex_name); } static int downcase_is_in_dict(Dictionary dict, char * word) { int i, rc; char low[MB_LEN_MAX]; char save[MB_LEN_MAX]; wchar_t c; int nbl, nbh; mbstate_t mbs, mbss; if (!is_utf8_upper(word)) return FALSE; memset(&mbs, 0, sizeof(mbs)); memset(&mbss, 0, sizeof(mbss)); nbh = mbrtowc (&c, word, MB_CUR_MAX, &mbs); c = towlower(c); nbl = wctomb_check(low, c, &mbss); if (nbh != nbl) { prt_error("Warning: can't downcase multi-byte string: %s\n", word); return FALSE; } /* Downcase */ for (i=0; idict, word)) word_is_in_dict = TRUE; else if (is_first_word && downcase_is_in_dict (sent->dict,word)) word_is_in_dict = TRUE; if (word_is_in_dict) { return issue_sentence_word(sent, word); } /* Set up affix tables. */ if (sent->dict->affix_table != NULL) { Dictionary dict = sent->dict->affix_table; r_strippable = dict->r_strippable; l_strippable = dict->l_strippable; u_strippable = dict->u_strippable; p_strippable = dict->p_strippable; s_strippable = dict->s_strippable; strip_left = dict->strip_left; strip_right = dict->strip_right; strip_units = dict->strip_units; prefix = dict->prefix; suffix = dict->suffix; } /* Strip off punctuation, etc. on the left-hand side. */ /* XXX FIXME: this fails in certain cases: e.g. * "By the '50s, he was very prosperous." * where the leading quote is striped, and then "50s," cannot be * found in the dict. Next, the comma is removed, and "50s" is still * not in the dict ... the trick was that the comma should be * right-stripped first, then the possible quotes. * More generally, link-grammar does not support multiple possible * tokenizations. */ for (;;) { for (i=0; i= wend) return TRUE; /* Now w points to the string starting just to the right of * any left-stripped characters. * stripped[] is an array of numbers, indicating the index * numbers (in the strip_right array) of any strings stripped off; * stripped[0] is the number of the first string stripped off, etc. * When it breaks out of this loop, n_stripped will be the number * of strings stripped off. */ for (n_r_stripped = 0; n_r_stripped < MAX_STRIP; n_r_stripped++) { sz = MIN(wend-w, MAX_WORD); strncpy(word, w, sz); word[sz] = '\0'; if (wend == w) break; /* it will work without this */ if (boolean_reg_dict_lookup(sent->dict, word)) { word_is_in_dict = TRUE; break; } /* This could happen if it's a word after a colon, also! */ if (is_first_word && downcase_is_in_dict (sent->dict, word)) { word_is_in_dict = TRUE; break; } for (i=0; i < r_strippable; i++) { len = strlen(strip_right[i]); /* the remaining w is too short for a possible match */ if ((wend-w) < len) continue; if (strncmp(wend-len, strip_right[i], len) == 0) { r_stripped[n_r_stripped] = strip_right[i]; wend -= len; break; } } if (i == r_strippable) break; } /* Is there a number in the word? If so, then search for * trailing units suffixes. */ if ((FALSE == word_is_in_dict) && contains_digits(word)) { /* Same as above, but with a twist: the only thing that can * preceed a units suffix is a number. This is so that we can * split up things like "12ft" (twelve feet) but not split up * things like "Delft blue". Multiple passes allow for * constructions such as 12sq.ft. */ n_r_stripped_save = n_r_stripped; wend_save = wend; for (; n_r_stripped < MAX_STRIP; n_r_stripped++) { size_t sz = MIN(wend-w, MAX_WORD); strncpy(word, w, sz); word[sz] = '\0'; if (wend == w) break; /* it will work without this */ /* Number */ if (is_number(word)) { found_number = 1; break; } for (i=0; i < u_strippable; i++) { len = strlen(strip_units[i]); /* the remaining w is too short for a possible match */ if ((wend-w) < len) continue; if (strncmp(wend-len, strip_units[i], len) == 0) { r_stripped[n_r_stripped] = strip_units[i]; wend -= len; break; } } if (i == u_strippable) break; } /* The root *must* be a number! */ if (0 == found_number) { wend = wend_save; n_r_stripped = n_r_stripped_save; } } /* Now we strip off suffixes...w points to the remaining word, * "wend" to the end of the word. */ s_stripped = -1; strncpy(word, w, MIN(wend-w, MAX_WORD)); word[MIN(wend-w, MAX_WORD)] = '\0'; /* Umm, double-check, if need be ... !?? */ if (FALSE == word_is_in_dict) { if (boolean_reg_dict_lookup(sent->dict, word)) word_is_in_dict = TRUE; else if (is_first_word && downcase_is_in_dict (sent->dict,word)) word_is_in_dict = TRUE; } if (FALSE == word_is_in_dict) { j=0; for (i=0; i <= s_strippable; i++) { s_ok = 0; /* Go through once for each suffix; then go through one * final time for the no-suffix case */ if (i < s_strippable) { len = strlen(suffix[i]); /* The remaining w is too short for a possible match */ if ((wend-w) < len) continue; if (strncmp(wend-len, suffix[i], len) == 0) s_ok=1; } else len = 0; if (s_ok || i == s_strippable) { strncpy(newword, w, MIN((wend-len)-w, MAX_WORD)); newword[MIN((wend-len)-w, MAX_WORD)] = '\0'; /* Check if the remainder is in the dictionary; * for the no-suffix case, it won't be */ if (boolean_reg_dict_lookup(sent->dict, newword)) { if ((verbosity>1) && (i < s_strippable)) printf("Splitting word into two: %s-%s\n", newword, suffix[i]); s_stripped = i; wend -= len; strncpy(word, w, MIN(wend-w, MAX_WORD)); word[MIN(wend-w, MAX_WORD)] = '\0'; word_is_in_dict = TRUE; break; } /* If the remainder isn't in the dictionary, * try stripping off prefixes */ else { for (j=0; jdict, newword)) { if ((verbosity>1) && (i < s_strippable)) printf("Splitting word into three: %s-%s-%s\n", prefix[j], newword, suffix[i]); if (!issue_sentence_word(sent, prefix[j])) return FALSE; if (i < s_strippable) s_stripped = i; wend -= len; w += strlen(prefix[j]); sz = MIN(wend-w, MAX_WORD); strncpy(word, w, sz); word[sz] = '\0'; word_is_in_dict = TRUE; break; } } } } if (j != p_strippable) break; } } } /* word is now what remains after all the stripping has been done */ issued = FALSE; /* If n_r_stripped exceed max, the "word" is most likely a long * sequence of periods. Just accept it as an unknown "word", * and move on. */ if (n_r_stripped >= MAX_STRIP) { n_r_stripped = 0; word_is_in_dict = TRUE; } if (quote_found == TRUE) sent->post_quote[sent->length] = 1; #if defined HAVE_HUNSPELL || defined HAVE_ASPELL /* If the word is still not being found, then it might be * a run-on of two words. Ask the spell-checker to split * the word in two, if possible. Do this only if the word * is not a proper name, and if spell-checking is enabled. */ if ((FALSE == word_is_in_dict) && TRUE == opts->use_spell_guess && sent->dict->spell_checker && (FALSE == is_proper_name(word))) { char **alternates = NULL; char *sp = NULL; char *wp; int j, n; n = spellcheck_suggest(sent->dict->spell_checker, &alternates, word); for (j=0; j=0; i--) { if (!issue_sentence_word(sent, r_stripped[i])) return FALSE; } return TRUE; } /** * The string s has just been read in from standard input. * This function breaks it up into words and stores these words in * the sent->word[] array. Returns TRUE if all is well, FALSE otherwise. * Quote marks are treated just like blanks. */ int separate_sentence(Sentence sent, Parse_Options opts) { const char *t; int is_first, quote_found; Dictionary dict = sent->dict; mbstate_t mbs; const char * s = sent->orig_sentence; memset(sent->post_quote, 0, MAX_SENTENCE*sizeof(int)); sent->length = 0; if (dict->left_wall_defined) if (!issue_sentence_word(sent, LEFT_WALL_WORD)) return FALSE; /* Reset the multibyte shift state to the initial state */ memset(&mbs, 0, sizeof(mbs)); is_first = TRUE; for(;;) { int isq; wchar_t c; int nb = mbrtowc(&c, s, MB_CUR_MAX, &mbs); quote_found = FALSE; if (0 > nb) goto failure; /* Skip all whitespace. Also, ignore *all* quotation marks. * XXX This is sort-of a hack, but that is because LG does * not have any intelligent support for quoted character * strings at this time. */ isq = is_quote (c); if (isq) quote_found = TRUE; while (iswspace(c) || isq) { s += nb; nb = mbrtowc(&c, s, MB_CUR_MAX, &mbs); if (0 == nb) break; if (0 > nb) goto failure; isq = is_quote (c); if (isq) quote_found = TRUE; } if (*s == '\0') break; t = s; nb = mbrtowc(&c, t, MB_CUR_MAX, &mbs); if (0 > nb) goto failure; while (!iswspace(c) && !is_quote(c) && (c != 0) && (nb != 0)) { t += nb; nb = mbrtowc(&c, t, MB_CUR_MAX, &mbs); if (0 > nb) goto failure; } if (!separate_word(sent, opts, s, t, is_first, quote_found)) return FALSE; is_first = FALSE; s = t; if (*s == '\0') break; } if (dict->right_wall_defined) if (!issue_sentence_word(sent, RIGHT_WALL_WORD)) return FALSE; return (sent->length > dict->left_wall_defined + dict->right_wall_defined); failure: prt_error("Unable to process UTF8 input string in current locale %s\n", nl_langinfo(CODESET)); return FALSE; } /** * Build the word expressions, and add a tag to the word to indicate * that it was guessed by means of regular-expression matching. * Also, add a subscript to the resulting word to indicate the * rule origin. */ static void tag_regex_string(Sentence sent, int i, const char * type) { char str[MAX_WORD+1]; char * t; X_node * e; sent->word[i].x = build_word_expressions(sent->dict, type); for (e = sent->word[i].x; e != NULL; e = e->next) { t = strchr(e->string, '.'); e->string = sent->word[i].string; if (NULL != t) { snprintf(str, MAX_WORD, "%.50s[!].%.5s", e->string, t+1); } else { snprintf(str, MAX_WORD, "%.50s", e->string); } e->string = string_set_add(str, sent->string_set); } } /** * Puts into word[i].x the expression for the unknown word * the parameter s is the word that was not in the dictionary * it massages the names to have the corresponding subscripts * to those of the unknown words * so "grok" becomes "grok[?].v" */ static void handle_unknown_word(Sentence sent, int i, char * s) { char *t; X_node *d; char str[MAX_WORD+1]; sent->word[i].x = build_word_expressions(sent->dict, UNKNOWN_WORD); if (sent->word[i].x == NULL) assert(FALSE, "UNKNOWN_WORD should have been there"); for (d = sent->word[i].x; d != NULL; d = d->next) { t = strchr(d->string, '.'); if (t != NULL) { snprintf(str, MAX_WORD, "%.50s[?].%.5s", s, t+1); } else { snprintf(str, MAX_WORD, "%.50s[?]", s); } d->string = string_set_add(str, sent->string_set); } } /** * If a word appears to be mis-spelled, then add alternate * spellings. Maybe one of those will do ... */ static void guess_misspelled_word(Sentence sent, int i, char * s) { int spelling_ok; char str[MAX_WORD+1]; Dictionary dict = sent->dict; X_node *d, *head = NULL; int j, n; char **alternates = NULL; /* Spell-guessing is disabled if no spell-checker is speficified */ if (NULL == dict->spell_checker) { handle_unknown_word(sent, i, s); return; } /* If the spell-checker knows about this word, and we don't ... * Dang. We should fix it someday. Accept it as such. */ spelling_ok = spellcheck_test(dict->spell_checker, s); if (spelling_ok) { handle_unknown_word(sent, i, s); return; } /* Else, ask the spell-checker for alternate spellings * and see if these are in the dict. */ n = spellcheck_suggest(dict->spell_checker, &alternates, s); for (j=0; jdict, alternates[j])) { X_node *x = build_word_expressions(sent->dict, alternates[j]); head = catenate_X_nodes(x, head); } } sent->word[i].x = head; if (alternates) spellcheck_free_suggest(alternates, n); /* Add a [~] to the output to signify that its the result of * guessing. */ for (d = sent->word[i].x; d != NULL; d = d->next) { const char * t = strchr(d->string, '.'); if (t != NULL) { size_t off = t - d->string; strncpy(str, d->string, off); str[off] = 0; strcat(str, "[~]"); strcat(str, t); } else { snprintf(str, MAX_WORD, "%.50s[~]", s); } d->string = string_set_add(str, sent->string_set); } /* If nothing found at all... */ if (NULL == head) { handle_unknown_word(sent, i, s); } } /** * Corrects case of first word, fills in other proper nouns, and * builds the expression lists for the resulting words. * * Algorithm: * Apply the following step to all words w: * If w is in the dictionary, use it. * Else if w is identified by regex matching, use the * appropriately matched disjunct collection. * * Now, we correct the first word, w. * If w is upper case, let w' be the lower case version of w. * If both w and w' are in the dict, concatenate these disjncts. * Else if just w' is in dict, use disjuncts of w', together with * the CAPITALIZED-WORDS rule. * Else leave the disjuncts alone. */ int build_sentence_expressions(Sentence sent, Parse_Options opts) { int i, first_word; /* the index of the first word after the wall */ char *s, temp_word[MAX_WORD+1]; const char * regex_name; X_node * e; Dictionary dict = sent->dict; if (dict->left_wall_defined) { first_word = 1; } else { first_word = 0; } /* The following loop treats all words the same * (nothing special for 1st word) */ for (i=0; ilength; i++) { s = sent->word[i].string; if (boolean_dictionary_lookup(sent->dict, s)) { sent->word[i].x = build_word_expressions(sent->dict, s); } else if ((NULL != (regex_name = match_regex(sent->dict, s))) && boolean_dictionary_lookup(sent->dict, regex_name)) { tag_regex_string(sent, i, regex_name); } else if (dict->unknown_word_defined && dict->use_unknown_word) { if (opts->use_spell_guess) { guess_misspelled_word(sent, i, s); } else { handle_unknown_word(sent, i, s); } } else { /* The reason I can assert this is that the word * should have been looked up already if we get here. */ assert(FALSE, "I should have found that word."); } } /* Under certain cases--if it's the first word of the sentence, * or if it follows a colon or a quotation mark--a word that's * capitalized has to be looked up as an uncapitalized word * (as well as a capitalized word). * XXX This rule is English-language-oriented, and should be * abstracted. */ for (i=0; ilength; i++) { if (! (i == first_word || (i > 0 && strcmp(":", sent->word[i-1].string)==0) || sent->post_quote[i] == 1)) continue; s = sent->word[i].string; /* If the lower-case version of this word is in the dictionary, * then add the disjuncts for the lower-case version. The upper * case version disjuncts had previously come from matching the * CAPITALIZED-WORDS regex. * * Err .. add the lower-case version only if the lower-case word * is a common noun or adjective; otherwise, *replace* the * upper-case word with the lower-case one. This allows common * nouns and adjectives to be used for entity names: e.g. * "Great Southern Union declares bankruptcy", allowing Great * to be capitalized, while preventing an upper-case "She" being * used as a proper name in "She declared bankruptcy". * * Arghh. This is still messed up. The capitalized-regex runs * too early, I think. We need to *add* Sue.f (female name Sue) * even though sue.v (the verb "to sue") is in the dict. So * test for capitalized entity names. Glurg. Too much complexity * here, it seems to me. * * This is actually a great example of a combo of an algorithm * together with a list of words used to determine grammatical * function. */ if (is_utf8_upper(s)) { const char * lc; downcase_utf8_str(temp_word, s, MAX_WORD); lc = string_set_add(temp_word, sent->string_set); /* The lower-case dict lookup might trigger regex * matches in the dictionary. We want to avoid these. * e.g. "Cornwallis" triggers both PL-CAPITALIZED_WORDS * and S-WORDS. Since its not an entity, the regex * matches will erroneously discard the upper-case version. */ if (boolean_dictionary_lookup(sent->dict, lc)) { if (is_entity(sent->dict,s) || is_common_entity(sent->dict,lc)) { if (1 < verbosity) { printf ("Info: First word: %s entity=%d common=%d\n", s, is_entity(sent->dict,s), is_common_entity(sent->dict,lc)); } e = build_word_expressions(sent->dict, lc); sent->word[i].x = catenate_X_nodes(sent->word[i].x, e); } else { if (1 < verbosity) { printf("Info: First word: %s downcase only\n", lc); } safe_strcpy(s, lc, MAX_WORD); e = build_word_expressions(sent->dict, s); free_X_nodes(sent->word[i].x); sent->word[i].x = e; } } } } return TRUE; } /** * This just looks up all the words in the sentence, and builds * up an appropriate error message in case some are not there. * It has no side effect on the sentence. Returns TRUE if all * went well. * * This code is called only is the 'unkown-words' flag is set. */ int sentence_in_dictionary(Sentence sent) { int w, ok_so_far; char * s; Dictionary dict = sent->dict; char temp[1024]; ok_so_far = TRUE; for (w=0; wlength; w++) { s = sent->word[w].string; if (!boolean_reg_dict_lookup(dict, s)) { if (ok_so_far) { safe_strcpy(temp, "The following words are not in the dictionary:", sizeof(temp)); ok_so_far = FALSE; } safe_strcat(temp, " \"", sizeof(temp)); safe_strcat(temp, sent->word[w].string, sizeof(temp)); safe_strcat(temp, "\"", sizeof(temp)); } } if (!ok_so_far) { err_ctxt ec; ec.sent = sent; err_msg(&ec, Error, "Error: Sentence not in dictionary\n%s\n", temp); } return ok_so_far; } link-grammar/link-grammar/preparation.h0000644000000000000000000000243012536650433015411 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ void free_sentence_expressions(Sentence sent); void free_sentence_disjuncts(Sentence sent); void free_deletable(Sentence sent); void free_effective_dist(Sentence sent); void prepare_to_parse(Sentence sent, Parse_Options opts); void install_fat_connectors(Sentence sent); void build_deletable(Sentence sent, int has_conjunction); void build_effective_dist(Sentence sent, int has_conjunction); link-grammar/link-grammar/read-regex.h0000644000000000000000000000146612536650433015120 0ustar /*************************************************************************/ /* Copyright (c) 2005 Sampo Pyysalo */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ int read_regex_file(Dictionary dict, const char *file_name); link-grammar/link-grammar/error.h0000644000000000000000000000226512536650433014224 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #ifndef _LINK_GRAMMAR_ERROR_H_ #define _LINK_GRAMMAR_ERROR_H_ #include "link-includes.h" typedef struct { Sentence sent; } err_ctxt; typedef enum { Fatal = 1, Error, Warn, Info, Debug } severity; void err_msg(err_ctxt *, severity, const char *fmt, ...) GNUC_PRINTF(3,4); #endif link-grammar/link-grammar/resources.c0000644000000000000000000001224612536650433015100 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include #if !defined(_WIN32) #include #include #endif #if defined(__linux__) /* based on reading the man page for getrusage on linux, I inferred that I needed to include this. However it doesn't seem to be necessary */ #include #endif #if defined(__hpux__) #include int syscall(int, int, struct rusage *rusage); /* can't find the prototype for this */ #define getrusage(a, b) syscall(SYS_GETRUSAGE, (a), (b)) #endif /* __hpux__ */ #if defined(__sun__) int getrusage(int who, struct rusage *rusage); /* Declaration missing from sys/resource.h in sun operating systems (?) */ #endif /* __sun__ */ #define MAX_PARSE_TIME_UNLIMITED -1 #define MAX_MEMORY_UNLIMITED ((size_t) -1) /** returns the current usage time clock in seconds */ static double current_usage_time(void) { #if !defined(_WIN32) struct rusage u; getrusage (RUSAGE_SELF, &u); return (u.ru_utime.tv_sec + ((double) u.ru_utime.tv_usec) / 1000000.0); #else return ((double) clock())/CLOCKS_PER_SEC; #endif } Resources resources_create(void) { Resources r; r = (Resources) xalloc(sizeof(struct Resources_s)); r->max_parse_time = MAX_PARSE_TIME_UNLIMITED; r->when_created = current_usage_time(); r->when_last_called = current_usage_time(); r->time_when_parse_started = current_usage_time(); r->space_when_parse_started = get_space_in_use(); r->max_memory = MAX_MEMORY_UNLIMITED; r->cumulative_time = 0; r->memory_exhausted = FALSE; r->timer_expired = FALSE; return r; } void resources_delete(Resources r) { xfree(r, sizeof(struct Resources_s)); } void resources_reset(Resources r) { r->when_last_called = r->time_when_parse_started = current_usage_time(); r->space_when_parse_started = get_space_in_use(); r->timer_expired = FALSE; r->memory_exhausted = FALSE; } #if 0 static void resources_reset_time(Resources r) { r->when_last_called = r->time_when_parse_started = current_usage_time(); } #endif void resources_reset_space(Resources r) { r->space_when_parse_started = get_space_in_use(); } int resources_exhausted(Resources r) { if (resources_timer_expired(r)) { r->timer_expired = TRUE; } if (resources_memory_exhausted(r)) { r->memory_exhausted = TRUE; } return (r->timer_expired || r->memory_exhausted); } int resources_timer_expired(Resources r) { if (r->max_parse_time == MAX_PARSE_TIME_UNLIMITED) return 0; else return (r->timer_expired || (current_usage_time() - r->time_when_parse_started > r->max_parse_time)); } int resources_memory_exhausted(Resources r) { if (r->max_memory == MAX_MEMORY_UNLIMITED) return 0; else return (r->memory_exhausted || (get_space_in_use() > r->max_memory)); } /** print out the cpu ticks since this was last called */ static void resources_print_time(int verbosity, Resources r, const char * s) { double new_t; new_t = current_usage_time(); if (verbosity > 1) { printf("++++"); left_print_string(stdout, s, " "); printf("%7.2f seconds\n", new_t - r->when_last_called); } r->when_last_called = new_t; } /** print out the cpu ticks since this was last called */ static void resources_print_total_time(int verbosity, Resources r) { double new_t; new_t = current_usage_time(); r->cumulative_time += (new_t - r->time_when_parse_started) ; if (verbosity > 0) { printf("++++"); left_print_string(stdout, "Time", " "); printf("%7.2f seconds (%.2f total)\n", new_t - r->time_when_parse_started, r->cumulative_time); } r->time_when_parse_started = new_t; } static void resources_print_total_space(int verbosity, Resources r) { if (verbosity > 1) { printf("++++"); left_print_string(stdout, "Total space", " "); printf("%lu bytes (%lu max)\n", (long unsigned int) get_space_in_use(), (long unsigned int) get_max_space_used()); } } void print_time(Parse_Options opts, const char * s) { resources_print_time(opts->verbosity, opts->resources, s); } void parse_options_print_total_time(Parse_Options opts) { resources_print_total_time(opts->verbosity, opts->resources); } void print_total_space(Parse_Options opts) { resources_print_total_space(opts->verbosity, opts->resources); } link-grammar/link-grammar/regex-morph.h0000644000000000000000000000173012536650433015324 0ustar /*************************************************************************/ /* Copyright (c) 2005 Sampo Pyysalo */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include "api-structures.h" int compile_regexs(Dictionary); const char *match_regex(Dictionary, const char *); void free_regexs(Dictionary dict); link-grammar/link-grammar/word-utils.h0000644000000000000000000001072212536650433015201 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #ifndef _LINK_GRAMMAR_WORD_UTILS_H_ #define _LINK_GRAMMAR_WORD_UTILS_H_ #include /* Exp utilities ... */ void free_Exp(Exp *); void free_E_list(E_list *); int size_of_expression(Exp *); Exp * copy_Exp(Exp *); /* int exp_compare(Exp * e1, Exp * e2); */ /* int exp_contains(Exp * super, Exp * sub); */ /* X_node utilities ... */ X_node * catenate_X_nodes(X_node *, X_node *); void free_X_nodes(X_node *); /* Connector utilities ... */ Connector * connector_new(void); Connector * init_connector(Connector *c); void free_connectors(Connector *); void exfree_connectors(Connector *); Connector * copy_connectors(Connector *); Connector * excopy_connectors(Connector * c); /* Link utilities ... */ Link * excopy_link(Link *); void exfree_link(Link *); /* Connector-set utilities ... */ Connector_set * connector_set_create(Exp *e); void connector_set_delete(Connector_set * conset); int match_in_connector_set(Sentence, Connector_set *conset, Connector * c, int d); int word_has_connector(Dict_node *, const char *, int); /* Dictionary utilities ... */ int word_contains(Dictionary dict, const char * word, const char * macro); Dict_node * list_whole_dictionary(Dict_node *, Dict_node *); static inline int string_hash(const char *s) { unsigned int i; /* djb2 hash */ i = 5381; while (*s) { i = ((i << 5) + i) + *s; s++; } return i; } /** * This hash function only looks at the leading upper case letters of * the connector string, and the label fields. This ensures that if two * strings match (formally), then they must hash to the same place. */ static inline int connector_hash(Connector * c) { const char *s; unsigned int i; if (-1 != c->hash) return c->hash; /* For most situations, both hashes are very nearly equal; * sdbm seems to be about 5% faster than djb2, hard to say. * In either case, realize that the connector string is * very very short - usually one or two letters, so we have * probably only 8 or 10 bits total entropy coming in! */ #if 0 /* djb2 hash */ i = 5381; i = ((i << 5) + i) + (0xff & c->label); s = c->string; while (isupper((int) *s)) /* connector tables cannot contain UTF8, yet */ { i = ((i << 5) + i) + *s; s++; } i += i>>14; #else /* sdbm hash */ i = (0xff & c->label); s = c->string; while (isupper((int) *s)) /* connector tables cannot contain UTF8, yet */ { i = *s + (i << 6) + (i << 16) - i; s++; } #endif c->prune_string = s; c->hash = i; return i; } /** * hash function. Based on some tests, this seems to be an almost * "perfect" hash, in that almost all hash buckets have the same size! */ static inline int pair_hash(int log2_table_size, int lw, int rw, const Connector *le, const Connector *re, int cost) { int table_size = (1 << log2_table_size); unsigned int i = 0; #if 0 /* hash function. Based on some tests, this seems to be * an almost "perfect" hash, in that almost all hash buckets * have the same size! */ i += 1 << cost; i += 1 << (lw % (log2_table_size-1)); i += 1 << (rw % (log2_table_size-1)); i += ((unsigned int) le) >> 2; i += ((unsigned int) le) >> log2_table_size; i += ((unsigned int) re) >> 2; i += ((unsigned int) re) >> log2_table_size; i += i >> log2_table_size; #else /* sdbm-based hash */ i = cost; i = lw + (i << 6) + (i << 16) - i; i = rw + (i << 6) + (i << 16) - i; i = ((unsigned long) le) + (i << 6) + (i << 16) - i; i = ((unsigned long) re) + (i << 6) + (i << 16) - i; #endif return i & (table_size-1); } #endif /* _LINK_GRAMMAR_WORD_UTILS_H_ */ link-grammar/link-grammar/error.c0000644000000000000000000000506112536650433014214 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include #include #include #ifdef USE_PTHREADS #include #endif #include "error.h" #include "structures.h" #include "api-structures.h" #ifdef _MSC_VER #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT #endif /* ============================================================ */ static void verr_msg(err_ctxt *ec, severity sev, const char *fmt, va_list args) { fprintf(stderr, "link-grammar: "); vfprintf(stderr, fmt, args); if ((Info != sev) && ec->sent != NULL) { int i; fprintf(stderr, "\tFailing sentence was:\n\t"); for (i=0; isent->length; i++) { fprintf(stderr, "%s ", ec->sent->word[i].string); } fprintf(stderr, "\n"); } } void err_msg(err_ctxt *ec, severity sev, const char *fmt, ...) { va_list args; va_start(args, fmt); verr_msg(ec, sev, fmt, args); va_end(args); } void prt_error(const char *fmt, ...) { severity sev; err_ctxt ec; va_list args; sev = Error; if (0 == strncmp(fmt, "Fatal", 5)) sev = Fatal; if (0 == strncmp(fmt, "Error:", 6)) sev = Error; if (0 == strncmp(fmt, "Warn", 4)) sev = Warn; if (0 == strncmp(fmt, "Info:", 5)) sev = Info; ec.sent = NULL; va_start(args, fmt); verr_msg(&ec, sev, fmt, args); va_end(args); } /* ============================================================ */ /* These are deprecated, obsolete, and unused, but are still here * because these are exported in the public API. Do not use these. */ DLLEXPORT int lperrno = 0; DLLEXPORT char lperrmsg[1]; extern void lperror_clear(void); void lperror_clear(void) { lperrmsg[0] = 0x0; lperrno = 0; } /* ============================================================ */ link-grammar/link-grammar/jni-client.c0000644000000000000000000004723512536650433015130 0ustar /* * Java JNI interfaces. * * This implements a very simple, low-brow, non-OOP interface. * It could be improved. */ #include #include #include #include #ifdef USE_PTHREADS #include #endif #include "api.h" #include "corpus/corpus.h" #include "error.h" #include "jni-client.h" #include "utilities.h" typedef struct { Dictionary dict; Parse_Options opts, panic_parse_opts; Sentence sent; Linkage linkage; int num_linkages, cur_linkage; #if DO_PHRASE_TREE CNode* tree; #endif } per_thread_data; /* XXX FIXME * The per_thread_data struct should ideally be somehow * fetched from JNIEnv, or as an opaque pointer in the class. * Not clear how to do this .. perhaps use NewDirectByteBuffer() * and the java.nio.ByteBuffer class ? */ #ifdef USE_PTHREADS static pthread_key_t java_key; static pthread_once_t java_key_once = PTHREAD_ONCE_INIT; static void java_key_alloc(void) { pthread_key_create(&java_key, free); } #else static per_thread_data * global_ptd = NULL; #endif static per_thread_data * get_ptd(JNIEnv *env, jclass cls) { #ifdef USE_PTHREADS per_thread_data *ptd = pthread_getspecific(java_key); #else per_thread_data *ptd = global_ptd; #endif if (!ptd) Java_org_linkgrammar_LinkGrammar_init(env, cls); #ifdef USE_PTHREADS ptd = pthread_getspecific(java_key); #else ptd = global_ptd; #endif return ptd; } static void setup_panic_parse_options(Parse_Options opts) { parse_options_set_disjunct_costf(opts, 3.0f); parse_options_set_min_null_count(opts, 1); parse_options_set_max_null_count(opts, MAX_SENTENCE); parse_options_set_max_parse_time(opts, 60); parse_options_set_use_fat_links(opts, FALSE); parse_options_set_islands_ok(opts, TRUE); parse_options_set_short_length(opts, 6); parse_options_set_all_short_connectors(opts, TRUE); parse_options_set_linkage_limit(opts, 100); parse_options_set_verbosity(opts, 0); parse_options_set_spell_guess(opts, FALSE); } static inline void test(void) { #ifdef DEBUG printf("%d\n",word_contains("said",PAST_TENSE_FORM_MARKER,dict)); printf("%d\n",word_contains("gave.v",PAST_TENSE_FORM_MARKER,dict)); printf("%d\n",word_contains("have",PAST_TENSE_FORM_MARKER,dict)); printf("%d\n",word_contains("had",PAST_TENSE_FORM_MARKER,dict)); #endif } /* message: The string is encoded in modified UTF-8, per JNI 1.5 spec. */ static void throwException(JNIEnv *env, const char* message) { char *msg; jclass exceptionClazz; if ((*env)->ExceptionOccurred(env) != NULL) return; msg = (char *) malloc(50+strlen(message)); strcpy(msg, "link-grammar JNI:\n"); strcat(msg, message); exceptionClazz = (*env)->FindClass(env, "java/lang/RuntimeException"); if ((*env)->ThrowNew(env, exceptionClazz, msg) != 0) (*env)->FatalError(env, "Fatal: link-grammar JNI: Cannot throw"); } static per_thread_data * init(JNIEnv *env, jclass cls) { const char *codeset, *dict_version; per_thread_data *ptd; /* Get the locale from the environment... * perhaps we should someday get it from the dictionary ?? */ setlocale(LC_ALL, ""); /* Everything breaks if the locale is not UTF-8; check for this, * and force the issue ! */ codeset = nl_langinfo(CODESET); if (!strstr(codeset, "UTF") && !strstr(codeset, "utf")) { prt_error("Warning: JNI: locale %s was not UTF-8; force-setting to en_US.UTF-8\n", codeset); setlocale(LC_CTYPE, "en_US.UTF-8"); } ptd = (per_thread_data *) malloc(sizeof(per_thread_data)); memset(ptd, 0, sizeof(per_thread_data)); ptd->panic_parse_opts = parse_options_create(); setup_panic_parse_options(ptd->panic_parse_opts); ptd->opts = parse_options_create(); parse_options_set_disjunct_costf(ptd->opts, 3.0f); parse_options_set_max_sentence_length(ptd->opts, 170); parse_options_set_max_parse_time(ptd->opts, 30); parse_options_set_linkage_limit(ptd->opts, 1000); parse_options_set_short_length(ptd->opts, 10); parse_options_set_verbosity(ptd->opts,0); parse_options_set_spell_guess(ptd->opts, FALSE); /* Default to the english language; will need to fix * this if/when more languages are supported. */ ptd->dict = dictionary_create_lang("en"); if (!ptd->dict) throwException(env, "Error: unable to open dictionary"); else test(); dict_version = linkgrammar_get_dict_version(ptd->dict); prt_error("Info: JNI: dictionary version %s\n", dict_version); return ptd; } static void finish(per_thread_data *ptd) { if (ptd->sent) sentence_delete(ptd->sent); ptd->sent = NULL; #if DO_PHRASE_TREE if (tree) linkage_free_constituent_tree(tree); tree = NULL; #endif if (ptd->linkage) linkage_delete(ptd->linkage); ptd->linkage = NULL; dictionary_delete(ptd->dict); ptd->dict = NULL; parse_options_delete(ptd->opts); ptd->opts = NULL; parse_options_delete(ptd->panic_parse_opts); ptd->panic_parse_opts = NULL; #ifdef USE_PTHREADS pthread_setspecific(java_key, NULL); #else global_ptd = NULL; #endif free(ptd); } /* ================================================================= */ /* Misc utilities */ #ifdef DEBUG_DO_PHRASE_TREE static void r_printTree(CNode* cn, int level) { int i; CNode* c; if (cn == NULL) return; /* print label */ if (cn->label != NULL) { printf("(%s ", cn->label); } else { printf("NULL\n"); } /* Recurse on children. */ for (c = cn->child; c!=NULL; c=c->next) { if (c->child) r_printTree(c, level+1); else printf("%s ", c->label); } printf(")\n"); for (i=0; i<=level; i++) printf (" "); } static void printTree(CNode* cn) { r_printTree(cn,0); printf("\n"); } #endif /* DEBUG */ static void jParse(JNIEnv *env, per_thread_data *ptd, char* inputString) { int maxlen; Parse_Options opts = ptd->opts; int jverbosity = parse_options_get_verbosity(opts); if (ptd->sent) sentence_delete(ptd->sent); if (ptd->dict == NULL) throwException(env, "jParse: dictionary not open\n"); if (inputString == NULL) throwException(env, "jParse: no input sentence!\n"); ptd->sent = sentence_create(inputString, ptd->dict); ptd->num_linkages = 0; if (ptd->sent == NULL) return; maxlen = parse_options_get_max_sentence_length(ptd->opts); if (maxlen < sentence_length(ptd->sent)) { if (jverbosity > 0) { prt_error("Error: JNI: Sentence length (%d words) exceeds maximum allowable (%d words)\n", sentence_length(ptd->sent), maxlen); } sentence_delete(ptd->sent); ptd->sent = NULL; return; } /* First parse with cost 0 or 1 and no null links or fat links */ parse_options_set_disjunct_costf(opts, 2.0f); parse_options_set_min_null_count(opts, 0); parse_options_set_max_null_count(opts, 0); parse_options_set_use_fat_links(opts, FALSE); parse_options_reset_resources(opts); ptd->num_linkages = sentence_parse(ptd->sent, ptd->opts); /* If failed, try with fat links ... */ if ((0 == ptd->num_linkages) && sentence_contains_conjunction(ptd->sent)) { parse_options_set_use_fat_links(opts, TRUE); ptd->num_linkages = sentence_parse(ptd->sent, ptd->opts); } /* If still failed, try again with null links */ if (0 == ptd->num_linkages) { if (jverbosity > 0) prt_error("Warning: JNI: No complete linkages found.\n"); if (parse_options_get_allow_null(opts)) { parse_options_set_min_null_count(opts, 1); parse_options_set_max_null_count(opts, sentence_length(ptd->sent)); ptd->num_linkages = sentence_parse(ptd->sent, opts); } } if (parse_options_timer_expired(opts)) { if (jverbosity > 0) prt_error("Warning: JNI: Timer is expired!\n"); } if (parse_options_memory_exhausted(opts)) { if (jverbosity > 0) prt_error("Warning: JNI: Memory is exhausted!\n"); } if ((ptd->num_linkages == 0) && parse_options_resources_exhausted(opts)) { parse_options_print_total_time(opts); if (jverbosity > 0) prt_error("Warning: JNI: Entering \"panic\" mode...\n"); parse_options_reset_resources(ptd->panic_parse_opts); parse_options_set_verbosity(ptd->panic_parse_opts, jverbosity); ptd->num_linkages = sentence_parse(ptd->sent, ptd->panic_parse_opts); if (parse_options_timer_expired(ptd->panic_parse_opts)) { if (jverbosity > 0) prt_error("Error: JNI: Timer is expired!\n"); } } } static void makeLinkage(per_thread_data *ptd) { if (ptd->cur_linkage < ptd->num_linkages) { if (ptd->linkage) linkage_delete(ptd->linkage); ptd->linkage = linkage_create(ptd->cur_linkage,ptd->sent,ptd->opts); linkage_compute_union(ptd->linkage); linkage_set_current_sublinkage(ptd->linkage, linkage_get_num_sublinkages(ptd->linkage)-1); #if DO_PHRASE_TREE if (tree) linkage_free_constituent_tree(tree); tree = linkage_constituent_tree(linkage); printTree(tree); #endif } } /* ================================================================ */ /* Java JNI wrappers */ /* * Class: LinkGrammar * Method: getVersion * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getVersion(JNIEnv *env, jclass cls) { const char *s = linkgrammar_get_version(); jstring j = (*env)->NewStringUTF(env, s); return j; } JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getDictVersion(JNIEnv *env, jclass cls) { per_thread_data *ptd = get_ptd(env, cls); const char *s = linkgrammar_get_dict_version(ptd->dict); jstring j = (*env)->NewStringUTF(env, s); return j; } JNIEXPORT void JNICALL Java_org_linkgrammar_LinkGrammar_setMaxParseSeconds(JNIEnv *env, jclass cls, jint maxParseSeconds) { per_thread_data *ptd = get_ptd(env, cls);; parse_options_set_max_parse_time(ptd->opts, maxParseSeconds); } JNIEXPORT void JNICALL Java_org_linkgrammar_LinkGrammar_setMaxCost(JNIEnv *env, jclass cls, jint maxCost) { per_thread_data *ptd = get_ptd(env, cls);; parse_options_set_disjunct_cost(ptd->opts, maxCost); } JNIEXPORT void JNICALL Java_org_linkgrammar_LinkGrammar_setDictionariesPath(JNIEnv *env, jclass cls, jstring path) { const char *nativePath = (*env)->GetStringUTFChars(env,path, 0); // Java passes null pointers as the string "null" if (nativePath && strcmp(nativePath, "null")) { dictionary_set_data_dir(nativePath); } (*env)->ReleaseStringUTFChars(env,path, nativePath); } /* * Class: LinkGrammar * Method: init * Signature: ()V */ JNIEXPORT void JNICALL Java_org_linkgrammar_LinkGrammar_init(JNIEnv *env, jclass cls) { #ifdef USE_PTHREADS per_thread_data *ptd; pthread_once(&java_key_once, java_key_alloc); ptd = pthread_getspecific(java_key); if (ptd) return; ptd = init(env, cls); pthread_setspecific(java_key, ptd); #else if (global_ptd) return; global_ptd = init(env, cls); #endif } /* * Class: LinkGrammar * Method: parse * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_org_linkgrammar_LinkGrammar_parse(JNIEnv *env, jclass cls, jstring str) { const char *cStr; char * tmp; per_thread_data *ptd = get_ptd(env, cls);; cStr = (*env)->GetStringUTFChars(env,str,0); tmp = strdup(cStr); jParse(env, ptd, tmp); free(tmp); (*env)->ReleaseStringUTFChars(env,str,cStr); } /* * Class: LinkGrammar * Method: close * Signature: ()V */ JNIEXPORT void JNICALL Java_org_linkgrammar_LinkGrammar_close(JNIEnv *env, jclass cls) { per_thread_data *ptd = get_ptd(env, cls);; finish(ptd); } /* * Class: LinkGrammar * Method: numWords * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getNumWords(JNIEnv *env, jclass cls) { per_thread_data *ptd = get_ptd(env, cls);; return linkage_get_num_words(ptd->linkage); } /* * Class: LinkGrammar * Method: getWord * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getWord(JNIEnv *env, jclass cls, jint i) { per_thread_data *ptd = get_ptd(env, cls); /* Does not need to be freed, points into sentence */ const char * w = sentence_get_word(ptd->sent, i); /* FWIW, j will be null if w is utf8-encoded Japanese or Chinese. * I guess my JVM is not capable of handling Chinese/Japanese ?? * Maybe some special java thing needs to be installed? */ jstring j = (*env)->NewStringUTF(env, w); return j; } JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getLinkageWord(JNIEnv *env, jclass cls, jint i) { per_thread_data *ptd = get_ptd(env, cls); /* Does not need to be freed, points into data structures */ /* Returns the inflected word. */ const char * w = linkage_get_word(ptd->linkage, i); jstring j = (*env)->NewStringUTF(env, w); return j; } JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getLinkageDisjunct(JNIEnv *env, jclass cls, jint i) { jstring j; per_thread_data *ptd = get_ptd(env, cls); /* does not need to be freed, points into data structures */ /* returns the inflected word. */ const char * w = linkage_get_disjunct_str(ptd->linkage, i); if (NULL == w) j = NULL; else j = (*env)->NewStringUTF(env, w); return j; } JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getLinkageSense(JNIEnv *env, jclass cls, jint i, jint j) { per_thread_data *ptd = get_ptd(env, cls); Linkage lkg = ptd->linkage; Linkage_info *lifo = lkg->info; Sense *sns; const char * w = NULL; jstring js; lg_corpus_linkage_senses(lkg); sns = lg_get_word_sense(lifo, i); while ((0 < j) && sns) { sns = lg_sense_next(sns); j--; } /* does not need to be freed, points into data structures */ if (sns) w = lg_sense_get_sense(sns); if (w) js = (*env)->NewStringUTF(env, w); else js = NULL; return js; } JNIEXPORT jdouble JNICALL Java_org_linkgrammar_LinkGrammar_getLinkageSenseScore(JNIEnv *env, jclass cls, jint i, jint j) { per_thread_data *ptd = get_ptd(env, cls); Linkage lkg = ptd->linkage; Linkage_info *lifo = lkg->info; Sense *sns; double score = 0.0; sns = lg_get_word_sense(lifo, i); while ((0 < j) && sns) { sns = lg_sense_next(sns); j--; } if (sns) score = lg_sense_get_score(sns); return score; } /* * Class: LinkGrammar * Method: numSkippedWords * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getNumSkippedWords(JNIEnv *env, jclass cls) { per_thread_data *ptd = get_ptd(env, cls); return sentence_null_count(ptd->sent); } /* * Class: LinkGrammar * Method: numLinkages * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getNumLinkages(JNIEnv *env, jclass cls) { per_thread_data *ptd = get_ptd(env, cls); return sentence_num_valid_linkages(ptd->sent); } /* * Class: LinkGrammar * Method: makeLinkage * Signature: (I)I */ JNIEXPORT void JNICALL Java_org_linkgrammar_LinkGrammar_makeLinkage(JNIEnv *env, jclass cls, jint i) { per_thread_data *ptd = get_ptd(env, cls); ptd->cur_linkage = i; makeLinkage(ptd); } /* * Class: LinkGrammar * Method: linkageNumViolations * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getLinkageNumViolations(JNIEnv *env, jclass cls) { per_thread_data *ptd = get_ptd(env, cls); return sentence_num_violations(ptd->sent, ptd->cur_linkage); } /* * Class: LinkGrammar * Method: linkageAndCost * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getLinkageAndCost(JNIEnv *env, jclass cls) { per_thread_data *ptd = get_ptd(env, cls); return sentence_and_cost(ptd->sent, ptd->cur_linkage); } /* * Class: LinkGrammar * Method: linkageDisjunctCost * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getLinkageDisjunctCost(JNIEnv *env, jclass cls) { per_thread_data *ptd = get_ptd(env, cls); return sentence_disjunct_cost(ptd->sent, ptd->cur_linkage); } /* * Class: LinkGrammar * Method: linkageLinkCost * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getLinkageLinkCost(JNIEnv *env, jclass cls) { per_thread_data *ptd = get_ptd(env, cls); return sentence_link_cost(ptd->sent, ptd->cur_linkage); } /* * Class: LinkGrammar * Method: getNumLinks * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getNumLinks(JNIEnv *env, jclass cls) { per_thread_data *ptd = get_ptd(env, cls); return linkage_get_num_links(ptd->linkage); } /* * Class: LinkGrammar * Method: getLinkLWord * Signature: (I)I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getLinkLWord(JNIEnv *env, jclass cls, jint i) { per_thread_data *ptd = get_ptd(env, cls); return linkage_get_link_lword(ptd->linkage, i); } /* * Class: LinkGrammar * Method: getLinkRWord * Signature: (I)I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getLinkRWord(JNIEnv *env, jclass cls, jint i) { per_thread_data *ptd = get_ptd(env, cls); return linkage_get_link_rword(ptd->linkage, i); } /* * Class: LinkGrammar * Method: getLinkLLabel * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getLinkLLabel(JNIEnv *env, jclass cls, jint i) { per_thread_data *ptd = get_ptd(env, cls); /* Does not need to be freed, points into linkage */ const char *s = linkage_get_link_llabel(ptd->linkage, i); jstring j = (*env)->NewStringUTF(env, s); return j; } /* * Class: LinkGrammar * Method: getLinkRLabel * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getLinkRLabel(JNIEnv *env, jclass cls, jint i) { per_thread_data *ptd = get_ptd(env, cls); /* Does not need to be freed, points into linkage */ const char *s = linkage_get_link_rlabel(ptd->linkage, i); jstring j = (*env)->NewStringUTF(env, s); return j; } /* * Class: LinkGrammar * Method: getLinkLabel * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getLinkLabel(JNIEnv *env, jclass cls, jint i) { per_thread_data *ptd = get_ptd(env, cls); /* Does not need to be freed, points into linkage */ const char *s = linkage_get_link_label(ptd->linkage, i); jstring j = (*env)->NewStringUTF(env, s); return j; } /* * Class: LinkGrammar * Method: constituentString * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getConstituentString(JNIEnv *env, jclass cls) { per_thread_data *ptd = get_ptd(env, cls); /* mode 1 prints a lisp-style string, nicely indented. * mode 2 prints a lisp-style string, but with square brackets. * mode 3 prints a lisp-style string, one one single line. */ /* char *s = linkage_print_constituent_tree(linkage, 1); */ char *s = linkage_print_constituent_tree(ptd->linkage, 3); jstring j = (*env)->NewStringUTF(env, s); linkage_free_constituent_tree_str(s); return j; } /* * Class: LinkGrammar * Method: linkString * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getLinkString(JNIEnv *env, jclass cls) { per_thread_data *ptd = get_ptd(env, cls); char *s = linkage_print_diagram(ptd->linkage); jstring j = (*env)->NewStringUTF(env, s); linkage_free_diagram(s); return j; } /* * Class: LinkParser * Method: isPastTenseForm * Signature: (Ljava/lang/String;)Z * * @deprecated -- past-tense verbs are tagged with .v-d or .w-d or .q-d * subscripts. use those instead to figure out if a verb is past tense. */ JNIEXPORT jboolean JNICALL Java_org_linkgrammar_LinkGrammar_isPastTenseForm(JNIEnv *env, jclass cls, jstring str) { jboolean rv = FALSE; per_thread_data *ptd = get_ptd(env, cls); const char *cStr = (*env)->GetStringUTFChars(env,str,0); if (dictionary_is_past_tense_form(ptd->dict, cStr) == 1) rv = TRUE; (*env)->ReleaseStringUTFChars(env,str,cStr); return rv; } /* * Class: LinkParser * Method: isEntity * Signature: (Ljava/lang/String;)Z */ JNIEXPORT jboolean JNICALL Java_org_linkgrammar_LinkGrammar_isEntity(JNIEnv *env, jclass cls, jstring str) { jboolean rv = FALSE; per_thread_data *ptd = get_ptd(env, cls); const char *cStr = (*env)->GetStringUTFChars(env,str,0); if (dictionary_is_entity(ptd->dict, cStr) == 1) rv = TRUE; (*env)->ReleaseStringUTFChars(env,str,cStr); return rv; } link-grammar/link-grammar/disjunct-utils.c0000644000000000000000000001420112536650433016040 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include #include "disjunct-utils.h" #include "externs.h" #include "structures.h" #include "utilities.h" #include "word-utils.h" /* Disjunct utilities ... */ /** * free_disjuncts() -- free the list of disjuncts pointed to by c * (does not free any strings) */ void free_disjuncts(Disjunct *c) { Disjunct *c1; for (;c != NULL; c = c1) { c1 = c->next; free_connectors(c->left); free_connectors(c->right); xfree((char *)c, sizeof(Disjunct)); } } /** * This builds a new copy of the disjunct pointed to by d (except for the * next field which is set to NULL). Strings, as usual, * are not copied. */ Disjunct * copy_disjunct(Disjunct * d) { Disjunct * d1; if (d == NULL) return NULL; d1 = (Disjunct *) xalloc(sizeof(Disjunct)); *d1 = *d; d1->next = NULL; d1->left = copy_connectors(d->left); d1->right = copy_connectors(d->right); return d1; } /** * Destructively catenates the two disjunct lists d1 followed by d2. * Doesn't change the contents of the disjuncts. * Traverses the first list, but not the second. */ Disjunct * catenate_disjuncts(Disjunct *d1, Disjunct *d2) { Disjunct * dis = d1; if (d1 == NULL) return d2; if (d2 == NULL) return d1; while (dis->next != NULL) dis = dis->next; dis->next = d2; return d1; } /** Returns the number of disjuncts in the list pointed to by d */ int count_disjuncts(Disjunct * d) { int count = 0; for (; d != NULL; d = d->next) { count++; } return count; } /* ============================================================= */ typedef struct disjunct_dup_table_s disjunct_dup_table; struct disjunct_dup_table_s { int dup_table_size; Disjunct ** dup_table; }; /** * This is a hash function for disjuncts * * This is the old version that doesn't check for domination, just * equality. */ static inline int old_hash_disjunct(disjunct_dup_table *dt, Disjunct * d) { int i; Connector *e; i = 0; for (e = d->left ; e != NULL; e = e->next) { i += string_hash(e->string); } for (e = d->right ; e != NULL; e = e->next) { i += string_hash(e->string); } i += string_hash(d->string); i += (i>>10); return (i & (dt->dup_table_size-1)); } /** * The connectors must be exactly equal. A similar function * is connectors_equal_AND(), but that ignores priorities, * this does not. */ static int connectors_equal_prune(Connector *c1, Connector *c2) { return (c1->label == c2->label) && (c1->multi == c2->multi) && (c1->priority == c2->priority) && (strcmp(c1->string, c2->string) == 0); } /** returns TRUE if the disjuncts are exactly the same */ static int disjuncts_equal(Disjunct * d1, Disjunct * d2) { Connector *e1, *e2; e1 = d1->left; e2 = d2->left; while((e1!=NULL) && (e2!=NULL)) { if (!connectors_equal_prune(e1,e2)) break; e1 = e1->next; e2 = e2->next; } if ((e1!=NULL) || (e2!=NULL)) return FALSE; e1 = d1->right; e2 = d2->right; while((e1!=NULL) && (e2!=NULL)) { if (!connectors_equal_prune(e1,e2)) break; e1 = e1->next; e2 = e2->next; } if ((e1!=NULL) || (e2!=NULL)) return FALSE; return (strcmp(d1->string, d2->string) == 0); } static disjunct_dup_table * disjunct_dup_table_new(size_t sz) { size_t i; disjunct_dup_table *dt; dt = (disjunct_dup_table *) malloc(sizeof(disjunct_dup_table)); dt->dup_table_size = sz; dt->dup_table = (Disjunct **) xalloc(sz * sizeof(Disjunct *)); for (i=0; idup_table[i] = NULL; return dt; } static void disjunct_dup_table_delete(disjunct_dup_table *dt) { xfree((char *) dt->dup_table, dt->dup_table_size * sizeof(Disjunct *)); free(dt); } /** * Takes the list of disjuncts pointed to by d, eliminates all * duplicates, and returns a pointer to a new list. * It frees the disjuncts that are eliminated. */ Disjunct * eliminate_duplicate_disjuncts(Disjunct * d) { int i, h, count; Disjunct *dn, *dx; disjunct_dup_table *dt; count = 0; dt = disjunct_dup_table_new(next_power_of_two_up(2 * count_disjuncts(d))); while (d != NULL) { dn = d->next; h = old_hash_disjunct(dt, d); for (dx = dt->dup_table[h]; dx!=NULL; dx=dx->next) { if (disjuncts_equal(dx, d)) break; } if (dx == NULL) { d->next = dt->dup_table[h]; dt->dup_table[h] = d; } else { d->next = NULL; /* to prevent it from freeing the whole list */ if (d->cost < dx->cost) dx->cost = d->cost; free_disjuncts(d); count++; } d = dn; } /* d is already null */ for (i=0; idup_table_size; i++) { for (dn = dt->dup_table[i]; dn != NULL; dn = dx) { dx = dn->next; dn->next = d; d = dn; } } if ((verbosity > 2) && (count != 0)) printf("killed %d duplicates\n", count); disjunct_dup_table_delete(dt); return d; } /* ============================================================= */ /* Return the stringified disjunct. * Be sure to free the string upon return. */ static char * prt_con(Connector *c, char * p, char dir) { size_t n; if (NULL == c) return p; p = prt_con (c->next, p, dir); if (c->multi) { n = sprintf(p, "@%s%c ", c->string, dir); } else { n = sprintf(p, "%s%c ", c->string, dir); } return p+n; } char * print_one_disjunct(Disjunct *dj) { char buff[MAX_LINE]; char * p = buff; p = prt_con(dj->left, p, '-'); p = prt_con(dj->right, p, '+'); return strdup(buff); } /* ========================= END OF FILE ============================== */ link-grammar/link-grammar/tokenize.h0000644000000000000000000000203712536650433014720 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ int separate_sentence(Sentence, Parse_Options); int build_sentence_expressions(Sentence, Parse_Options); int sentence_in_dictionary(Sentence); link-grammar/link-grammar/disjuncts.h0000644000000000000000000000160112536650433015072 0ustar /*************************************************************************/ /* Copyright (c) 2008, 2009 Linas Vepstas */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ void lg_compute_disjunct_strings(Sentence, Linkage_info *); link-grammar/link-grammar/spellcheck.h0000644000000000000000000000305712536650433015210 0ustar /*************************************************************************/ /* Copyright (c) 2009 Linas Vepstas */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #if (defined HAVE_HUNSPELL) || (defined HAVE_ASPELL) void * spellcheck_create(const char * lang); void spellcheck_destroy(void *); int spellcheck_test(void *, const char * word); int spellcheck_suggest(void * chk, char ***sug, const char * word); void spellcheck_free_suggest(char **sug, int size); #else #include "utilities.h" /* For MSVC inline portability */ static inline void * spellcheck_create(const char * lang) { return NULL; } static inline void spellcheck_destroy(void * chk) {} static inline int spellcheck_test(void * chk, const char * word) { return 0; } static inline int spellcheck_suggest(void * chk, char ***sug, const char * word) { return 0; } static inline void spellcheck_free_suggest(char **sug, int size) {} #endif link-grammar/link-grammar/analyze-linkage.c0000644000000000000000000010057612536650433016145 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include /** * The functions in this file do several things: () take a linkage * involving fat links and expand it into a sequence of linkages * (involving a subset of the given words), one for each way of * eliminating the conjunctions. () determine if a linkage involving * fat links has a structural violation. () make sure each of the expanded * linkages has a consistent post-processing behavior. () compute the * cost of the linkage. */ typedef struct patch_element_struct Patch_element; struct patch_element_struct { char used; /* TRUE if this link is used, else FALSE */ char changed;/* TRUE if this link changed, else FALSE */ int newl; /* the new value of the left end */ int newr; /* the new value of the right end */ }; struct analyze_context_s { List_o_links *word_links[MAX_SENTENCE]; /* ptr to l.o.l. out of word */ int structure_violation; int dfs_root_word[MAX_SENTENCE]; /* for the depth-first search */ int dfs_height[MAX_SENTENCE]; /* to determine the order to do the root word dfs */ int height_perm[MAX_SENTENCE]; /* permute the vertices from highest to lowest */ /* The following are all for computing the cost of and lists */ int visited[MAX_SENTENCE]; int and_element_sizes[MAX_SENTENCE]; int and_element[MAX_SENTENCE]; int N_and_elements; int outside_word[MAX_SENTENCE]; int N_outside_words; Patch_element patch_array[MAX_LINKS]; }; typedef struct CON_node_struct CON_node; typedef struct CON_list_struct CON_list; typedef struct DIS_list_struct DIS_list; typedef struct Links_to_patch_struct Links_to_patch; struct DIS_node_struct { CON_list * cl; /* the list of children */ List_o_links * lol;/* the links that comprise this region of the graph */ int word; /* the word defining this node */ }; struct CON_node_struct { DIS_list * dl; /* the list of children */ DIS_list * current;/* defines the current child */ int word; /* the word defining this node */ }; struct DIS_list_struct { DIS_list * next; DIS_node * dn; }; struct CON_list_struct { CON_list * next; CON_node * cn; }; struct Links_to_patch_struct { Links_to_patch * next; int link; char dir; /* this is 'r' or 'l' depending on which end of the link is to be patched. */ }; void zero_sublinkage(Sublinkage *s) { int i; s->pp_info = NULL; s->violation = NULL; for (i=0; inum_links; i++) s->link[i] = NULL; memset(&s->pp_data, 0, sizeof(PP_data)); } static Sublinkage * x_create_sublinkage(Parse_info pi) { Sublinkage *s = (Sublinkage *) xalloc (sizeof(Sublinkage)); s->link = (Link **) xalloc(MAX_LINKS*sizeof(Link *)); s->num_links = MAX_LINKS; zero_sublinkage(s); s->num_links = pi->N_links; assert(pi->N_links < MAX_LINKS, "Too many links"); return s; } static Sublinkage * ex_create_sublinkage(Parse_info pi) { Sublinkage *s = (Sublinkage *) exalloc (sizeof(Sublinkage)); s->link = (Link **) exalloc(pi->N_links*sizeof(Link *)); s->num_links = pi->N_links; zero_sublinkage(s); assert(pi->N_links < MAX_LINKS, "Too many links"); return s; } static void free_sublinkage(Sublinkage *s) { int i; for (i=0; ilink[i]!=NULL) exfree_link(s->link[i]); } xfree(s->link, MAX_LINKS*sizeof(Link)); xfree(s, sizeof(Sublinkage)); } static void replace_link_name(Link *l, const char *s) { /* XXX can get some perf improvement by avoiding strlen! */ char * t; exfree((char *) l->name, sizeof(char)*(strlen(l->name)+1)); t = (char *) exalloc(sizeof(char)*(strlen(s)+1)); strcpy(t, s); l->name = t; } static void copy_full_link(Link **dest, Link *src) { if (*dest != NULL) exfree_link(*dest); *dest = excopy_link(src); } /* end new code 9/97 ALB */ /** * Constructs a graph in the wordlinks array based on the contents of * the global link_array. Makes the wordlinks array point to a list of * words neighboring each word (actually a list of links). This is a * directed graph, constructed for dealing with "and". For a link in * which the priorities are UP or DOWN_priority, the edge goes from the * one labeled DOWN to the one labeled UP. * Don't generate links edges for the bogus comma connectors. */ static void build_digraph(analyze_context_t *actx, Parse_info pi) { int i, link, N_fat; Link *lp; List_o_links * lol; N_fat = 0; for (i = 0; i < pi->N_words; i++) { actx->word_links[i] = NULL; } for (link = 0; link < pi->N_links; link++) { lp = &(pi->link_array[link]); i = lp->lc->label; if (i < NORMAL_LABEL) { /* one of those special links for either-or, etc */ continue; } lol = (List_o_links *) xalloc(sizeof(List_o_links)); lol->next = actx->word_links[lp->l]; actx->word_links[lp->l] = lol; lol->link = link; lol->word = lp->r; i = lp->lc->priority; if (i == THIN_priority) { lol->dir = 0; } else if (i == DOWN_priority) { lol->dir = 1; } else { lol->dir = -1; } lol = (List_o_links *) xalloc(sizeof(List_o_links)); lol->next = actx->word_links[lp->r]; actx->word_links[lp->r] = lol; lol->link = link; lol->word = lp->l; i = lp->rc->priority; if (i == THIN_priority) { lol->dir = 0; } else if (i == DOWN_priority) { lol->dir = 1; } else { lol->dir = -1; } } } /** * Returns TRUE if there is at least one fat link pointing out of this word. */ static int is_CON_word(int w, List_o_links **wordlinks) { List_o_links * lol; for (lol = wordlinks[w]; lol != NULL; lol = lol->next) { if (lol->dir == 1) return TRUE; } return FALSE; } static DIS_node * build_DIS_node(analyze_context_t*, int); /** * This word is a CON word (has fat links down). Build the tree for it. */ static CON_node * build_CON_node(analyze_context_t *actx, int w) { List_o_links * lol; CON_node * a; DIS_list * d, *dx; d = NULL; for (lol = actx->word_links[w]; lol != NULL; lol = lol->next) { if (lol->dir == 1) { dx = (DIS_list *) xalloc (sizeof (DIS_list)); dx->next = d; d = dx; d->dn = build_DIS_node(actx, lol->word); } } a = (CON_node *) xalloc(sizeof (CON_node)); a->dl = a->current = d; a->word = w; return a; } /** * Does a depth-first-search starting from w. Puts on the front of the * list pointed to by c all of the CON nodes it finds, and returns the * result. Also construct the list of all edges reached as part of this * DIS_node search and append it to the lol list of start_dn. * * Both of the structure violations actually occur, and represent * linkages that have improper structure. Fortunately, they * seem to be rather rare. */ static CON_list * c_dfs(analyze_context_t *actx, int w, DIS_node * start_dn, CON_list * c) { CON_list *cx; List_o_links * lol, *lolx; if (actx->dfs_root_word[w] != -1) { if (actx->dfs_root_word[w] != start_dn->word) { actx->structure_violation = TRUE; } return c; } actx->dfs_root_word[w] = start_dn->word; for (lol = actx->word_links[w]; lol != NULL; lol = lol->next) { if (lol->dir < 0) /* a backwards link */ { if (actx->dfs_root_word[lol->word] == -1) { actx->structure_violation = TRUE; } } else if (lol->dir == 0) { /* Make a copy of the link */ lolx = (List_o_links *) xalloc(sizeof(List_o_links)); lolx->word = lol->word; lolx->dir = lol->dir; lolx->link = lol->link; /* Chain it into place */ lolx->next = start_dn->lol; start_dn->lol = lolx; c = c_dfs(actx, lol->word, start_dn, c); } } /* if the current node is CON, put it first */ if (is_CON_word(w, actx->word_links)) { cx = (CON_list *) xalloc(sizeof(CON_list)); cx->next = c; c = cx; c->cn = build_CON_node(actx, w); } return c; } /** * This node is connected to its parent via a fat link. Search the * region reachable via thin links, and put all reachable nodes with fat * links out of them in its list of children. */ static DIS_node * build_DIS_node(analyze_context_t *actx, int w) { DIS_node * dn; dn = (DIS_node *) xalloc(sizeof (DIS_node)); dn->word = w; /* must do this before dfs so it knows the start word */ dn->lol = NULL; dn->cl = c_dfs(actx, w, dn, NULL); return dn; } static void height_dfs(analyze_context_t *actx, int w, int height) { List_o_links * lol; if (actx->dfs_height[w] != 0) return; actx->dfs_height[w] = height; for (lol = actx->word_links[w]; lol != NULL; lol = lol->next) { /* The dir is 1 for a down link. */ height_dfs(actx, lol->word, height - lol->dir); } } /** * Simple insertion sort; should be plenty fast enough, since sentences * are almost always shorter than 30 words or so. In fact, this is * almost surely faster than qsort for such small arrays. */ static void insort (analyze_context_t *actx, int nwords) { int i, j; for (i=1; idfs_height[i]; int perm = actx->height_perm[i]; j = i; while (j>0 && (heig > actx->dfs_height[j-1])) { actx->dfs_height[j] = actx->dfs_height[j-1]; actx->height_perm[j] = actx->height_perm[j-1]; j--; } actx->dfs_height[j] = heig; actx->height_perm[j] = perm; } } static DIS_node * build_DIS_CON_tree(analyze_context_t *actx, Parse_info pi) { int xw, w; DIS_node * dnroot, * dn; CON_list * child, * xchild; List_o_links * lol, * xlol; /* The algorithm used here to build the DIS_CON tree depends on * the search percolating down from the "top" of the tree. The * original version of this started its search at the wall. This * was fine because doing a DFS from the wall explores the tree in * the right order. * * However, in order to handle null links correctly, a more careful * ordering process must be used to explore the tree. We use * dfs_height[] for this, and sort in height order. * * XXX Is the sort order correct here? This is not obvious; I think * we want highest to lowest ... XXX is the height being calculated * correctly? Looks weird to me ... XXX */ for (w=0; w < pi->N_words; w++) actx->dfs_height[w] = 0; for (w=0; w < pi->N_words; w++) height_dfs(actx, w, MAX_SENTENCE); for (w=0; w < pi->N_words; w++) actx->height_perm[w] = w; /* Sort the heights, keeping only the permuted order. */ insort (actx, pi->N_words); for (w=0; wN_words; w++) actx->dfs_root_word[w] = -1; dnroot = NULL; for (xw = 0; xw < pi->N_words; xw++) { w = actx->height_perm[xw]; if (actx->dfs_root_word[w] == -1) { dn = build_DIS_node(actx, w); if (dnroot == NULL) { dnroot = dn; } else { for (child = dn->cl; child != NULL; child = xchild) { xchild = child->next; child->next = dnroot->cl; dnroot->cl = child; } for (lol = dn->lol; lol != NULL; lol = xlol) { xlol = lol->next; lol->next = dnroot->lol; dnroot->lol = lol; } xfree((void *) dn, sizeof(DIS_node)); } } } return dnroot; } static int advance_CON(CON_node *); /** * Cyclically advance the current state of this DIS node. * If it's now at the beginning of its cycle, return FALSE; * otherwise return TRUE. Together with the advance_CON() * function, this can be used to iterate over the entire * DIS_CON tree. */ static int advance_DIS(DIS_node * dn) { CON_list * cl; for (cl = dn->cl; cl != NULL; cl = cl->next) { if (advance_CON(cl->cn)) return TRUE; } return FALSE; } /** * Cyclically advance the current state of this CON node. * If it's now at the beginning of its cycle return FALSE, * otherwise return TRUE. Together with the advance_CON() * function, this can be used to iterate over the entire * DIS_CON tree. */ static int advance_CON(CON_node * cn) { if (advance_DIS(cn->current->dn)) { return TRUE; } else { if (cn->current->next == NULL) { cn->current = cn->dl; return FALSE; } else { cn->current = cn->current->next; return TRUE; } } } static void fill_patch_array_CON(analyze_context_t *, CON_node *, Links_to_patch *); /** * Patches up appropriate links in the patch_array for this DIS_node * and this patch list. */ static void fill_patch_array_DIS(analyze_context_t *actx, DIS_node * dn, Links_to_patch * ltp) { CON_list * cl; List_o_links * lol; Links_to_patch * ltpx; for (lol = dn->lol; lol != NULL; lol = lol->next) { actx->patch_array[lol->link].used = TRUE; } if ((dn->cl == NULL) || (dn->cl->cn->word != dn->word)) { for (; ltp != NULL; ltp = ltpx) { ltpx = ltp->next; actx->patch_array[ltp->link].changed = TRUE; if (ltp->dir == 'l') { actx->patch_array[ltp->link].newl = dn->word; } else { actx->patch_array[ltp->link].newr = dn->word; } xfree((void *) ltp, sizeof(Links_to_patch)); } } /* ltp != NULL at this point means that dn has child which is a cn which is the same word */ for (cl = dn->cl; cl != NULL; cl = cl->next) { fill_patch_array_CON(actx, cl->cn, ltp); ltp = NULL; } } static void fill_patch_array_CON(analyze_context_t *actx, CON_node * cn, Links_to_patch * ltp) { List_o_links * lol; Links_to_patch *ltpx; for (lol = actx->word_links[cn->word]; lol != NULL; lol = lol->next) { if (lol->dir == 0) { ltpx = (Links_to_patch *) xalloc(sizeof(Links_to_patch)); ltpx->next = ltp; ltp = ltpx; ltp->link = lol->link; if (lol->word > cn->word) { ltp->dir = 'l'; } else { ltp->dir = 'r'; } } } fill_patch_array_DIS(actx, cn->current->dn, ltp); } static void free_digraph(analyze_context_t *actx, Parse_info pi) { List_o_links * lol, *lolx; int i; for (i = 0; i < pi->N_words; i++) { for (lol = actx->word_links[i]; lol != NULL; lol = lolx) { lolx = lol->next; xfree((void *) lol, sizeof(List_o_links)); } } } static void free_CON_tree(CON_node *); void free_DIS_tree(DIS_node * dn) { List_o_links * lol, *lolx; CON_list *cl, *clx; for (lol = dn->lol; lol != NULL; lol = lolx) { lolx = lol->next; xfree((void *) lol, sizeof(List_o_links)); } for (cl = dn->cl; cl != NULL; cl = clx) { clx = cl->next; free_CON_tree(cl->cn); xfree((void *) cl, sizeof(CON_list)); } xfree((void *) dn, sizeof(DIS_node)); } static void free_CON_tree(CON_node * cn) { DIS_list *dl, *dlx; for (dl = cn->dl; dl != NULL; dl = dlx) { dlx = dl->next; free_DIS_tree(dl->dn); xfree((void *) dl, sizeof(DIS_list)); } xfree((void *) cn, sizeof(CON_node)); } /** scope out this and element */ static void and_dfs_full(analyze_context_t *actx, int w) { List_o_links *lol; if (actx->visited[w]) return; actx->visited[w] = TRUE; actx->and_element_sizes[actx->N_and_elements]++; for (lol = actx->word_links[w]; lol != NULL; lol = lol->next) { if (lol->dir >= 0) { and_dfs_full(actx, lol->word); } } } /** get down the tree past all the commas */ static void and_dfs_commas(analyze_context_t *actx, Sentence sent, int w) { List_o_links *lol; if (actx->visited[w]) return; actx->visited[w] = TRUE; for (lol = actx->word_links[w]; lol != NULL; lol = lol->next) { /* we only consider UP or DOWN priority links here */ if (lol->dir == 1) { if (strcmp(sent->word[lol->word].string, ",") == 0) { /* pointing to a comma */ and_dfs_commas(actx, sent, lol->word); } else { actx->and_element[actx->N_and_elements] = lol->word; and_dfs_full(actx, lol->word); actx->N_and_elements++; } } if (lol->dir == 0) { actx->outside_word[actx->N_outside_words] = lol->word; actx->N_outside_words++; } } } /** * This function computes the "and cost", resulting from inequalities * in the length of and-list elements. It also computes other * information used to construct the "andlist" structure of linkage_info. */ static Andlist * build_andlist(analyze_context_t *actx, Sentence sent) { int w, i, min, max, j, cost; char * s; Andlist * new_andlist, * old_andlist; Parse_info pi = sent->parse_info; old_andlist = NULL; cost = 0; for(w = 0; wN_words; w++) { s = sent->word[w].string; if (sent->is_conjunction[w]) { actx->N_and_elements = 0; actx->N_outside_words = 0; for(i=0; iN_words; i++) { actx->visited[i] = FALSE; actx->and_element_sizes[i] = 0; } if (sent->dict->left_wall_defined) actx->visited[0] = TRUE; and_dfs_commas(actx, sent, w); if (actx->N_and_elements == 0) continue; new_andlist = (Andlist *) xalloc(sizeof(Andlist)); new_andlist->num_elements = actx->N_and_elements; new_andlist->num_outside_words = actx->N_outside_words; for (i=0; i < actx->N_and_elements; i++) { new_andlist->element[i] = actx->and_element[i]; } for (i=0; i < actx->N_outside_words; i++) { new_andlist->outside_word[i] = actx->outside_word[i]; } new_andlist->conjunction = w; new_andlist->next = old_andlist; old_andlist = new_andlist; if (actx->N_and_elements > 0) { min = MAX_SENTENCE; max = 0; for (i=0; i < actx->N_and_elements; i++) { j = actx->and_element_sizes[i]; if (j < min) min = j; if (j > max) max = j; } cost += max-min; } } } if (old_andlist) old_andlist->cost = cost; return old_andlist; } /** * This function defines the cost of a link as a function of its length. */ static inline int cost_for_length(int length) { return length-1; } /** * Computes the cost of the current parse of the current sentence, * due to the length of the links. */ static int link_cost(Parse_info pi) { int lcost, i; lcost = 0; for (i = 0; i < pi->N_links; i++) { lcost += cost_for_length(pi->link_array[i].r - pi->link_array[i].l); } return lcost; } static int null_cost(Parse_info pi) { /* computes the number of null links in the linkage */ /* No one seems to care about this -- ALB */ return 0; } static int unused_word_cost(Parse_info pi) { int lcost, i; lcost = 0; for (i = 0; i < pi->N_words; i++) lcost += (pi->chosen_disjuncts[i] == NULL); return lcost; } /** * Computes the cost of the current parse of the current sentence * due to the cost of the chosen disjuncts. */ static float disjunct_cost(Parse_info pi) { int i; float lcost; lcost = 0.0; for (i = 0; i < pi->N_words; i++) { if (pi->chosen_disjuncts[i] != NULL) lcost += pi->chosen_disjuncts[i]->cost; } return lcost; } /** * Returns TRUE if string s represents a strictly smaller match set * than does t. An almost identical function appears in and.c. * The difference is that here we don't require s and t to be the * same length. */ static int strictly_smaller_name(const char * s, const char * t) { int strictness, ss, tt; strictness = 0; while ((*s!='\0') || (*t!='\0')) { if (*s == '\0') { ss = '*'; } else { ss = *s; s++; } if (*t == '\0') { tt = '*'; } else { tt = *t; t++; } if (ss == tt) continue; if ((tt == '*') || (ss == '^')) { strictness++; } else { return FALSE; } } return (strictness > 0); } /** * The name of the link is set to be the GCD of the names of * its two endpoints. Must be called after each extract_links(), * etc. since that call issues a brand-new set of links into * parse_info. */ static void compute_link_names(Sentence sent) { int i; Parse_info pi = sent->parse_info; for (i = 0; i < pi->N_links; i++) { pi->link_array[i].name = intersect_strings(sent, connector_get_string(pi->link_array[i].lc), connector_get_string(pi->link_array[i].rc)); } } /** * This fills in the sublinkage->link[].name field. We assume that * link_array[].name have already been filled in. As above, in the * standard case, the name is just the GCD of the two end points. * If pluralization has occurred, then we want to use the name * already in link_array[].name. We detect this in two ways. * If the endpoints don't match, then we know pluralization * has occured. If they do, but the name in link_array[].name * is *less* restrictive, then pluralization must have occured. */ static void compute_pp_link_names(Sentence sent, Sublinkage *sublinkage) { int i; const char * s; Parse_info pi = sent->parse_info; for (i = 0; i < pi->N_links; i++) { if (sublinkage->link[i]->l == -1) continue; /* NULL's here are quite unexpected -- I think there's a bug * elsewhere in the code. But for now, punt. Here's a sentence * that triggers a NULL -- "His convalescence was relatively brief * and he was able to return and fight at The Wilderness, * Spotsylvania and Cold Harbor." */ if (NULL == sublinkage->link[i]->lc) continue; if (NULL == sublinkage->link[i]->rc) continue; if (!x_match(sent, sublinkage->link[i]->lc, sublinkage->link[i]->rc)) { replace_link_name(sublinkage->link[i], pi->link_array[i].name); } else { s = intersect_strings(sent, connector_get_string(sublinkage->link[i]->lc), connector_get_string(sublinkage->link[i]->rc)); if (strictly_smaller_name(s, pi->link_array[i].name)) replace_link_name(sublinkage->link[i], pi->link_array[i].name); else replace_link_name(sublinkage->link[i], s); } } } /********************** exported functions *****************************/ void init_analyze(Sentence s) { analyze_context_t *actx = s->analyze_ctxt; if (NULL == actx) { actx = (analyze_context_t *) malloc (sizeof(analyze_context_t)); s->analyze_ctxt = actx; } actx->structure_violation = FALSE; } void free_analyze(Sentence s) { if (s->analyze_ctxt != NULL) free(s->analyze_ctxt); s->analyze_ctxt = NULL; } /** * This uses link_array. It enumerates and post-processes * all the linkages represented by this one. We know this contains * at least one fat link. */ Linkage_info analyze_fat_linkage(Sentence sent, Parse_Options opts, int analyze_pass) { int i; Linkage_info li; DIS_node *d_root; PP_node *pp; Postprocessor *postprocessor; Sublinkage *sublinkage; Parse_info pi = sent->parse_info; PP_node accum; /* for domain ancestry check */ D_type_list * dtl0, * dtl1; /* for domain ancestry check */ analyze_context_t *actx = sent->analyze_ctxt; sublinkage = x_create_sublinkage(pi); postprocessor = sent->dict->postprocessor; build_digraph(actx, pi); actx->structure_violation = FALSE; d_root = build_DIS_CON_tree(actx, pi); /* may set structure_violation to TRUE */ memset(&li, 0, sizeof(li)); li.N_violations = 0; li.improper_fat_linkage = actx->structure_violation; li.inconsistent_domains = FALSE; li.unused_word_cost = unused_word_cost(sent->parse_info); if (opts->use_sat_solver) { li.disjunct_cost = 0.0; } else { li.disjunct_cost = disjunct_cost(pi); } li.null_cost = null_cost(pi); li.link_cost = link_cost(pi); li.corpus_cost = -1.0f; li.and_cost = 0; li.andlist = NULL; if (actx->structure_violation) { li.N_violations++; free_sublinkage(sublinkage); free_digraph(actx, pi); free_DIS_tree(d_root); for (i = 0; i < pi->N_links; i++) { pi->link_array[i].name = ""; } return li; } if (analyze_pass == PP_SECOND_PASS) { li.andlist = build_andlist(actx, sent); li.and_cost = 0; if (li.andlist) li.and_cost = li.andlist->cost; } else li.and_cost = 0; compute_link_names(sent); for (i=0; iN_links; i++) accum.d_type_array[i] = NULL; /* loop through all the sub linkages */ for (;;) { for (i=0; iN_links; i++) { actx->patch_array[i].used = actx->patch_array[i].changed = FALSE; actx->patch_array[i].newl = pi->link_array[i].l; actx->patch_array[i].newr = pi->link_array[i].r; copy_full_link(&sublinkage->link[i], &(pi->link_array[i])); } fill_patch_array_DIS(actx, d_root, NULL); for (i=0; iN_links; i++) { if (actx->patch_array[i].changed || actx->patch_array[i].used) { sublinkage->link[i]->l = actx->patch_array[i].newl; sublinkage->link[i]->r = actx->patch_array[i].newr; } else if ((actx->dfs_root_word[pi->link_array[i].l] != -1) && (actx->dfs_root_word[pi->link_array[i].r] != -1)) { sublinkage->link[i]->l = -1; } } if (0 == opts->use_sat_solver) { compute_pp_link_array_connectors(sent, sublinkage); compute_pp_link_names(sent, sublinkage); } /* 'analyze_pass' logic added ALB 1/97 */ if (analyze_pass==PP_FIRST_PASS) { post_process_scan_linkage(postprocessor,opts,sent,sublinkage); if (!advance_DIS(d_root)) break; else continue; } pp = post_process(postprocessor, opts, sent, sublinkage, TRUE); if (pp==NULL) { if (postprocessor != NULL) li.N_violations = 1; } else if (pp->violation == NULL) { /* the purpose of this stuff is to make sure the domain ancestry for a link in each of its sentences is consistent. */ for (i=0; iN_links; i++) { if (sublinkage->link[i]->l == -1) continue; if (accum.d_type_array[i] == NULL) { accum.d_type_array[i] = copy_d_type(pp->d_type_array[i]); } else { dtl0 = pp->d_type_array[i]; dtl1 = accum.d_type_array[i]; while((dtl0 != NULL) && (dtl1 != NULL) && (dtl0->type == dtl1->type)) { dtl0 = dtl0->next; dtl1 = dtl1->next; } if ((dtl0 != NULL) || (dtl1 != NULL)) break; } } if (i != pi->N_links) { li.N_violations++; li.inconsistent_domains = TRUE; } } else if (pp->violation!=NULL) { li.N_violations++; } if (!advance_DIS(d_root)) break; } for (i=0; iN_links; ++i) { free_d_type(accum.d_type_array[i]); } /* if (display_on && (li.N_violations != 0) && (verbosity > 3) && should_print_messages) printf("P.P. violation in one part of conjunction.\n"); */ free_sublinkage(sublinkage); free_digraph(actx, pi); free_DIS_tree(d_root); return li; } /** * This uses link_array. It post-processes * this linkage, and prints the appropriate thing. There are no fat * links in it. */ Linkage_info analyze_thin_linkage(Sentence sent, Parse_Options opts, int analyze_pass) { int i; Linkage_info li; PP_node * pp; Postprocessor * postprocessor; Sublinkage *sublinkage; Parse_info pi = sent->parse_info; analyze_context_t *actx = sent->analyze_ctxt; sublinkage = x_create_sublinkage(pi); postprocessor = sent->dict->postprocessor; compute_link_names(sent); for (i=0; iN_links; i++) { copy_full_link(&(sublinkage->link[i]), &(pi->link_array[i])); } if (analyze_pass == PP_FIRST_PASS) { post_process_scan_linkage(postprocessor, opts, sent, sublinkage); free_sublinkage(sublinkage); memset(&li, 0, sizeof(li)); return li; } build_digraph(actx, pi); /* The code below can be used to generate the "islands" array. * For this to work, however, you have to call "build_digraph" * first (as in analyze_fat_linkage). and then "free_digraph". */ pp = post_process(postprocessor, opts, sent, sublinkage, TRUE); memset(&li, 0, sizeof(li)); li.N_violations = 0; li.and_cost = 0; li.unused_word_cost = unused_word_cost(sent->parse_info); li.improper_fat_linkage = FALSE; li.inconsistent_domains = FALSE; if (opts->use_sat_solver) { li.disjunct_cost = 0.0; } else { li.disjunct_cost = disjunct_cost(pi); } li.null_cost = null_cost(pi); li.link_cost = link_cost(pi); li.corpus_cost = -1.0f; li.andlist = NULL; if (pp == NULL) { if (postprocessor != NULL) li.N_violations = 1; } else if (pp->violation != NULL) { li.N_violations++; } free_sublinkage(sublinkage); free_digraph(actx, pi); return li; } void extract_thin_linkage(Sentence sent, Parse_Options opts, Linkage linkage) { int i; Parse_info pi = sent->parse_info; linkage->num_sublinkages = 1; linkage->sublinkage = ex_create_sublinkage(pi); compute_link_names(sent); for (i=0; iN_links; ++i) { linkage->sublinkage->link[i] = excopy_link(&(pi->link_array[i])); } } #ifdef DBG static void prt_lol(Sentence sent , List_o_links *lol) { /* It appears that the list of links is always even in length: * The head word first, followed by a modifier. */ while (lol) { // printf ("%d ", lol->link); printf ("%s ", sent->word[lol->word].string); lol = lol->next; } } static void prt_con_list(Sentence, CON_list *); static void prt_dis_list(Sentence sent, DIS_list *dis) { while(dis) { /* There are three possibilities: * Either there's another conjunction (and we should print it) * Or there's a head word, with its modifiers in its list-o-links, * Or there's just the bare, naked word by itself. */ if (dis->dn->cl) { prt_con_list(sent, dis->dn->cl); } else if (dis->dn->lol) { printf("["); prt_lol(sent, dis->dn->lol); printf("]"); } else { int wd = dis->dn->word; printf("%s ", sent->word[wd].string); } dis = dis->next; } } static void prt_con_list(Sentence sent, CON_list *con) { while(con) { int wd = con->cn->word; printf("(%s ", sent->word[wd].string); prt_dis_list(sent, con->cn->dl); printf(") "); con = con->next; } } static void prt_dis_con_tree(Sentence sent, DIS_node *dis) { prt_con_list(sent, dis->cl); printf ("\n"); } #else static inline void prt_dis_con_tree(Sentence sent, DIS_node *dis) {} #endif /** * This procedure mimics analyze_fat_linkage in order to * extract the sublinkages and copy them to the Linkage * data structure passed in. */ void extract_fat_linkage(Sentence sent, Parse_Options opts, Linkage linkage) { int i, j, N_thin_links; DIS_node *d_root; int num_sublinkages; Sublinkage * sublinkage; Parse_info pi = sent->parse_info; analyze_context_t *actx = sent->analyze_ctxt; build_digraph(actx, pi); actx->structure_violation = FALSE; d_root = build_DIS_CON_tree(actx, pi); if (actx->structure_violation) { compute_link_names(sent); linkage->num_sublinkages=1; linkage->sublinkage = ex_create_sublinkage(pi); /* This will have fat links! */ for (i=0; iN_links; ++i) { linkage->sublinkage->link[i] = excopy_link(&(pi->link_array[i])); } free_digraph(actx, pi); free_DIS_tree(d_root); return; } /* first get number of sublinkages and allocate space */ num_sublinkages = 0; for (;;) { num_sublinkages++; if (!advance_DIS(d_root)) break; } linkage->num_sublinkages = num_sublinkages; linkage->sublinkage = (Sublinkage *) exalloc(sizeof(Sublinkage)*num_sublinkages); for (i=0; isublinkage[i].link = NULL; linkage->sublinkage[i].pp_info = NULL; linkage->sublinkage[i].violation = NULL; } /* now fill out the sublinkage arrays */ compute_link_names(sent); sublinkage = x_create_sublinkage(pi); num_sublinkages = 0; for (;;) { for (i = 0; i < pi->N_links; i++) { actx->patch_array[i].used = actx->patch_array[i].changed = FALSE; actx->patch_array[i].newl = pi->link_array[i].l; actx->patch_array[i].newr = pi->link_array[i].r; copy_full_link(&sublinkage->link[i], &(pi->link_array[i])); } fill_patch_array_DIS(actx, d_root, NULL); for (i = 0; i < pi->N_links; i++) { if (actx->patch_array[i].changed || actx->patch_array[i].used) { sublinkage->link[i]->l = actx->patch_array[i].newl; sublinkage->link[i]->r = actx->patch_array[i].newr; } else if ((actx->dfs_root_word[pi->link_array[i].l] != -1) && (actx->dfs_root_word[pi->link_array[i].r] != -1)) { sublinkage->link[i]->l = -1; } } if (0 == opts->use_sat_solver) { compute_pp_link_array_connectors(sent, sublinkage); compute_pp_link_names(sent, sublinkage); } /* Don't copy the fat links into the linkage */ N_thin_links = 0; for (i = 0; i < pi->N_links; ++i) { if (sublinkage->link[i]->l == -1) continue; N_thin_links++; } linkage->sublinkage[num_sublinkages].num_links = N_thin_links; linkage->sublinkage[num_sublinkages].link = (Link **) exalloc(sizeof(Link *)*N_thin_links); linkage->sublinkage[num_sublinkages].pp_info = NULL; linkage->sublinkage[num_sublinkages].violation = NULL; for (i = 0, j = 0; i < pi->N_links; ++i) { if (sublinkage->link[i]->l == -1) continue; linkage->sublinkage[num_sublinkages].link[j++] = excopy_link(sublinkage->link[i]); } num_sublinkages++; if (!advance_DIS(d_root)) break; } free_sublinkage(sublinkage); free_digraph(actx, pi); if (linkage->dis_con_tree) free_DIS_tree(linkage->dis_con_tree); linkage->dis_con_tree = d_root; prt_dis_con_tree(sent, d_root); } link-grammar/link-grammar/post-process.h0000644000000000000000000000433612536650433015535 0ustar /********************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /********************************************************************************/ /********************************************************************** Calling paradigm: . call post_process_open() with the name of a knowledge file. This returns a handle, used for all subsequent calls to post-process. . Do for each sentence: - Do for each generated linkage of sentence: + call post_process_scan_linkage() - Do for each generated linkage of sentence: + call post_process() - Call post_process_close_sentence() ***********************************************************************/ #ifndef _POSTPROCESSH_ #define _POSTPROCESSH_ #define PP_FIRST_PASS 1 #define PP_SECOND_PASS 2 /* Postprocessor * post_process_open(char *path); this is in api-prototypes.h */ void post_process_free_data(PP_data * ppd); void post_process_close_sentence(Postprocessor *); void post_process_scan_linkage(Postprocessor * pp, Parse_Options opts, Sentence sent , Sublinkage * sublinkage); PP_node *post_process(Postprocessor * pp, Parse_Options opts, Sentence sent, Sublinkage *, int cleanup); int post_process_match(const char *s, const char *t); /* utility function */ void free_d_type(D_type_list * dtl); D_type_list * copy_d_type(D_type_list * dtl); #endif link-grammar/link-grammar/fast-match.h0000644000000000000000000000213512536650433015116 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ void init_fast_matcher(Sentence sent); void free_fast_matcher(Sentence sent); void put_match_list(Sentence, Match_node *); Match_node * form_match_list(Sentence, int, Connector *, int, Connector *, int); link-grammar/link-grammar/malloc-dbg.c0000644000000000000000000001007512536650433015065 0ustar /* * malloc-dbg.c * * Debug memory allocation. Hacky code, used only * for debugging. * * Copyright (c) 2008 Linas Vepstas */ #ifndef _MSC_VER #include #include #include #include /* ======================================================== */ static void *(*old_malloc_hook)(size_t, const void *); static void (*old_free_hook)(void *, const void *); static void *(*old_realloc_hook)(void *, size_t, const void *); static void my_free_hook(void * mem, const void * caller); static void * my_malloc_hook(size_t n_bytes, const void * caller); #define TBLSZ 366000 typedef struct { void * mem; const void * caller; int cnt; size_t sz; } loc_t; static loc_t loc[TBLSZ]; static int mcnt = 0; static FILE *fh = NULL; static void init_io(void) { if (fh) return; /* fh = fopen("/tmp/m", "w"); */ fh = stdout; } static void * my_realloc_hook(void * mem, size_t n_bytes, const void *caller) { __realloc_hook = old_realloc_hook; void * nm = realloc(mem, n_bytes); old_realloc_hook = __realloc_hook; __realloc_hook = my_realloc_hook; int i; for (i=0; i #include "disjunct-utils.h" /* This file contains the functions for massaging disjuncts of the sentence in special ways having to do with conjunctions. The only function called from the outside world is install_special_conjunctive_connectors() It would be nice if this code was written more transparently. In other words, there should be some fairly general functions that manipulate disjuncts, and take words like "neither" etc as input parameters, so as to encapsulate the changes being made for special words. This would not be too hard to do, but it's not a high priority. -DS 3/98 */ #define COMMA_LABEL (-2) /* to hook the comma to the following "and" */ #define EITHER_LABEL (-3) /* to connect the "either" to the following "or" */ #define NEITHER_LABEL (-4) /* to connect the "neither" to the following "nor"*/ #define NOT_LABEL (-5) /* to connect the "not" to the following "but"*/ #define NOTONLY_LABEL (-6) /* to connect the "not" to the following "only"*/ #define BOTH_LABEL (-7) /* to connect the "both" to the following "and"*/ /* There's a problem with installing "...but...", "not only...but...", and "not...but...", which is that the current comma mechanism will allow a list separated by commas. "Not only John, Mary but Jim came" The best way to prevent this is to make it impossible for the comma to attach to the "but", via some sort of additional subscript on commas. I can't think of a good way to prevent this. */ /* The following functions all do slightly different variants of the following thing: Catenate to the disjunct list pointed to by d, a new disjunct list. The new list is formed by copying the old list, and adding the new connector somewhere in the old disjunct, for disjuncts that satisfy certain conditions */ /** * glom_comma_connector() -- * In this case the connector is to connect to the comma to the * left of an "and" or an "or". Only gets added next to a fat link */ static Disjunct * glom_comma_connector(Disjunct * d) { Disjunct * d_list, * d1, * d2; Connector * c, * c1; d_list = NULL; for (d1 = d; d1!=NULL; d1=d1->next) { if (d1->left == NULL) continue; for (c = d1->left; c->next != NULL; c = c->next) ; if (c->label < 0) continue; /* last one must be a fat link */ d2 = copy_disjunct(d1); d2->next = d_list; d_list = d2; c1 = connector_new(); c1->label = COMMA_LABEL; c->next = c1; } return catenate_disjuncts(d, d_list); } /** * In this case the connector is to connect to the "either", "neither", * "not", or some auxilliary d to the current which is a conjunction. * Only gets added next to a fat link, but before it (not after it) * In the case of "nor", we don't create new disjuncts, we merely modify * existing ones. This forces the fat link uses of "nor" to * use a neither. (Not the case with "or".) If necessary=FALSE, then * duplication is done, otherwise it isn't */ static Disjunct * glom_aux_connector(Disjunct * d, int label, int necessary) { Disjunct * d_list, * d1, * d2; Connector * c, * c1, *c2; d_list = NULL; for (d1 = d; d1!=NULL; d1=d1->next) { if (d1->left == NULL) continue; for (c = d1->left; c->next != NULL; c = c->next) ; if (c->label < 0) continue; /* last one must be a fat link */ if (!necessary) { d2 = copy_disjunct(d1); d2->next = d_list; d_list = d2; } c1 = connector_new(); c1->label = label; c1->next = c; if (d1->left == c) { d1->left = c1; } else { for (c2 = d1->left; c2->next != c; c2 = c2->next) ; c2->next = c1; } } return catenate_disjuncts(d, d_list); } /** * This adds one connector onto the beginning of the left (or right) * connector list of d. The label and string of the connector are * specified */ static Disjunct * add_one_connector(int label, int dir, const char *cs, Disjunct * d) { Connector * c; c = connector_new(); c->string = cs; c->label = label; if (dir == '+') { c->next = d->right; d->right = c; } else { c->next = d->left; d->left = c; } return d; } /** * special_disjunct() -- * Builds a new disjunct with one connector pointing in direction dir * (which is '+' or '-'). The label and string of the connector * are specified, as well as the string of the disjunct. * The next pointer of the new disjunct set to NULL, so it can be * regarded as a list. */ static Disjunct * special_disjunct(int label, int dir, const char *cs, const char * ds) { Disjunct * d1; Connector * c; d1 = (Disjunct *) xalloc(sizeof(Disjunct)); d1->cost = 0; d1->string = ds; d1->next = NULL; c = connector_new(); c->string = cs; c->label = label; if (dir == '+') { d1->left = NULL; d1->right = c; } else { d1->right = NULL; d1->left = c; } return d1; } /** * Finds all places in the sentence where a comma is followed by * a conjunction ("and", "or", "but", or "nor"). It modifies these comma * disjuncts, and those of the following word, to allow the following * word to absorb the comma (if used as a conjunction). */ static void construct_comma(Sentence sent) { int w; for (w=0; wlength-1; w++) { if ((strcmp(sent->word[w].string, ",")==0) && sent->is_conjunction[w+1]) { sent->word[w].d = catenate_disjuncts(special_disjunct(COMMA_LABEL,'+',"", ","), sent->word[w].d); sent->word[w+1].d = glom_comma_connector(sent->word[w+1].d); } } } /** Returns TRUE if one of the words in the sentence is s */ static int sentence_contains(Sentence sent, const char * s) { int w; for (w=0; wlength; w++) { if (strcmp(sent->word[w].string, s) == 0) return TRUE; } return FALSE; } /** * The functions below put the special connectors on certain auxilliary words to be used with conjunctions. Examples: either, neither, both...and..., not only...but... XXX FIXME: This routine uses "sentence_contains" to test for explicit English words, and clearly this fails for other langauges!! XXX FIXME! */ static void construct_either(Sentence sent) { int w; if (!sentence_contains(sent, "either")) return; for (w=0; wlength; w++) { if (strcmp(sent->word[w].string, "either") != 0) continue; sent->word[w].d = catenate_disjuncts( special_disjunct(EITHER_LABEL,'+',"", "either"), sent->word[w].d); } for (w=0; wlength; w++) { if (strcmp(sent->word[w].string, "or") != 0) continue; sent->word[w].d = glom_aux_connector (sent->word[w].d, EITHER_LABEL, FALSE); } } static void construct_neither(Sentence sent) { int w; if (!sentence_contains(sent, "neither")) { /* I don't see the point removing disjuncts on "nor". I Don't know why I did this. What's the problem keeping the stuff explicitely defined for "nor" in the dictionary? --DS 3/98 */ #if 0 for (w=0; wlength; w++) { if (strcmp(sent->word[w].string, "nor") != 0) continue; free_disjuncts(sent->word[w].d); sent->word[w].d = NULL; /* a nor with no neither is dead */ } #endif return; } for (w=0; wlength; w++) { if (strcmp(sent->word[w].string, "neither") != 0) continue; sent->word[w].d = catenate_disjuncts( special_disjunct(NEITHER_LABEL,'+',"", "neither"), sent->word[w].d); } for (w=0; wlength; w++) { if (strcmp(sent->word[w].string, "nor") != 0) continue; sent->word[w].d = glom_aux_connector (sent->word[w].d, NEITHER_LABEL, TRUE); } } static void construct_notonlybut(Sentence sent) { int w; Disjunct *d; if (!sentence_contains(sent, "not")) { return; } for (w=0; wlength; w++) { if (strcmp(sent->word[w].string, "not") != 0) continue; sent->word[w].d = catenate_disjuncts( special_disjunct(NOT_LABEL,'+',"", "not"), sent->word[w].d); if (wlength-1 && strcmp(sent->word[w+1].string, "only")==0) { sent->word[w+1].d = catenate_disjuncts( special_disjunct(NOTONLY_LABEL, '-',"","only"), sent->word[w+1].d); d = special_disjunct(NOTONLY_LABEL, '+', "","not"); d = add_one_connector(NOT_LABEL,'+',"", d); sent->word[w].d = catenate_disjuncts(d, sent->word[w].d); } } /* The code below prevents sentences such as the following from parsing: it was not carried out by Serbs but by Croats */ /* We decided that this is a silly thing to. Here's the bug report caused by this: Bug with conjunctions. Some that work with "and" but they don't work with "but". "He was not hit by John and by Fred". (Try replacing "and" by "but" and it does not work. It's getting confused by the "not".) */ for (w=0; wlength; w++) { if (strcmp(sent->word[w].string, "but") != 0) continue; sent->word[w].d = glom_aux_connector (sent->word[w].d, NOT_LABEL, FALSE); /* The above line use to have a TRUE in it */ } } static void construct_both(Sentence sent) { int w; if (!sentence_contains(sent, "both")) return; for (w=0; wlength; w++) { if (strcmp(sent->word[w].string, "both") != 0) continue; sent->word[w].d = catenate_disjuncts( special_disjunct(BOTH_LABEL,'+',"", "both"), sent->word[w].d); } for (w=0; wlength; w++) { if (strcmp(sent->word[w].string, "and") != 0) continue; sent->word[w].d = glom_aux_connector(sent->word[w].d, BOTH_LABEL, FALSE); } } void install_special_conjunctive_connectors(Sentence sent) { construct_either(sent); /* special connectors for "either" */ construct_neither(sent); /* special connectors for "neither" */ construct_notonlybut(sent); /* special connectors for "not..but.." */ /* and "not only..but.." */ construct_both(sent); /* special connectors for "both..and.." */ construct_comma(sent); /* special connectors for extra comma */ } link-grammar/link-grammar/massage.h0000644000000000000000000000171412536650433014511 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ void install_special_conjunctive_connectors(Sentence sent); link-grammar/link-grammar/extract-links.h0000644000000000000000000000212612536650433015657 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ Parse_info parse_info_new(int nwords); void free_parse_info(Parse_info); int build_parse_set(Sentence sent, int cost, Parse_Options opts); void extract_links(int index, int cost, Parse_info pi); link-grammar/link-grammar/idiom.h0000644000000000000000000000213612536650433014171 0ustar /********************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /********************************************************************************/ void insert_idiom(Dictionary dict, Dict_node *); int contains_underbar(const char *); int is_idiom_word(const char *); link-grammar/link-grammar/prefix.c0000644000000000000000000002517112536650433014364 0ustar /* * BinReloc - a library for creating relocatable executables * Written by: Mike Hearn * Hongli Lai * http://autopackage.org/ * * This source code is public domain. You can relicense this code * under whatever license you want. * * NOTE: if you're using C++ and are getting "undefined reference * to br_*", try renaming prefix.c to prefix.cpp */ /* WARNING, BEFORE YOU MODIFY PREFIX.C: * * If you make changes to any of the functions in prefix.c, you MUST * change the BR_NAMESPACE macro (in prefix.h). * This way you can avoid symbol table conflicts with other libraries * that also happen to use BinReloc. * * Example: * #define BR_NAMESPACE(funcName) foobar_ ## funcName * --> expands br_locate to foobar_br_locate */ #ifndef _PREFIX_C_ #define _PREFIX_C_ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifndef BR_PTHREADS /* Change 1 to 0 if you don't want pthread support */ #define BR_PTHREADS 1 #endif /* BR_PTHREADS */ #include #include #include #include #include "prefix.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #undef NULL #define NULL ((void *) 0) #ifdef __GNUC__ #define br_return_val_if_fail(expr,val) if (!(expr)) {fprintf (stderr, "** BinReloc (%s): assertion %s failed\n", __PRETTY_FUNCTION__, #expr); return val;} #else #define br_return_val_if_fail(expr,val) if (!(expr)) return val #endif /* __GNUC__ */ static br_locate_fallback_func fallback_func = (br_locate_fallback_func) NULL; static void *fallback_data = NULL; #ifdef ENABLE_BINRELOC #include #include #include #include /** * br_locate: * symbol: A symbol that belongs to the app/library you want to locate. * Returns: A newly allocated string containing the full path of the * app/library that func belongs to, or NULL on error. This * string should be freed when not when no longer needed. * * Finds out to which application or library symbol belongs, then locate * the full path of that application or library. * Note that symbol cannot be a pointer to a function. That will not work. * * Example: * --> main.c * #include "prefix.h" * #include "libfoo.h" * * int main (int argc, char *argv[]) { * printf ("Full path of this app: %s\n", br_locate (&argc)); * libfoo_start (); * return 0; * } * * --> libfoo.c starts here * #include "prefix.h" * * void libfoo_start () { * --> "" is a symbol that belongs to libfoo (because it's called * --> from libfoo_start()); that's why this works. * printf ("libfoo is located in: %s\n", br_locate ("")); * } */ char * br_locate (void *symbol) { char line[5000]; FILE *f; char *path; br_return_val_if_fail (symbol != NULL, NULL); f = fopen ("/proc/self/maps", "r"); if (!f) { if (fallback_func) return fallback_func(symbol, fallback_data); else return NULL; } while (!feof (f)) { unsigned long start, end; if (!fgets (line, sizeof (line), f)) continue; if (!strstr (line, " r-xp ") || !strchr (line, '/')) continue; sscanf (line, "%lx-%lx ", &start, &end); if (symbol >= (void *) start && symbol < (void *) end) { char *tmp; size_t len; /* Extract the filename; it is always an absolute path */ path = strchr (line, '/'); /* Get rid of the newline */ tmp = strrchr (path, '\n'); if (tmp) *tmp = 0; /* Get rid of "(deleted)" */ len = strlen (path); if (len > 10 && strcmp (path + len - 10, " (deleted)") == 0) { tmp = path + len - 10; *tmp = 0; } fclose(f); return strdup (path); } } fclose (f); return NULL; } /** * br_locate_prefix: * symbol: A symbol that belongs to the app/library you want to locate. * Returns: A prefix. This string should be freed when no longer needed. * * Locates the full path of the app/library that symbol belongs to, and return * the prefix of that path, or NULL on error. * Note that symbol cannot be a pointer to a function. That will not work. * * Example: * --> This application is located in /usr/bin/foo * br_locate_prefix (&argc); --> returns: "/usr" */ char * br_locate_prefix (void *symbol) { char *path, *prefix; br_return_val_if_fail (symbol != NULL, NULL); path = br_locate (symbol); if (!path) return NULL; prefix = br_extract_prefix (path); free (path); return prefix; } /** * br_prepend_prefix: * symbol: A symbol that belongs to the app/library you want to locate. * path: The path that you want to prepend the prefix to. * Returns: The new path, or NULL on error. This string should be freed when no * longer needed. * * Gets the prefix of the app/library that symbol belongs to. Prepend that prefix to path. * Note that symbol cannot be a pointer to a function. That will not work. * * Example: * --> The application is /usr/bin/foo * br_prepend_prefix (&argc, "/share/foo/data.png"); --> Returns "/usr/share/foo/data.png" */ char * br_prepend_prefix (void *symbol, char *path) { char *tmp, *newpath; br_return_val_if_fail (symbol != NULL, NULL); br_return_val_if_fail (path != NULL, NULL); tmp = br_locate_prefix (symbol); if (!tmp) return NULL; if (strcmp (tmp, "/") == 0) newpath = strdup (path); else newpath = br_strcat (tmp, path); /* Get rid of compiler warning ("br_prepend_prefix never used") */ if (0) br_prepend_prefix (NULL, NULL); free (tmp); return newpath; } #endif /* ENABLE_BINRELOC */ /* Pthread stuff for thread safetiness */ #if BR_PTHREADS && defined(ENABLE_BINRELOC) #include static pthread_key_t br_thread_key; static pthread_once_t br_thread_key_once = PTHREAD_ONCE_INIT; static void br_thread_local_store_fini () { char *specific; specific = (char *) pthread_getspecific (br_thread_key); if (specific) { free (specific); pthread_setspecific (br_thread_key, NULL); } pthread_key_delete (br_thread_key); br_thread_key = 0; } static void br_str_free (void *str) { if (str) free (str); } static void br_thread_local_store_init () { if (pthread_key_create (&br_thread_key, br_str_free) == 0) atexit (br_thread_local_store_fini); } #else /* BR_PTHREADS */ #ifdef ENABLE_BINRELOC static char *br_last_value = (char *) NULL; static void br_free_last_value () { if (br_last_value) free (br_last_value); } #endif /* ENABLE_BINRELOC */ #endif /* BR_PTHREADS */ #ifdef ENABLE_BINRELOC /** * br_thread_local_store: * str: A dynamically allocated string. * Returns: str. This return value must not be freed. * * Store str in a thread-local variable and return str. The next * you run this function, that variable is freed too. * This function is created so you don't have to worry about freeing * strings. Just be careful about doing this sort of thing: * * some_function( BR_DATADIR("/one.png"), BR_DATADIR("/two.png") ) * * Examples: * char *foo; * foo = br_thread_local_store (strdup ("hello")); --> foo == "hello" * foo = br_thread_local_store (strdup ("world")); --> foo == "world"; "hello" is now freed. */ const char * br_thread_local_store (char *str) { #if BR_PTHREADS char *specific; pthread_once (&br_thread_key_once, br_thread_local_store_init); specific = (char *) pthread_getspecific (br_thread_key); br_str_free (specific); pthread_setspecific (br_thread_key, str); #else /* BR_PTHREADS */ static int initialized = 0; if (!initialized) { atexit (br_free_last_value); initialized = 1; } if (br_last_value) free (br_last_value); br_last_value = str; #endif /* BR_PTHREADS */ return (const char *) str; } #endif /* ENABLE_BINRELOC */ /** * br_strcat: * str1: A string. * str2: Another string. * Returns: A newly-allocated string. This string should be freed when no longer needed. * * Concatenate str1 and str2 to a newly allocated string. */ char * br_strcat (const char *str1, const char *str2) { char *result; size_t len1, len2; if (!str1) str1 = ""; if (!str2) str2 = ""; len1 = strlen (str1); len2 = strlen (str2); result = (char *) malloc (len1 + len2 + 1); memcpy (result, str1, len1); memcpy (result + len1, str2, len2); result[len1 + len2] = '\0'; return result; } /* Emulates glibc's strndup() */ static char * br_strndup (char *str, size_t size) { char *result = (char *) NULL; size_t len; br_return_val_if_fail (str != (char *) NULL, (char *) NULL); len = strlen (str); if (!len) return strdup (""); if (size > len) size = len; result = (char *) calloc (sizeof (char), len + 1); memcpy (result, str, size); return result; } /** * br_extract_dir: * path: A path. * Returns: A directory name. This string should be freed when no longer needed. * * Extracts the directory component of path. Similar to g_dirname() or the dirname * commandline application. * * Example: * br_extract_dir ("/usr/local/foobar"); --> Returns: "/usr/local" */ char * br_extract_dir (const char *path) { char *end, *result; br_return_val_if_fail (path != (char *) NULL, (char *) NULL); end = strrchr (path, '/'); if (!end) return strdup ("."); while (end > path && *end == '/') end--; result = br_strndup ((char *) path, end - path + 1); if (!*result) { free (result); return strdup ("/"); } else return result; } /** * br_extract_prefix: * path: The full path of an executable or library. * Returns: The prefix, or NULL on error. This string should be freed when no longer needed. * * Extracts the prefix from path. This function assumes that your executable * or library is installed in an LSB-compatible directory structure. * * Example: * br_extract_prefix ("/usr/bin/gnome-panel"); --> Returns "/usr" * br_extract_prefix ("/usr/local/lib/libfoo.so"); --> Returns "/usr/local" * br_extract_prefix ("/usr/local/libfoo.so"); --> Returns "/usr" */ char * br_extract_prefix (const char *path) { char *end, *tmp, *result; br_return_val_if_fail (path != (char *) NULL, (char *) NULL); if (!*path) return strdup ("/"); end = strrchr (path, '/'); if (!end) return strdup (path); tmp = br_strndup ((char *) path, end - path); if (!*tmp) { free (tmp); return strdup ("/"); } end = strrchr (tmp, '/'); if (!end) return tmp; result = br_strndup (tmp, end - tmp); free (tmp); if (!*result) { free (result); result = strdup ("/"); } return result; } /** * br_set_fallback_function: * func: A function to call to find the binary. * data: User data to pass to func. * * Sets a function to call to find the path to the binary, in * case "/proc/self/maps" can't be opened. The function set should * return a string that is safe to free with free(). */ void br_set_locate_fallback_func (br_locate_fallback_func func, void *data) { fallback_func = func; fallback_data = data; } #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _PREFIX_C */ link-grammar/link-grammar/idiom.c0000644000000000000000000002135612536650433014171 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include "error.h" /** * Returns TRUE if the string contains an underbar character. */ int contains_underbar(const char * s) { while(*s != '\0') { if (*s == '_') return TRUE; s++; } return FALSE; } /** * Returns FALSE if it is not a correctly formed idiom string. * Such a string is correct if it: * () contains no "." * () non-empty strings separated by _ */ static int is_idiom_string(const char * s) { size_t len; const char * t; for (t = s; *t != '\0'; t++) { if (*t == '.') return FALSE; } len = strlen(s); if ((s[0] == '_') || (s[len-1] == '_')) { return FALSE; } for (t = s; *t != '\0'; t++) { if ((*t == '_') && (*(t+1) == '_')) return FALSE; } return TRUE; } /** * return TRUE if the string s is a sequence of digits. */ static int is_number(const char *s) { int nb; while(*s != '\0') { nb = is_utf8_digit(s); if (!nb) return FALSE; s += nb; } return TRUE; } /** * If the string contains a single ".", and ends in ".Ix" where * x is a number, return x. Return -1 if not of this form. */ static int numberfy(const char * s) { for (; (*s != '\0') && (*s != '.'); s++) ; if (*s++ != '.') return -1; if (*s++ != 'I') return -1; if (!is_number(s)) return -1; return atoi(s); } /** * Look for words that end in ".Ix" where x is a number. * Return the largest x found. */ static int max_postfix_found(Dict_node * d) { int i, j; i = 0; while(d != NULL) { j = numberfy(d->string); if (j > i) i = j; d = d->right; } return i; } /** * build_idiom_word_name() -- return idiomized name of given string. * * Allocates string space and returns a pointer to it. * In this string is placed the idiomized name of the given string s. * This is the same as s, but with a postfix of ".Ix", where x is an * appropriate number. x is the minimum number that distinguishes * this word from others in the dictionary. */ static const char * build_idiom_word_name(Dictionary dict, const char * s) { char buff[2*MAX_WORD]; char *x; int count; Dict_node *dn = dictionary_lookup_list(dict, s); count = max_postfix_found(dn)+1; free_lookup_list(dn); x = buff; while((*s != '\0') && (*s != '.')) { *x = *s; x++; s++; } sprintf(x, ".I%d",count); return string_set_add(buff, dict->string_set); } /** * Tear the idiom string apart. * Put the parts into a list of Dict_nodes (connected by their right pointers) * Sets the string fields of these Dict_nodes pointing to the * fragments of the string s. Later these will be replaced by * correct names (with .Ix suffixes). * The list is reversed from the way they occur in the string. * A pointer to this list is returned. */ static Dict_node * make_idiom_Dict_nodes(Dictionary dict, const char * string) { Dict_node * dn, * dn_new; char * t, *s, *p; int more, sz; dn = NULL; sz = strlen(string)+1; p = s = (char *) xalloc(sz); strcpy(s, string); while (*s != '\0') { t = s; while((*s != '\0') && (*s != '_')) s++; if (*s == '_') { more = TRUE; *s = '\0'; } else { more = FALSE; } dn_new = (Dict_node *) xalloc(sizeof (Dict_node)); dn_new->right = dn; dn = dn_new; dn->string = string_set_add(t, dict->string_set); dn->file = NULL; if (more) s++; } xfree(p, sz); return dn; } static char current_name[] = "AAAAAAAA"; #define CN_size (sizeof(current_name)-1) static void increment_current_name(void) { int i, carry; i = CN_size-1; carry = 1; while (carry == 1) { current_name[i]++; if (current_name[i] == 'Z'+1) { current_name[i] = 'A'; carry = 1; } else { carry = 0; } i--; } } /** * Generate a new connector name obtained from the current_name. * allocate string space for it. * @return a pointer to connector name. */ static const char * generate_id_connector(Dictionary dict) { char buff[2*MAX_WORD]; unsigned int i; char * t; for (i=0; current_name[i] == 'A'; i++) ; /* i is now the number of characters of current_name to skip */ t = buff; /* All idiom connector names start with the two letters "ID" */ *t++ = 'I'; *t++ = 'D'; for (; i < CN_size; i++ ) { *t++ = current_name[i] ; } *t++ = '\0'; return string_set_add(buff, dict->string_set); } /** * Takes as input a pointer to a Dict_node. * The string of this Dict_node is an idiom string. * This string is torn apart, and its components are inserted into the * dictionary as special idiom words (ending in .I*, where * is a number). * The expression of this Dict_node (its node field) has already been * read and constructed. This will be used to construct the special idiom * expressions. * The given dict node is freed. The string is also freed. */ void insert_idiom(Dictionary dict, Dict_node * dn) { Exp * nc, * no, * n1; E_list *ell, *elr; const char * s; int s_length; Dict_node * dn_list, * xdn, * start_dn_list; no = dn->exp; s = dn->string; s_length = strlen(s); if (!is_idiom_string(s)) { prt_error("Warning: Word \"%s\" on line %d " "is not a correctly formed idiom string.\n" "\tThis word will be ignored\n", s, dict->line_number); xfree((char *)dn, sizeof (Dict_node)); return; } dn_list = start_dn_list = make_idiom_Dict_nodes(dict, s); xfree((char *)dn, sizeof (Dict_node)); if (dn_list->right == NULL) { prt_error("Fatal Error: Idiom string with only one connector -- should have been caught"); exit(1); } /* first make the nodes for the base word of the idiom (last word) */ /* note that the last word of the idiom is first in our list */ /* ----- this code just sets up the node fields of the dn_list ----*/ nc = Exp_create(dict); nc->u.string = generate_id_connector(dict); nc->dir = '-'; nc->multi = FALSE; nc->type = CONNECTOR_type; nc->cost = 0; n1 = Exp_create(dict); n1->u.l = ell = (E_list *) xalloc(sizeof(E_list)); ell->next = elr = (E_list *) xalloc(sizeof(E_list)); elr->next = NULL; ell->e = nc; elr->e = no; n1->type = AND_type; n1->cost = 0; dn_list->exp = n1; dn_list = dn_list->right; while(dn_list->right != NULL) { /* generate the expression for a middle idiom word */ n1 = Exp_create(dict); n1->u.string = NULL; n1->type = AND_type; n1->cost = 0; n1->u.l = ell = (E_list *) xalloc(sizeof(E_list)); ell->next = elr = (E_list *) xalloc(sizeof(E_list)); elr->next = NULL; nc = Exp_create(dict); nc->u.string = generate_id_connector(dict); nc->dir = '+'; nc->multi = FALSE; nc->type = CONNECTOR_type; nc->cost = 0; elr->e = nc; increment_current_name(); nc = Exp_create(dict); nc->u.string = generate_id_connector(dict); nc->dir = '-'; nc->multi = FALSE; nc->type = CONNECTOR_type; nc->cost = 0; ell->e = nc; dn_list->exp = n1; dn_list = dn_list->right; } /* now generate the last one */ nc = Exp_create(dict); nc->u.string = generate_id_connector(dict); nc->dir = '+'; nc->multi = FALSE; nc->type = CONNECTOR_type; nc->cost = 0; dn_list->exp = nc; increment_current_name(); /* ---- end of the code alluded to above ---- */ /* now its time to insert them into the dictionary */ dn_list = start_dn_list; while (dn_list != NULL) { xdn = dn_list->right; dn_list->left = dn_list->right = NULL; dn_list->string = build_idiom_word_name(dict, dn_list->string); dict->root = insert_dict(dict, dict->root, dn_list); dict->num_entries++; dn_list = xdn; } /* xfree((char *)s, s_length+1); strings are handled by string_set */ } /** * returns TRUE if this is a word ending in ".Ix", where x is a number. */ int is_idiom_word(const char * s) { return (numberfy(s) != -1) ; } #ifdef THIS_IS_NOT_USED /* returns TRUE if the list of words contains only words that are idiom words. This is useful, because under this condition you want to be able to insert the word anyway, as long as it doesn't match exactly. */ int only_idiom_words(Dict_node * dn) { while(dn != NULL) { if (!is_idiom_word(dn->string)) return FALSE; dn = dn->right; } return TRUE; } #endif link-grammar/link-grammar/preparation.c0000644000000000000000000002731212536650433015412 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include "disjunct-utils.h" void free_deletable(Sentence sent) { int w; if (sent->dptr != NULL) { for (w = 0; w <= sent->length; w++) { xfree((char *)sent->dptr[w], sizeof(char) * (sent->length + 1)); } xfree((char *) sent->dptr, (sent->length + 1)*sizeof(char *)); sent->dptr = NULL; sent->deletable = NULL; } } /** * Returns true if the range lw...rw inclusive contains a conjunction */ static int conj_in_range(Sentence sent, int lw, int rw) { for (;lw < rw+1; lw++) { if (sent->is_conjunction[lw]) return TRUE; } return FALSE; } /** * Initialize the array deletable[i][j] to indicate if the words * i+1...j-1 could be non existant in one of the multiple linkages. This * array is used in conjunction_prune and power_prune. Regions of length * 0 are always deletable. A region of length two with a conjunction at * one end is always deletable. Another observation is that for the * comma to form the right end of a deletable region, it must be the case * that there is a conjunction to the right of the comma. Also, when * considering deletable regions with a comma on their left sides, there * must be a conjunction inside the region to be deleted. Finally, the * words "either", "neither", "both", "not" and "not only" are all * deletable. */ void build_deletable(Sentence sent, int has_conjunction) { int i,j,k; free_deletable(sent); sent->dptr = (char **) xalloc((sent->length + 1) * sizeof(char *)); sent->deletable = sent->dptr + 1; /* we need to be able to access the [-1] position in this array */ for (i = -1; ilength; i++) { sent->deletable[i] = (char *) xalloc((sent->length+1) * sizeof(char)); /* the +1 is to allow us to have the info for the last word read the comment above */ for (j=0; j<= sent->length; j++) { if (j == i+1) { sent->deletable[i][j] = TRUE; } else if (sent->null_links) { sent->deletable[i][j] = TRUE; } else if (!has_conjunction) { sent->deletable[i][j] = FALSE; } else if ((j > i + 2) && (sent->is_conjunction[i+1] || sent->is_conjunction[j-1] || (strcmp(",", sent->word[i+1].string) == 0 && conj_in_range(sent, i+2, j-1)) || (strcmp(",",sent->word[j-1].string) == 0 && conj_in_range(sent, j, sent->length - 1)))) { sent->deletable[i][j] = TRUE; } else if (j > i) { for (k=i+1; kword[k].string) == 0) || (strcmp("neither", sent->word[k].string) == 0) || (strcmp("both", sent->word[k].string) == 0) || (strcmp("not", sent->word[k].string) == 0)) continue; if ((strcmp("only", sent->word[k].string)==0) && (k > i+1) && (strcmp("not", sent->word[k-1].string)==0)) continue; break; } sent->deletable[i][j] = (k == j); } else { sent->deletable[i][j] = FALSE; } } } } void free_effective_dist(Sentence sent) { int w; if (sent->effective_dist != NULL) { for (w=0; wlength; w++) { xfree((char *)sent->effective_dist[w],sizeof(char)*(sent->length+1)); } xfree((char *) sent->effective_dist, sizeof(char *)*(sent->length)); sent->effective_dist = NULL; } } /** * The "effective distance" between two words is the actual distance minus * the largest deletable region strictly between the two words. If the * effective distance between two words is greater than a connector's max * link length, then that connector cannot be satisfied by linking these * two words. * * [Note: The effective distance is not monotically increasing as you move * away from a word.] * * This function creates effective_dist[][]. It assumes that deleteble[][] * has already been computed. * * Dynamic programming is used to compute this. The order used is smallest * region to largest. * * Just as deletable[i][j] is constructed for j=N_words (which is one * off the end of the sentence) we do that for effective_dist[][]. */ void build_effective_dist(Sentence sent, int has_conjunction) { int i, j, diff; free_effective_dist(sent); sent->effective_dist = (char **) xalloc((sent->length)*sizeof(char *)); for (i=0; ilength; i++) { sent->effective_dist[i] = (char *) xalloc(sent->length+1); } for (i=0; ilength; i++) { /* Fill in the silly part */ for (j=0; j<=i; j++) { sent->effective_dist[i][j] = j-i; } } /* what is the rationale for ignoring the effective_dist if null links are allowed? */ if (sent->null_links) { for (i=0; ilength; i++) { for (j=0; j<=sent->length; j++) { sent->effective_dist[i][j] = j-i; } } } else { for (diff = 1; diff < sent->length; diff++) { for (i=0; i+diff <= sent->length; i++) { j = i+diff; if (sent->deletable[i][j]) { /* note that deletable[x][x+1] is TRUE */ sent->effective_dist[i][j] = 1; } else { sent->effective_dist[i][j] = 1 + MIN(sent->effective_dist[i][j-1],sent->effective_dist[i+1][j]); } } } /* now when you link to a conjunction, your effective length is 1 */ for (i=0; ilength; i++) { for (j=i+1; jlength; j++) { if (sent->is_conjunction[i] || sent->is_conjunction[j]) sent->effective_dist[i][j] = 1; } } } /* sent->effective_dist[i][i] should be 0 */ /* for (j=0; j<=sent->length; j++) { printf("%4d", j); } printf("\n"); for (i=0; ilength; i++) { for (j=0; j<=sent->length; j++) { printf("%4d", sent->effective_dist[i][j]); } printf("\n"); } */ } /** * Installs all the special fat disjuncts on all of the words of the * sentence */ void install_fat_connectors(Sentence sent) { int i; for (i=0; ilength; i++) { if (sent->is_conjunction[i]) { sent->word[i].d = catenate_disjuncts(sent->word[i].d, build_AND_disjunct_list(sent, sent->word[i].string)); } else { sent->word[i].d = catenate_disjuncts(sent->word[i].d, explode_disjunct_list(sent, sent->word[i].d)); if (strcmp(sent->word[i].string, ",") == 0) { sent->word[i].d = catenate_disjuncts(sent->word[i].d, build_COMMA_disjunct_list(sent)); } } } } static void set_connector_list_length_limit(Sentence sent, Connector *c, Connector_set *conset, int short_len, Parse_Options opts) { for (; c!=NULL; c=c->next) { if (parse_options_get_all_short_connectors(opts)) { c->length_limit = short_len; } else if (conset == NULL || match_in_connector_set(sent, conset, c, '+')) { c->length_limit = UNLIMITED_LEN; } else { c->length_limit = short_len; } } } static void set_connector_length_limits(Sentence sent, Parse_Options opts) { int i; int len; Disjunct *d; len = opts->short_length; if (len > UNLIMITED_LEN) len = UNLIMITED_LEN; for (i=0; ilength; i++) { for (d = sent->word[i].d; d != NULL; d = d->next) { set_connector_list_length_limit(sent, d->left, sent->dict->unlimited_connector_set, len, opts); set_connector_list_length_limit(sent, d->right, sent->dict->unlimited_connector_set, len, opts); } } } void free_sentence_expressions(Sentence sent) { int i; for (i=0; ilength; i++) { free_X_nodes(sent->word[i].x); } } /** * Return true if the sentence contains a conjunction. Assumes * is_conjunction[] has been initialized. * * This routine has been added to the public API as of version 4.7.0, * as it is required to determine whether a fat linkage might restult * during parsing. This is needed to optimize the optioanl use of fat * links. The goal is to eventually deprecate fat linkages entirely; * this routine is needed in the transition phase. */ int sentence_contains_conjunction(Sentence sent) { int w; if (NULL == sent->is_conjunction) return FALSE; for (w=0; wlength; w++) { if (sent->is_conjunction[w]) return TRUE; } return FALSE; } void free_sentence_disjuncts(Sentence sent) { int i; for (i=0; ilength; ++i) { free_disjuncts(sent->word[i].d); sent->word[i].d = NULL; } if (sentence_contains_conjunction(sent)) free_AND_tables(sent); } /** * Assumes that the sentence expression lists have been generated. * This does all the necessary pruning and building of fat-link structures. */ void prepare_to_parse(Sentence sent, Parse_Options opts) { int i, has_conjunction; build_sentence_disjuncts(sent, opts->disjunct_cost); if (verbosity > 2) { printf("After expanding expressions into disjuncts:"); print_disjunct_counts(sent); } print_time(opts, "Built disjuncts"); for (i=0; ilength; i++) { sent->word[i].d = eliminate_duplicate_disjuncts(sent->word[i].d); } print_time(opts, "Eliminated duplicate disjuncts"); if (verbosity > 2) { printf("\nAfter expression pruning and duplicate elimination:\n"); print_disjunct_counts(sent); } sent->null_links = (opts->min_null_count > 0); if (opts->use_fat_links) { has_conjunction = sentence_contains_conjunction(sent); } else { has_conjunction = FALSE; } /* The deletable region depends on whether null links are in use; * with null_links everything is deletable. Thus, this processing * cannot be done earlier than here. */ set_connector_length_limits(sent, opts); build_deletable(sent, has_conjunction); build_effective_dist(sent, has_conjunction); init_count(sent); if (!has_conjunction) { pp_and_power_prune(sent, RUTHLESS, opts); } else { pp_and_power_prune(sent, GENTLE, opts); /* if (verbosity > 2) { printf("\nAfter Gentle power pruning:\n"); print_disjunct_counts(sent); } */ /* already reported -- print_time(opts, "Finished gentle power pruning"); */ conjunction_prune(sent, opts); if (verbosity > 2) { printf("\nAfter conjunction pruning:\n"); print_disjunct_counts(sent); } print_time(opts, "Done conjunction pruning"); build_conjunction_tables(sent); install_fat_connectors(sent); install_special_conjunctive_connectors(sent); if (verbosity > 2) { printf("After conjunctions, disjuncts counts:\n"); print_disjunct_counts(sent); } set_connector_length_limits(sent, opts); /* have to do this again cause of the * new fat connectors and disjuncts */ print_time(opts, "Constructed fat disjuncts"); prune(sent); print_time(opts, "Pruned fat disjuncts"); for (i=0; ilength; i++) { sent->word[i].d = eliminate_duplicate_disjuncts(sent->word[i].d); } if (verbosity > 2) { printf("After pruning and duplicate elimination:\n"); print_disjunct_counts(sent); } print_time(opts, "Eliminated duplicate disjuncts (again)"); if (verbosity > 2) print_AND_statistics(sent); power_prune(sent, RUTHLESS, opts); } free_count(sent); /* if (verbosity > 2) { printf("\nAfter RUTHLESS power-pruning:\n"); print_disjunct_counts(sent); } */ /* print time for power pruning used to be here */ /* now done in power_prune itself */ print_time(opts, "Initialized fast matcher and hash table"); } link-grammar/link-grammar/link-grammar.def0000644000000000000000000001155312536650433015763 0ustar linkgrammar_get_version linkgrammar_get_dict_version dictionary_create dictionary_create_lang dictionary_create_default_lang dictionary_delete dictionary_get_max_cost dictionary_get_data_dir dictionary_set_data_dir dictionary_is_entity dictionary_is_past_tense_form parse_options_create parse_options_delete parse_options_set_verbosity parse_options_get_verbosity parse_options_set_linkage_limit parse_options_get_linkage_limit parse_options_set_disjunct_cost parse_options_set_disjunct_costf parse_options_get_disjunct_cost parse_options_get_disjunct_costf parse_options_set_min_null_count parse_options_get_min_null_count parse_options_set_max_null_count parse_options_get_max_null_count parse_options_set_null_block parse_options_get_null_block parse_options_set_islands_ok parse_options_get_islands_ok parse_options_set_spell_guess parse_options_get_spell_guess parse_options_set_short_length parse_options_get_short_length parse_options_set_max_memory parse_options_get_max_memory parse_options_set_max_sentence_length parse_options_get_max_sentence_length parse_options_set_max_parse_time parse_options_get_max_parse_time parse_options_set_cost_model_type parse_options_get_cost_model_type parse_options_set_use_fat_links parse_options_get_use_fat_links parse_options_set_use_sat_parser parse_options_get_use_sat_parser parse_options_timer_expired parse_options_memory_exhausted parse_options_resources_exhausted parse_options_set_screen_width parse_options_get_screen_width parse_options_set_allow_null parse_options_get_allow_null parse_options_set_use_cluster_disjuncts parse_options_get_use_cluster_disjuncts parse_options_set_display_walls parse_options_get_display_walls parse_options_set_all_short_connectors parse_options_get_all_short_connectors parse_options_reset_resources parse_options_set_batch_mode parse_options_get_batch_mode parse_options_set_panic_mode parse_options_get_panic_mode parse_options_set_display_on parse_options_get_display_on parse_options_set_display_postscript parse_options_get_display_postscript parse_options_set_display_constituents parse_options_get_display_constituents parse_options_set_display_bad parse_options_get_display_bad parse_options_set_display_disjuncts parse_options_get_display_disjuncts parse_options_set_display_links parse_options_get_display_links parse_options_set_display_senses parse_options_get_display_senses parse_options_set_display_union parse_options_get_display_union parse_options_set_echo_on parse_options_get_echo_on sentence_create sentence_delete sentence_split sentence_parse sentence_length sentence_get_word sentence_null_count sentence_num_linkages_found sentence_num_valid_linkages sentence_num_linkages_post_processed sentence_num_thin_linkages sentence_num_violations sentence_and_cost sentence_disjunct_cost sentence_link_cost sentence_get_nth_word sentence_nth_word_has_disjunction sentence_contains_conjunction linkage_create linkage_get_current_sublinkage linkage_set_current_sublinkage linkage_delete linkage_get_sentence linkage_get_num_sublinkages linkage_get_num_words linkage_get_num_links linkage_get_link_lword linkage_get_link_rword linkage_get_link_length linkage_get_link_label linkage_get_link_llabel linkage_get_link_rlabel linkage_get_link_num_domains linkage_get_link_domain_names linkage_get_words linkage_get_disjunct_str linkage_get_disjunct_cost linkage_get_disjunct_corpus_score linkage_get_word linkage_is_fat linkage_print_disjuncts linkage_free_disjuncts linkage_print_links_and_domains linkage_free_links_and_domains linkage_print_senses linkage_free_senses linkage_print_constituent_tree linkage_free_constituent_tree_str linkage_print_postscript linkage_free_postscript linkage_print_diagram linkage_free_diagram linkage_compute_union linkage_unused_word_cost linkage_disjunct_cost linkage_and_cost linkage_corpus_cost linkage_link_cost linkage_is_canonical linkage_is_improper linkage_has_inconsistent_domains linkage_get_violation_name post_process_open post_process_close linkage_post_process linkage_constituent_tree linkage_free_constituent_tree linkage_constituent_node_get_label linkage_constituent_node_get_child linkage_constituent_node_get_next linkage_constituent_node_get_start linkage_constituent_node_get_end issue_special_command lperrno lperrmsg lperror_clear prt_error parse_options_print_total_time extract_thin_linkage xfree count_set_effective_distance intersect_strings xalloc post_process_match match_in_connector_set build_deletable exalloc analyze_fat_linkage init_connector set_has_fat_down extract_fat_linkage analyze_thin_linkage build_effective_dist prune_match lg_strlcpy lg_compute_disjunct_strings lg_expand_disjunct_list object_open do_match dictionary_lookup_list build_disjuncts_for_dict_node free_disjuncts eliminate_duplicate_disjuncts catenate_disjuncts count_disjuncts print_one_disjunct build_disjuncts_for_X_node sentence_contains_conjunction init_count parse_info_new free_parse_info connector_new free_connectors link-grammar/link-grammar/resources.h0000644000000000000000000000254512536650433015106 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ void print_time(Parse_Options opts, const char * s); /* void print_total_time(Parse_Options opts); */ void print_total_space(Parse_Options opts); void resources_reset(Resources r); void resources_reset_space(Resources r); int resources_timer_expired(Resources r); int resources_memory_exhausted(Resources r); int resources_exhausted(Resources r); Resources resources_create(void); void resources_delete(Resources ti); link-grammar/link-grammar/pp_knowledge.c0000644000000000000000000003154312536650433015545 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ /*********************************************************************** pp_knowledge.c 7/97 Contains rules and associated information for post processing. This information is supplied in a human-readable file and is parsed by pp_lexer.h ***********************************************************************/ #include #include "error.h" #include "utilities.h" #define PP_MAX_UNIQUE_LINK_NAMES 1024 /* just needs to be approximate */ /****************** non-exported functions ***************************/ static void check_domain_is_legal(const char *p) { if (0x0 != p[1]) { prt_error("Fatal Error: post_process(): Domain (%s) must be a single character", p); exit(1); } } static void initialize_set_of_links_starting_bounded_domain(pp_knowledge *k) { int i,j,d,domain_of_rule; k->set_of_links_starting_bounded_domain = pp_linkset_open(PP_MAX_UNIQUE_LINK_NAMES); for (i=0; k->bounded_rules[i].msg!=0; i++) { domain_of_rule = k->bounded_rules[i].domain; for (j=0; (d=(k->starting_link_lookup_table[j].domain))!=-1; j++) if (d==domain_of_rule) pp_linkset_add(k->set_of_links_starting_bounded_domain, k->starting_link_lookup_table[j].starting_link); } } /** * Read table of [link, domain type]. * This tells us what domain type each link belongs to. * This lookup table *must* be defined in the knowledge file. */ static void read_starting_link_table(pp_knowledge *k) { const char *p; const char label[] = "STARTING_LINK_TYPE_TABLE"; int i, n_tokens; if (!pp_lexer_set_label(k->lt, label)) { prt_error("Fatal error: post_process: Couldn't find starting link table %s",label); exit(1); } n_tokens = pp_lexer_count_tokens_of_label(k->lt); if (n_tokens %2) { prt_error("Fatal error: post_process: Link table must have format [ ]+"); exit(1); } k->nStartingLinks = n_tokens/2; k->starting_link_lookup_table = (StartingLinkAndDomain*) xalloc((1+k->nStartingLinks)*sizeof(StartingLinkAndDomain)); for (i=0; inStartingLinks; i++) { /* read the starting link itself */ k->starting_link_lookup_table[i].starting_link = string_set_add(pp_lexer_get_next_token_of_label(k->lt),k->string_set); /* read the domain type of the link */ p = pp_lexer_get_next_token_of_label(k->lt); check_domain_is_legal(p); k->starting_link_lookup_table[i].domain = (int) p[0]; } /* end sentinel */ k->starting_link_lookup_table[k->nStartingLinks].domain = -1; } static pp_linkset *read_link_set(pp_knowledge *k, const char *label, String_set *ss) { /* read link set, marked by label in knowledge file, into a set of links whose handle is returned. Return NULL if link set not defined in file, in which case the set is taken to be empty. */ int n_strings,i; pp_linkset *ls; if (!pp_lexer_set_label(k->lt, label)) { if (verbosity>0) printf("PP warning: Link set %s not defined: assuming empty.\n",label); n_strings = 0; } else n_strings = pp_lexer_count_tokens_of_label(k->lt); ls = pp_linkset_open(n_strings); for (i=0; ilt),ss)); return ls; } static void read_link_sets(pp_knowledge *k) { String_set *ss = k->string_set; /* shorthand */ k->domain_starter_links =read_link_set(k,"DOMAIN_STARTER_LINKS",ss); k->urfl_domain_starter_links=read_link_set(k,"URFL_DOMAIN_STARTER_LINKS",ss); k->domain_contains_links =read_link_set(k,"DOMAIN_CONTAINS_LINKS",ss); k->ignore_these_links =read_link_set(k,"IGNORE_THESE_LINKS",ss); k->restricted_links =read_link_set(k,"RESTRICTED_LINKS",ss); k->must_form_a_cycle_links =read_link_set(k,"MUST_FORM_A_CYCLE_LINKS",ss); k->urfl_only_domain_starter_links= read_link_set(k,"URFL_ONLY_DOMAIN_STARTER_LINKS",ss); k->left_domain_starter_links=read_link_set(k,"LEFT_DOMAIN_STARTER_LINKS",ss); } static void free_link_sets(pp_knowledge *k) { pp_linkset_close(k->domain_starter_links); pp_linkset_close(k->urfl_domain_starter_links); pp_linkset_close(k->domain_contains_links); pp_linkset_close(k->ignore_these_links); pp_linkset_close(k->restricted_links); pp_linkset_close(k->must_form_a_cycle_links); pp_linkset_close(k->urfl_only_domain_starter_links); pp_linkset_close(k->left_domain_starter_links); } static void read_connected_rule(pp_knowledge *k, const char *label) { /* This is a degenerate class of rules: either a single rule asserting connectivity is there, or it isn't. The only information in the rule (besides its presence) is the error message to display if the rule is violated */ k->connected_rules = (pp_rule *) xalloc (sizeof(pp_rule)); if (!pp_lexer_set_label(k->lt, label)) { k->connected_rules[0].msg=0; /* rule not there */ if (verbosity>0) printf("PP warning: Not using 'link is connected' rule\n"); return; } if (pp_lexer_count_tokens_of_label(k->lt)>1) { prt_error("Fatal Error: post_process(): Invalid syntax in %s", label); exit(1); } k->connected_rules[0].msg = string_set_add(pp_lexer_get_next_token_of_label(k->lt), k->string_set); } static void read_form_a_cycle_rules(pp_knowledge *k, const char *label) { int n_commas, n_tokens, r, i; pp_linkset *lsHandle; const char **tokens; if (!pp_lexer_set_label(k->lt, label)) { k->n_form_a_cycle_rules = 0; if (verbosity>0) printf("PP warning: Not using any 'form a cycle' rules\n"); } else { n_commas = pp_lexer_count_commas_of_label(k->lt); k->n_form_a_cycle_rules = (n_commas + 1)/2; } k->form_a_cycle_rules= (pp_rule*) xalloc ((1+k->n_form_a_cycle_rules)*sizeof(pp_rule)); for (r=0; rn_form_a_cycle_rules; r++) { /* read link set */ tokens = pp_lexer_get_next_group_of_tokens_of_label(k->lt, &n_tokens); if (n_tokens <= 0) { prt_error("Fatal Error: syntax error in knowledge file"); exit(1); } lsHandle = pp_linkset_open(n_tokens); for (i=0; istring_set)); k->form_a_cycle_rules[r].link_set=lsHandle; /* read error message */ tokens = pp_lexer_get_next_group_of_tokens_of_label(k->lt, &n_tokens); if (n_tokens > 1) { prt_error("Fatal Error: post_process: Invalid syntax (rule %i of %s)",r+1,label); exit(1); } k->form_a_cycle_rules[r].msg=string_set_add(tokens[0],k->string_set); } /* sentinel entry */ k->form_a_cycle_rules[k->n_form_a_cycle_rules].msg = 0; } static void read_bounded_rules(pp_knowledge *k, const char *label) { const char **tokens; int n_commas, n_tokens, r; if (!pp_lexer_set_label(k->lt, label)) { k->n_bounded_rules = 0; if (verbosity>0) printf("PP warning: Not using any 'bounded' rules\n"); } else { n_commas = pp_lexer_count_commas_of_label(k->lt); k->n_bounded_rules = (n_commas + 1)/2; } k->bounded_rules = (pp_rule*) xalloc ((1+k->n_bounded_rules)*sizeof(pp_rule)); for (r=0; rn_bounded_rules; r++) { /* read domain */ tokens = pp_lexer_get_next_group_of_tokens_of_label(k->lt, &n_tokens); if (n_tokens!=1) { prt_error("Fatal Error: post_process: Invalid syntax: rule %i of %s",r+1,label); exit(1); } k->bounded_rules[r].domain = (int) tokens[0][0]; /* read error message */ tokens = pp_lexer_get_next_group_of_tokens_of_label(k->lt, &n_tokens); if (n_tokens!=1) { prt_error("Fatal Error: post_process: Invalid syntax: rule %i of %s",r+1,label); exit(1); } k->bounded_rules[r].msg = string_set_add(tokens[0], k->string_set); } /* sentinel entry */ k->bounded_rules[k->n_bounded_rules].msg = 0; } static void read_contains_rules(pp_knowledge *k, const char *label, pp_rule **rules, int *nRules) { /* Reading the 'contains_one_rules' and reading the 'contains_none_rules' into their respective arrays */ int n_commas, n_tokens, i, r; const char *p; const char **tokens; if (!pp_lexer_set_label(k->lt, label)) { *nRules = 0; if (verbosity>0) printf("PP warning: Not using any %s rules\n", label); } else { n_commas = pp_lexer_count_commas_of_label(k->lt); *nRules = (n_commas + 1)/3; } *rules = (pp_rule*) xalloc ((1+*nRules)*sizeof(pp_rule)); for (r=0; r<*nRules; r++) { /* first read link */ tokens = pp_lexer_get_next_group_of_tokens_of_label(k->lt, &n_tokens); if (n_tokens>1) { prt_error("Fatal Error: post_process: Invalid syntax in %s (rule %i)",label,r+1); exit(1); } (*rules)[r].selector = string_set_add(tokens[0], k->string_set); /* read link set */ tokens = pp_lexer_get_next_group_of_tokens_of_label(k->lt, &n_tokens); (*rules)[r].link_set = pp_linkset_open(n_tokens); (*rules)[r].link_set_size = n_tokens; (*rules)[r].link_array = (const char **) xalloc((1+n_tokens)*sizeof(const char*)); for (i=0; istring_set); pp_linkset_add((*rules)[r].link_set, p); (*rules)[r].link_array[i] = p; } (*rules)[r].link_array[i]=0; /* NULL-terminator */ /* read error message */ tokens = pp_lexer_get_next_group_of_tokens_of_label(k->lt, &n_tokens); if (n_tokens>1) { prt_error("Fatal Error: post_process: Invalid syntax in %s (rule %i)",label,r+1); exit(1); } (*rules)[r].msg = string_set_add(tokens[0], k->string_set); } /* sentinel entry */ (*rules)[*nRules].msg = 0; } static void read_rules(pp_knowledge *k) { read_form_a_cycle_rules(k, "FORM_A_CYCLE_RULES"); read_connected_rule(k, "CONNECTED_RULES"); read_bounded_rules(k, "BOUNDED_RULES"); read_contains_rules(k, "CONTAINS_ONE_RULES" , &(k->contains_one_rules), &(k->n_contains_one_rules)); read_contains_rules(k, "CONTAINS_NONE_RULES", &(k->contains_none_rules), &(k->n_contains_none_rules)); } static void free_rules(pp_knowledge *k) { int r; int rs=sizeof(pp_rule); pp_rule *rule; for (r=0; k->contains_one_rules[r].msg!=0; r++) { rule = &(k->contains_one_rules[r]); /* shorthand */ xfree((void*) rule->link_array, (1+rule->link_set_size)*sizeof(char*)); pp_linkset_close(rule->link_set); } for (r=0; k->contains_none_rules[r].msg!=0; r++) { rule = &(k->contains_none_rules[r]); /* shorthand */ xfree((void *)rule->link_array, (1+rule->link_set_size)*sizeof(char*)); pp_linkset_close(rule->link_set); } for (r=0; rn_form_a_cycle_rules; r++) pp_linkset_close(k->form_a_cycle_rules[r].link_set); xfree((void*)k->bounded_rules, rs*(1+k->n_bounded_rules)); xfree((void*)k->connected_rules, rs); xfree((void*)k->form_a_cycle_rules, rs*(1+k->n_form_a_cycle_rules)); xfree((void*)k->contains_one_rules, rs*(1+k->n_contains_one_rules)); xfree((void*)k->contains_none_rules, rs*(1+k->n_contains_none_rules)); } /********************* exported functions ***************************/ pp_knowledge *pp_knowledge_open(const char *path) { /* read knowledge from disk into pp_knowledge */ FILE *f = dictopen(path, "r"); pp_knowledge *k = (pp_knowledge *) xalloc (sizeof(pp_knowledge)); if (!f) { prt_error("Fatal Error: Couldn't find post-process knowledge file %s", path); exit(1); } k->lt = pp_lexer_open(f); fclose(f); k->string_set = string_set_create(); k->path = string_set_add(path, k->string_set); read_starting_link_table(k); read_link_sets(k); read_rules(k); initialize_set_of_links_starting_bounded_domain(k); return k; } void pp_knowledge_close(pp_knowledge *k) { /* clear the memory taken up by k */ xfree((void*)k->starting_link_lookup_table, ((1+k->nStartingLinks)*sizeof(StartingLinkAndDomain))); free_link_sets(k); free_rules(k); pp_linkset_close(k->set_of_links_starting_bounded_domain); string_set_delete(k->string_set); pp_lexer_close(k->lt); xfree((void*)k, sizeof(pp_knowledge)); } link-grammar/link-grammar/link-includes.h0000644000000000000000000004154212536650433015635 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #ifndef _LINKINCLUDESH_ #define _LINKINCLUDESH_ #include LINK_BEGIN_DECLS /********************************************************************** * * System initialization * ***********************************************************************/ typedef struct Dictionary_s * Dictionary; link_public_api(const char *) linkgrammar_get_version(void); link_public_api(const char *) linkgrammar_get_dict_version(Dictionary); /********************************************************************** * * Functions to manipulate Dictionaries * ***********************************************************************/ link_public_api(Dictionary) dictionary_create(const char * dict_name, const char * pp_name, const char * cons_name, const char * affix_name); link_public_api(Dictionary) dictionary_create_lang(const char * lang); link_public_api(Dictionary) dictionary_create_default_lang(void); link_public_api(int) dictionary_delete(Dictionary dict); link_public_api(int) dictionary_get_max_cost(Dictionary dict); link_public_api(void) dictionary_set_data_dir(const char * path); link_public_api(char *) dictionary_get_data_dir(void); link_public_api(int) dictionary_is_past_tense_form(Dictionary dict, const char * str); link_public_api(int) dictionary_is_entity(Dictionary dict, const char * str); /********************************************************************** * * Functions to manipulate Parse Options * ***********************************************************************/ typedef struct Parse_Options_s * Parse_Options; link_public_api(Parse_Options) parse_options_create(void); link_public_api(int) parse_options_delete(Parse_Options opts); link_public_api(void) parse_options_set_verbosity(Parse_Options opts, int verbosity); link_public_api(int) parse_options_get_verbosity(Parse_Options opts); link_public_api(void) parse_options_set_linkage_limit(Parse_Options opts, int linkage_limit); link_public_api(int) parse_options_get_linkage_limit(Parse_Options opts); link_public_api(void) parse_options_set_disjunct_cost(Parse_Options opts, int disjunct_cost); link_public_api(void) parse_options_set_disjunct_costf(Parse_Options opts, float disjunct_cost); link_public_api(int) parse_options_get_disjunct_cost(Parse_Options opts); link_public_api(float) parse_options_get_disjunct_costf(Parse_Options opts); link_public_api(void) parse_options_set_min_null_count(Parse_Options opts, int null_count); link_public_api(int) parse_options_get_min_null_count(Parse_Options opts); link_public_api(void) parse_options_set_max_null_count(Parse_Options opts, int null_count); link_public_api(int) parse_options_get_max_null_count(Parse_Options opts); link_public_api(void) parse_options_set_null_block(Parse_Options opts, int null_block); link_public_api(int) parse_options_get_null_block(Parse_Options opts); link_public_api(void) parse_options_set_islands_ok(Parse_Options opts, int islands_ok); link_public_api(int) parse_options_get_islands_ok(Parse_Options opts); link_public_api(void) parse_options_set_spell_guess(Parse_Options opts, int spell_guess); link_public_api(int) parse_options_get_spell_guess(Parse_Options opts); link_public_api(void) parse_options_set_short_length(Parse_Options opts, int short_length); link_public_api(int) parse_options_get_short_length(Parse_Options opts); link_public_api(void) parse_options_set_max_memory(Parse_Options opts, int mem); link_public_api(int) parse_options_get_max_memory(Parse_Options opts); link_public_api(void) parse_options_set_max_sentence_length(Parse_Options opts, int len); link_public_api(int) parse_options_get_max_sentence_length(Parse_Options opts); link_public_api(void) parse_options_set_max_parse_time(Parse_Options opts, int secs); link_public_api(int) parse_options_get_max_parse_time(Parse_Options opts); link_public_api(void) parse_options_set_cost_model_type(Parse_Options opts, int cm); link_public_api(int) parse_options_get_cost_model_type(Parse_Options opts); link_public_api(void) parse_options_set_use_fat_links(Parse_Options opts, int use_fat_links); link_public_api(int) parse_options_get_use_fat_links(Parse_Options opts); link_public_api(void) parse_options_set_use_sat_parser(Parse_Options opts, int use_sat_solver); link_public_api(int) parse_options_get_use_sat_parser(Parse_Options opts); link_public_api(int) parse_options_timer_expired(Parse_Options opts); link_public_api(int) parse_options_memory_exhausted(Parse_Options opts); link_public_api(int) parse_options_resources_exhausted(Parse_Options opts); link_public_api(void) parse_options_set_screen_width(Parse_Options opts, int val); link_public_api(int) parse_options_get_screen_width(Parse_Options opts); link_public_api(void) parse_options_set_allow_null(Parse_Options opts, int val); link_public_api(int) parse_options_get_allow_null(Parse_Options opts); link_public_api(void) parse_options_set_use_cluster_disjuncts(Parse_Options opts, int val); link_public_api(int) parse_options_get_use_cluster_disjuncts(Parse_Options opts); link_public_api(void) parse_options_set_display_walls(Parse_Options opts, int val); link_public_api(int) parse_options_get_display_walls(Parse_Options opts); link_public_api(void) parse_options_set_all_short_connectors(Parse_Options opts, int val); link_public_api(int) parse_options_get_all_short_connectors(Parse_Options opts); link_public_api(void) parse_options_reset_resources(Parse_Options opts); /********************************************************************** * * The following Parse_Options functions do not directly affect the * operation of the parser, but they can be useful for organizing the * search, or displaying the results. They were included as switches for * convenience in implementing the "standard" version of the link parser * using the API. * ***********************************************************************/ link_public_api(void) parse_options_set_batch_mode(Parse_Options opts, int val); link_public_api(int) parse_options_get_batch_mode(Parse_Options opts); link_public_api(void) parse_options_set_panic_mode(Parse_Options opts, int val); link_public_api(int) parse_options_get_panic_mode(Parse_Options opts); link_public_api(void) parse_options_set_display_on(Parse_Options opts, int val); link_public_api(int) parse_options_get_display_on(Parse_Options opts); link_public_api(void) parse_options_set_display_postscript(Parse_Options opts, int val); link_public_api(int) parse_options_get_display_postscript(Parse_Options opts); link_public_api(void) parse_options_set_display_constituents(Parse_Options opts, int val); link_public_api(int) parse_options_get_display_constituents(Parse_Options opts); link_public_api(void) parse_options_set_display_bad(Parse_Options opts, int val); link_public_api(int) parse_options_get_display_bad(Parse_Options opts); link_public_api(void) parse_options_set_display_disjuncts(Parse_Options opts, int val); link_public_api(int) parse_options_get_display_disjuncts(Parse_Options opts); link_public_api(void) parse_options_set_display_links(Parse_Options opts, int val); link_public_api(int) parse_options_get_display_links(Parse_Options opts); link_public_api(void) parse_options_set_display_senses(Parse_Options opts, int val); link_public_api(int) parse_options_get_display_senses(Parse_Options opts); link_public_api(void) parse_options_set_display_union(Parse_Options opts, int val); link_public_api(int) parse_options_get_display_union(Parse_Options opts); link_public_api(void) parse_options_set_echo_on(Parse_Options opts, int val); link_public_api(int) parse_options_get_echo_on(Parse_Options opts); /********************************************************************** * * Functions to manipulate Sentences * ***********************************************************************/ typedef struct Sentence_s * Sentence; link_public_api(Sentence) sentence_create(const char *input_string, Dictionary dict); link_public_api(void) sentence_delete(Sentence sent); link_public_api(int) sentence_split(Sentence sent, Parse_Options opts); link_public_api(int) sentence_parse(Sentence sent, Parse_Options opts); link_public_api(int) sentence_length(Sentence sent); link_public_api(const char *) sentence_get_word(Sentence sent, int wordnum); link_public_api(int) sentence_null_count(Sentence sent); link_public_api(int) sentence_num_linkages_found(Sentence sent); link_public_api(int) sentence_num_valid_linkages(Sentence sent); link_public_api(int) sentence_num_linkages_post_processed(Sentence sent); link_public_api(int) sentence_num_thin_linkages(Sentence sent); link_public_api(int) sentence_num_violations(Sentence sent, int i); link_public_api(int) sentence_and_cost(Sentence sent, int i); link_public_api(int) sentence_disjunct_cost(Sentence sent, int i); link_public_api(int) sentence_link_cost(Sentence sent, int i); link_public_api(int) sentence_contains_conjunction(Sentence sent); /********************************************************************** * * Functions that create and manipulate Linkages. * When a Linkage is requested, the user is given a * copy of all of the necessary information, and is responsible * for freeing up the storage when he/she is finished, using * the routines provided below. * ***********************************************************************/ typedef struct Linkage_s * Linkage; link_public_api(Linkage) linkage_create(int index, Sentence sent, Parse_Options opts); link_public_api(int) linkage_get_current_sublinkage(Linkage linkage); link_public_api(int) linkage_set_current_sublinkage(Linkage linkage, int index); link_public_api(void) linkage_delete(Linkage linkage); link_public_api(Sentence) linkage_get_sentence(Linkage linkage); link_public_api(int) linkage_get_num_sublinkages(Linkage linkage); link_public_api(int) linkage_get_num_words(Linkage linkage); link_public_api(int) linkage_get_num_links(Linkage linkage); link_public_api(int) linkage_get_link_lword(Linkage linkage, int index); link_public_api(int) linkage_get_link_rword(Linkage linkage, int index); link_public_api(int) linkage_get_link_length(Linkage linkage, int index); link_public_api(const char *) linkage_get_link_label(Linkage linkage, int index); link_public_api(const char *) linkage_get_link_llabel(Linkage linkage, int index); link_public_api(const char *) linkage_get_link_rlabel(Linkage linkage, int index); link_public_api(int) linkage_get_link_num_domains(Linkage linkage, int index); link_public_api(const char **) linkage_get_link_domain_names(Linkage linkage, int index); link_public_api(const char **) linkage_get_words(Linkage linkage); link_public_api(const char *) linkage_get_disjunct_str(Linkage linkage, int w); link_public_api(double) linkage_get_disjunct_cost(Linkage linkage, int w); link_public_api(double) linkage_get_disjunct_corpus_score(Linkage linkage, int w); link_public_api(const char *) linkage_get_word(Linkage linkage, int w); link_public_api(char *) linkage_print_disjuncts(Linkage linkage); link_public_api(void) linkage_free_disjuncts(char *str); link_public_api(char *) linkage_print_links_and_domains(Linkage linkage); link_public_api(void) linkage_free_links_and_domains(char *str); link_public_api(char *) linkage_print_senses(Linkage linkage); link_public_api(void) linkage_free_senses(char *str); link_public_api(char *) linkage_print_constituent_tree(Linkage linkage, int mode); link_public_api(void) linkage_free_constituent_tree_str(char *str); link_public_api(char *) linkage_print_postscript(Linkage linkage, int mode); link_public_api(void) linkage_free_postscript(char * str); link_public_api(char *) linkage_print_diagram(Linkage linkage); link_public_api(void) linkage_free_diagram(char * str); link_public_api(int) linkage_compute_union(Linkage linkage); link_public_api(int) linkage_is_fat(Linkage linkage); link_public_api(int) linkage_unused_word_cost(Linkage linkage); link_public_api(int) linkage_disjunct_cost(Linkage linkage); link_public_api(int) linkage_and_cost(Linkage linkage); link_public_api(int) linkage_link_cost(Linkage linkage); link_public_api(double) linkage_corpus_cost(Linkage linkage); link_public_api(int) linkage_is_canonical(Linkage linkage); link_public_api(int) linkage_is_improper(Linkage linkage); link_public_api(int) linkage_has_inconsistent_domains(Linkage linkage); link_public_api(const char *) linkage_get_violation_name(Linkage linkage); /********************************************************************** * * Functions that allow special-purpose post-processing of linkages * ***********************************************************************/ typedef struct Postprocessor_s PostProcessor; link_public_api(PostProcessor *) post_process_open(const char *path); link_public_api(void) post_process_close(PostProcessor *); link_public_api(void) linkage_post_process(Linkage, PostProcessor *); /********************************************************************** * * Constituent node * ***********************************************************************/ typedef struct CNode_s CNode; link_public_api(CNode *) linkage_constituent_tree(Linkage linkage); link_public_api(void) linkage_free_constituent_tree(CNode * n); link_public_api(const char *) linkage_constituent_node_get_label(const CNode *n); link_public_api(CNode *) linkage_constituent_node_get_child(const CNode *n); link_public_api(CNode *) linkage_constituent_node_get_next(const CNode *n); link_public_api(int) linkage_constituent_node_get_start(const CNode *n); link_public_api(int) linkage_constituent_node_get_end(const CNode *n); /********************************************************************** * * Internal functions -- do not use these in new code! * These are not intended for general public use, but are required to * work around certain Micorsoft Windows linking oddities * (specifically, to be callable from the JNI bindings library.) * ***********************************************************************/ link_public_api(void) parse_options_print_total_time(Parse_Options opts); #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) #define GNUC_PRINTF( format_idx, arg_idx ) \ __attribute__((__format__ (__printf__, format_idx, arg_idx))) #else #define GNUC_PRINTF( format_idx, arg_idx ) #endif link_public_api(void) prt_error(const char *fmt, ...) GNUC_PRINTF(1,2); /******************************************************* * * Obsolete functions -- do not use these in new code! * XXX TBD: These will all go away in Version 5.0. * ********************************************************/ /* Identical to sentence_get_word() * XXX TBD: make this go away in Version 5.0. */ link_public_api(const char *) sentence_get_nth_word(Sentence sent, int i); /* Who uses this function, anyway? How did this get exported? * XXX TBD: make this go away in Version 5.0. */ link_public_api(int) sentence_nth_word_has_disjunction(Sentence sent, int i); /* This is not intended for general use; its specific to the internals * of the command-line client. It was exported by accident. * XXX TBD: make this go away in Version 5.0. */ link_public_api(int) issue_special_command(const char * line, Parse_Options opts, Dictionary dict); /* These are obsolete, and do nothing. * XXX TBD: make these go away in Version 5.0. */ link_public_api(void) lperror_clear(void); extern link_public_api(int) lperrno; extern link_public_api(char) lperrmsg[]; LINK_END_DECLS #endif link-grammar/link-grammar/link-features.h.in0000644000000000000000000000157212536650433016251 0ustar #ifndef LINK_FEATURES_H #define LINK_FEATURES_H #if defined(_MSC_VER) && !defined(LINK_GRAMMAR_DLL_EXPORT) #define LINK_GRAMMAR_DLL_EXPORT 1 #endif #ifdef __cplusplus # define LINK_BEGIN_DECLS extern "C" { # define LINK_END_DECLS } #else # define LINK_BEGIN_DECLS # define LINK_END_DECLS #endif #ifndef link_public_api # ifdef _MSC_VER # if !defined LINK_GRAMMAR_DLL_EXPORT # error !defined LINK_GRAMMAR_DLL_EXPORT # endif # if LINK_GRAMMAR_DLL_EXPORT # define link_public_api(x) __declspec(dllexport) x # else # define link_public_api(x) __declspec(dllimport) x # endif # else # define link_public_api(x) x # endif #endif #define LINK_MAJOR_VERSION @LINK_MAJOR_VERSION@ #define LINK_MINOR_VERSION @LINK_MINOR_VERSION@ #define LINK_MICRO_VERSION @LINK_MICRO_VERSION@ #define LINK_VERSION_STRING "@LINK_MAJOR_VERSION@.@LINK_MINOR_VERSION@.@LINK_MICRO_VERSION@" #endif link-grammar/link-grammar/build-disjuncts.h0000644000000000000000000000230212536650433016166 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include "api-types.h" #include "structures.h" void build_sentence_disjuncts(Sentence sent, float cost_cutoff); X_node * build_word_expressions(Dictionary dict, const char *); Disjunct * build_disjuncts_for_dict_node(Dict_node *); Disjunct * build_disjuncts_for_X_node(X_node * x, float cost_cutoff); link-grammar/link-grammar/disjuncts.c0000644000000000000000000001033312536650433015067 0ustar /*************************************************************************/ /* Copyright (c) 2008, 2009 Linas Vepstas */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ /* * disjuncts.c * * Miscellaneous utilities for returning the list of disjuncts that * were acutally used in a given parse of a sentence. */ #include #include #include "api-structures.h" #include "disjuncts.h" #include "utilities.h" /* ========================================================= */ /** * lg_compute_disjunct_strings -- Given sentence, compute disjuncts. * * This routine will compute the string representation of the disjunct * used for each word in parsing the given sentence. A string * representation of the disjunct is needed for most of the corpus * statistics functions: this string, together with the "inflected" * word, is used as a key to index the statistics information in the * database. * * XXX This implementation works, but I don't think its the simplest * one. I think that a better implementation would have used * sent->parse_info->chosen_disjuncts[w] to get the one that was used, * and then print_disjuncts() to print it. */ void lg_compute_disjunct_strings(Sentence sent, Linkage_info *lifo) { char djstr[MAX_TOKEN_LENGTH*20]; /* no word will have more than 20 links */ size_t copied, left; int i, w; int nwords = sent->length; Parse_info pi = sent->parse_info; int nlinks = pi->N_links; int *djlist, *djloco, *djcount; if (lifo->disjunct_list_str) return; lifo->nwords = nwords; lifo->disjunct_list_str = (char **) malloc(nwords * sizeof(char *)); memset(lifo->disjunct_list_str, 0, nwords * sizeof(char *)); djcount = (int *) malloc (sizeof(int) * (nwords + 2*nwords*nlinks)); djlist = djcount + nwords; djloco = djlist + nwords*nlinks; /* Decrement nwords, so as to ignore the RIGHT-WALL */ nwords --; for (w=0; wlink_array[i].l; int rword = pi->link_array[i].r; int slot = djcount[lword]; /* Skip over RW link to the right wall */ if (nwords <= rword) continue; djlist[lword*nlinks + slot] = i; djloco[lword*nlinks + slot] = rword; djcount[lword] ++; slot = djcount[rword]; djlist[rword*nlinks + slot] = i; djloco[rword*nlinks + slot] = lword; djcount[rword] ++; #ifdef DEBUG printf("Link: %d is %s--%s--%s\n", i, sent->word[lword].string, pi->link_array[i].name, sent->word[rword].string); #endif } /* Process each word in the sentence (skipping LEFT-WALL, which is * word 0. */ for (w=1; w djloco[w*nlinks + j]) { int tmp = djloco[w*nlinks + i]; djloco[w*nlinks + i] = djloco[w*nlinks + j]; djloco[w*nlinks + j] = tmp; tmp = djlist[w*nlinks + i]; djlist[w*nlinks + i] = djlist[w*nlinks + j]; djlist[w*nlinks + j] = tmp; } } } /* Create the disjunct string */ left = sizeof(djstr); copied = 0; for (i=0; ilink_array[dj].name, left); left = sizeof(djstr) - copied; if (djloco[w*nlinks + i] < w) copied += lg_strlcpy(djstr+copied, "-", left--); else copied += lg_strlcpy(djstr+copied, "+", left--); copied += lg_strlcpy(djstr+copied, " ", left--); } lifo->disjunct_list_str[w] = strdup(djstr); } free (djcount); } link-grammar/link-grammar/minisat/0000755000000000000000000000000012537603145014360 5ustar link-grammar/link-grammar/minisat/Makefile.am0000644000000000000000000000047612536650433016424 0ustar VERSION=2.0.0 dnl Version info for libraries = CURRENT:REVISION:AGE MINISAT_VERSION_INFO=2:0:0 libminisat_la_LDFLAGS = -version-info $(MINISAT_VERSION_INFO) lib_LTLIBRARIES = libminisat.la libminisat_la_SOURCES = \ Solver.C Solver.h SolverTypes.h \ Alg.h BasicHeap.h BoxedVec.h Heap.h Map.h Queue.h Sort.h Vec.h link-grammar/link-grammar/minisat/Makefile0000644000000000000000000005314312537603144016025 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # link-grammar/minisat/Makefile. Generated from Makefile.in by configure. # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/link-grammar pkgincludedir = $(includedir)/link-grammar pkglibdir = $(libdir)/link-grammar pkglibexecdir = $(libexecdir)/link-grammar 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 = x86_64-unknown-linux-gnu host_triplet = x86_64-unknown-linux-gnu subdir = link-grammar/minisat DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libminisat_la_LIBADD = am_libminisat_la_OBJECTS = Solver.lo libminisat_la_OBJECTS = $(am_libminisat_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent am__v_lt_1 = libminisat_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(libminisat_la_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_P = $(am__v_P_$(V)) am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I. depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_$(V)) am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_$(V)) am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) 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_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libminisat_la_SOURCES) DIST_SOURCES = $(libminisat_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing aclocal-1.14 AMTAR = $${TAR-tar} AM_DEFAULT_VERBOSITY = 1 AR = ar AS = as ASPELL_CFLAGS = ASPELL_LIBS = AUTOCONF = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing autoconf AUTOHEADER = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing autoheader AUTOMAKE = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing automake-1.14 AWK = gawk BINRELOC_CFLAGS = BINRELOC_LIBS = CC = gcc CCDEPMODE = depmode=gcc3 CFLAGS = -g -O2 -std=c99 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE CPP = gcc -E CPPFLAGS = CXX = g++ CXXCPP = g++ -E CXXDEPMODE = depmode=gcc3 CXXFLAGS = -g -O2 CYGPATH_W = echo DEFS = -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"link-grammar\" -DVERSION=\"4.7.4\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_TOWUPPER=1 -DDEBUG_MEMORY=0 -DHAVE_LOCALE_H=1 -DHAVE_LC_MESSAGES=1 -DHAVE_REGEXEC=1 DEPDIR = .deps DLLTOOL = dlltool DSYMUTIL = DUMPBIN = ECHO_C = ECHO_N = -n ECHO_T = EGREP = /bin/grep -E EXEEXT = FGREP = /bin/grep -F GREP = /bin/grep HUNSPELL_CFLAGS = HUNSPELL_LIBS = INSTALL = /usr/bin/install -c INSTALL_DATA = ${INSTALL} -m 644 INSTALL_PROGRAM = ${INSTALL} INSTALL_SCRIPT = ${INSTALL} INSTALL_STRIP_PROGRAM = $(install_sh) -c -s LD = /usr/bin/ld -m elf_x86_64 LDFLAGS = LIBEDIT_CFLAGS = LIBEDIT_LIBS = LIBOBJS = LIBS = LIBTOOL = $(SHELL) $(top_builddir)/libtool LINK_CFLAGS = -Wall -Wextra -Wsign-compare -Werror-implicit-function-declaration -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wpacked -Wswitch-enum -Wmissing-format-attribute -Wstrict-aliasing=2 -Winit-self -Wunsafe-loop-optimizations -Wdeclaration-after-statement -Wold-style-definition -Wno-missing-field-initializers -Wno-unused-parameter -Wno-attributes -Wno-long-long -Winline -fno-strict-aliasing LINK_MAJOR_VERSION = 4 LINK_MICRO_VERSION = 4 LINK_MINOR_VERSION = 7 LIPO = LN_S = ln -s LTLIBOBJS = MAINT = MAKEINFO = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/missing makeinfo MANIFEST_TOOL = : MKDIR_P = /bin/mkdir -p NM = /usr/bin/nm -B NMEDIT = OBJDUMP = objdump OBJEXT = o OTOOL = OTOOL64 = PACKAGE = link-grammar PACKAGE_BUGREPORT = PACKAGE_NAME = PACKAGE_STRING = PACKAGE_TARNAME = PACKAGE_URL = PACKAGE_VERSION = PATH_SEPARATOR = : PKG_CONFIG = /usr/bin/pkg-config PKG_CONFIG_LIBDIR = PKG_CONFIG_PATH = RANLIB = ranlib REGEX_LIBS = SED = /bin/sed SET_MAKE = SHELL = /bin/bash SQLITE3_CFLAGS = SQLITE3_LIBS = STRIP = strip VERSION = 2.0.0 VERSION_INFO = 11:4:7 abs_builddir = /home/wookey/debian/NMU/git/link-grammar/link-grammar/minisat abs_srcdir = /home/wookey/debian/NMU/git/link-grammar/link-grammar/minisat abs_top_builddir = /home/wookey/debian/NMU/git/link-grammar abs_top_srcdir = /home/wookey/debian/NMU/git/link-grammar ac_ct_AR = ar ac_ct_CC = gcc ac_ct_CXX = g++ ac_ct_DUMPBIN = am__include = include am__leading_dot = . am__quote = am__tar = $${TAR-tar} chof - "$$tardir" am__untar = $${TAR-tar} xf - bindir = ${exec_prefix}/bin build = x86_64-unknown-linux-gnu build_alias = build_cpu = x86_64 build_os = linux-gnu build_vendor = unknown builddir = . datadir = ${datarootdir} datarootdir = ${prefix}/share docdir = ${datarootdir}/doc/${PACKAGE} dvidir = ${docdir} exec_prefix = ${prefix} host = x86_64-unknown-linux-gnu host_alias = host_cpu = x86_64 host_os = linux-gnu host_vendor = unknown htmldir = ${docdir} includedir = ${prefix}/include infodir = ${datarootdir}/info install_sh = ${SHELL} /home/wookey/debian/NMU/git/link-grammar/install-sh libdir = ${exec_prefix}/lib libexecdir = ${exec_prefix}/libexec localedir = ${datarootdir}/locale localstatedir = ${prefix}/var mandir = ${datarootdir}/man mkdir_p = $(MKDIR_P) oldincludedir = /usr/include pdfdir = ${docdir} prefix = /usr/local program_transform_name = s,x,x, psdir = ${docdir} sbindir = ${exec_prefix}/sbin sharedstatedir = ${prefix}/com srcdir = . sysconfdir = ${prefix}/etc target_alias = top_build_prefix = ../../ top_builddir = ../.. top_srcdir = ../.. MINISAT_VERSION_INFO = 2:0:0 libminisat_la_LDFLAGS = -version-info $(MINISAT_VERSION_INFO) lib_LTLIBRARIES = libminisat.la libminisat_la_SOURCES = \ Solver.C Solver.h SolverTypes.h \ Alg.h BasicHeap.h BoxedVec.h Heap.h Map.h Queue.h Sort.h Vec.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 link-grammar/minisat/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign link-grammar/minisat/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(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-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}; \ } libminisat.la: $(libminisat_la_OBJECTS) $(libminisat_la_DEPENDENCIES) $(EXTRA_libminisat_la_DEPENDENCIES) $(AM_V_CXXLD)$(libminisat_la_LINK) -rpath $(libdir) $(libminisat_la_OBJECTS) $(libminisat_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c include ./$(DEPDIR)/Solver.Plo .C.o: $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po # $(AM_V_CXX)source='$<' object='$@' libtool=no \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(AM_V_CXX_no)$(CXXCOMPILE) -c -o $@ $< .C.obj: $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po # $(AM_V_CXX)source='$<' object='$@' libtool=no \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(AM_V_CXX_no)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .C.lo: $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo # $(AM_V_CXX)source='$<' object='$@' libtool=yes \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(AM_V_CXX_no)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES dnl Version info for libraries = CURRENT:REVISION:AGE # 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: link-grammar/link-grammar/minisat/Makefile.in0000644000000000000000000005225212537603121016425 0ustar # Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = link-grammar/minisat DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(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)/ac-helpers/binreloc.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libminisat_la_LIBADD = am_libminisat_la_OBJECTS = Solver.lo libminisat_la_OBJECTS = $(am_libminisat_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 = libminisat_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(libminisat_la_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libminisat_la_SOURCES) DIST_SOURCES = $(libminisat_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ASPELL_CFLAGS = @ASPELL_CFLAGS@ ASPELL_LIBS = @ASPELL_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HUNSPELL_CFLAGS = @HUNSPELL_CFLAGS@ HUNSPELL_LIBS = @HUNSPELL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@ LIBEDIT_LIBS = @LIBEDIT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LINK_CFLAGS = @LINK_CFLAGS@ LINK_MAJOR_VERSION = @LINK_MAJOR_VERSION@ LINK_MICRO_VERSION = @LINK_MICRO_VERSION@ LINK_MINOR_VERSION = @LINK_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ STRIP = @STRIP@ VERSION = 2.0.0 VERSION_INFO = @VERSION_INFO@ 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_CXX = @ac_ct_CXX@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ 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@ MINISAT_VERSION_INFO = 2:0:0 libminisat_la_LDFLAGS = -version-info $(MINISAT_VERSION_INFO) lib_LTLIBRARIES = libminisat.la libminisat_la_SOURCES = \ Solver.C Solver.h SolverTypes.h \ Alg.h BasicHeap.h BoxedVec.h Heap.h Map.h Queue.h Sort.h Vec.h all: all-am .SUFFIXES: .SUFFIXES: .C .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign link-grammar/minisat/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign link-grammar/minisat/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libminisat.la: $(libminisat_la_OBJECTS) $(libminisat_la_DEPENDENCIES) $(EXTRA_libminisat_la_DEPENDENCIES) $(AM_V_CXXLD)$(libminisat_la_LINK) -rpath $(libdir) $(libminisat_la_OBJECTS) $(libminisat_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Solver.Plo@am__quote@ .C.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .C.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .C.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES dnl Version info for libraries = CURRENT:REVISION:AGE # 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: link-grammar/link-grammar/minisat/Heap.h0000644000000000000000000001177412536650433015421 0ustar /******************************************************************************************[Heap.h] MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson 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. **************************************************************************************************/ #ifndef Heap_h #define Heap_h #include "Vec.h" #include using namespace std; //================================================================================================= // A heap implementation with support for decrease/increase key. template class Heap { Comp lt; vec heap; // heap of ints vec indices; // int -> index in heap // Index "traversal" functions static inline int left (int i) { return i*2+1; } static inline int right (int i) { return (i+1)*2; } static inline int parent(int i) { return (i-1) >> 1; } inline void percolateUp(int i) { int x = heap[i]; while (i != 0 && lt(x, heap[parent(i)])){ heap[i] = heap[parent(i)]; indices[heap[i]] = i; i = parent(i); } heap [i] = x; indices[x] = i; } inline void percolateDown(int i) { int x = heap[i]; while (left(i) < heap.size()){ int child = right(i) < heap.size() && lt(heap[right(i)], heap[left(i)]) ? right(i) : left(i); if (!lt(heap[child], x)) break; heap[i] = heap[child]; indices[heap[i]] = i; i = child; } heap [i] = x; indices[x] = i; } bool heapProperty (int i) const { return i >= heap.size() || ((i == 0 || !lt(heap[i], heap[parent(i)])) && heapProperty(left(i)) && heapProperty(right(i))); } public: Heap(const Comp& c) : lt(c) { } int size () const { return heap.size(); } bool empty () const { return heap.size() == 0; } bool inHeap (int n) const { return n < indices.size() && indices[n] >= 0; } int operator[](int index) const { return heap[index]; } void decrease (int n) { percolateUp(indices[n]); } // RENAME WHEN THE DEPRECATED INCREASE IS REMOVED. void increase_ (int n) { percolateDown(indices[n]); } void insert(int n) { indices.growTo(n+1, -1); indices[n] = heap.size(); heap.push(n); percolateUp(indices[n]); } int removeMin() { int x = heap[0]; heap[0] = heap.last(); indices[heap[0]] = 0; indices[x] = -1; heap.pop(); if (heap.size() > 1) percolateDown(0); return x; } void clear(bool dealloc = false) { for (int i = 0; i < heap.size(); i++) indices[heap[i]] = -1; #ifdef NDEBUG for (int i = 0; i < indices.size(); i++) #endif heap.clear(dealloc); } // Fool proof variant of insert/decrease/increase void update (int n) { if (!inHeap(n)) insert(n); else { percolateUp(indices[n]); percolateDown(indices[n]); } } // Delete elements from the heap using a given filter function (-object). // *** this could probaly be replaced with a more general "buildHeap(vec&)" method *** template void filter(const F& filt) { int i,j; for (i = j = 0; i < heap.size(); i++) if (filt(heap[i])){ heap[j] = heap[i]; indices[heap[i]] = j++; }else indices[heap[i]] = -1; heap.shrink(i - j); for (int i = heap.size() / 2 - 1; i >= 0; i--) percolateDown(i); } // DEBUG: consistency checking bool heapProperty() const { return heapProperty(1); } void print() const { cout << "_____________________" << endl; int i = 2; for (int j = 0; j < heap.size(); j++) { printf("%3d ", heap[j]); lt.print(heap[j]); cout << (!(i & (i-1)) ? "\n" : " "); i++; } cout << endl << "_____________________" << endl; } // COMPAT: should be removed void setBounds (int n) { } void increase (int n) { decrease(n); } int getmin () { return removeMin(); } }; //================================================================================================= #endif link-grammar/link-grammar/minisat/BasicHeap.h0000644000000000000000000000671412536650433016361 0ustar /******************************************************************************************[Heap.h] MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson 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. **************************************************************************************************/ #ifndef BasicHeap_h #define BasicHeap_h #include "Vec.h" //================================================================================================= // A heap implementation with support for decrease/increase key. template class BasicHeap { Comp lt; vec heap; // heap of ints // Index "traversal" functions static inline int left (int i) { return i*2+1; } static inline int right (int i) { return (i+1)*2; } static inline int parent(int i) { return (i-1) >> 1; } inline void percolateUp(int i) { int x = heap[i]; while (i != 0 && lt(x, heap[parent(i)])){ heap[i] = heap[parent(i)]; i = parent(i); } heap [i] = x; } inline void percolateDown(int i) { int x = heap[i]; while (left(i) < heap.size()){ int child = right(i) < heap.size() && lt(heap[right(i)], heap[left(i)]) ? right(i) : left(i); if (!lt(heap[child], x)) break; heap[i] = heap[child]; i = child; } heap[i] = x; } bool heapProperty(int i) { return i >= heap.size() || ((i == 0 || !lt(heap[i], heap[parent(i)])) && heapProperty(left(i)) && heapProperty(right(i))); } public: BasicHeap(const C& c) : comp(c) { } int size () const { return heap.size(); } bool empty () const { return heap.size() == 0; } int operator[](int index) const { return heap[index+1]; } void clear (bool dealloc = false) { heap.clear(dealloc); } void insert (int n) { heap.push(n); percolateUp(heap.size()-1); } int removeMin() { int r = heap[0]; heap[0] = heap.last(); heap.pop(); if (heap.size() > 1) percolateDown(0); return r; } // DEBUG: consistency checking bool heapProperty() { return heapProperty(1); } // COMPAT: should be removed int getmin () { return removeMin(); } }; //================================================================================================= #endif link-grammar/link-grammar/minisat/.deps/0000755000000000000000000000000012537603145015371 5ustar link-grammar/link-grammar/minisat/.deps/Solver.Plo0000644000000000000000000000001012537603145017306 0ustar # dummy link-grammar/link-grammar/minisat/Queue.h0000644000000000000000000000624512536650433015625 0ustar /*****************************************************************************************[Queue.h] MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson 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. **************************************************************************************************/ #ifndef Queue_h #define Queue_h #include "Vec.h" //================================================================================================= template class Queue { vec elems; int first; public: Queue(void) : first(0) { } void insert(T x) { elems.push(x); } T peek () const { return elems[first]; } void pop () { first++; } void clear(bool dealloc = false) { elems.clear(dealloc); first = 0; } int size(void) { return elems.size() - first; } //bool has(T x) { for (int i = first; i < elems.size(); i++) if (elems[i] == x) return true; return false; } const T& operator [] (int index) const { return elems[first + index]; } }; //template //class Queue { // vec buf; // int first; // int end; // //public: // typedef T Key; // // Queue() : buf(1), first(0), end(0) {} // // void clear () { buf.shrinkTo(1); first = end = 0; } // int size () { return (end >= first) ? end - first : end - first + buf.size(); } // // T peek () { assert(first != end); return buf[first]; } // void pop () { assert(first != end); first++; if (first == buf.size()) first = 0; } // void insert(T elem) { // INVARIANT: buf[end] is always unused // buf[end++] = elem; // if (end == buf.size()) end = 0; // if (first == end){ // Resize: // vec tmp((buf.size()*3 + 1) >> 1); // //**/printf("queue alloc: %d elems (%.1f MB)\n", tmp.size(), tmp.size() * sizeof(T) / 1000000.0); // int i = 0; // for (int j = first; j < buf.size(); j++) tmp[i++] = buf[j]; // for (int j = 0 ; j < end ; j++) tmp[i++] = buf[j]; // first = 0; // end = buf.size(); // tmp.moveTo(buf); // } // } //}; //================================================================================================= #endif link-grammar/link-grammar/minisat/SolverTypes.h0000644000000000000000000001650212536650433017035 0ustar /***********************************************************************************[SolverTypes.h] MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson 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. **************************************************************************************************/ #ifndef SolverTypes_h #define SolverTypes_h #include //================================================================================================= // Variables, literals, lifted booleans, clauses: // NOTE! Variables are just integers. No abstraction here. They should be chosen from 0..N, // so that they can be used as array indices. typedef int Var; #define var_Undef (-1) class Lit { int x; public: Lit() : x(2*var_Undef) { } // (lit_Undef) explicit Lit(Var var, bool sign = false) : x((var+var) + (int)sign) { } // Don't use these for constructing/deconstructing literals. Use the normal constructors instead. friend int toInt (Lit p); // Guarantees small, positive integers suitable for array indexing. friend Lit toLit (int i); // Inverse of 'toInt()' friend Lit operator ~(Lit p); friend bool sign (Lit p); friend int var (Lit p); friend Lit unsign (Lit p); friend Lit id (Lit p, bool sgn); bool operator == (Lit p) const { return x == p.x; } bool operator != (Lit p) const { return x != p.x; } bool operator < (Lit p) const { return x < p.x; } // '<' guarantees that p, ~p are adjacent in the ordering. }; inline int toInt (Lit p) { return p.x; } inline Lit toLit (int i) { Lit p; p.x = i; return p; } inline Lit operator ~(Lit p) { Lit q; q.x = p.x ^ 1; return q; } inline bool sign (Lit p) { return p.x & 1; } inline int var (Lit p) { return p.x >> 1; } inline Lit unsign (Lit p) { Lit q; q.x = p.x & ~1; return q; } inline Lit id (Lit p, bool sgn) { Lit q; q.x = p.x ^ (int)sgn; return q; } const Lit lit_Undef(var_Undef, false); // }- Useful special constants. const Lit lit_Error(var_Undef, true ); // } //================================================================================================= // Lifted booleans: class lbool { char value; explicit lbool(int v) : value(v) { } public: lbool() : value(0) { } lbool(bool x) : value((int)x*2-1) { } int toInt(void) const { return value; } bool operator == (lbool b) const { return value == b.value; } bool operator != (lbool b) const { return value != b.value; } lbool operator ^ (bool b) const { return b ? lbool(-value) : lbool(value); } friend int toInt (lbool l); friend lbool toLbool(int v); }; inline int toInt (lbool l) { return l.toInt(); } inline lbool toLbool(int v) { return lbool(v); } const lbool l_True = toLbool( 1); const lbool l_False = toLbool(-1); const lbool l_Undef = toLbool( 0); //================================================================================================= // Clause -- a simple class for representing a clause: class Clause { uint32_t size_etc; union { float act; uint32_t abst; } extra; Lit data[0]; public: void calcAbstraction() { uint32_t abstraction = 0; for (int i = 0; i < size(); i++) abstraction |= 1 << (var(data[i]) & 31); extra.abst = abstraction; } // NOTE: This constructor cannot be used directly (doesn't allocate enough memory). template Clause(const V& ps, bool learnt) { size_etc = (ps.size() << 3) | (uint32_t)learnt; for (int i = 0; i < ps.size(); i++) data[i] = ps[i]; if (learnt) extra.act = 0; else calcAbstraction(); } // -- use this function instead: template friend Clause* Clause_new(const V& ps, bool learnt = false) { void* mem = malloc(sizeof(Clause) + sizeof(uint32_t)*(ps.size())); return new (mem) Clause(ps, learnt); } int size () const { return size_etc >> 3; } void shrink (int i) { size_etc = (((size_etc >> 3) - i) << 3) | (size_etc & 7); } void pop () { shrink(1); } bool learnt () const { return size_etc & 1; } uint32_t mark () const { return (size_etc >> 1) & 3; } void mark (uint32_t m) { size_etc = (size_etc & ~6) | ((m & 3) << 1); } const Lit& last () const { return data[size()-1]; } // NOTE: somewhat unsafe to change the clause in-place! Must manually call 'calcAbstraction' afterwards for // subsumption operations to behave correctly. Lit& operator [] (int i) { return data[i]; } Lit operator [] (int i) const { return data[i]; } operator const Lit* (void) const { return data; } float& activity () { return extra.act; } uint32_t abstraction () const { return extra.abst; } Lit subsumes (const Clause& other) const; void strengthen (Lit p); }; /*_________________________________________________________________________________________________ | | subsumes : (other : const Clause&) -> Lit | | Description: | Checks if clause subsumes 'other', and at the same time, if it can be used to simplify 'other' | by subsumption resolution. | | Result: | lit_Error - No subsumption or simplification | lit_Undef - Clause subsumes 'other' | p - The literal p can be deleted from 'other' |________________________________________________________________________________________________@*/ inline Lit Clause::subsumes(const Clause& other) const { if (other.size() < size() || (extra.abst & ~other.extra.abst) != 0) return lit_Error; Lit ret = lit_Undef; const Lit* c = (const Lit*)(*this); const Lit* d = (const Lit*)other; for (int i = 0; i < size(); i++) { // search for c[i] or ~c[i] for (int j = 0; j < other.size(); j++) if (c[i] == d[j]) goto ok; else if (ret == lit_Undef && c[i] == ~d[j]){ ret = c[i]; goto ok; } // did not find it return lit_Error; ok:; } return ret; } inline void Clause::strengthen(Lit p) { remove(*this, p); calcAbstraction(); } #endif link-grammar/link-grammar/minisat/Sort.h0000644000000000000000000000620512536650433015464 0ustar /******************************************************************************************[Sort.h] MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson 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. **************************************************************************************************/ #ifndef Sort_h #define Sort_h #include "Vec.h" //================================================================================================= // Some sorting algorithms for vec's template struct LessThan_default { bool operator () (T x, T y) { return x < y; } }; template void selectionSort(T* array, int size, LessThan lt) { int i, j, best_i; T tmp; for (i = 0; i < size-1; i++){ best_i = i; for (j = i+1; j < size; j++){ if (lt(array[j], array[best_i])) best_i = j; } tmp = array[i]; array[i] = array[best_i]; array[best_i] = tmp; } } template static inline void selectionSort(T* array, int size) { selectionSort(array, size, LessThan_default()); } template void sort(T* array, int size, LessThan lt) { if (size <= 15) selectionSort(array, size, lt); else{ T pivot = array[size / 2]; T tmp; int i = -1; int j = size; for(;;){ do i++; while(lt(array[i], pivot)); do j--; while(lt(pivot, array[j])); if (i >= j) break; tmp = array[i]; array[i] = array[j]; array[j] = tmp; } sort(array , i , lt); sort(&array[i], size-i, lt); } } template static inline void sort(T* array, int size) { sort(array, size, LessThan_default()); } //================================================================================================= // For 'vec's: template void sort(vec& v, LessThan lt) { sort((T*)v, v.size(), lt); } template void sort(vec& v) { sort(v, LessThan_default()); } //================================================================================================= #endif link-grammar/link-grammar/minisat/Map.h0000644000000000000000000001054412536650433015253 0ustar /*******************************************************************************************[Map.h] MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson 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. **************************************************************************************************/ #ifndef Map_h #define Map_h #include #include "Vec.h" //================================================================================================= // Default hash/equals functions // template struct Hash { uint32_t operator()(const K& k) const { return hash(k); } }; template struct Equal { bool operator()(const K& k1, const K& k2) const { return k1 == k2; } }; template struct DeepHash { uint32_t operator()(const K* k) const { return hash(*k); } }; template struct DeepEqual { bool operator()(const K* k1, const K* k2) const { return *k1 == *k2; } }; //================================================================================================= // Some primes // static const int nprimes = 25; static const int primes [nprimes] = { 31, 73, 151, 313, 643, 1291, 2593, 5233, 10501, 21013, 42073, 84181, 168451, 337219, 674701, 1349473, 2699299, 5398891, 10798093, 21596719, 43193641, 86387383, 172775299, 345550609, 691101253 }; //================================================================================================= // Hash table implementation of Maps // template, class E = Equal > class Map { struct Pair { K key; D data; }; H hash; E equals; vec* table; int cap; int size; // Don't allow copying (error prone): Map& operator = (Map& other) { assert(0); } Map (Map& other) { assert(0); } int32_t index (const K& k) const { return hash(k) % cap; } void _insert (const K& k, const D& d) { table[index(k)].push(); table[index(k)].last().key = k; table[index(k)].last().data = d; } void rehash () { const vec* old = table; int newsize = primes[0]; for (int i = 1; newsize <= cap && i < nprimes; i++) newsize = primes[i]; table = new vec[newsize]; for (int i = 0; i < cap; i++){ for (int j = 0; j < old[i].size(); j++){ _insert(old[i][j].key, old[i][j].data); }} delete [] old; cap = newsize; } public: Map () : table(NULL), cap(0), size(0) {} Map (const H& h, const E& e) : Map(), hash(h), equals(e) {} ~Map () { delete [] table; } void insert (const K& k, const D& d) { if (size+1 > cap / 2) rehash(); _insert(k, d); size++; } bool peek (const K& k, D& d) { if (size == 0) return false; const vec& ps = table[index(k)]; for (int i = 0; i < ps.size(); i++) if (equals(ps[i].key, k)){ d = ps[i].data; return true; } return false; } void remove (const K& k) { assert(table != NULL); vec& ps = table[index(k)]; int j = 0; for (; j < ps.size() && !equals(ps[j].key, k); j++); assert(j < ps.size()); ps[j] = ps.last(); ps.pop(); } void clear () { cap = size = 0; delete [] table; table = NULL; } }; #endif link-grammar/link-grammar/minisat/Alg.h0000644000000000000000000000374012536650433015241 0ustar /*******************************************************************************************[Alg.h] MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson 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. **************************************************************************************************/ #ifndef Alg_h #define Alg_h //================================================================================================= // Useful functions on vectors #if 1 template static inline void remove(V& ts, const T& t) { int j = 0; for (; j < ts.size() && ts[j] != t; j++); for (; j < ts.size()-1; j++) ts[j] = ts[j+1]; ts.pop(); } #else template static inline void remove(V& ts, const T& t) { int j = 0; for (; j < ts.size() && ts[j] != t; j++); ts[j] = ts.last(); ts.pop(); } #endif template static inline bool find(V& ts, const T& t) { int j = 0; for (; j < ts.size() && ts[j] != t; j++); return j < ts.size(); } #endif link-grammar/link-grammar/minisat/Vec.h0000644000000000000000000001324712536650433015256 0ustar /*******************************************************************************************[Vec.h] MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson 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. **************************************************************************************************/ #ifndef Vec_h #define Vec_h #include #include //================================================================================================= // Automatically resizable arrays // // NOTE! Don't use this vector on datatypes that cannot be re-located in memory (with realloc) template class vec { T* data; int sz; int cap; void init(int size, const T& pad); void grow(int min_cap); // Don't allow copying (error prone): vec& operator = (vec& other) { return *this; } vec (vec& other) { } static inline int imin(int x, int y) { int mask = (x-y) >> (sizeof(int)*8-1); return (x&mask) + (y&(~mask)); } static inline int imax(int x, int y) { int mask = (y-x) >> (sizeof(int)*8-1); return (x&mask) + (y&(~mask)); } public: // Types: typedef int Key; typedef T Datum; // Constructors: vec(void) : data(NULL) , sz(0) , cap(0) { } vec(const T& a, const T& b) : cap(2), sz(2) { data = (T*)malloc(cap * sizeof(T)); data[0] = a; data[1] = b; } vec(int size) : data(NULL) , sz(0) , cap(0) { growTo(size); } vec(int size, const T& pad) : data(NULL) , sz(0) , cap(0) { growTo(size, pad); } vec(T* array, int size) : data(array), sz(size), cap(size) { } // (takes ownership of array -- will be deallocated with 'free()') ~vec(void) { clear(true); } // Ownership of underlying array: T* release (void) { T* ret = data; data = NULL; sz = 0; cap = 0; return ret; } operator T* (void) { return data; } // (unsafe but convenient) operator const T* (void) const { return data; } // Size operations: int size (void) const { return sz; } void shrink (int nelems) { for (int i = 0; i < nelems; i++) sz--, data[sz].~T(); } void shrink_(int nelems) { sz -= nelems; } void pop (void) { sz--, data[sz].~T(); } void growTo (int size); void growTo (int size, const T& pad); void clear (bool dealloc = false); void capacity (int size) { grow(size); } // Stack interface: #if 1 void push (void) { if (sz == cap) { cap = imax(2, (cap*3+1)>>1); data = (T*)realloc(data, cap * sizeof(T)); } new (&data[sz]) T(); sz++; } //void push (const T& elem) { if (sz == cap) { cap = imax(2, (cap*3+1)>>1); data = (T*)realloc(data, cap * sizeof(T)); } new (&data[sz]) T(elem); sz++; } void push (const T& elem) { if (sz == cap) { cap = imax(2, (cap*3+1)>>1); data = (T*)realloc(data, cap * sizeof(T)); } data[sz++] = elem; } void push_ (const T& elem) { data[sz++] = elem; } #else void push (void) { if (sz == cap) grow(sz+1); new (&data[sz]) T() ; sz++; } void push (const T& elem) { if (sz == cap) grow(sz+1); new (&data[sz]) T(elem); sz++; } #endif const T& last (void) const { return data[sz-1]; } T& last (void) { return data[sz-1]; } // Vector interface: const T& operator [] (int index) const { return data[index]; } T& operator [] (int index) { return data[index]; } // Duplicatation (preferred instead): void copyTo(vec& copy) const { copy.clear(); copy.growTo(sz); for (int i = 0; i < sz; i++) new (©[i]) T(data[i]); } void moveTo(vec& dest) { dest.clear(true); dest.data = data; dest.sz = sz; dest.cap = cap; data = NULL; sz = 0; cap = 0; } }; template void vec::grow(int min_cap) { if (min_cap <= cap) return; if (cap == 0) cap = (min_cap >= 2) ? min_cap : 2; else do cap = (cap*3+1) >> 1; while (cap < min_cap); data = (T*)realloc(data, cap * sizeof(T)); } template void vec::growTo(int size, const T& pad) { if (sz >= size) return; grow(size); for (int i = sz; i < size; i++) new (&data[i]) T(pad); sz = size; } template void vec::growTo(int size) { if (sz >= size) return; grow(size); for (int i = sz; i < size; i++) new (&data[i]) T(); sz = size; } template void vec::clear(bool dealloc) { if (data != NULL){ for (int i = 0; i < sz; i++) data[i].~T(); sz = 0; if (dealloc) free(data), data = NULL, cap = 0; } } #endif link-grammar/link-grammar/minisat/Solver.h0000644000000000000000000004276112536650433016016 0ustar /****************************************************************************************[Solver.h] MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson 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. **************************************************************************************************/ #ifndef Solver_h #define Solver_h #include #include #include "Vec.h" #include "Heap.h" #include "Alg.h" #include "SolverTypes.h" //================================================================================================= // Solver -- the main class: class Solver { public: // Constructor/Destructor: // Solver(); ~Solver(); // Problem specification: // Var newVar (bool polarity = true, double activity = 0.0, bool dvar = true); // Add a new variable with parameters specifying variable mode. bool addClause (vec& ps); // Add a clause to the solver. NOTE! 'ps' may be shrunk by this method! void addConflictingClause(vec& lits); // Solving: // bool simplify (); // Removes already satisfied clauses. lbool solve (const vec& assumps); // Search for a model that respects a given set of assumptions. lbool solve (); // Search without assumptions. bool okay () const; // FALSE means solver is in a conflicting state // Variable mode: // void setPolarity (Var v, bool b); // Declare which polarity the decision heuristic should use for a variable. Requires mode 'polarity_user'. void setDecisionVar (Var v, bool b); // Declare if a variable should be eligible for selection in the decision heuristic. void setActivity (Var v, double a); // Read state: // lbool value (Var x) const; // The current value of a variable. lbool value (Lit p) const; // The current value of a literal. lbool modelValue (Lit p) const; // The value of a literal in the last model. The last call to solve must have been satisfiable. int nAssigns () const; // The current number of assigned literals. int nClauses () const; // The current number of original clauses. int nLearnts () const; // The current number of learnt clauses. int nVars () const; // The current number of variables. // Extra results: (read-only member variable) // vec model; // If problem is satisfiable, this vector contains the model (if any). vec conflict; // If problem is unsatisfiable (possibly under assumptions), // this vector represent the final conflict clause expressed in the assumptions. // Mode of operation: // double var_decay; // Inverse of the variable activity decay factor. (default 1 / 0.95) double clause_decay; // Inverse of the clause activity decay factor. (1 / 0.999) double random_var_freq; // The frequency with which the decision heuristic tries to choose a random variable. (default 0.02) int restart_first; // The initial restart limit. (default 100) double restart_inc; // The factor with which the restart limit is multiplied in each restart. (default 1.5) double learntsize_factor; // The intitial limit for learnt clauses is a factor of the original clauses. (default 1 / 3) double learntsize_inc; // The limit for learnt clauses is multiplied with this factor each restart. (default 1.1) bool expensive_ccmin; // Controls conflict clause minimization. (default TRUE) int polarity_mode; // Controls which polarity the decision heuristic chooses. See enum below for allowed modes. (default polarity_false) int verbosity; // Verbosity level. 0=silent, 1=some progress report (default 0) enum { polarity_true = 0, polarity_false = 1, polarity_user = 2, polarity_rnd = 3 }; // Statistics: (read-only member variable) // uint64_t starts, decisions, rnd_decisions, propagations, conflicts; uint64_t clauses_literals, learnts_literals, max_literals, tot_literals; protected: // Helper structures: // struct VarOrderLt { const vec& activity; bool operator () (Var x, Var y) const { return activity[x] > activity[y]; } VarOrderLt(const vec& act) : activity(act) { } void print(Var x) const { printf("%.2f", activity[x]); } }; friend class VarFilter; struct VarFilter { const Solver& s; VarFilter(const Solver& _s) : s(_s) {} bool operator()(Var v) const { return toLbool(s.assigns[v]) == l_Undef && s.decision_var[v]; } }; // Solver state: // bool ok; // If FALSE, the constraints are already unsatisfiable. No part of the solver state may be used! vec clauses; // List of problem clauses. vec learnts; // List of learnt clauses. double cla_inc; // Amount to bump next clause with. vec activity; // A heuristic measurement of the activity of a variable. vec original_activity; // A heuristic measurement of the activity of a variable. double var_inc; // Amount to bump next variable with. vec > watches; // 'watches[lit]' is a list of constraints watching 'lit' (will go there if literal becomes true). vec assigns; // The current assignments (lbool:s stored as char:s). vec polarity; // The preferred polarity of each variable. vec decision_var; // Declares if a variable is eligible for selection in the decision heuristic. vec trail; // Assignment stack; stores all assigments made in the order they were made. vec trail_lim; // Separator indices for different decision levels in 'trail'. vec reason; // 'reason[var]' is the clause that implied the variables current value, or 'NULL' if none. vec level; // 'level[var]' contains the level at which the assignment was made. int qhead; // Head of queue (as index into the trail -- no more explicit propagation queue in MiniSat). int simpDB_assigns; // Number of top-level assignments since last execution of 'simplify()'. int64_t simpDB_props; // Remaining number of propagations that must be made before next execution of 'simplify()'. vec assumptions; // Current set of assumptions provided to solve by the user. Heap order_heap; // A priority queue of variables ordered with respect to the variable activity. double random_seed; // Used by the random variable selection. double progress_estimate;// Set by 'search()'. bool remove_satisfied; // Indicates whether possibly inefficient linear scan for satisfied clauses should be performed in 'simplify'. // Temporaries (to reduce allocation overhead). Each variable is prefixed by the method in which it is // used, exept 'seen' wich is used in several places. // vec seen; vec analyze_stack; vec analyze_toclear; vec add_tmp; // Main internal methods: // void insertVarOrder (Var x); // Insert a variable in the decision order priority queue. Lit pickBranchLit (int polarity_mode, double random_var_freq); // Return the next decision variable. void newDecisionLevel (); // Begins a new decision level. void uncheckedEnqueue (Lit p, Clause* from = NULL); // Enqueue a literal. Assumes value of literal is undefined. bool enqueue (Lit p, Clause* from = NULL); // Test if fact 'p' contradicts current state, enqueue otherwise. Clause* propagate (); // Perform unit propagation. Returns possibly conflicting clause. void cancelUntil (int level); // Backtrack until a certain level. void analyze (Clause* confl, vec& out_learnt, int& out_btlevel); // (bt = backtrack) void analyzeFinal (Lit p, vec& out_conflict); // COULD THIS BE IMPLEMENTED BY THE ORDINARIY "analyze" BY SOME REASONABLE GENERALIZATION? bool litRedundant (Lit p, uint32_t abstract_levels); // (helper method for 'analyze()') lbool search (int nof_conflicts, int nof_learnts); // Search for a given number of conflicts. void reduceDB (); // Reduce the set of learnt clauses. void removeSatisfied (vec& cs); // Shrink 'cs' to contain only non-satisfied clauses. // Maintaining Variable/Clause activity: // void varDecayActivity (); // Decay all variables with the specified factor. Implemented by increasing the 'bump' value instead. void varBumpActivity (Var v); // Increase a variable with the current 'bump' value. void claDecayActivity (); // Decay all clauses with the specified factor. Implemented by increasing the 'bump' value instead. void claBumpActivity (Clause& c); // Increase a clause with the current 'bump' value. // Operations on clauses: // void attachClause (Clause& c); // Attach a clause to watcher lists. void detachClause (Clause& c); // Detach a clause to watcher lists. void removeClause (Clause& c); // Detach and free a clause. bool locked (const Clause& c) const; // Returns TRUE if a clause is a reason for some implication in the current state. bool satisfied (const Clause& c) const; // Returns TRUE if a clause is satisfied in the current state. // Misc: // int decisionLevel () const; // Gives the current decisionlevel. uint32_t abstractLevel (Var x) const; // Used to represent an abstraction of sets of decision levels. double progressEstimate () const; // DELETE THIS ?? IT'S NOT VERY USEFUL ... unsigned minDecisionLevel; // Debug: void printLit (Lit l); template void printClause (const C& c); public: void printTrail() { int j = 0; for (int i = 0; i < trail.size(); i++) { if (j < trail_lim.size() && i == trail_lim[j]) { printf("|\n"); j++; printLit(trail[i]); printf(" (%g) ", activity[var(trail[i])]); continue; } if (activity[var(trail[i])] > 0) { char c1 = sign(trail[i]) ? '-' : '+'; char c2 = polarity[var(trail[i])] == 0 ? '-' : '+'; if (c1 != c2) { printLit(trail[i]); printf(" (%g)", activity[var(trail[i])]); printf("_*. "); } } } printf("\n\n"); } std::map _literal_count; void checkPure() { std::map::const_iterator i; for (i = _literal_count.begin(); i != _literal_count.end(); i++) if (_literal_count.find(~(i->first)) == _literal_count.end() && value(i->first) == l_Undef) { printf("Pure literal:"); printLit(i->first); printf("\n"); exit(1); } } void printStats() { printf("restarts : .%lld.\n", starts); printf("conflicts : .%-12lld. \n", conflicts); printf("decisions : .%-12lld. (%4.2f %% random) \n", decisions, (float)rnd_decisions*100 / (float)decisions); printf("propagations : .%-12lld. \n", propagations); printf("conflict literals : .%-12lld. (%4.2f %% deleted)\n", tot_literals, (max_literals - tot_literals)*100 / (double)max_literals); } protected: void verifyModel (); void checkLiteralCount(); // Static helpers: // // Returns a random float 0 <= x < 1. Seed must never be 0. static inline double drand(double& seed) { seed *= 1389796; int q = (int)(seed / 2147483647); seed -= (double)q * 2147483647; return seed / 2147483647; } // Returns a random integer 0 <= x < size. Seed must never be 0. static inline int irand(double& seed, int size) { return (int)(drand(seed) * size); } }; //================================================================================================= // Implementation of inline methods: inline void Solver::insertVarOrder(Var x) { if (!order_heap.inHeap(x) && decision_var[x]) order_heap.insert(x); } inline void Solver::varDecayActivity() { var_inc *= var_decay; } inline void Solver::varBumpActivity(Var v) { if ( (activity[v] += var_inc) > 1e100 ) { // Rescale: for (int i = 0; i < nVars(); i++) activity[i] *= 1e-100; var_inc *= 1e-100; } // Update order_heap with respect to new activity: if (order_heap.inHeap(v)) order_heap.decrease(v); } inline void Solver::claDecayActivity() { cla_inc *= clause_decay; } inline void Solver::claBumpActivity (Clause& c) { if ( (c.activity() += cla_inc) > 1e20 ) { // Rescale: for (int i = 0; i < learnts.size(); i++) learnts[i]->activity() *= 1e-20; cla_inc *= 1e-20; } } inline bool Solver::enqueue (Lit p, Clause* from) { return value(p) != l_Undef ? value(p) != l_False : (uncheckedEnqueue(p, from), true); } inline bool Solver::locked (const Clause& c) const { return reason[var(c[0])] == &c && value(c[0]) == l_True; } inline void Solver::newDecisionLevel() { trail_lim.push(trail.size()); } inline int Solver::decisionLevel () const { return trail_lim.size(); } inline uint32_t Solver::abstractLevel (Var x) const { return 1 << (level[x] & 31); } inline lbool Solver::value (Var x) const { return toLbool(assigns[x]); } inline lbool Solver::value (Lit p) const { return toLbool(assigns[var(p)]) ^ sign(p); } inline lbool Solver::modelValue (Lit p) const { return model[var(p)] ^ sign(p); } inline int Solver::nAssigns () const { return trail.size(); } inline int Solver::nClauses () const { return clauses.size(); } inline int Solver::nLearnts () const { return learnts.size(); } inline int Solver::nVars () const { return assigns.size(); } inline void Solver::setPolarity (Var v, bool b) { polarity [v] = (char)b; } inline void Solver::setDecisionVar(Var v, bool b) { decision_var[v] = (char)b; if (b) { insertVarOrder(v); } } inline void Solver::setActivity (Var v, double a) { activity[v] = a; original_activity[v] = a; if (order_heap.inHeap(v)) order_heap.decrease(v);} inline lbool Solver::solve () { vec tmp; return solve(tmp); } inline bool Solver::okay () const { return ok; } //================================================================================================= // Debug + etc: #define reportf(format, args...) ( fflush(stdout), fprintf(stdout, format, ## args), fflush(stderr) ) static inline void logLit(FILE* f, Lit l) { fprintf(f, "%sx%d", sign(l) ? "~" : "", var(l)+1); } static inline void logLits(FILE* f, const vec& ls) { fprintf(f, "[ "); if (ls.size() > 0){ logLit(f, ls[0]); for (int i = 1; i < ls.size(); i++){ fprintf(f, ", "); logLit(f, ls[i]); } } fprintf(f, "] "); } static inline const char* showBool(bool b) { return b ? "true" : "false"; } // Just like 'assert()' but expression will be evaluated in the release version as well. static inline void check(bool expr) { } inline void Solver::printLit(Lit l) { // printf("%s%d:%c", sign(l) ? "-" : "", var(l)+1, value(l) == l_True ? '1' : (value(l) == l_False ? '0' : 'X')); printf("%s%d", sign(l) ? "-" : "+", var(l)); } template inline void Solver::printClause(const C& c) { int size = c.size(); for (int i = 0; i < size; i++){ printLit(c[i]); printf(" "); } } //================================================================================================= #endif link-grammar/link-grammar/minisat/BoxedVec.h0000644000000000000000000001272712536650433016242 0ustar /*******************************************************************************************[Vec.h] MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson 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. **************************************************************************************************/ #ifndef BoxedVec_h #define BoxedVec_h #include #include //================================================================================================= // Automatically resizable arrays // // NOTE! Don't use this vector on datatypes that cannot be re-located in memory (with realloc) template class bvec { static inline int imin(int x, int y) { int mask = (x-y) >> (sizeof(int)*8-1); return (x&mask) + (y&(~mask)); } static inline int imax(int x, int y) { int mask = (y-x) >> (sizeof(int)*8-1); return (x&mask) + (y&(~mask)); } struct Vec_t { int sz; int cap; T data[0]; static Vec_t* alloc(Vec_t* x, int size){ x = (Vec_t*)realloc((void*)x, sizeof(Vec_t) + sizeof(T)*size); x->cap = size; return x; } }; Vec_t* ref; static const int init_size = 2; static int nextSize (int current) { return (current * 3 + 1) >> 1; } static int fitSize (int needed) { int x; for (x = init_size; needed > x; x = nextSize(x)); return x; } void fill (int size) { assert(ref != NULL); for (T* i = ref->data; i < ref->data + size; i++) new (i) T(); } void fill (int size, const T& pad) { assert(ref != NULL); for (T* i = ref->data; i < ref->data + size; i++) new (i) T(pad); } // Don't allow copying (error prone): altvec& operator = (altvec& other) { assert(0); } altvec (altvec& other) { assert(0); } public: void clear (bool dealloc = false) { if (ref != NULL){ for (int i = 0; i < ref->sz; i++) (*ref).data[i].~T(); if (dealloc) { free(ref); ref = NULL; }else ref->sz = 0; } } // Constructors: altvec(void) : ref (NULL) { } altvec(int size) : ref (Vec_t::alloc(NULL, fitSize(size))) { fill(size); ref->sz = size; } altvec(int size, const T& pad) : ref (Vec_t::alloc(NULL, fitSize(size))) { fill(size, pad); ref->sz = size; } ~altvec(void) { clear(true); } // Ownership of underlying array: operator T* (void) { return ref->data; } // (unsafe but convenient) operator const T* (void) const { return ref->data; } // Size operations: int size (void) const { return ref != NULL ? ref->sz : 0; } void pop (void) { assert(ref != NULL && ref->sz > 0); int last = --ref->sz; ref->data[last].~T(); } void push (const T& elem) { int size = ref != NULL ? ref->sz : 0; int cap = ref != NULL ? ref->cap : 0; if (size == cap){ cap = cap != 0 ? nextSize(cap) : init_size; ref = Vec_t::alloc(ref, cap); } //new (&ref->data[size]) T(elem); ref->data[size] = elem; ref->sz = size+1; } void push () { int size = ref != NULL ? ref->sz : 0; int cap = ref != NULL ? ref->cap : 0; if (size == cap){ cap = cap != 0 ? nextSize(cap) : init_size; ref = Vec_t::alloc(ref, cap); } new (&ref->data[size]) T(); ref->sz = size+1; } void shrink (int nelems) { for (int i = 0; i < nelems; i++) pop(); } void shrink_(int nelems) { for (int i = 0; i < nelems; i++) pop(); } void growTo (int size) { while (this->size() < size) push(); } void growTo (int size, const T& pad) { while (this->size() < size) push(pad); } void capacity (int size) { growTo(size); } const T& last (void) const { return ref->data[ref->sz-1]; } T& last (void) { return ref->data[ref->sz-1]; } // Vector interface: const T& operator [] (int index) const { return ref->data[index]; } T& operator [] (int index) { return ref->data[index]; } void copyTo(altvec& copy) const { copy.clear(); for (int i = 0; i < size(); i++) copy.push(ref->data[i]); } void moveTo(altvec& dest) { dest.clear(true); dest.ref = ref; ref = NULL; } }; #endif link-grammar/link-grammar/minisat/Solver.C0000644000000000000000000006607012536650433015750 0ustar /****************************************************************************************[Solver.C] MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson 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. **************************************************************************************************/ #include "Solver.h" #include "Sort.h" #include #include // #define _MINISAT_DEFAULT_VSS // #define __PRINT //================================================================================================= // Constructor/Destructor: Solver::Solver() : // Parameters: (formerly in 'SearchParams') var_decay(1 / 0.95), clause_decay(1 / 0.999), random_var_freq(0.02) , restart_first(100), restart_inc(1.5), learntsize_factor((double)1/(double)3), learntsize_inc(1.1) // More parameters: // , expensive_ccmin (true) , polarity_mode (polarity_false) , verbosity (0) // Statistics: (formerly in 'SolverStats') // , starts(0), decisions(0), rnd_decisions(0), propagations(0), conflicts(0) , clauses_literals(0), learnts_literals(0), max_literals(0), tot_literals(0) , ok (true) , cla_inc (1) , var_inc (1) , qhead (0) , simpDB_assigns (-1) , simpDB_props (0) , order_heap (VarOrderLt(activity)) , random_seed (91648253) , progress_estimate(0) , remove_satisfied (true) , minDecisionLevel ((unsigned)(-1)) {} Solver::~Solver() { for (int i = 0; i < learnts.size(); i++) free(learnts[i]); for (int i = 0; i < clauses.size(); i++) free(clauses[i]); } //================================================================================================= // Minor methods: // Creates a new SAT variable in the solver. If 'decision_var' is cleared, variable will not be // used as a decision variable (NOTE! This has effects on the meaning of a SATISFIABLE result). // Var Solver::newVar(bool sign, double act, bool dvar) { int v = nVars(); watches .push(); // (list for positive literal) watches .push(); // (list for negative literal) reason .push(NULL); assigns .push(toInt(l_Undef)); level .push(-1); activity .push(act); original_activity .push(act); seen .push(0); polarity .push((char)sign); decision_var.push((char)dvar); insertVarOrder(v); return v; } bool Solver::addClause(vec& ps) { #ifdef __PRINT for (int i = 0; i < ps.size(); i++) { if (_literal_count.find(ps[i]) == _literal_count.end()) _literal_count[ps[i]] = 1; else _literal_count[ps[i]]++; } #endif if (!ok) return false; // Check if clause is satisfied and remove false/duplicate literals: // Special attention is put on single and double literal clauses if (ps.size() == 1 || (ps.size() == 2 && ps[0] == ps[1])) { // Unary or Binary with a duplicate literal if (value(ps[0]) == l_True) { #ifdef __PRINT printf("---satisfied---\n"); #endif return true; } else if (value(ps[0]) == l_False) { #ifdef __PRINT printf("Clause empty after simplification\n"); #endif return ok = false; } else { uncheckedEnqueue(ps[0]); return ok = (propagate() == NULL); } } else if (ps.size() == 2) { // Real Binary clauses if (value(ps[0]) == l_True || value(ps[1]) == l_True || ps[0] == ~ps[1]) { #ifdef __PRINT printf("---satisfied---\n"); #endif return true; } else if (value(ps[0]) == l_False) { if (value(ps[1]) == l_False) { #ifdef __PRINT printf("Clause empty after simplification\n"); #endif return ok = false; } else { uncheckedEnqueue(ps[1]); return ok = (propagate() == NULL); } } else { if (value(ps[1]) == l_False) { uncheckedEnqueue(ps[0]); return ok = (propagate() == NULL); } else { Clause* c = Clause_new(ps, false); clauses.push(c); attachClause(*c); } } } else { sort(ps); Lit p; int i, j; for (i = j = 0, p = lit_Undef; i < ps.size(); i++) if (value(ps[i]) == l_True || ps[i] == ~p) { #ifdef __PRINT printf("---satisfied---\n"); #endif return true; } else if (value(ps[i]) != l_False && ps[i] != p) ps[j++] = p = ps[i]; ps.shrink(i - j); if (ps.size() == 0) { #ifdef __PRINT printf("Clause empty after simplification\n"); #endif return ok = false; } else if (ps.size() == 1){ uncheckedEnqueue(ps[0]); return ok = (propagate() == NULL); }else{ Clause* c = Clause_new(ps, false); clauses.push(c); attachClause(*c); #ifdef __PRINT // printf("Simplified: "); // printClause(*c); // printf("\n"); #endif } } return true; } void Solver::addConflictingClause(vec& lits) { if (lits.size() == 1) { if (value(lits[0]) == l_True) return; if (value(lits[0]) == l_False) { if (level[var(lits[0])] == 0) { ok = false; return; } cancelUntil(level[var(lits[0])] - 1); } uncheckedEnqueue(~lits[0]); } else { vec learnt_clause; int backtrack_level; for (int i = 1; i < lits.size(); i++) { if (value(lits[0]) == l_False) { if (value(lits[i]) != l_False){ Lit tmp = lits[0]; lits[0] = lits[i]; lits[i] = tmp; } } else if (value(lits[1]) == l_False) { if (value(lits[i]) != l_False){ Lit tmp = lits[1]; lits[1] = lits[i]; lits[i] = tmp; break; } } } if (value(lits[0]) == l_False) { for (int i = 1; i < lits.size(); i++) { if (level[var(lits[i])] > level[var(lits[0])]) { Lit tmp = lits[0]; lits[0] = lits[i]; lits[i] = tmp; } } } if (value(lits[1]) == l_False) { for (int i = 2; i < lits.size(); i++) { if (level[var(lits[i])] > level[var(lits[1])]) { Lit tmp = lits[1]; lits[1] = lits[i]; lits[i] = tmp; } } } Clause* confl = Clause_new(lits, true); clauses.push(confl); attachClause(*confl); if (value(lits[0]) != l_False) { if (value(lits[1]) == l_False) { uncheckedEnqueue(lits[0], confl); } return; } int maxLevel = level[var(lits[0])]; cancelUntil(maxLevel); if (maxLevel == 0) { ok = false; return; } learnt_clause.clear(); analyze(confl, learnt_clause, backtrack_level); cancelUntil(backtrack_level); if (learnt_clause.size() == 1){ uncheckedEnqueue(learnt_clause[0]); }else{ Clause* c = Clause_new(learnt_clause, true); learnts.push(c); attachClause(*c); claBumpActivity(*c); uncheckedEnqueue(learnt_clause[0], c); } #ifdef _MINISAT_DEFAULT_VSS varDecayActivity(); #endif claDecayActivity(); } } void Solver::attachClause(Clause& c) { watches[toInt(~c[0])].push(&c); watches[toInt(~c[1])].push(&c); if (c.learnt()) learnts_literals += c.size(); else clauses_literals += c.size(); } void Solver::detachClause(Clause& c) { remove(watches[toInt(~c[0])], &c); remove(watches[toInt(~c[1])], &c); if (c.learnt()) learnts_literals -= c.size(); else clauses_literals -= c.size(); } void Solver::removeClause(Clause& c) { detachClause(c); free(&c); } bool Solver::satisfied(const Clause& c) const { for (int i = 0; i < c.size(); i++) if (value(c[i]) == l_True) return true; return false; } // Revert to the state at given level (keeping all assignment at 'level' but not beyond). // void Solver::cancelUntil(int level) { if (decisionLevel() > level){ for (int c = trail.size()-1; c >= trail_lim[level]; c--){ Var x = var(trail[c]); assigns[x] = toInt(l_Undef); insertVarOrder(x); } qhead = trail_lim[level]; trail.shrink(trail.size() - trail_lim[level]); trail_lim.shrink(trail_lim.size() - level); } } //================================================================================================= // Major methods: Lit Solver::pickBranchLit(int polarity_mode, double random_var_freq) { Var next = var_Undef; // Random decision: /* if (drand(random_seed) < random_var_freq && !order_heap.empty()){ next = order_heap[irand(random_seed,order_heap.size())]; if (toLbool(assigns[next]) == l_Undef && decision_var[next]) rnd_decisions++; } */ // Activity based decision: while (next == var_Undef || toLbool(assigns[next]) != l_Undef || !decision_var[next]) { if (order_heap.empty()){ next = var_Undef; break; }else next = order_heap.removeMin(); } if (next == var_Undef) return lit_Undef; bool sign = false; switch (polarity_mode){ case polarity_true: sign = false; break; case polarity_false: sign = true; break; case polarity_user: sign = polarity[next]; break; case polarity_rnd: sign = irand(random_seed, 2); break; } sign = !polarity[next]; // do { // int var; // std::cin >> var; // sign = !(var > 0); // next = Var(abs(var) - 1); // } while(toLbool(assigns[next]) != l_Undef); // std::cout << "var: " << var << " sign: " << sign << std::endl; return next == var_Undef ? lit_Undef : Lit(next, sign); } /*_________________________________________________________________________________________________ | | analyze : (confl : Clause*) (out_learnt : vec&) (out_btlevel : int&) -> [void] | | Description: | Analyze conflict and produce a reason clause. | | Pre-conditions: | * 'out_learnt' is assumed to be cleared. | * Current decision level must be greater than root level. | | Post-conditions: | * 'out_learnt[0]' is the asserting literal at level 'out_btlevel'. | | Effect: | Will undo part of the trail, upto but not beyond the assumption of the current decision level. |________________________________________________________________________________________________@*/ void Solver::analyze(Clause* confl, vec& out_learnt, int& out_btlevel) { int pathC = 0; Lit p = lit_Undef; // Generate conflict clause: // out_learnt.push(); // (leave room for the asserting literal) int index = trail.size() - 1; out_btlevel = 0; do{ Clause& c = *confl; #ifdef __PRINT printf("Explain: "); printClause(c); printf("\n"); #endif if (c.learnt()) claBumpActivity(c); for (int j = (p == lit_Undef) ? 0 : 1; j < c.size(); j++){ Lit q = c[j]; if (!seen[var(q)] && level[var(q)] > 0){ #ifdef _MINISAT_DEFAULT_VSS varBumpActivity(var(q)); #endif seen[var(q)] = 1; if (level[var(q)] >= decisionLevel()) { pathC++; }else{ out_learnt.push(q); if (level[var(q)] > out_btlevel) out_btlevel = level[var(q)]; } } } // Select next clause to look at: while (!seen[var(trail[index--])]); p = trail[index+1]; confl = reason[var(p)]; seen[var(p)] = 0; pathC--; } while (pathC > 0); out_learnt[0] = ~p; // Simplify conflict clause: // int i, j; if (expensive_ccmin){ uint32_t abstract_level = 0; for (i = 1; i < out_learnt.size(); i++) abstract_level |= abstractLevel(var(out_learnt[i])); // (maintain an abstraction of levels involved in conflict) out_learnt.copyTo(analyze_toclear); for (i = j = 1; i < out_learnt.size(); i++) if (reason[var(out_learnt[i])] == NULL || !litRedundant(out_learnt[i], abstract_level)) out_learnt[j++] = out_learnt[i]; }else{ out_learnt.copyTo(analyze_toclear); for (i = j = 1; i < out_learnt.size(); i++){ Clause& c = *reason[var(out_learnt[i])]; for (int k = 1; k < c.size(); k++) if (!seen[var(c[k])] && level[var(c[k])] > 0){ out_learnt[j++] = out_learnt[i]; break; } } } max_literals += out_learnt.size(); out_learnt.shrink(i - j); tot_literals += out_learnt.size(); // Find correct backtrack level: // if (out_learnt.size() == 1) out_btlevel = 0; else{ int max_i = 1; for (int i = 2; i < out_learnt.size(); i++) if (level[var(out_learnt[i])] > level[var(out_learnt[max_i])]) max_i = i; Lit p = out_learnt[max_i]; out_learnt[max_i] = out_learnt[1]; out_learnt[1] = p; out_btlevel = level[var(p)]; } #ifdef __PRINT printf("Learnt: "); for (int i = 0; i < out_learnt.size(); i++) { printf("%s%d ", sign(out_learnt[i]) ? "-" : "", var(out_learnt[i])); if (value(out_learnt[i]) != l_False) exit(1); } printf("\n"); #endif for (int j = 0; j < analyze_toclear.size(); j++) seen[var(analyze_toclear[j])] = 0; // ('seen[]' is now cleared) } // Check if 'p' can be removed. 'abstract_levels' is used to abort early if the algorithm is // visiting literals at levels that cannot be removed later. bool Solver::litRedundant(Lit p, uint32_t abstract_levels) { analyze_stack.clear(); analyze_stack.push(p); int top = analyze_toclear.size(); while (analyze_stack.size() > 0){ Clause& c = *reason[var(analyze_stack.last())]; analyze_stack.pop(); for (int i = 1; i < c.size(); i++){ Lit p = c[i]; if (!seen[var(p)] && level[var(p)] > 0){ if (reason[var(p)] != NULL && (abstractLevel(var(p)) & abstract_levels) != 0){ seen[var(p)] = 1; analyze_stack.push(p); analyze_toclear.push(p); }else{ for (int j = top; j < analyze_toclear.size(); j++) seen[var(analyze_toclear[j])] = 0; analyze_toclear.shrink(analyze_toclear.size() - top); return false; } } } } return true; } /*_________________________________________________________________________________________________ | | analyzeFinal : (p : Lit) -> [void] | | Description: | Specialized analysis procedure to express the final conflict in terms of assumptions. | Calculates the (possibly empty) set of assumptions that led to the assignment of 'p', and | stores the result in 'out_conflict'. |________________________________________________________________________________________________@*/ void Solver::analyzeFinal(Lit p, vec& out_conflict) { out_conflict.clear(); out_conflict.push(p); if (decisionLevel() == 0) return; seen[var(p)] = 1; for (int i = trail.size()-1; i >= trail_lim[0]; i--){ Var x = var(trail[i]); if (seen[x]){ if (reason[x] == NULL){ out_conflict.push(~trail[i]); }else{ Clause& c = *reason[x]; for (int j = 1; j < c.size(); j++) if (level[var(c[j])] > 0) seen[var(c[j])] = 1; } seen[x] = 0; } } seen[var(p)] = 0; } void Solver::uncheckedEnqueue(Lit p, Clause* from) { #ifdef __PRINT if (from) { printClause(*from); } printf("--> "); printLit(p); printf("\n"); if (decisionLevel() == 0) { printf("Zl: "); printLit(p); printf("\n"); } #endif assigns [var(p)] = toInt(lbool(!sign(p))); // <<== abstract but not uttermost effecient level [var(p)] = decisionLevel(); reason [var(p)] = from; trail.push(p); } /*_________________________________________________________________________________________________ | | propagate : [void] -> [Clause*] | | Description: | Propagates all enqueued facts. If a conflict arises, the conflicting clause is returned, | otherwise NULL. | | Post-conditions: | * the propagation queue is empty, even if there was a conflict. |________________________________________________________________________________________________@*/ Clause* Solver::propagate() { Clause* confl = NULL; int num_props = 0; while (qhead < trail.size()){ Lit p = trail[qhead++]; // 'p' is enqueued fact to propagate. vec& ws = watches[toInt(p)]; Clause **i, **j, **end; num_props++; for (i = j = (Clause**)ws, end = i + ws.size(); i != end;){ Clause& c = **i++; // Make sure the false literal is data[1]: Lit false_lit = ~p; if (c[0] == false_lit) c[0] = c[1], c[1] = false_lit; // If 0th watch is true, then clause is already satisfied. Lit first = c[0]; if (value(first) == l_True){ *j++ = &c; }else{ // Look for new watch: for (int k = 2; k < c.size(); k++) if (value(c[k]) != l_False){ c[1] = c[k]; c[k] = false_lit; watches[toInt(~c[1])].push(&c); goto FoundWatch; } // Did not find watch -- clause is unit under assignment: *j++ = &c; if (value(first) == l_False){ confl = &c; #ifdef __PRINT printf("Conflict: "); printClause(*confl); printf("\n"); /* vec learnt_clause; int backtrack_level; analyze(confl, learnt_clause, backtrack_level); */ #endif qhead = trail.size(); // Copy the remaining watches: while (i < end) *j++ = *i++; }else uncheckedEnqueue(first, &c); } FoundWatch:; } ws.shrink(i - j); } propagations += num_props; simpDB_props -= num_props; return confl; } /*_________________________________________________________________________________________________ | | reduceDB : () -> [void] | | Description: | Remove half of the learnt clauses, minus the clauses locked by the current assignment. Locked | clauses are clauses that are reason to some assignment. Binary clauses are never removed. |________________________________________________________________________________________________@*/ struct reduceDB_lt { bool operator () (Clause* x, Clause* y) { return x->size() > 2 && (y->size() == 2 || x->activity() < y->activity()); } }; void Solver::reduceDB() { int i, j; double extra_lim = cla_inc / learnts.size(); // Remove any clause below this activity sort(learnts, reduceDB_lt()); for (i = j = 0; i < learnts.size() / 2; i++){ if (learnts[i]->size() > 2 && !locked(*learnts[i])) removeClause(*learnts[i]); else learnts[j++] = learnts[i]; } for (; i < learnts.size(); i++){ if (learnts[i]->size() > 2 && !locked(*learnts[i]) && learnts[i]->activity() < extra_lim) removeClause(*learnts[i]); else learnts[j++] = learnts[i]; } learnts.shrink(i - j); } void Solver::removeSatisfied(vec& cs) { int i,j; for (i = j = 0; i < cs.size(); i++){ if (satisfied(*cs[i])) removeClause(*cs[i]); else cs[j++] = cs[i]; } cs.shrink(i - j); } /*_________________________________________________________________________________________________ | | simplify : [void] -> [bool] | | Description: | Simplify the clause database according to the current top-level assigment. Currently, the only | thing done here is the removal of satisfied clauses, but more things can be put here. |________________________________________________________________________________________________@*/ bool Solver::simplify() { if (!ok || propagate() != NULL) { return ok = false; } if (nAssigns() == simpDB_assigns || (simpDB_props > 0)) return true; // Remove satisfied clauses: removeSatisfied(learnts); if (remove_satisfied) // Can be turned off. removeSatisfied(clauses); // Remove fixed variables from the variable heap: order_heap.filter(VarFilter(*this)); simpDB_assigns = nAssigns(); simpDB_props = clauses_literals + learnts_literals; // (shouldn't depend on stats really, but it will do for now) return true; } /*_________________________________________________________________________________________________ | | search : (nof_conflicts : int) (nof_learnts : int) (params : const SearchParams&) -> [lbool] | | Description: | Search for a model the specified number of conflicts, keeping the number of learnt clauses | below the provided limit. NOTE! Use negative value for 'nof_conflicts' or 'nof_learnts' to | indicate infinity. | | Output: | 'l_True' if a partial assigment that is consistent with respect to the clauseset is found. If | all variables are decision variables, this means that the clause set is satisfiable. 'l_False' | if the clause set is unsatisfiable. 'l_Undef' if the bound on number of conflicts is reached. |________________________________________________________________________________________________@*/ lbool Solver::search(int nof_conflicts, int nof_learnts) { int backtrack_level; int conflictC = 0; vec learnt_clause; starts++; bool first = true; for (;;){ Clause* confl = propagate(); if (confl != NULL){ // CONFLICT conflicts++; conflictC++; if (decisionLevel() == 0) return l_False; first = false; learnt_clause.clear(); analyze(confl, learnt_clause, backtrack_level); cancelUntil(backtrack_level); #ifdef __PRINT char c1 = sign(learnt_clause[0]) ? '-' : '+'; char c2 = polarity[var(learnt_clause[0])] == 0 ? '-' : '+'; if (decisionLevel() < minDecisionLevel && original_activity[var(learnt_clause[0])] > 0) { printf("Conflict record: "); printLit(learnt_clause[0]); printf(" .%d.\t.%d. %c .%c .%g\n", decisionLevel(), trail.size(), c1, c2, original_activity[var(learnt_clause[0])]); if (decisionLevel() == 0) { minDecisionLevel = (unsigned)(-1); } else { minDecisionLevel = decisionLevel(); } } #endif if (learnt_clause.size() == 1){ uncheckedEnqueue(learnt_clause[0]); }else{ Clause* c = Clause_new(learnt_clause, true); learnts.push(c); attachClause(*c); claBumpActivity(*c); uncheckedEnqueue(learnt_clause[0], c); } #ifdef _MINISAT_DEFAULT_VSS varDecayActivity(); #endif claDecayActivity(); }else{ // NO CONFLICT if (nof_conflicts >= 0 && conflictC >= nof_conflicts){ // Reached bound on number of conflicts: progress_estimate = progressEstimate(); // cancelUntil(0); return l_Undef; } // Simplify the set of problem clauses: if (decisionLevel() == 0 && !simplify()) return l_False; if (nof_learnts >= 0 && learnts.size()-nAssigns() >= nof_learnts) // Reduce the set of learnt clauses: reduceDB(); Lit next = lit_Undef; while (decisionLevel() < assumptions.size()){ // Perform user provided assumption: Lit p = assumptions[decisionLevel()]; if (value(p) == l_True){ // Dummy decision level: newDecisionLevel(); }else if (value(p) == l_False){ analyzeFinal(~p, conflict); return l_False; }else{ next = p; break; } } if (next == lit_Undef){ // New variable decision: decisions++; next = pickBranchLit(polarity_mode, random_var_freq); if (next == lit_Undef) // Model found: return l_True; #ifdef __PRINT printf("Decision: "); printLit(next); printf("\t.%f.\t.%d.\t.%d.", activity[var(next)], decisionLevel(), trail.size()); printf("\n"); #endif } // Increase decision level and enqueue 'next' newDecisionLevel(); uncheckedEnqueue(next); } //#ifdef __PRINT // printTrail(); //#endif } } double Solver::progressEstimate() const { double progress = 0; double F = 1.0 / nVars(); for (int i = 0; i <= decisionLevel(); i++){ int beg = i == 0 ? 0 : trail_lim[i - 1]; int end = i == decisionLevel() ? trail.size() : trail_lim[i]; progress += pow(F, i) * (end - beg); } return progress / nVars(); } lbool Solver::solve(const vec& assumps) { model.clear(); conflict.clear(); if (!ok) { return false; } assumps.copyTo(assumptions); double nof_conflicts = restart_first; double nof_learnts = nClauses() * learntsize_factor; lbool status = l_Undef; if (verbosity >= 1){ reportf("============================[ Search Statistics ]==============================\n"); reportf("| Conflicts | ORIGINAL | LEARNT | Progress |\n"); reportf("| | Vars Clauses Literals | Limit Clauses Lit/Cl | |\n"); reportf("===============================================================================\n"); } // Search: while (status == l_Undef){ if (verbosity >= 1) reportf("| .%9d. | .%7d. .%8d. .%8d. | .%8d. .%8d. .%6.0f. | .%6.3f. %% |\n", (int)conflicts, order_heap.size(), nClauses(), (int)clauses_literals, (int)nof_learnts, nLearnts(), (double)learnts_literals/nLearnts(), progress_estimate*100), fflush(stdout); status = search((int)nof_conflicts, (int)nof_learnts); nof_conflicts *= restart_inc; nof_learnts *= learntsize_inc; } if (verbosity >= 1) reportf("===============================================================================\n"); if (status == l_True){ // Extend & copy model: model.growTo(nVars()); for (int i = 0; i < nVars(); i++) model[i] = value(i); // printTrail(); #ifdef _DEBUG verifyModel(); #endif }else{ if (conflict.size() == 0) { ok = false; } } // cancelUntil(0); return status; } //================================================================================================= // Debug methods: void Solver::verifyModel() { bool failed = false; for (int i = 0; i < clauses.size(); i++){ Clause& c = *clauses[i]; for (int j = 0; j < c.size(); j++) if (modelValue(c[j]) == l_True) goto next; reportf("unsatisfied clause: "); printClause(*clauses[i]); reportf("\n"); failed = true; next:; } // reportf("Verified %d original clauses.\n", clauses.size()); } void Solver::checkLiteralCount() { // Check that sizes are calculated correctly: int cnt = 0; for (int i = 0; i < clauses.size(); i++) if (clauses[i]->mark() == 0) cnt += clauses[i]->size(); if ((int)clauses_literals != cnt){ fprintf(stderr, "literal count: %d, real value = %d\n", (int)clauses_literals, cnt); } } link-grammar/link-grammar/api.c0000644000000000000000000013642012536650433013640 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* Copyright 2008, 2009 Linas Vepstas */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include #include #include #include "disjuncts.h" #include "error.h" #include "preparation.h" #include "read-regex.h" #include "regex-morph.h" #include "sat-solver/sat-encoder.h" #include "corpus/corpus.h" #include "spellcheck.h" /*************************************************************** * * Routines for setting Parse_Options * ****************************************************************/ static int VDAL_compare_parse(Linkage_info * p1, Linkage_info * p2) { /* for sorting the linkages in postprocessing */ if (p1->N_violations != p2->N_violations) { return (p1->N_violations - p2->N_violations); } else if (p1->unused_word_cost != p2->unused_word_cost) { return (p1->unused_word_cost - p2->unused_word_cost); } else if (p1->fat != p2->fat) { return (p1->fat - p2->fat); } else if (p1->disjunct_cost != p2->disjunct_cost) { return (p1->disjunct_cost - p2->disjunct_cost); } else if (p1->and_cost != p2->and_cost) { return (p1->and_cost - p2->and_cost); } else { return (p1->link_cost - p2->link_cost); } } #ifdef USE_CORPUS static int CORP_compare_parse(Linkage_info * p1, Linkage_info * p2) { double diff = p1->corpus_cost - p2->corpus_cost; if (fabs(diff) < 1.0e-5) return VDAL_compare_parse(p1, p2); if (diff < 0.0f) return -1; return 1; } #endif /** * Create and initialize a Parse_Options object */ Parse_Options parse_options_create(void) { Parse_Options po; init_memusage(); po = (Parse_Options) xalloc(sizeof(struct Parse_Options_s)); /* Here's where the values are initialized */ po->verbosity = 1; po->linkage_limit = 100; po->disjunct_cost = MAX_DISJUNCT_COST; po->use_fat_links = FALSE; po->min_null_count = 0; po->max_null_count = 0; po->null_block = 1; po->islands_ok = FALSE; po->use_spell_guess = TRUE; po->use_sat_solver = FALSE; #ifdef XXX_USE_CORPUS /* Use the corpus cost model, if available. * It really does a better job at parse ranking. * Err .. sometimes ... */ po->cost_model.compare_fn = &CORP_compare_parse; po->cost_model.type = CORPUS; #else /* USE_CORPUS */ po->cost_model.compare_fn = &VDAL_compare_parse; po->cost_model.type = VDAL; #endif /* USE_CORPUS */ po->short_length = 6; po->all_short = FALSE; po->twopass_length = 30; po->max_sentence_length = 170; po->resources = resources_create(); po->display_short = TRUE; po->display_word_subscripts = TRUE; po->display_link_subscripts = TRUE; po->display_walls = FALSE; po->display_union = FALSE; po->allow_null = TRUE; po->use_cluster_disjuncts = FALSE; po->echo_on = FALSE; po->batch_mode = FALSE; po->panic_mode = FALSE; po->screen_width = 79; po->display_on = TRUE; po->display_postscript = FALSE; po->display_constituents = 0; po->display_bad = FALSE; po->display_disjuncts = FALSE; po->display_links = FALSE; po->display_senses = FALSE; return po; } int parse_options_delete(Parse_Options opts) { resources_delete(opts->resources); xfree(opts, sizeof(struct Parse_Options_s)); return 0; } void parse_options_set_cost_model_type(Parse_Options opts, int cm) { switch(cm) { case VDAL: opts->cost_model.type = VDAL; opts->cost_model.compare_fn = &VDAL_compare_parse; break; case CORPUS: #ifdef USE_CORPUS opts->cost_model.type = CORPUS; opts->cost_model.compare_fn = &CORP_compare_parse; #else prt_error("Error: Source code compiled with cost model 'CORPUS' disabled.\n"); #endif break; default: prt_error("Error: Illegal cost model: %d\n", cm); } } int parse_options_get_cost_model_type(Parse_Options opts) { return opts->cost_model.type; } void parse_options_set_verbosity(Parse_Options opts, int dummy) { opts->verbosity = dummy; verbosity = opts->verbosity; /* this is one of the only global variables. */ } int parse_options_get_verbosity(Parse_Options opts) { return opts->verbosity; } void parse_options_set_use_sat_parser(Parse_Options opts, int dummy) { #ifdef USE_SAT_SOLVER opts->use_sat_solver = dummy; #else prt_error("Error: cannot enable the Boolean SAT parser; this " " library was built without SAT solver support.\n"); #endif } int parse_options_get_use_sat_parser(Parse_Options opts) { return opts->use_sat_solver; } void parse_options_set_use_fat_links(Parse_Options opts, int dummy) { opts->use_fat_links = dummy; } int parse_options_get_use_fat_links(Parse_Options opts) { return opts->use_fat_links; } void parse_options_set_linkage_limit(Parse_Options opts, int dummy) { opts->linkage_limit = dummy; } int parse_options_get_linkage_limit(Parse_Options opts) { return opts->linkage_limit; } void parse_options_set_disjunct_cost(Parse_Options opts, int dummy) { opts->disjunct_cost = dummy; } void parse_options_set_disjunct_costf(Parse_Options opts, float dummy) { opts->disjunct_cost = dummy; } int parse_options_get_disjunct_cost(Parse_Options opts) { return opts->disjunct_cost; } float parse_options_get_disjunct_costf(Parse_Options opts) { return opts->disjunct_cost; } void parse_options_set_min_null_count(Parse_Options opts, int val) { opts->min_null_count = val; } int parse_options_get_min_null_count(Parse_Options opts) { return opts->min_null_count; } void parse_options_set_max_null_count(Parse_Options opts, int val) { opts->max_null_count = val; } int parse_options_get_max_null_count(Parse_Options opts) { return opts->max_null_count; } void parse_options_set_null_block(Parse_Options opts, int dummy) { opts->null_block = dummy; } int parse_options_get_null_block(Parse_Options opts) { return opts->null_block; } void parse_options_set_islands_ok(Parse_Options opts, int dummy) { opts->islands_ok = dummy; } int parse_options_get_islands_ok(Parse_Options opts) { return opts->islands_ok; } void parse_options_set_spell_guess(Parse_Options opts, int dummy) { opts->use_spell_guess = dummy; } int parse_options_get_spell_guess(Parse_Options opts) { return opts->use_spell_guess; } void parse_options_set_short_length(Parse_Options opts, int short_length) { opts->short_length = short_length; } int parse_options_get_short_length(Parse_Options opts) { return opts->short_length; } void parse_options_set_all_short_connectors(Parse_Options opts, int val) { opts->all_short = val; } int parse_options_get_all_short_connectors(Parse_Options opts) { return opts->all_short; } void parse_options_set_max_parse_time(Parse_Options opts, int dummy) { opts->resources->max_parse_time = dummy; } int parse_options_get_max_parse_time(Parse_Options opts) { return opts->resources->max_parse_time; } void parse_options_set_max_memory(Parse_Options opts, int dummy) { opts->resources->max_memory = dummy; } int parse_options_get_max_memory(Parse_Options opts) { return opts->resources->max_memory; } void parse_options_set_max_sentence_length(Parse_Options opts, int dummy) { opts->max_sentence_length = dummy; } int parse_options_get_max_sentence_length(Parse_Options opts) { return opts->max_sentence_length; } void parse_options_set_echo_on(Parse_Options opts, int dummy) { opts->echo_on = dummy; } int parse_options_get_echo_on(Parse_Options opts) { return opts->echo_on; } void parse_options_set_batch_mode(Parse_Options opts, int dummy) { opts->batch_mode = dummy; } int parse_options_get_batch_mode(Parse_Options opts) { return opts->batch_mode; } void parse_options_set_panic_mode(Parse_Options opts, int dummy) { opts->panic_mode = dummy; } int parse_options_get_panic_mode(Parse_Options opts) { return opts->panic_mode; } void parse_options_set_allow_null(Parse_Options opts, int dummy) { opts->allow_null = dummy; } int parse_options_get_allow_null(Parse_Options opts) { return opts->allow_null; } void parse_options_set_use_cluster_disjuncts(Parse_Options opts, int dummy) { opts->use_cluster_disjuncts = dummy; } int parse_options_get_use_cluster_disjuncts(Parse_Options opts) { return opts->use_cluster_disjuncts; } void parse_options_set_screen_width(Parse_Options opts, int dummy) { opts->screen_width = dummy; } int parse_options_get_screen_width(Parse_Options opts) { return opts->screen_width; } void parse_options_set_display_on(Parse_Options opts, int dummy) { opts->display_on = dummy; } int parse_options_get_display_on(Parse_Options opts) { return opts->display_on; } void parse_options_set_display_postscript(Parse_Options opts, int dummy) { opts->display_postscript = dummy; } int parse_options_get_display_postscript(Parse_Options opts) { return opts->display_postscript; } void parse_options_set_display_constituents(Parse_Options opts, int dummy) { if ((dummy < 0) || (dummy > 3)) { prt_error("Possible values for constituents: \n" " 0 (no display)\n" " 1 (treebank style, multi-line indented)\n" " 2 (flat tree, square brackets)\n" " 3 (flat treebank style)\n"); opts->display_constituents = 0; } else opts->display_constituents = dummy; } int parse_options_get_display_constituents(Parse_Options opts) { return opts->display_constituents; } void parse_options_set_display_bad(Parse_Options opts, int dummy) { opts->display_bad = dummy; } int parse_options_get_display_bad(Parse_Options opts) { return opts->display_bad; } void parse_options_set_display_disjuncts(Parse_Options opts, int dummy) { opts->display_disjuncts = dummy; } int parse_options_get_display_disjuncts(Parse_Options opts) { return opts->display_disjuncts; } void parse_options_set_display_links(Parse_Options opts, int dummy) { opts->display_links = dummy; } int parse_options_get_display_links(Parse_Options opts) { return opts->display_links; } void parse_options_set_display_senses(Parse_Options opts, int dummy) { opts->display_senses = dummy; } int parse_options_get_display_senses(Parse_Options opts) { return opts->display_senses; } void parse_options_set_display_walls(Parse_Options opts, int dummy) { opts->display_walls = dummy; } int parse_options_get_display_walls(Parse_Options opts) { return opts->display_walls; } int parse_options_get_display_union(Parse_Options opts) { return opts->display_union; } void parse_options_set_display_union(Parse_Options opts, int dummy) { opts->display_union = dummy; } int parse_options_timer_expired(Parse_Options opts) { return resources_timer_expired(opts->resources); } int parse_options_memory_exhausted(Parse_Options opts) { return resources_memory_exhausted(opts->resources); } int parse_options_resources_exhausted(Parse_Options opts) { return (resources_timer_expired(opts->resources) || resources_memory_exhausted(opts->resources)); } void parse_options_reset_resources(Parse_Options opts) { resources_reset(opts->resources); } /*************************************************************** * * Routines for manipulating Dictionary * ****************************************************************/ /* Units will typically have a ".u" at the end. Get * rid of it, as otherwise stipping is messed up. */ static inline char * deinflect(const char * str) { char * s = strdup(str); char * p = strchr(s, '.'); if (p && p != s) *p = 0x0; return s; } static void affix_list_create(Dictionary dict) { int i, j, k, l, m; int r_strippable=0, l_strippable=0, u_strippable=0; int s_strippable=0, p_strippable=0; Dict_node * dn, * dn2, * start_dn; const char * rpunc_con = "RPUNC"; const char * lpunc_con = "LPUNC"; const char * units_con = "UNITS"; /* Hmm SUF and PRE do not seem to be used at this time ... */ const char * suf_con = "SUF"; const char * pre_con = "PRE"; dict->strip_left = NULL; dict->strip_right = NULL; dict->strip_units = NULL; dict->prefix = NULL; dict->suffix = NULL; /* Load affixes from the affix table. */ start_dn = list_whole_dictionary(dict->root, NULL); for (dn = start_dn; dn != NULL; dn = dn->right) { if (word_has_connector(dn, rpunc_con, 0)) r_strippable++; if (word_has_connector(dn, lpunc_con, 0)) l_strippable++; if (word_has_connector(dn, units_con, 0)) u_strippable++; if (word_has_connector(dn, suf_con, 0)) s_strippable++; if (word_has_connector(dn, pre_con, 0)) p_strippable++; } dict->strip_right = (const char **) xalloc(r_strippable * sizeof(char *)); dict->strip_left = (const char **) xalloc(l_strippable * sizeof(char *)); dict->strip_units = (const char **) xalloc(u_strippable * sizeof(char *)); dict->suffix = (const char **) xalloc(s_strippable * sizeof(char *)); dict->prefix = (const char **) xalloc(p_strippable * sizeof(char *)); dict->r_strippable = r_strippable; dict->l_strippable = l_strippable; dict->u_strippable = u_strippable; dict->p_strippable = p_strippable; dict->s_strippable = s_strippable; i = 0; j = 0; k = 0; l = 0; m = 0; dn = start_dn; while (dn != NULL) { if (word_has_connector(dn, rpunc_con, 0)) { dict->strip_right[i] = deinflect(dn->string); i++; } if (word_has_connector(dn, lpunc_con, 0)) { dict->strip_left[j] = deinflect(dn->string); j++; } if (word_has_connector(dn, units_con, 0)) { dict->strip_units[m] = deinflect(dn->string); m++; } if (word_has_connector(dn, suf_con, 0)) { dict->suffix[k] = dn->string; k++; } if (word_has_connector(dn, pre_con, 0)) { dict->prefix[l] = dn->string; l++; } dn2 = dn->right; dn->right = NULL; xfree(dn, sizeof(Dict_node)); dn = dn2; } } static void affix_list_delete(Dictionary dict) { int i; for (i=0; il_strippable; i++) { free((char *)dict->strip_left[i]); } for (i=0; ir_strippable; i++) { free((char *)dict->strip_right[i]); } for (i=0; iu_strippable; i++) { free((char *)dict->strip_units[i]); } xfree(dict->strip_right, dict->r_strippable * sizeof(char *)); xfree(dict->strip_left, dict->l_strippable * sizeof(char *)); xfree(dict->strip_units, dict->u_strippable * sizeof(char *)); xfree(dict->suffix, dict->s_strippable * sizeof(char *)); xfree(dict->prefix, dict->p_strippable * sizeof(char *)); } /** * The following function is dictionary_create with an extra * paramater called "path". If this is non-null, then the path * used to find the file is taken from that path. Otherwise, * the path is taken from the dict_name. This is only needed * because an affix_file is opened by a recursive call to this * function. */ static Dictionary dictionary_six(const char * lang, const char * dict_name, const char * pp_name, const char * cons_name, const char * affix_name, const char * regex_name) { const char * t; Dictionary dict; Dict_node *dict_node; init_memusage(); dict = (Dictionary) xalloc(sizeof(struct Dictionary_s)); memset(dict, 0, sizeof(struct Dictionary_s)); dict->string_set = string_set_create(); dict->lang = lang; t = strrchr (lang, '/'); if (t) dict->lang = string_set_add(t+1, dict->string_set); dict->name = string_set_add(dict_name, dict->string_set); dict->max_cost = 1000; dict->num_entries = 0; dict->is_special = FALSE; dict->already_got_it = '\0'; dict->line_number = 1; dict->root = NULL; dict->word_file_header = NULL; dict->exp_list = NULL; dict->affix_table = NULL; dict->recursive_error = FALSE; /* To disable spell-checking, just set the cheker to NULL */ dict->spell_checker = spellcheck_create(dict->lang); dict->fp = dictopen(dict->name, "r"); if (dict->fp == NULL) { prt_error("Error: Could not open dictionary %s\n", dict_name); goto failure; } if (!read_dictionary(dict)) { fclose(dict->fp); goto failure; } fclose(dict->fp); dict->affix_table = NULL; if (affix_name != NULL) { dict->affix_table = dictionary_six(lang, affix_name, NULL, NULL, NULL, NULL); if (dict->affix_table == NULL) { goto failure; } affix_list_create(dict->affix_table); } dict->regex_root = NULL; if (regex_name != NULL) { int rc; rc = read_regex_file(dict, regex_name); if (rc) goto failure; rc = compile_regexs(dict); if (rc) goto failure; } #if USE_CORPUS dict->corpus = NULL; if (affix_name != NULL) /* Don't do this for the second time */ { dict->corpus = lg_corpus_new(); } #endif dict->left_wall_defined = boolean_dictionary_lookup(dict, LEFT_WALL_WORD); dict->right_wall_defined = boolean_dictionary_lookup(dict, RIGHT_WALL_WORD); dict->postprocessor = post_process_open(pp_name); dict->constituent_pp = post_process_open(cons_name); dict->unknown_word_defined = boolean_dictionary_lookup(dict, UNKNOWN_WORD); dict->use_unknown_word = TRUE; #if DONT_USE_REGEX_GUESSING dict->capitalized_word_defined = boolean_dictionary_lookup(dict, PROPER_WORD); dict->pl_capitalized_word_defined = boolean_dictionary_lookup(dict, PL_PROPER_WORD); dict->hyphenated_word_defined = boolean_dictionary_lookup(dict, HYPHENATED_WORD); dict->number_word_defined = boolean_dictionary_lookup(dict, NUMBER_WORD); dict->ing_word_defined = boolean_dictionary_lookup(dict, ING_WORD); dict->s_word_defined = boolean_dictionary_lookup(dict, S_WORD); dict->ed_word_defined = boolean_dictionary_lookup(dict, ED_WORD); dict->ly_word_defined = boolean_dictionary_lookup(dict, LY_WORD); #endif /* DONT_USE_REGEX_GUESSING */ if ((dict_node = dictionary_lookup_list(dict, ANDABLE_CONNECTORS_WORD)) != NULL) { dict->andable_connector_set = connector_set_create(dict_node->exp); } else { dict->andable_connector_set = NULL; } free_lookup_list(dict_node); if ((dict_node = dictionary_lookup_list(dict, UNLIMITED_CONNECTORS_WORD)) != NULL) { dict->unlimited_connector_set = connector_set_create(dict_node->exp); } else { dict->unlimited_connector_set = NULL; } free_lookup_list(dict_node); return dict; failure: string_set_delete(dict->string_set); xfree(dict, sizeof(struct Dictionary_s)); return NULL; } Dictionary dictionary_create(const char * dict_name, const char * pp_name, const char * cons_name, const char * affix_name) { return dictionary_six("en", dict_name, pp_name, cons_name, affix_name, NULL); } Dictionary dictionary_create_lang(const char * lang) { Dictionary dictionary; if(lang && *lang) { char * dict_name; char * pp_name; char * cons_name; char * affix_name; char * regex_name; dict_name = join_path(lang, "4.0.dict"); pp_name = join_path(lang, "4.0.knowledge"); cons_name = join_path(lang, "4.0.constituent-knowledge"); affix_name = join_path(lang, "4.0.affix"); regex_name = join_path(lang, "4.0.regex"); dictionary = dictionary_six(lang, dict_name, pp_name, cons_name, affix_name, regex_name); free(regex_name); free(affix_name); free(cons_name); free(pp_name); free(dict_name); } else { prt_error("Error: No language specified!\n"); dictionary = NULL; } return dictionary; } Dictionary dictionary_create_default_lang(void) { Dictionary dictionary; char * lang; lang = get_default_locale(); if(lang && *lang) { dictionary = dictionary_create_lang(lang); free(lang); } else { /* Default to en when locales are broken (e.g. WIN32) */ dictionary = dictionary_create_lang("en"); } return dictionary; } int dictionary_delete(Dictionary dict) { if (verbosity > 0) { prt_error("Info: Freeing dictionary %s\n", dict->name); } #if USE_CORPUS lg_corpus_delete(dict->corpus); #endif if (dict->affix_table != NULL) { affix_list_delete(dict->affix_table); dictionary_delete(dict->affix_table); } spellcheck_destroy(dict->spell_checker); connector_set_delete(dict->andable_connector_set); connector_set_delete(dict->unlimited_connector_set); post_process_close(dict->postprocessor); post_process_close(dict->constituent_pp); string_set_delete(dict->string_set); free_regexs(dict); free_dictionary(dict); xfree(dict, sizeof(struct Dictionary_s)); return 0; } int dictionary_get_max_cost(Dictionary dict) { return dict->max_cost; } /*************************************************************** * * Routines for postprocessing * ****************************************************************/ static Linkage_info * linkage_info_new(int num_to_alloc) { Linkage_info *link_info; link_info = (Linkage_info *) xalloc(num_to_alloc * sizeof(Linkage_info)); memset(link_info, 0, num_to_alloc * sizeof(Linkage_info)); return link_info; } static void linkage_info_delete(Linkage_info *link_info, int sz) { int i,j; for (i=0; inwords; for (j=0; jdisjunct_list_str[j]) free(lifo->disjunct_list_str[j]); } free(lifo->disjunct_list_str); #ifdef USE_CORPUS lg_sense_delete(lifo); #endif } xfree(link_info, sz); } static void free_andlists(Sentence sent) { int L; Andlist * andlist, * next; for(L=0; Lnum_linkages_post_processed; L++) { /* printf("%d ", sent->link_info[L].canonical); */ /* if (sent->link_info[L].canonical==0) continue; */ andlist = sent->link_info[L].andlist; while(1) { if(andlist == NULL) break; next = andlist->next; xfree((char *) andlist, sizeof(Andlist)); andlist = next; } } /* printf("\n"); */ } static void free_post_processing(Sentence sent) { if (sent->link_info != NULL) { /* postprocessing must have been done */ free_andlists(sent); linkage_info_delete(sent->link_info, sent->num_linkages_alloced); sent->link_info = NULL; } } static void post_process_linkages(Sentence sent, Parse_Options opts) { int *indices; int in, block_bottom, block_top; int N_linkages_found, N_linkages_alloced; int N_linkages_post_processed, N_valid_linkages; int N_thin_linkages; int overflowed, only_canonical_allowed; Linkage_info *link_info; int canonical; free_post_processing(sent); overflowed = build_parse_set(sent, sent->null_count, opts); print_time(opts, "Built parse set"); if (overflowed && (1 < opts->verbosity)) { err_ctxt ec; ec.sent = sent; err_msg(&ec, Warn, "Warning: Count overflow.\n" "Considering a random subset of %d of an unknown and large number of linkages\n", opts->linkage_limit); } N_linkages_found = sent->num_linkages_found; if (sent->num_linkages_found == 0) { sent->num_linkages_alloced = 0; sent->num_linkages_post_processed = 0; sent->num_valid_linkages = 0; sent->num_thin_linkages = 0; sent->link_info = NULL; return; } if (N_linkages_found > opts->linkage_limit) { N_linkages_alloced = opts->linkage_limit; if (opts->verbosity > 1) { err_ctxt ec; ec.sent = sent; err_msg(&ec, Warn, "Warning: Considering a random subset of %d of %d linkages\n", N_linkages_alloced, N_linkages_found); } } else { N_linkages_alloced = N_linkages_found; } link_info = linkage_info_new(N_linkages_alloced); N_valid_linkages = 0; /* Generate an array of linkage indices to examine */ indices = (int *) xalloc(N_linkages_alloced * sizeof(int)); if (overflowed) { for (in=0; in < N_linkages_alloced; in++) { indices[in] = -(in+1); } } else { sent->rand_state = N_linkages_found + sent->length; for (in=0; inrand_state) % (block_top-block_bottom)); } } only_canonical_allowed = !(overflowed || (N_linkages_found > 2*opts->linkage_limit)); /* When we're processing only a small subset of the linkages, * don't worry about restricting the set we consider to be * canonical ones. In the extreme case where we are only * generating 1 in a million linkages, it's very unlikely * that we'll hit two symmetric variants of the same linkage * anyway. */ /* (optional) first pass: just visit the linkages */ /* The purpose of these two passes is to make the post-processing * more efficient. Because (hopefully) by the time you do the * real work in the 2nd pass you've pruned the relevant rule set * in the first pass. */ if (sent->length >= opts->twopass_length) { for (in=0; (in < N_linkages_alloced) && (!resources_exhausted(opts->resources)); in++) { extract_links(indices[in], sent->null_count, sent->parse_info); if (set_has_fat_down(sent)) { if (only_canonical_allowed && !is_canonical_linkage(sent)) continue; analyze_fat_linkage(sent, opts, PP_FIRST_PASS); } else { analyze_thin_linkage(sent, opts, PP_FIRST_PASS); } } } /* second pass: actually perform post-processing */ N_linkages_post_processed = 0; N_thin_linkages = 0; for (in=0; (in < N_linkages_alloced) && (!resources_exhausted(opts->resources)); in++) { Linkage_info *lifo = &link_info[N_linkages_post_processed]; extract_links(indices[in], sent->null_count, sent->parse_info); if (set_has_fat_down(sent)) { canonical = is_canonical_linkage(sent); if (only_canonical_allowed && !canonical) continue; *lifo = analyze_fat_linkage(sent, opts, PP_SECOND_PASS); lifo->fat = TRUE; lifo->canonical = canonical; } else { *lifo = analyze_thin_linkage(sent, opts, PP_SECOND_PASS); lifo->fat = FALSE; lifo->canonical = TRUE; } if (0 == lifo->N_violations) { N_valid_linkages++; if (FALSE == lifo->fat) N_thin_linkages++; } lifo->index = indices[in]; lg_corpus_score(sent, lifo); N_linkages_post_processed++; } print_time(opts, "Postprocessed all linkages"); qsort((void *)link_info, N_linkages_post_processed, sizeof(Linkage_info), (int (*)(const void *, const void *)) opts->cost_model.compare_fn); if (!resources_exhausted(opts->resources)) { if ((N_linkages_post_processed == 0) && (N_linkages_found > 0) && (N_linkages_found < opts->linkage_limit)) { /* With the current parser, the following sentence will elicit * this error: * * Well, say, Joe, you can be Friar Tuck or Much the miller's * son, and lam me with a quarter-staff; or I'll be the Sheriff * of Nottingham and you be Robin Hood a little while and kill * me. */ err_ctxt ec; ec.sent = sent; err_msg(&ec, Error, "Error: None of the linkages is canonical\n" "\tN_linkages_post_processed=%d " "N_linkages_found=%d\n", N_linkages_post_processed, N_linkages_found); } } if (opts->verbosity > 1) { err_ctxt ec; ec.sent = sent; err_msg(&ec, Info, "Info: %d of %d linkages with no P.P. violations\n", N_valid_linkages, N_linkages_post_processed); } print_time(opts, "Sorted all linkages"); sent->num_linkages_alloced = N_linkages_alloced; sent->num_linkages_post_processed = N_linkages_post_processed; sent->num_valid_linkages = N_valid_linkages; sent->num_thin_linkages = N_thin_linkages; sent->link_info = link_info; xfree(indices, N_linkages_alloced * sizeof(int)); /*if(N_valid_linkages == 0) free_andlists(sent); */ } /*************************************************************** * * Routines for creating and destroying processing Sentences * ****************************************************************/ Sentence sentence_create(const char *input_string, Dictionary dict) { Sentence sent; sent = (Sentence) xalloc(sizeof(struct Sentence_s)); memset(sent, 0, sizeof(struct Sentence_s)); sent->dict = dict; sent->length = 0; sent->num_linkages_found = 0; sent->num_linkages_alloced = 0; sent->num_linkages_post_processed = 0; sent->num_valid_linkages = 0; sent->link_info = NULL; sent->deletable = NULL; sent->effective_dist = NULL; sent->num_valid_linkages = 0; sent->null_count = 0; sent->parse_info = NULL; sent->string_set = string_set_create(); sent->q_pruned_rules = FALSE; sent->is_conjunction = NULL; sent->dptr = NULL; sent->deletable = NULL; /* Make a copy of the input */ sent->orig_sentence = string_set_add (input_string, sent->string_set); return sent; } /* XXX Extreme hack alert -- English-language words are used * completely naked in the C source code!!! FIXME !!!! */ static void set_is_conjunction(Sentence sent) { int w; char * s; for (w=0; wlength; w++) { s = sent->word[w].string; sent->is_conjunction[w] = (strcmp(s, "and")==0) || (strcmp(s, "or" )==0) || (strcmp(s, "but")==0) || (strcmp(s, "nor")==0); } } int sentence_split(Sentence sent, Parse_Options opts) { int i; Dictionary dict = sent->dict; /* Cleanup stuff previously allocated. This is because some free * routines depend on sent-length, which might change in different * parse-opts settings. */ free_deletable(sent); /* Tokenize */ if (!separate_sentence(sent, opts)) { return -1; } sent->q_pruned_rules = FALSE; /* for post processing */ sent->is_conjunction = (char *) xalloc(sizeof(char)*sent->length); set_is_conjunction(sent); initialize_conjunction_tables(sent); for (i=0; ilength; i++) { /* in case we free these before they set to anything else */ sent->word[i].x = NULL; sent->word[i].d = NULL; } if (!(dict->unknown_word_defined && dict->use_unknown_word)) { if (!sentence_in_dictionary(sent)) { return -2; } } /* Look up each word in the dictionary, collect up all * plausible disjunct expressions for each word. */ if (!build_sentence_expressions(sent, opts)) { sent->num_valid_linkages = 0; return -3; } return 0; } void sentence_delete(Sentence sent) { if (!sent) return; sat_sentence_delete(sent); /* free_andlists(sent); */ free_sentence_disjuncts(sent); free_sentence_expressions(sent); string_set_delete(sent->string_set); if (sent->parse_info) free_parse_info(sent->parse_info); free_post_processing(sent); post_process_close_sentence(sent->dict->postprocessor); free_deletable(sent); free_effective_dist(sent); free_count(sent); free_analyze(sent); if (sent->is_conjunction) xfree(sent->is_conjunction, sizeof(char)*sent->length); xfree((char *) sent, sizeof(struct Sentence_s)); } int sentence_length(Sentence sent) { if (!sent) return 0; return sent->length; } const char * sentence_get_word(Sentence sent, int index) { if (!sent) return NULL; return sent->word[index].string; } const char * sentence_get_nth_word(Sentence sent, int index) { if (!sent) return NULL; return sent->word[index].string; } int sentence_null_count(Sentence sent) { if (!sent) return 0; return sent->null_count; } int sentence_num_thin_linkages(Sentence sent) { if (!sent) return 0; return sent->num_thin_linkages; } int sentence_num_linkages_found(Sentence sent) { if (!sent) return 0; return sent->num_linkages_found; } int sentence_num_valid_linkages(Sentence sent) { if (!sent) return 0; return sent->num_valid_linkages; } int sentence_num_linkages_post_processed(Sentence sent) { if (!sent) return 0; return sent->num_linkages_post_processed; } int sentence_num_violations(Sentence sent, int i) { if (!sent) return 0; /* The sat solver (currently) fails to fill in link_info */ if (!sent->link_info) return 0; return sent->link_info[i].N_violations; } int sentence_and_cost(Sentence sent, int i) { if (!sent) return 0; /* The sat solver (currently) fails to fill in link_info */ if (!sent->link_info) return 0; return sent->link_info[i].and_cost; } int sentence_disjunct_cost(Sentence sent, int i) { if (!sent) return 0; /* The sat solver (currently) fails to fill in link_info */ if (!sent->link_info) return 0; return sent->link_info[i].disjunct_cost; } int sentence_link_cost(Sentence sent, int i) { if (!sent) return 0; /* The sat solver (currently) fails to fill in link_info */ if (!sent->link_info) return 0; return sent->link_info[i].link_cost; } int sentence_nth_word_has_disjunction(Sentence sent, int i) { if (!sent) return 0; prt_error("Warning: sentence_nth_word_has_disjunction() is deprecated!\n"); return (sent->parse_info->chosen_disjuncts[i] != NULL); } static void chart_parse(Sentence sent, Parse_Options opts) { int nl; /* Build lists of disjuncts */ prepare_to_parse(sent, opts); init_fast_matcher(sent); init_count(sent); /* A parse set may have been already been built for this sentence, * if it was previously parsed. If so we free it up before * building another. */ if (sent->parse_info) free_parse_info(sent->parse_info); sent->parse_info = parse_info_new(sent->length); for (nl = opts->min_null_count; nl<=opts->max_null_count ; ++nl) { s64 total; if (resources_exhausted(opts->resources)) break; sent->null_count = nl; total = do_parse(sent, sent->null_count, opts); if (verbosity > 1) { prt_error("Info: Total count with %d null links: %lld\n", sent->null_count, total); } /* Give up if the parse count is overflowing */ if (PARSE_NUM_OVERFLOW < total) { if (verbosity > 0) { prt_error("WARNING: Combinatorial explosion! nulls=%d cnt=%lld\n" "Consider retrying the parse with the max allowed disjunct cost set lower.\n", sent->null_count, total); } total = (total>INT_MAX) ? INT_MAX : total; } sent->num_linkages_found = (int) total; print_time(opts, "Counted parses"); post_process_linkages(sent, opts); if (sent->num_valid_linkages > 0) break; /* If we are here, then no valid linakges were found. * If there was a parse overflow, give up now. */ if (PARSE_NUM_OVERFLOW < total) break; } free_count(sent); free_fast_matcher(sent); } int sentence_parse(Sentence sent, Parse_Options opts) { int rc; verbosity = opts->verbosity; /* If the sentence has not yet been split, do so now. * This is for backwards compatibility, for existing programs * that do not explicitly call the splitter. */ if (0 == sent->length) { rc = sentence_split(sent, opts); if (rc) return -1; } /* Check for bad sentence length */ if (MAX_SENTENCE <= sent->length) { prt_error("Error: sentence too long, contains more than %d words\n", MAX_SENTENCE); return -2; } /* Initialize/free any leftover garbage */ free_sentence_disjuncts(sent); resources_reset_space(opts->resources); if (resources_exhausted(opts->resources)) { sent->num_valid_linkages = 0; return 0; } init_analyze(sent); /* Expressions were previously set up during the tokenize stage. */ expression_prune(sent); print_time(opts, "Finished expression pruning"); if (opts->use_sat_solver) { sat_parse(sent, opts); } else { chart_parse(sent, opts); } print_time(opts, "Finished parse"); return sent->num_valid_linkages; } /*************************************************************** * * Routines which allow user access to Linkages. * ****************************************************************/ Linkage linkage_create(int k, Sentence sent, Parse_Options opts) { Linkage linkage; if (opts->use_sat_solver) { return sat_create_linkage(k, sent, opts); } if ((k >= sent->num_linkages_post_processed) || (k < 0)) return NULL; /* Using exalloc since this is external to the parser itself. */ linkage = (Linkage) exalloc(sizeof(struct Linkage_s)); linkage->num_words = sent->length; linkage->word = (const char **) exalloc(linkage->num_words*sizeof(char *)); linkage->current = 0; linkage->num_sublinkages=0; linkage->sublinkage = NULL; linkage->unionized = FALSE; linkage->sent = sent; linkage->opts = opts; linkage->info = &sent->link_info[k]; linkage->dis_con_tree = NULL; extract_links(sent->link_info[k].index, sent->null_count, sent->parse_info); compute_chosen_words(sent, linkage); if (set_has_fat_down(sent)) { extract_fat_linkage(sent, opts, linkage); } else { extract_thin_linkage(sent, opts, linkage); } if (sent->dict->postprocessor != NULL) { linkage_post_process(linkage, sent->dict->postprocessor); } return linkage; } int linkage_get_current_sublinkage(Linkage linkage) { return linkage->current; } int linkage_set_current_sublinkage(Linkage linkage, int index) { if ((index < 0) || (index >= linkage->num_sublinkages)) { return 0; } linkage->current = index; return 1; } static void exfree_pp_info(PP_info *ppi) { if (ppi->num_domains > 0) exfree(ppi->domain_name, sizeof(const char *)*ppi->num_domains); ppi->domain_name = NULL; ppi->num_domains = 0; } void linkage_delete(Linkage linkage) { int i, j; Sublinkage *s; /* Can happen on panic timeout or user error */ if (NULL == linkage) return; for (i=0; inum_words; ++i) { exfree((void *) linkage->word[i], strlen(linkage->word[i])+1); } exfree(linkage->word, sizeof(char *)*linkage->num_words); for (i=0; inum_sublinkages; ++i) { s = &(linkage->sublinkage[i]); for (j=0; jnum_links; ++j) { exfree_link(s->link[j]); } exfree(s->link, sizeof(Link)*s->num_links); if (s->pp_info != NULL) { for (j=0; jnum_links; ++j) { exfree_pp_info(&s->pp_info[j]); } exfree(s->pp_info, sizeof(PP_info)*s->num_links); s->pp_info = NULL; post_process_free_data(&s->pp_data); } if (s->violation != NULL) { exfree((void *) s->violation, sizeof(char)*(strlen(s->violation)+1)); } } exfree(linkage->sublinkage, sizeof(Sublinkage)*linkage->num_sublinkages); if (linkage->dis_con_tree) free_DIS_tree(linkage->dis_con_tree); exfree(linkage, sizeof(struct Linkage_s)); } static int links_are_equal(Link *l, Link *m) { return ((l->l == m->l) && (l->r == m->r) && (strcmp(l->name, m->name)==0)); } static int link_already_appears(Linkage linkage, Link *link, int a) { int i, j; for (i=0; isublinkage[i].num_links; ++j) { if (links_are_equal(linkage->sublinkage[i].link[j], link)) return TRUE; } } return FALSE; } static PP_info excopy_pp_info(PP_info ppi) { PP_info newppi; int i; newppi.num_domains = ppi.num_domains; newppi.domain_name = (const char **) exalloc(sizeof(const char *)*ppi.num_domains); for (i=0; inum_sublinkages; ++i) { for (j=0; jsublinkage[i].num_links; ++j) { link = linkage->sublinkage[i].link[j]; if (!link_already_appears(linkage, link, i)) num_in_union++; } } u.link = (Link **) exalloc(sizeof(Link *)*num_in_union); u.num_links = num_in_union; zero_sublinkage(&u); u.pp_info = (PP_info *) exalloc(sizeof(PP_info)*num_in_union); u.violation = NULL; u.num_links = num_in_union; num_in_union = 0; for (i=0; inum_sublinkages; ++i) { for (j=0; jsublinkage[i].num_links; ++j) { link = linkage->sublinkage[i].link[j]; if (!link_already_appears(linkage, link, i)) { u.link[num_in_union] = excopy_link(link); u.pp_info[num_in_union] = excopy_pp_info(linkage->sublinkage[i].pp_info[j]); if (((p=linkage->sublinkage[i].violation) != NULL) && (u.violation == NULL)) { char *s = (char *) exalloc((strlen(p)+1)*sizeof(char)); strcpy(s, p); u.violation = s; } num_in_union++; } } } return u; } int linkage_compute_union(Linkage linkage) { int i, num_subs=linkage->num_sublinkages; Sublinkage * new_sublinkage, *s; if (linkage->unionized) { linkage->current = linkage->num_sublinkages-1; return 0; } if (num_subs == 1) { linkage->unionized = TRUE; return 1; } new_sublinkage = (Sublinkage *) exalloc(sizeof(Sublinkage)*(num_subs+1)); for (i=0; isublinkage[i]; } exfree(linkage->sublinkage, sizeof(Sublinkage)*num_subs); linkage->sublinkage = new_sublinkage; /* Zero out the new sublinkage, then unionize it. */ s = &new_sublinkage[num_subs]; s->link = NULL; s->num_links = 0; zero_sublinkage(s); linkage->sublinkage[num_subs] = unionize_linkage(linkage); linkage->num_sublinkages++; linkage->unionized = TRUE; linkage->current = linkage->num_sublinkages-1; return 1; } int linkage_get_num_sublinkages(Linkage linkage) { return linkage->num_sublinkages; } int linkage_get_num_words(Linkage linkage) { return linkage->num_words; } int linkage_get_num_links(Linkage linkage) { int current = linkage->current; return linkage->sublinkage[current].num_links; } static inline int verify_link_index(Linkage linkage, int index) { if ((index < 0) || (index >= linkage->sublinkage[linkage->current].num_links)) { return 0; } return 1; } int linkage_get_link_length(Linkage linkage, int index) { Link *link; int word_has_link[MAX_SENTENCE]; int i, length; int current = linkage->current; if (!verify_link_index(linkage, index)) return -1; for (i=0; inum_words+1; ++i) { word_has_link[i] = FALSE; } for (i=0; isublinkage[current].num_links; ++i) { link = linkage->sublinkage[current].link[i]; word_has_link[link->l] = TRUE; word_has_link[link->r] = TRUE; } link = linkage->sublinkage[current].link[index]; length = link->r - link->l; for (i= link->l+1; i < link->r; ++i) { if (!word_has_link[i]) length--; } return length; } int linkage_get_link_lword(Linkage linkage, int index) { Link *link; if (!verify_link_index(linkage, index)) return -1; link = linkage->sublinkage[linkage->current].link[index]; return link->l; } int linkage_get_link_rword(Linkage linkage, int index) { Link *link; if (!verify_link_index(linkage, index)) return -1; link = linkage->sublinkage[linkage->current].link[index]; return link->r; } const char * linkage_get_link_label(Linkage linkage, int index) { Link *link; if (!verify_link_index(linkage, index)) return NULL; link = linkage->sublinkage[linkage->current].link[index]; return link->name; } const char * linkage_get_link_llabel(Linkage linkage, int index) { Link *link; if (!verify_link_index(linkage, index)) return NULL; link = linkage->sublinkage[linkage->current].link[index]; return link->lc->string; } const char * linkage_get_link_rlabel(Linkage linkage, int index) { Link *link; if (!verify_link_index(linkage, index)) return NULL; link = linkage->sublinkage[linkage->current].link[index]; return link->rc->string; } const char ** linkage_get_words(Linkage linkage) { return linkage->word; } Sentence linkage_get_sentence(Linkage linkage) { return linkage->sent; } const char * linkage_get_disjunct_str(Linkage linkage, int w) { Disjunct *dj; if (NULL == linkage->info->disjunct_list_str) { lg_compute_disjunct_strings(linkage->sent, linkage->info); } /* dj will be null if the word wasn't used in the parse. */ dj = linkage->sent->parse_info->chosen_disjuncts[w]; if (NULL == dj) return ""; return linkage->info->disjunct_list_str[w]; } double linkage_get_disjunct_cost(Linkage linkage, int w) { Disjunct *dj = linkage->sent->parse_info->chosen_disjuncts[w]; /* dj may be null, if the word didn't participate in the parse. */ if (dj) return dj->cost; return 0.0; } double linkage_get_disjunct_corpus_score(Linkage linkage, int w) { Disjunct *dj = linkage->sent->parse_info->chosen_disjuncts[w]; /* dj may be null, if the word didn't participate in the parse. */ if (NULL == dj) return 99.999; return lg_corpus_disjunct_score(linkage, w); } const char * linkage_get_word(Linkage linkage, int w) { return linkage->word[w]; } int linkage_unused_word_cost(Linkage linkage) { /* The sat solver (currently) fails to fill in info */ if (!linkage->info) return 0; return linkage->info->unused_word_cost; } int linkage_disjunct_cost(Linkage linkage) { /* The sat solver (currently) fails to fill in info */ if (!linkage->info) return 0; return (int) floorf(linkage->info->disjunct_cost); } int linkage_is_fat(Linkage linkage) { /* The sat solver (currently) fails to fill in info */ if (!linkage->info) return 0; return linkage->info->fat; } int linkage_and_cost(Linkage linkage) { /* The sat solver (currently) fails to fill in info */ if (!linkage->info) return 0; return linkage->info->and_cost; } int linkage_link_cost(Linkage linkage) { /* The sat solver (currently) fails to fill in info */ if (!linkage->info) return 0; return linkage->info->link_cost; } double linkage_corpus_cost(Linkage linkage) { /* The sat solver (currently) fails to fill in info */ if (!linkage->info) return 0.0; return linkage->info->corpus_cost; } int linkage_get_link_num_domains(Linkage linkage, int index) { PP_info *pp_info; if (!verify_link_index(linkage, index)) return -1; pp_info = &linkage->sublinkage[linkage->current].pp_info[index]; return pp_info->num_domains; } const char ** linkage_get_link_domain_names(Linkage linkage, int index) { PP_info *pp_info; if (!verify_link_index(linkage, index)) return NULL; pp_info = &linkage->sublinkage[linkage->current].pp_info[index]; return pp_info->domain_name; } const char * linkage_get_violation_name(Linkage linkage) { return linkage->sublinkage[linkage->current].violation; } int linkage_is_canonical(Linkage linkage) { /* The sat solver (currently) fails to fill in info */ if (!linkage->info) return TRUE; return linkage->info->canonical; } int linkage_is_improper(Linkage linkage) { /* The sat solver (currently) fails to fill in info */ if (!linkage->info) return FALSE; return linkage->info->improper_fat_linkage; } int linkage_has_inconsistent_domains(Linkage linkage) { /* The sat solver (currently) fails to fill in info */ if (!linkage->info) return FALSE; return linkage->info->inconsistent_domains; } void linkage_post_process(Linkage linkage, Postprocessor * postprocessor) { int N_sublinkages = linkage_get_num_sublinkages(linkage); Parse_Options opts = linkage->opts; Sentence sent = linkage->sent; Sublinkage * subl; PP_node * pp; int i, j, k; D_type_list * d; for (i = 0; i < N_sublinkages; ++i) { subl = &linkage->sublinkage[i]; if (subl->pp_info != NULL) { for (j = 0; j < subl->num_links; ++j) { exfree_pp_info(&subl->pp_info[j]); } post_process_free_data(&subl->pp_data); exfree(subl->pp_info, sizeof(PP_info)*subl->num_links); } subl->pp_info = (PP_info *) exalloc(sizeof(PP_info)*subl->num_links); for (j = 0; j < subl->num_links; ++j) { subl->pp_info[j].num_domains = 0; subl->pp_info[j].domain_name = NULL; } if (subl->violation != NULL) { exfree((void *)subl->violation, sizeof(char)*(strlen(subl->violation)+1)); subl->violation = NULL; } if (linkage->info->improper_fat_linkage) { pp = NULL; } else { pp = post_process(postprocessor, opts, sent, subl, FALSE); /* This can return NULL, for example if there is no post-processor */ } if (pp == NULL) { for (j = 0; j < subl->num_links; ++j) { subl->pp_info[j].num_domains = 0; subl->pp_info[j].domain_name = NULL; } } else { for (j = 0; j < subl->num_links; ++j) { k = 0; for (d = pp->d_type_array[j]; d != NULL; d = d->next) k++; subl->pp_info[j].num_domains = k; if (k > 0) { subl->pp_info[j].domain_name = (const char **) exalloc(sizeof(const char *)*k); } k = 0; for (d = pp->d_type_array[j]; d != NULL; d = d->next) { char buff[5]; sprintf(buff, "%c", d->type); subl->pp_info[j].domain_name[k] = string_set_add (buff, sent->string_set); k++; } } subl->pp_data = postprocessor->pp_data; if (pp->violation != NULL) { char * s = (char *) exalloc(sizeof(char)*(strlen(pp->violation)+1)); strcpy(s, pp->violation); subl->violation = s; } } } post_process_close_sentence(postprocessor); } link-grammar/link-grammar/prune.c0000644000000000000000000014206012536650433014215 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include #include "disjunct-utils.h" #define CONTABSZ 8192 typedef Connector * connector_table; typedef struct disjunct_dup_table_s disjunct_dup_table; struct disjunct_dup_table_s { int dup_table_size; Disjunct ** dup_table; }; /* the indiction in a word field that this connector cannot * be used -- is obsolete. */ #define BAD_WORD (MAX_SENTENCE+1) typedef struct c_list_s C_list; struct c_list_s { Connector * c; int shallow; C_list * next; }; typedef struct power_table_s power_table; struct power_table_s { int power_table_size; int l_table_size[MAX_SENTENCE]; /* the sizes of the hash tables */ int r_table_size[MAX_SENTENCE]; C_list ** l_table[MAX_SENTENCE]; C_list ** r_table[MAX_SENTENCE]; }; typedef struct cms_struct Cms; struct cms_struct { Cms * next; const char * name; int count; /* the number of times this is in the multiset */ }; #define CMS_SIZE (2<<10) typedef struct multiset_table_s multiset_table; struct multiset_table_s { Cms * cms_table[CMS_SIZE]; }; typedef struct prune_context_s prune_context; struct prune_context_s { int null_links; char ** deletable; char ** effective_dist; int power_cost; int power_prune_mode; /* either GENTLE or RUTHLESS */ int N_changed; /* counts the number of changes of c->word fields in a pass */ power_table *pt; Sentence sent; }; /* The algorithms in this file prune disjuncts from the disjunct list of the sentence that can be elimininated by a simple checks. The first check works as follows: A series of passes are made through the sentence, alternating left-to-right and right-to-left. Consier the left-to-right pass (the other is symmetric). A set S of connectors is maintained (initialized to be empty). Now the disjuncts of the current word are processed. If a given disjunct's left pointing connectors have the property that at least one of them has no connector in S to which it can be matched, then that disjunct is deleted. Now the set S is augmented by the right connectors of the remaining disjuncts of that word. This completes one word. The process continues through the words from left to right. Alternate passes are made until no disjunct is deleted. It worries me a little that if there are some really huge disjuncts lists, then this process will probably do nothing. (This fear turns out to be unfounded.) Notes: Power pruning will not work if applied before generating the "and" disjuncts. This is because certain of it's tricks don't work. Think about this, and finish this note later.... Also, currently I use the standard connector match procedure instead of the pruning one, since I know power pruning will not be used before and generation. Replace this to allow power pruning to work before generating and disjuncts. Currently it seems that normal pruning, power pruning, and generation, pruning, and power pruning (after "and" generation) and parsing take about the same amount of time. This is why doing power pruning before "and" generation might be a very good idea. New idea: Suppose all the disjuncts of a word have a connector of type c pointing to the right. And further, suppose that there is exactly one word to its right containing that type of connector pointing to the left. Then all the other disjuncts on the latter word can be deleted. (This situation is created by the processing of "either...or", and by the extra disjuncts added to a "," neighboring a conjunction.) */ /** * This hash function only looks at the leading upper case letters of * the connector string, and the label fields. This ensures that if two * strings match (formally), then they must hash to the same place. */ static inline int hash_S(Connector * c) { int h = connector_hash(c); return (h & (CONTABSZ-1)); } /** * This is almost identical to match(). Its reason for existance * is the rather subtle fact that with "and" can transform a "Ss" * connector into "Sp". This means that in order for pruning to * work, we must allow a "Ss" connector on word match an "Sp" connector * on a word to its right. This is what this version of match allows. * We assume that a is on a word to the left of b. */ int prune_match(int dist, Connector *a, Connector *b) { const char *s, *t; int x, y; if (a->label != b->label) return FALSE; x = hash_S(a); y = hash_S(b); if (x != y) return FALSE; s = a->string; t = b->string; while(s < a->prune_string || t < b->prune_string) { if (*s != *t) return FALSE; s++; t++; } /* printf("PM: a=%4s b=%4s ap=%d bp=%d a->ll=%d b->ll=%d dist=%d\n", s, t, x, y, a->length_limit, b->length_limit, dist); */ if (dist > a->length_limit || dist > b->length_limit) return FALSE; x = a->priority; y = b->priority; if ((x == THIN_priority) && (y == THIN_priority)) { #if defined(PLURALIZATION) /* if ((*(a->string)=='S') && ((*s=='s') || (*s=='p')) && (*t=='p')) { return TRUE; } */ /* The above is a kludge to stop pruning from killing off disjuncts which (because of pluralization in and) might become valid later. Recall that "and" converts a singular subject into a plural one. The (*s=='p') part is so that "he and I are good" doesn't get killed off. The above hack is subsumed by the following one: */ if ((*(a->string)=='S') && ((*s=='s') || (*s=='p')) && ((*t=='p') || (*t=='s')) && ((s-1 == a->string) || ((s-2 == a->string) && (*(s-1) == 'I')))){ return TRUE; } /* This change is to accommodate "nor". In particular we need to prevent "neither John nor I likes dogs" from being killed off. We want to allow this to apply to "are neither a dog nor a cat here" and "is neither a dog nor a cat here". This uses the "SI" connector. The third line above ensures that the connector is either "S" or "SI". */ #endif while ((*s != '\0') && (*t != '\0')) { if ((*s == '*') || (*t == '*') || ((*s == *t) && (*s != '^'))) { /* this last case here is rather obscure. It prevents '^' from matching '^'.....Is this necessary? ......yes, I think it is. */ s++; t++; } else return FALSE; } return TRUE; } else if ((x == UP_priority) && (y == DOWN_priority)) { while ((*s!='\0') && (*t!='\0')) { if ((*s == *t) || (*s == '*') || (*t == '^')) { /* that '^' should match on the DOWN_priority node is subtle, but correct */ s++; t++; } else return FALSE; } return TRUE; } else if ((y == UP_priority) && (x == DOWN_priority)) { while ((*s!='\0') && (*t!='\0')) { if ((*s == *t) || (*t == '*') || (*s == '^')) { s++; t++; } else return FALSE; } return TRUE; } else return FALSE; } static void zero_connector_table(connector_table *ct) { memset(ct, 0, sizeof(Connector *) * CONTABSZ); } /** * This function puts connector c into the connector table * if one like it isn't already there. */ static void insert_connector(connector_table *ct, Connector * c) { int h; Connector * e; h = hash_S(c); for (e = ct[h]; e != NULL; e = e->tableNext) { if ((strcmp(c->string, e->string) == 0) && (c->label == e->label) && (c->priority == e->priority)) return; } c->tableNext = ct[h]; ct[h] = c; } void prune(Sentence sent) { Connector *e, *f; int w; int N_deleted; Connector *ct[CONTABSZ]; Disjunct fake_head, *d, *d1; /* XXX why is this here ?? */ count_set_effective_distance(sent); N_deleted = 1; /* a lie to make it always do at least 2 passes */ while(1) { /* Left-to-right pass */ zero_connector_table(ct); /* For every word */ for (w = 0; w < sent->length; w++) { d = &fake_head; d->next = sent->word[w].d; /* For every disjunct of word */ while ((d1 = d->next)) { e = d1->left; /* For every left clause of this disjunct */ while (e) { int h = hash_S(e); for (f = ct[h]; f != NULL; f = f->tableNext) { if (prune_match(0, f, e)) break; } if (!f) break; /* If f null, not a single match was found */ e = e->next; } /* We know this disjunct is dead since no match * can be found on a required clause. */ if (e) { N_deleted ++; free_connectors(d1->left); free_connectors(d1->right); d->next = d1->next; xfree(d1, sizeof(Disjunct)); } else { /* Store surviving disjunct in hash table */ for (e = d1->right; e != NULL; e = e->next) { insert_connector(ct, e); } d = d1; /* move on to next disjunct*/ } } sent->word[w].d = fake_head.next; } if (2 < verbosity) { printf("l->r pass removed %d\n", N_deleted); print_disjunct_counts(sent); } /* We did nothing (and this is not the 1st pass) */ if (N_deleted == 0) break; /* Right-to-left pass */ zero_connector_table(ct); N_deleted = 0; /* For every word */ for (w = sent->length-1; w >= 0; w--) { d = &fake_head; d->next = sent->word[w].d; while ((d1 = d->next)) { e = d1->right; while (e) { int h = hash_S(e); for (f = ct[h]; f != NULL; f = f->tableNext) { if (prune_match(0, e, f)) break; } if (!f) break; /* If f null, not a single match was found */ e = e->next; } /* We know this disjunct is dead since it can't match * to the right*/ if(e) { N_deleted ++; free_connectors(d1->left); free_connectors(d1->right); d->next = d1->next; xfree(d1, sizeof(Disjunct)); } else { /* Store surviving disjunct in hash table */ for (e = d1->left; e != NULL; e = e->next) { insert_connector(ct, e); } d = d1; /* move on to next disjunct*/ } sent->word[w].d = fake_head.next; } } if (verbosity > 2) { printf("r->l pass removed %d\n", N_deleted); print_disjunct_counts(sent); } /* We made no change on this pass */ if (N_deleted == 0) break; N_deleted = 0; } } /* The second algorithm eliminates disjuncts that are dominated by another. It works by hashing them all, and checking for domination. */ #if FALSE /* ============================================================x */ /* Consider the idea of deleting a disjunct if it is dominated (in terms of what it can match) by some other disjunct on the same word. This has been implemented below. There are three problems with it: (1) It is almost never the case that any disjuncts are eliminated. (The code below has works correctly with fat links, but because all of the fat connectors on a fat disjunct have the same matching string, the only time a disjuct will die is if it is the same as another one. This is captured by the simplistic version below. (2) connector_matches_alam may not be exactly correct. I don't think it does the fat link matches properly. (See the comment in and.c for more information about matching fat links.) This is irrelevant because of (1). (3) The linkage that is eliminated by this, might just be the one that passes post-processing, as the following example shows. This is pretty silly, and should probably be changed. > telling John how our program works would be stupid Accepted (2 linkages, 1 with no P.P. violations) Linkage 1, cost vector = (0, 0, 7) +------------------G-----------------+ +-----R-----+----CL----+ | +---O---+ | +---D--+---S---+ +--I-+-AI-+ | | | | | | | | | telling.g John how our program.n works would be stupid ///// CLg <---CLg---> CL telling.g (g) telling.g G <---G-----> G would (g) (d) telling.g R <---R-----> R how (g) (d) telling.g O <---O-----> O John (g) (d) how CLe <---CLe---> CL program.n (g) (d) (e) our D <---Ds----> Ds program.n (g) (d) (e) program.n Ss <---Ss----> Ss works (g) would I <---Ix----> Ix be (g) be AI <---AIi---> AIi stupid (press return for another) > Linkage 2 (bad), cost vector = (0, 0, 7) +------------------G-----------------+ +-----R-----+----CL----+ | +---O---+ | +---D--+---S---+ +--I-+-AI-+ | | | | | | | | | telling.g John how our program.n works would be stupid ///// CLg <---CLg---> CL telling.g (g) telling.g G <---G-----> G would (g) (d) telling.g R <---R-----> R how (g) (d) telling.g O <---O-----> O John (g) (d) how CLe <---CLe---> CL program.n (g) (d) (e) our D <---Ds----> Ds program.n (g) (d) (e) program.n Ss <---Ss----> Ss works (g) would I <---Ix----> Ix be (g) be AI <---AI----> AI stupid P.P. violations: Special subject rule violated */ /** * hash function that takes a string and a seed value i */ static int string_hash(disjunct_dup_table *dt, const char * s, int i) { for(;*s != '\0';s++) i = i + (i<<1) + randtable[(*s + i) & (RTSIZE-1)]; return (i & (dt->dup_table_size-1)); } /** * This returns true if the connector a matches everything that b * matches, and possibly more. (alam=at least as much) * * TRUE for equal connectors. * remains TRUE if multi-match added to the first. * remains TRUE if subsrcripts deleted from the first. */ int connector_matches_alam(Connector * a, Connector * b) { char * s, * t, *u; if (((!a->multi) && b->multi) || (a->label != b->label) || (a->priority != b->priority)) return FALSE; s = a->string; t = b->string; /* isupper -- connectors cannot be UTF8 at this time */ while(isupper(*s) || isupper(*t)) { if (*s == *t) { s++; t++; } else return FALSE; } if (a->priority == DOWN_priority) { u = s; s = t; t = u; } while((*s != '\0') && (*t != '\0')) { if ((*s == *t) || (*s == '*') || (*t == '^')) { s++; t++; } else return FALSE; } while ((*s != '\0') && (*s == '*')) s++; return (*s == '\0'); } /** * This hash function that takes a connector and a seed value i. * It only looks at the leading upper case letters of * the string, and the label. This ensures that if two connectors * match, then they must hash to the same place. */ static int conn_hash(Connector * c, int i) { int nb; const char * s; s = c->string; i = i + (i<<1) + randtable[(c->label + i) & (RTSIZE-1)]; nb = is_utf8_upper(s); while(nb) { i = i + (i<<1) + randtable[(*s + i) & (RTSIZE-1)]; s += nb; nb = is_utf8_upper(s); } return i; } static inline int pconnector_hash(disjunct_dup_table *dt, Connector * c, int i) { i = conn_hash(c, i); return (i & (ct->dup_table_size-1)); } /** * This is a hash function for disjuncts */ static int hash_disjunct(disjunct_dup_table *dt, Disjunct * d) { int i; Connector *e; i = 0; for (e = d->left ; e != NULL; e = e->next) { i = pconnector_hash(dt, e, i); } for (e = d->right ; e != NULL; e = e->next) { i = pconnector_hash(dt, e, i); } return string_hash(dt, d->string, i); } /** * Returns TRUE if disjunct d1 can match anything that d2 can * if this happens, it constitutes a proof that there is absolutely * no use for d2. */ static int disjunct_matches_alam(Disjunct * d1, Disjunct * d2) { Connector *e1, *e2; if (d1->cost > d2->cost) return FALSE; e1 = d1->left; e2 = d2->left; while((e1!=NULL) && (e2!=NULL)) { if (!connector_matches_alam(e1,e2)) break; e1 = e1->next; e2 = e2->next; } if ((e1!=NULL) || (e2!=NULL)) return FALSE; e1 = d1->right; e2 = d2->right; while((e1!=NULL) && (e2!=NULL)) { if (!connector_matches_alam(e1,e2)) break; e1 = e1->next; e2 = e2->next; } if ((e1!=NULL) || (e2!=NULL)) return FALSE; return (strcmp(d1->string, d2->string) == 0); } /** * Takes the list of disjuncts pointed to by d, eliminates all * duplicates, and returns a pointer to a new list. * It frees the disjuncts that are eliminated. */ Disjunct * eliminate_duplicate_disjuncts(Disjunct * d) { int i, h, count; Disjunct *dn, *dx, *dxn, *front; count = 0; disjunct_dup_table *dt; dt = disjunct_dup_table_new(next_power_of_two_up(2 * count_disjuncts(d))); for (;d!=NULL; d = dn) { dn = d->next; h = hash_disjunct(d); front = NULL; for (dx = dt->dup_table[h]; dx != NULL; dx = dxn) { dxn = dx->next; if (disjunct_matches_alam(dx,d)) { /* we know that d should be killed */ d->next = NULL; free_disjuncts(d); count++; front = catenate_disjuncts(front, dx); break; } else if (disjunct_matches_alam(d,dx)) { /* we know that dx should be killed off */ dx->next = NULL; free_disjuncts(dx); count++; } else { /* neither should be killed off */ dx->next = front; front = dx; } } if (dx == NULL) { /* we put d in the table */ d->next = front; front = d; } dt->dup_table[h] = front; } /* d is now NULL */ for (i = 0; i < dt->dup_table_size; i++) { for (dx = dt->dup_table[i]; dx != NULL; dx = dxn) { dxn = dx->next; dx->next = d; d = dx; } } if ((verbosity > 2) && (count != 0)) printf("killed %d duplicates\n", count); disjunct_dup_table_delete(dt); return d; } /* ============================================================x */ #endif /* ================================================================= */ /** * Here is expression pruning. This is done even before the expressions * are turned into lists of disjuncts. * * This uses many of the same data structures and functions that are used * by prune. * * The purge operations remove all irrelevant stuff from the expression, * and free the purged stuff. A connector is deemed irrelevant if its * string pointer has been set to NULL. The passes through the sentence * have the job of doing this. * * If an OR or AND type expression node has one child, we can replace it * by its child. This, of course, is not really necessary, except for * performance(?) */ static Exp* purge_Exp(Exp *); /** * Get rid of the elements with null expressions */ static E_list * or_purge_E_list(E_list * l) { E_list * el; if (l == NULL) return NULL; if ((l->e = purge_Exp(l->e)) == NULL) { el = or_purge_E_list(l->next); xfree((char *)l, sizeof(E_list)); return el; } l->next = or_purge_E_list(l->next); return l; } /** * Returns 0 iff the length of the disjunct list is 0. * If this is the case, it frees the structure rooted at l. */ static int and_purge_E_list(E_list * l) { if (l == NULL) return 1; if ((l->e = purge_Exp(l->e)) == NULL) { free_E_list(l->next); xfree((char *)l, sizeof(E_list)); return 0; } if (and_purge_E_list(l->next) == 0) { free_Exp(l->e); xfree((char *)l, sizeof(E_list)); return 0; } return 1; } /** * Must be called with a non-null expression. * Return NULL iff the expression has no disjuncts. */ static Exp* purge_Exp(Exp *e) { if (e->type == CONNECTOR_type) { if (e->u.string == NULL) { xfree((char *)e, sizeof(Exp)); return NULL; } else { return e; } } if (e->type == AND_type) { if (and_purge_E_list(e->u.l) == 0) { xfree((char *)e, sizeof(Exp)); return NULL; } } else { e->u.l = or_purge_E_list(e->u.l); if (e->u.l == NULL) { xfree((char *)e, sizeof(Exp)); return NULL; } } /* This code makes it kill off nodes that have just one child (1) It's going to give an insignificant speed-up (2) Costs have not been handled correctly here. The code is excised for these reasons. */ /* if ((e->u.l != NULL) && (e->u.l->next == NULL)) { ne = e->u.l->e; xfree((char *) e->u.l, sizeof(E_list)); xfree((char *) e, sizeof(Exp)); return ne; } */ return e; } /** * Returns TRUE if c can match anything in the set S. */ static inline int matches_S(connector_table *ct, Connector * c, int dir) { Connector * e; int h = hash_S(c); if (dir == '-') { for (e = ct[h]; e != NULL; e = e->tableNext) { if (prune_match(0, e, c)) return TRUE; } return FALSE; } else { for (e = ct[h]; e != NULL; e = e->tableNext) { if (prune_match(0, c, e)) return TRUE; } return FALSE; } } /** * Mark as dead all of the dir-pointing connectors * in e that are not matched by anything in the current set. * Returns the number of connectors so marked. */ static int mark_dead_connectors(connector_table *ct, Exp * e, int dir) { int count; count = 0; if (e->type == CONNECTOR_type) { if (e->dir == dir) { Connector dummy; init_connector(&dummy); dummy.label = NORMAL_LABEL; dummy.priority = THIN_priority; dummy.string = e->u.string; if (!matches_S(ct, &dummy, dir)) { e->u.string = NULL; count++; } } } else { E_list *l; for (l = e->u.l; l != NULL; l = l->next) { count += mark_dead_connectors(ct, l->e, dir); } } return count; } /** * Put into the set S all of the dir-pointing connectors still in e. * Return a list of allocated dummy connectors; these will need to be * freed. */ static Connector * insert_connectors(connector_table *ct, Exp * e, Connector *alloc_list, int dir) { if (e->type == CONNECTOR_type) { if (e->dir == dir) { Connector *dummy = connector_new(); dummy->string = e->u.string; insert_connector(ct, dummy); dummy->next = alloc_list; alloc_list = dummy; } } else { E_list *l; for (l=e->u.l; l!=NULL; l=l->next) { alloc_list = insert_connectors(ct, l->e, alloc_list, dir); } } return alloc_list; } /** * This removes the expressions that are empty from the list corresponding * to word w of the sentence. */ static void clean_up_expressions(Sentence sent, int w) { X_node head_node, *d, *d1; d = &head_node; d->next = sent->word[w].x; while (d->next != NULL) { if (d->next->exp == NULL) { d1 = d->next; d->next = d1->next; xfree((char *)d1, sizeof(X_node)); } else { d = d->next; } } sent->word[w].x = head_node.next; } void expression_prune(Sentence sent) { int N_deleted; X_node * x; int w; Connector *ct[CONTABSZ]; Connector *dummy_list = NULL; zero_connector_table(ct); N_deleted = 1; /* a lie to make it always do at least 2 passes */ while(1) { /* Left-to-right pass */ /* For every word */ for (w = 0; w < sent->length; w++) { /* For every expression in word */ for (x = sent->word[w].x; x != NULL; x = x->next) { /* printf("before marking: "); print_expression(x->exp); printf("\n"); */ N_deleted += mark_dead_connectors(ct, x->exp, '-'); /* printf(" after marking: "); print_expression(x->exp); printf("\n"); */ } for (x = sent->word[w].x; x != NULL; x = x->next) { /* printf("before purging: "); print_expression(x->exp); printf("\n"); */ x->exp = purge_Exp(x->exp); /* printf("after purging: "); print_expression(x->exp); printf("\n"); */ } /* gets rid of X_nodes with NULL exp */ clean_up_expressions(sent, w); for (x = sent->word[w].x; x != NULL; x = x->next) { dummy_list = insert_connectors(ct, x->exp, dummy_list, '+'); } } if (verbosity > 2) { printf("l->r pass removed %d\n", N_deleted); print_expression_sizes(sent); } /* Free the allocated dummy connectors */ free_connectors(dummy_list); dummy_list = NULL; zero_connector_table(ct); if (N_deleted == 0) break; /* Right-to-left pass */ N_deleted = 0; for (w = sent->length-1; w >= 0; w--) { for (x = sent->word[w].x; x != NULL; x = x->next) { /* printf("before marking: "); print_expression(x->exp); printf("\n"); */ N_deleted += mark_dead_connectors(ct, x->exp, '+'); /* printf("after marking: "); print_expression(x->exp); printf("\n"); */ } for (x = sent->word[w].x; x != NULL; x = x->next) { /* printf("before perging: "); print_expression(x->exp); printf("\n"); */ x->exp = purge_Exp(x->exp); /* printf("after perging: "); print_expression(x->exp); printf("\n"); */ } clean_up_expressions(sent, w); /* gets rid of X_nodes with NULL exp */ for (x = sent->word[w].x; x != NULL; x = x->next) { dummy_list = insert_connectors(ct, x->exp, dummy_list, '-'); } } if (verbosity > 2) { printf("r->l pass removed %d\n", N_deleted); print_expression_sizes(sent); } /* Free the allocated dummy connectors */ free_connectors(dummy_list); dummy_list = NULL; zero_connector_table(ct); if (N_deleted == 0) break; N_deleted = 0; } } /* Here is what you've been waiting for: POWER-PRUNE The kinds of constraints it checks for are the following: 1) successive connectors on the same disjunct have to go to nearer and nearer words. 2) two deep connectors cannot attach to eachother (A connectors is deep if it is not the first in its list, it is shallow if it is the first in its list, it is deepest if it is the last on its list.) 3) on two adjacent words, a pair of connectors can be used only if they're the deepest ones on their disjuncts 4) on two non-adjacent words, a pair of connectors can be used only if not [both of them are the deepest]. The data structure consists of a pair of hash tables on every word. Each bucket of a hash table has a list of pointers to connectors. These nodes also store if the chosen connector is shallow. */ /* As with normal pruning, we make alternate left->right and right->left passes. In the R->L pass, when we're on a word w, we make use of all the left-pointing hash tables on the words to the right of w. After the pruning on this word, we build the left-pointing hash table this word. This guarantees idempotence of the pass -- after doing an L->R, doing another would change nothing. Each connector has an integer c_word field. This refers to the closest word that it could be connected to. These are initially determined by how deep the connector is. For example, a deepest connector can connect to the neighboring word, so its c_word field is w+1 (w-1 if this is a left pointing connector). It's neighboring shallow connector has a c_word value of w+2, etc. The pruning process adjusts these c_word values as it goes along, accumulating information about any way of linking this sentence. The pruning process stops only after no disjunct is deleted and no c_word values change. The difference between RUTHLESS and GENTLE power pruning is simply that GENTLE uses the deletable region array, and RUTHLESS does not. So we can get the effect of these two different methods simply by always unsuring that deletable[][] has been defined. With nothing deletable, this is equivalent to RUTHLESS. --DS, 7/97 */ /** * returns the number of connectors in the left lists of the disjuncts. */ static int left_connector_count(Disjunct * d) { Connector *c; int i=0; for (;d!=NULL; d=d->next) { for (c = d->left; c!=NULL; c = c->next) i++; } return i; } static int right_connector_count(Disjunct * d) { Connector *c; int i=0; for (;d!=NULL; d=d->next) { for (c = d->right; c!=NULL; c = c->next) i++; } return i; } static void free_C_list(C_list * t) { C_list *xt; for (; t!=NULL; t=xt) { xt = t->next; xfree((char *)t, sizeof(C_list)); } } /** * free all of the hash tables and C_lists */ static void power_table_delete(power_table *pt) { int w; int i; for (w = 0; w < pt->power_table_size; w++) { for (i = 0; i < pt->l_table_size[w]; i++) { free_C_list(pt->l_table[w][i]); } xfree((char *)pt->l_table[w], pt->l_table_size[w] * sizeof (C_list *)); for (i = 0; i < pt->r_table_size[w]; i++) { free_C_list(pt->r_table[w][i]); } xfree((char *)pt->r_table[w], pt->r_table_size[w] * sizeof (C_list *)); } free(pt); } /** * The disjunct d (whose left or right pointer points to c) is put * into the appropriate hash table */ static void put_into_power_table(int size, C_list ** t, Connector * c, int shal) { int h; C_list * m; h = connector_hash(c) & (size-1); m = (C_list *) xalloc (sizeof(C_list)); m->next = t[h]; t[h] = m; m->c = c; m->shallow = shal; } static int set_dist_fields(Connector * c, int w, int delta) { int i; if (c==NULL) return w; i = set_dist_fields(c->next, w, delta) + delta; c->word = i; return i; } /** * Allocates and builds the initial power hash tables */ static power_table * power_table_new(Sentence sent) { power_table *pt; int w, len, size, i; C_list ** t; Disjunct * d, * xd, * head; Connector * c; pt = (power_table *) malloc (sizeof(power_table)); pt->power_table_size = sent->length; /* first we initialize the word fields of the connectors, and eliminate those disjuncts with illegal connectors */ for (w=0; wlength; w++) { head = NULL; for (d=sent->word[w].d; d!=NULL; d=xd) { xd = d->next; if ((set_dist_fields(d->left, w, -1) < 0) || (set_dist_fields(d->right, w, 1) >= sent->length)) { d->next = NULL; free_disjuncts(d); } else { d->next = head; head = d; } } sent->word[w].d = head; } for (w=0; wlength; w++) { len = left_connector_count(sent->word[w].d); size = next_power_of_two_up(len); pt->l_table_size[w] = size; t = pt->l_table[w] = (C_list **) xalloc(size * sizeof(C_list *)); for (i=0; iword[w].d; d!=NULL; d=d->next) { c = d->left; if (c != NULL) { put_into_power_table(size, t, c, TRUE); for (c=c->next; c!=NULL; c=c->next){ put_into_power_table(size, t, c, FALSE); } } } len = right_connector_count(sent->word[w].d); size = next_power_of_two_up(len); pt->r_table_size[w] = size; t = pt->r_table[w] = (C_list **) xalloc(size * sizeof(C_list *)); for (i=0; iword[w].d; d!=NULL; d=d->next) { c = d->right; if (c != NULL) { put_into_power_table(size, t, c, TRUE); for (c=c->next; c!=NULL; c=c->next){ put_into_power_table(size, t, c, FALSE); } } } } return pt; } /** * This runs through all the connectors in this table, and eliminates those * who are obsolete. The word fields of an obsolete one has been set to * BAD_WORD. */ static void clean_table(int size, C_list ** t) { int i; C_list * m, * xm, * head; for (i=0; inext; if (m->c->word != BAD_WORD) { m->next = head; head = m; } else { xfree((char *) m, sizeof(C_list)); } } t[i] = head; } } /** * This takes two connectors (and whether these are shallow or not) * (and the two words that these came from) and returns TRUE if it is * possible for these two to match based on local considerations. */ static int possible_connection(prune_context *pc, Connector *lc, Connector *rc, int lshallow, int rshallow, int lword, int rword) { if ((!lshallow) && (!rshallow)) return FALSE; /* two deep connectors can't work */ if ((lc->word > rword) || (rc->word < lword)) return FALSE; /* word range constraints */ assert(lword < rword, "Bad word order in possible connection."); /* Now, notice that the only differences between the following two cases is that (1) ruthless uses match and gentle uses prune_match. and (2) ruthless doesn't use deletable[][]. This latter fact is irrelevant, since deletable[][] is now guaranteed to have been created. */ if (pc->power_prune_mode == RUTHLESS) { if (lword == rword-1) { if (!((lc->next == NULL) && (rc->next == NULL))) return FALSE; } else { if ((!pc->null_links) && (lc->next == NULL) && (rc->next == NULL) && (!lc->multi) && (!rc->multi)) { return FALSE; } } return do_match(pc->sent, lc, rc, lword, rword); } else { if (lword == rword-1) { if (!((lc->next == NULL) && (rc->next == NULL))) return FALSE; } else { if ((!pc->null_links) && (lc->next == NULL) && (rc->next == NULL) && (!lc->multi) && (!rc->multi) && !pc->deletable[lword][rword]) { return FALSE; } } return prune_match(pc->effective_dist[lword][rword], lc, rc); } } /** * This returns TRUE if the right table of word w contains * a connector that can match to c. shallow tells if c is shallow. */ static int right_table_search(prune_context *pc, int w, Connector *c, int shallow, int word_c) { int size, h; C_list *cl; power_table *pt; pt = pc->pt; size = pt->r_table_size[w]; h = connector_hash(c) & (size-1); for (cl = pt->r_table[w][h]; cl != NULL; cl = cl->next) { if (possible_connection(pc, cl->c, c, cl->shallow, shallow, w, word_c)) { return TRUE; } } return FALSE; } /** * This returns TRUE if the right table of word w contains * a connector that can match to c. shallows tells if c is shallow */ static int left_table_search(prune_context *pc, int w, Connector *c, int shallow, int word_c) { int size, h; C_list *cl; power_table *pt; pt = pc->pt; size = pt->l_table_size[w]; h = connector_hash(c) & (size-1); for (cl = pt->l_table[w][h]; cl != NULL; cl = cl->next) { if (possible_connection(pc, c, cl->c, shallow, cl->shallow, word_c, w)) { return TRUE; } } return FALSE; } #if NOT_USED_NOW static int ok_cwords(Sentence sent, Connector *c) { for (; c != NULL; c=c->next) { if (c->word == BAD_WORD) return FALSE; if (c->word >= sent->length) return FALSE; } return TRUE; } #endif /** * take this connector list, and try to match it with the words * w-1, w-2, w-3...Returns the word to which the first connector of the * list could possibly be matched. If c is NULL, returns w. If there * is no way to match this list, it returns a negative number. * If it does find a way to match it, it updates the c->word fields * correctly. */ static int left_connector_list_update(prune_context *pc, Connector *c, int word_c, int w, int shallow) { int n; int foundmatch; if (c==NULL) return w; n = left_connector_list_update(pc, c->next, word_c, w, FALSE) - 1; if (((int) c->word) < n) n = c->word; /* n is now the rightmost word we need to check */ foundmatch = FALSE; for (; (n >= 0) && ((w-n) < MAX_SENTENCE); n--) { pc->power_cost++; if (right_table_search(pc, n, c, shallow, word_c)) { foundmatch = TRUE; break; } } if (n < ((int) c->word)) { c->word = n; pc->N_changed++; } return (foundmatch ? n : -1); } /** * take this connector list, and try to match it with the words * w+1, w+2, w+3...Returns the word to which the first connector of the * list could possibly be matched. If c is NULL, returns w. If there * is no way to match this list, it returns a number greater than N_words-1 * If it does find a way to match it, it updates the c->word fields * correctly. */ static int right_connector_list_update(prune_context *pc, Sentence sent, Connector *c, int word_c, int w, int shallow) { int n; int foundmatch; if (c==NULL) return w; n = right_connector_list_update(pc, sent, c->next, word_c, w, FALSE) + 1; if (c->word > n) n = c->word; /* n is now the leftmost word we need to check */ foundmatch = FALSE; for (; (n < sent->length) && ((n-w) < MAX_SENTENCE); n++) { pc->power_cost++; if (left_table_search(pc, n, c, shallow, word_c)) { foundmatch = TRUE; break; } } if (n > c->word) { c->word = n; pc->N_changed++; } return (foundmatch ? n : sent->length); } /** The return value is the number of disjuncts deleted */ int power_prune(Sentence sent, int mode, Parse_Options opts) { power_table *pt; prune_context *pc; Disjunct *d, *free_later, *dx, *nd; Connector *c; int w, N_deleted, total_deleted; pc = (prune_context *) malloc (sizeof(prune_context)); pc->power_cost = 0; pc->power_prune_mode = mode; pc->null_links = (opts->min_null_count > 0); pc->N_changed = 1; /* forces it always to make at least two passes */ pc->deletable = sent->deletable; pc->effective_dist = sent->effective_dist; pc->sent = sent; count_set_effective_distance(sent); pt = power_table_new(sent); pc->pt = pt; free_later = NULL; N_deleted = 0; total_deleted = 0; while (1) { /* left-to-right pass */ for (w = 0; w < sent->length; w++) { if (parse_options_resources_exhausted(opts)) break; for (d = sent->word[w].d; d != NULL; d = d->next) { if (d->left == NULL) continue; if (left_connector_list_update(pc, d->left, w, w, TRUE) < 0) { for (c=d->left ;c!=NULL; c = c->next) c->word = BAD_WORD; for (c=d->right ;c!=NULL; c = c->next) c->word = BAD_WORD; N_deleted++; total_deleted++; } } clean_table(pt->r_table_size[w], pt->r_table[w]); nd = NULL; for (d = sent->word[w].d; d != NULL; d = dx) { dx = d->next; if ((d->left != NULL) && (d->left->word == BAD_WORD)) { d->next = free_later; free_later = d; } else { d->next = nd; nd = d; } } sent->word[w].d = nd; } if (verbosity > 2) { printf("l->r pass changed %d and deleted %d\n",pc->N_changed,N_deleted); } if (pc->N_changed == 0) break; pc->N_changed = N_deleted = 0; /* right-to-left pass */ for (w = sent->length-1; w >= 0; w--) { if (parse_options_resources_exhausted(opts)) break; for (d = sent->word[w].d; d != NULL; d = d->next) { if (d->right == NULL) continue; if (right_connector_list_update(pc, sent, d->right,w,w,TRUE) >= sent->length){ for (c=d->right;c!=NULL; c = c->next) c->word = BAD_WORD; for (c=d->left ;c!=NULL; c = c->next) c->word = BAD_WORD; N_deleted++; total_deleted++; } } clean_table(pt->l_table_size[w], pt->l_table[w]); nd = NULL; for (d = sent->word[w].d; d != NULL; d = dx) { dx = d->next; if ((d->right != NULL) && (d->right->word == BAD_WORD)) { d->next = free_later; free_later = d; } else { d->next = nd; nd = d; } } sent->word[w].d = nd; } if (verbosity > 2) { printf("r->l pass changed %d and deleted %d\n", pc->N_changed,N_deleted); } if (pc->N_changed == 0) break; pc->N_changed = N_deleted = 0; } free_disjuncts(free_later); power_table_delete(pt); pt = NULL; pc->pt = NULL; if (verbosity > 2) printf("%d power prune cost:\n", pc->power_cost); if (mode == RUTHLESS) { print_time(opts, "power pruned (ruthless)"); } else { print_time(opts, "power pruned (gentle)"); } if (verbosity > 2) { if (mode == RUTHLESS) { printf("\nAfter power_pruning (ruthless):\n"); } else { printf("\nAfter power_pruning (gentle):\n"); } print_disjunct_counts(sent); } free(pc); return total_deleted; } /* =================================================================== PP Pruning The "contains one" post-processing constraints give us a new way to prune. Suppose there's a rule that says "a group that contains foo must contain a bar or a baz." Here foo, bar, and baz are connector types. foo is the trigger link, bar and baz are called the criterion links. If, after considering the disjuncts we find that there is is a foo, but neither a bar, nor a baz, then we can eliminte the disjuct containing bar. Things are actually a bit more complex, because of the matching rules and subscripts. The problem is that post-processing deals with link names, while at this point all we have to work with is connector names. Consider the foo part. Consider a connector C. When does foo match C for our purposes? It matches it if every possible link name L (that can result from C being at one end of that link) results in post_process_match(foo,L) being true. Suppose foo contains a "*". Then there is no C that has this property. This is because the *s in C may be replaced by some other subscripts in the construction of L. And the non-* chars in L will not post_process_match the * in foo. So let's assume that foo has no *. Now the result we want is simply given by post_process_match(foo, C). Proof: L is the same as C but with some *s replaced by some other letters. Since foo contains no * the replacement in C of some * by some other letter could change post_process_match from FALSE to TRUE, but not vice versa. Therefore it's conservative to use this test. For the criterion parts, we need to determine if there is a collection of connectors C1, C2,... such that by combining them you can get a link name L that post_process_matches bar or baz. Here's a way to do this. Say bar="Xabc". Then we see if there are connector names that post_process_match "Xa##", "X#b#", and "X##c". They must all be there in order for it to be possible to create a link name "Xabc". A "*" in the criterion part is a little different. In this case we can simply skip the * (treat it like an upper case letter) for this purpose. So if bar="X*ab" then we look for "X*#b" and "X*a#". (The * in this case could be treated the same as another subscript without breaking it.) Note also that it's only necessary to find a way to match one of the many criterion links that may be in the rule. If none can match, then we can delete the disjunct containing C. Here's how we're going to implement this. We'll maintain a multiset of connector names. We'll represent them in a hash table, where the hash function uses only the upper case letters of the connector name. We'll insert all the connectors into the multiset. The multiset will support the operation of deletion (probably simplest to just decrement the count). Here's the algorithm. Insert all the connectors into M. While the previous pass caused a count to go to 0 do: For each connector C do For each rule R do if C is a trigger for R and the criterion links of the rule cannot be satisfied by the connectors in M, Then: We delete C's disjunct. But before we do, we remove all the connectors of this disjunct from the multiset. Keep tabs on whether or not any of the counts went to 0. Efficiency hacks to be added later: Note for a given rule can become less and less satisfiable. That is, rule_satisfiable(r) for a given rule r can change from TRUE to FALSE, but not vice versa. So once it's FALSE, we can just remember that. Consider the effect of a pass p on the set of rules that are satisfiable. Suppose this set does not change. Then pass p+1 will do nothing. This is true even if pass p caused some disjuncts to be deleted. (This observation will only obviate the need for the last pass.) */ static multiset_table * cms_table_new(void) { multiset_table *mt; int i; mt = (multiset_table *) malloc(sizeof(multiset_table)); for (i=0; icms_table[i] = NULL; } return mt; } static void cms_table_delete(multiset_table *mt) { Cms * cms, *xcms; int i; for (i=0; icms_table[i]; cms != NULL; cms = xcms) { xcms = cms->next; xfree(cms, sizeof(Cms)); } } free(mt); } static int cms_hash(const char * s) { unsigned int i = 5381; while (isupper((int) *s)) /* connector names are not yet UTF8-capable */ { i = ((i << 5) + i) + *s; s++; } return (i & (CMS_SIZE-1)); } /** * This returns TRUE if there is a connector name C in the table * such that post_process_match(pp_match_name, C) is TRUE */ static int match_in_cms_table(multiset_table *cmt, const char * pp_match_name) { Cms * cms; for (cms = cmt->cms_table[cms_hash(pp_match_name)]; cms != NULL; cms = cms->next) { if(post_process_match(pp_match_name, cms->name)) return TRUE; } return FALSE; } static Cms * lookup_in_cms_table(multiset_table *cmt, const char * str) { Cms * cms; for (cms = cmt->cms_table[cms_hash(str)]; cms != NULL; cms = cms->next) { if(strcmp(str, cms->name) == 0) return cms; } return NULL; } static void insert_in_cms_table(multiset_table *cmt, const char * str) { Cms * cms; int h; cms = lookup_in_cms_table(cmt, str); if (cms != NULL) { cms->count++; } else { cms = (Cms *) xalloc(sizeof(Cms)); cms->name = str; /* don't copy the string...just keep a pointer to it. we won't free these later */ cms->count = 1; h = cms_hash(str); cms->next = cmt->cms_table[h]; cmt->cms_table[h] = cms; } } /** * Delete the given string from the table. Return TRUE if * this caused a count to go to 0, return FALSE otherwise. */ static int delete_from_cms_table(multiset_table *cmt, const char * str) { Cms * cms; cms = lookup_in_cms_table(cmt, str); if (cms != NULL && cms->count > 0) { cms->count--; return (cms->count == 0); } return FALSE; } static int rule_satisfiable(multiset_table *cmt, pp_linkset *ls) { int hashval; const char * t; char name[20], *s; pp_linkset_node *p; int bad, n_subscripts; for (hashval = 0; hashval < ls->hash_table_size; hashval++) { for (p = ls->hash_table[hashval]; p!=NULL; p=p->next) { /* ok, we've got our hands on one of the criterion links */ strncpy(name, p->str, sizeof(name)-1); /* could actually use the string in place because we change it back */ name[sizeof(name)-1] = '\0'; /* now we want to see if we can satisfy this criterion link */ /* with a collection of the links in the cms table */ for (s = name; isupper((int)*s); s++) {} for (;*s != '\0'; s++) if (*s != '*') *s = '#'; for (s = name, t = p->str; isupper((int) *s); s++, t++) {} /* s and t remain in lockstep */ bad = 0; n_subscripts = 0; for (;*s != '\0' && bad==0; s++, t++) { if (*s == '*') continue; n_subscripts++; /* after the upper case part, and is not a * so must be a regular subscript */ *s = *t; if (!match_in_cms_table(cmt, name)) bad++; *s = '#'; } if (n_subscripts == 0) { /* now we handle the special case which occurs if there were 0 subscripts */ if (!match_in_cms_table(cmt, name)) bad++; } /* now if bad==0 this criterion link does the job to satisfy the needs of the trigger link */ if (bad == 0) return TRUE; } } return FALSE; } static int pp_prune(Sentence sent, Parse_Options opts) { pp_knowledge * knowledge; pp_rule rule; const char * selector; pp_linkset * link_set; int i, w, dir; Disjunct *d; Connector *c; int change, total_deleted, N_deleted, deleteme; multiset_table *cmt; if (sent->dict->postprocessor == NULL) return 0; knowledge = sent->dict->postprocessor->knowledge; cmt = cms_table_new(); for (w = 0; w < sent->length; w++) { for (d = sent->word[w].d; d != NULL; d = d->next) { d->marked = TRUE; for (dir=0; dir < 2; dir++) { for (c = ( (dir)?(d->left):(d->right) ); c!=NULL; c=c->next) { insert_in_cms_table(cmt, c->string); } } } } total_deleted = 0; change = 1; while (change > 0) { change = 0; N_deleted = 0; for (w = 0; w < sent->length; w++) { for (d = sent->word[w].d; d != NULL; d = d->next) { if (!d->marked) continue; deleteme = FALSE; for (dir=0; dir < 2; dir++) { for (c = ( (dir)?(d->left):(d->right) ); c!=NULL; c=c->next) { for (i=0; in_contains_one_rules; i++) { rule = knowledge->contains_one_rules[i]; /* the ith rule */ selector = rule.selector; /* selector string for this rule */ link_set = rule.link_set; /* the set of criterion links */ if (strchr(selector, '*') != NULL) continue; /* If it has a * forget it */ if (!post_process_match(selector, c->string)) continue; /* printf("pp_prune: trigger ok. selector = %s c->string = %s\n", selector, c->string); */ /* We know c matches the trigger link of the rule. */ /* Now check the criterion links */ if (!rule_satisfiable(cmt, link_set)) { deleteme = TRUE; } if (deleteme) break; } if (deleteme) break; } if (deleteme) break; } if (deleteme) { /* now we delete this disjunct */ N_deleted++; total_deleted++; d->marked = FALSE; /* mark for deletion later */ for (dir=0; dir < 2; dir++) { for (c = ( (dir)?(d->left):(d->right) ); c!=NULL; c=c->next) { change += delete_from_cms_table(cmt, c->string); } } } } } if (verbosity > 2) { printf("pp_prune pass deleted %d\n", N_deleted); } } delete_unmarked_disjuncts(sent); cms_table_delete(cmt); if (verbosity > 2) { printf("\nAfter pp_pruning:\n"); print_disjunct_counts(sent); } print_time(opts, "pp pruning"); return total_deleted; } /** * Do the following pruning steps until nothing happens: * power pp power pp power pp.... * Make sure you do them both at least once. */ void pp_and_power_prune(Sentence sent, int mode, Parse_Options opts) { power_prune(sent, mode, opts); for (;;) { if (parse_options_resources_exhausted(opts)) break; if (pp_prune(sent, opts) == 0) break; if (parse_options_resources_exhausted(opts)) break; if (power_prune(sent, mode, opts) == 0) break; } } link-grammar/link-grammar/pp_lexer.c0000644000000000000000000013765512536650433014720 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ /* XXX the original flex source for this file is missing !! */ #include #include "error.h" /* I edited this file to eliminate compiler warnings. I've documented here all the changes. The .fl file from which this is derived is in pp_lexer-flex-file. Here are all the warnings I got: pp_lexer.c: In function `pp_lexer_lex': pp_lexer.c:841: warning: implicit declaration of function `yywrap' pp_lexer.c:689: warning: label `find_rule' defined but not used pp_lexer.c: At top level: pp_lexer.c:1590: warning: `yy_flex_realloc' defined but not used pp_lexer.c:1099: warning: `yyunput' defined but not used pp_lexer.c:1814: warning: `show_bindings' defined but not used Here are the changes I made. All of them are labeled with "--DS" in the code. Got rid of #line directives. Added the prototype of yywrap() right below this comment. Commented out code and prototype declarations for the unused functions */ int yywrap(void); /* --DS */ #define yy_create_buffer pp_lexer__create_buffer #define yy_delete_buffer pp_lexer__delete_buffer #define yy_scan_buffer pp_lexer__scan_buffer #define yy_scan_string pp_lexer__scan_string #define yy_scan_bytes pp_lexer__scan_bytes #define yy_flex_debug pp_lexer__flex_debug #define yy_init_buffer pp_lexer__init_buffer #define yy_flush_buffer pp_lexer__flush_buffer #define yy_load_buffer_state pp_lexer__load_buffer_state #define yy_switch_to_buffer pp_lexer__switch_to_buffer #define yyin pp_lexer_in #define yyleng pp_lexer_leng #define yylex pp_lexer_lex #define yyout pp_lexer_out #define yyrestart pp_lexer_restart #define yytext pp_lexer_text #define yylineno pp_lexer_lineno #define yywrap pp_lexer_wrap /* #line 21 "pp_lexer.c" --DS */ /* A lexical scanner generated by flex */ /* Scanner skeleton version: * $Header$ */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #include #include /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ #ifdef c_plusplus #ifndef __cplusplus #define __cplusplus #endif #endif #ifdef __cplusplus #include #include /* Use prototypes in function declarations. */ #define YY_USE_PROTOS /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ #if __STDC__ #define YY_USE_PROTOS #define YY_USE_CONST #endif /* __STDC__ */ #endif /* ! __cplusplus */ #ifdef __TURBOC__ #pragma warn -rch #pragma warn -use #include #include #define YY_USE_CONST #define YY_USE_PROTOS #endif #ifndef YY_USE_CONST #ifndef const #define const #endif #endif #ifdef YY_USE_PROTOS #define YY_PROTO(proto) proto #else #define YY_PROTO(proto) () #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN yy_start = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START ((yy_start - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #define YY_BUF_SIZE 16384 typedef struct yy_buffer_state *YY_BUFFER_STATE; extern int yyleng; extern FILE *yyin, *yyout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 /* The funky do-while in the following #define is used to turn the definition * int a single C statement (which needs a semi-colon terminator). This * avoids problems with code like: * * if ( condition_holds ) * yyless( 5 ); * else * do_something_else(); * * Prior to using the do-while the compiler would get upset at the * "else" because it interpreted the "if" statement as being all * done when it reached the ';' after the yyless() call. */ /* Return all but the first 'n' matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ *yy_cp = yy_hold_char; \ yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) /* #define unput(c) yyunput( c, yytext_ptr ) --DS */ /* The following is because we cannot portably get our hands on size_t * (without autoconf's help, which isn't available because we want * flex-generated scanners to compile on their own). */ typedef unsigned int yy_size_t; struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getwc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; static YY_BUFFER_STATE yy_current_buffer = 0; /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". */ #define YY_CURRENT_BUFFER yy_current_buffer /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 1; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow yywrap()'s to do buffer switches * instead of setting up a fresh yyin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void yyrestart YY_PROTO(( FILE *input_file )); void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer )); void yy_load_buffer_state YY_PROTO(( void )); YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size )); void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b )); void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file )); void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b )); #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer ) YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size )); YY_BUFFER_STATE yy_scan_string YY_PROTO(( const char *str )); YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( const char *bytes, int len )); static void *yy_flex_alloc YY_PROTO(( yy_size_t )); /* static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )); --DS */ static void yy_flex_free YY_PROTO(( void * )); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! yy_current_buffer ) \ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ yy_current_buffer->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! yy_current_buffer ) \ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ yy_current_buffer->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (yy_current_buffer->yy_at_bol) #define YY_USES_REJECT typedef unsigned char YY_CHAR; #ifdef VMS #ifndef __VMS_POSIX FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; #else FILE *yyin = stdin, *yyout = stdout; #endif #else FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; #endif typedef int yy_state_type; extern int yylineno; int yylineno = 1; extern char *yytext; #define yytext_ptr yytext #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap YY_PROTO(( void )); #else extern int yywrap YY_PROTO(( void )); #endif #endif #if 0 /* --DS */ #ifndef YY_NO_UNPUT static void yyunput YY_PROTO(( int c, char *buf_ptr )); #endif #endif /* --DS */ #ifndef yytext_ptr static void yy_flex_strncpy YY_PROTO(( char *, const char *, int )); #endif #ifdef THIS_FUNCTION_IS_NO_LONGER_USED #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput YY_PROTO(( void )); #else static int input YY_PROTO(( void )); #endif #endif #endif /* THIS_FUNCTION_IS_NO_LONGER_USED */ static yy_state_type yy_get_previous_state YY_PROTO(( void )); static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state )); static int yy_get_next_buffer YY_PROTO(( mbstate_t * )); static void yy_fatal_error YY_PROTO(( const char msg[] )); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ yytext_ptr = yy_bp; \ yyleng = (int) (yy_cp - yy_bp); \ yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yy_c_buf_p = yy_cp; #define YY_NUM_RULES 8 #define YY_END_OF_BUFFER 9 static const short int yy_acclist[39] = { 0, 2, 2, 2, 2, 9, 5, 7, 8, 2, 7, 8, 2, 8, 7, 8, 7, 8, 5, 7, 8, 2, 7, 8, 5, 7, 8, 7, 8, 5, 3, 2, 4, 5, 2, 5, 1, 3, 6 } ; static const short int yy_accept[29] = { 0, 1, 2, 3, 4, 5, 6, 9, 12, 14, 16, 18, 21, 24, 27, 29, 30, 31, 32, 32, 34, 35, 35, 36, 36, 37, 38, 39, 39 } ; static const int yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static const int yy_meta[9] = { 0, 1, 2, 2, 3, 4, 5, 1, 1 } ; static const short int yy_base[32] = { 0, 0, 7, 14, 21, 18, 11, 0, 0, 0, 66, 10, 27, 34, 42, 7, 66, 0, 7, 4, 0, 0, 0, 0, 66, 0, 66, 66, 50, 54, 57, 60 } ; static const short int yy_def[32] = { 0, 27, 1, 1, 3, 27, 28, 29, 29, 30, 27, 31, 27, 27, 13, 28, 27, 29, 30, 31, 12, 14, 13, 14, 27, 14, 27, 0, 27, 27, 27, 27 } ; static const short int yy_nxt[75] = { 0, 6, 7, 8, 7, 9, 10, 6, 11, 12, 16, 12, 26, 16, 13, 10, 16, 16, 27, 10, 27, 10, 10, 12, 27, 12, 27, 27, 14, 20, 17, 20, 27, 27, 21, 22, 23, 24, 23, 23, 25, 22, 22, 23, 27, 27, 27, 27, 23, 23, 23, 15, 27, 27, 27, 15, 17, 17, 18, 27, 18, 19, 27, 27, 27, 19, 5, 27, 27, 27, 27, 27, 27, 27, 27 } ; static const short int yy_chk[75] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 19, 2, 18, 15, 2, 3, 11, 6, 5, 3, 0, 3, 3, 4, 0, 4, 0, 0, 4, 12, 12, 12, 0, 0, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14, 0, 0, 0, 0, 14, 14, 14, 28, 0, 0, 0, 28, 29, 29, 30, 0, 30, 31, 0, 0, 0, 31, 27, 27, 27, 27, 27, 27, 27, 27, 27 } ; static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr; static char *yy_full_match; static int yy_lp; #define REJECT \ { \ *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \ yy_cp = yy_full_match; /* restore poss. backed-over text */ \ ++yy_lp; \ goto find_rule; \ } #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 char *yytext; /* #line 1 "pp_lexer.fl" --DS */ #define INITIAL 0 /* #line 2 "pp_lexer.fl" --DS */ /************************************************************************** Lex specification for post-process knowledge file 6/96 ALB Updated 8/97 to allow multiple instances Compile with either 1) flex pp_lexer.fl (on systems which support %option prefix) OR 2) flex pp_lexer.fl mv lex.yy.c pp_lexer.tmp.c cat pp_lexer.tmp.c | sed "s/yy/pp_lexer_/g" > pp_lexer.c rm -f pp_lexer.tmp.c (on systems which do not) In the case of (1), uncomment the three %option lines below. **************************************************************************/ #include #include #undef yywrap /* forward references for non-exported functions (and static variable) */ static void check_string(const char *str); static void setup(PPLexTable *lt); static void set_label(PPLexTable *lt, const char *label); static void add_string_to_label(PPLexTable *lt, const char *str); static void add_set_of_strings_to_label(PPLexTable *lt,const char *label_of_set); /* static void show_bindings(PPLexTable *lt); --DS */ static int get_index_of_label(PPLexTable *lt, const char *label); static PPLexTable *clt=NULL; /* ptr to lex table we're currently filling in */ /* see above */ #define INCLUDE 1 /* #line 490 "pp_lexer.c" --DS */ /* Macros after this point can all be overridden by user definitions in * section 1. */ #if YY_STACK_USED static int yy_start_stack_ptr = 0; static int yy_start_stack_depth = 0; static int *yy_start_stack = 0; #ifndef YY_NO_PUSH_STATE static void yy_push_state YY_PROTO(( int new_state )); #endif #ifndef YY_NO_POP_STATE static void yy_pop_state YY_PROTO(( void )); #endif #ifndef YY_NO_TOP_STATE static int yy_top_state YY_PROTO(( void )); #endif #else #define YY_NO_PUSH_STATE 1 #define YY_NO_POP_STATE 1 #define YY_NO_TOP_STATE 1 #endif #ifdef YY_MALLOC_DECL YY_MALLOC_DECL #else #if __STDC__ #ifndef __cplusplus #include #endif #else /* Just try to get by without declaring the routines. This will fail * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int) * or sizeof(void*) != sizeof(int). */ #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size,pmbss) \ if ( yy_current_buffer->yy_is_interactive ) \ { \ wint_t c = '*'; \ int n; \ for ( n = 0; n < max_size && \ (c = fgetwc( yyin )) != WEOF && c != '\n'; ) \ n += wcrtomb(&buf[n], c, pmbss); \ if ( c == '\n' ) \ buf[n++] = '\n'; \ if ( c == WEOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \ && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL int yylex YY_PROTO(( void )) #endif /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ if ( yyleng > 0 ) \ yy_current_buffer->yy_at_bol = \ (yytext[yyleng - 1] == '\n'); \ YY_USER_ACTION YY_DECL; YY_DECL { yy_state_type yy_current_state; char *yy_cp, *yy_bp; int yy_act; /* Reset multi-byte shift state */ mbstate_t mbss; memset(&mbss, 0, sizeof(mbss)); /* #line 56 "pp_lexer.fl" --DS */ /* #line 619 "pp_lexer.c" --DS */ if ( yy_init ) { yy_init = 0; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! yy_start ) yy_start = 1; /* first start state */ if ( ! yyin ) yyin = stdin; if ( ! yyout ) yyout = stdout; if ( ! yy_current_buffer ) yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); yy_load_buffer_state(); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = yy_c_buf_p; /* Support of yytext. */ *yy_cp = yy_hold_char; /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = yy_start; yy_current_state += YY_AT_BOL(); yy_state_ptr = yy_state_buf; *yy_state_ptr++ = yy_current_state; yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 28 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; *yy_state_ptr++ = yy_current_state; ++yy_cp; } while ( yy_base[yy_current_state] != 66 ); yy_find_action: yy_current_state = *--yy_state_ptr; yy_lp = yy_accept[yy_current_state]; /* find_rule: --DS */ /* we branch to this label when backing up */ for ( ; ; ) /* until we find what rule we matched */ { if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] ) { yy_act = yy_acclist[yy_lp]; { yy_full_match = yy_cp; break; } } --yy_cp; yy_current_state = *--yy_state_ptr; yy_lp = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; if ( yy_act != YY_END_OF_BUFFER ) { int yyl; for ( yyl = 0; yyl < yyleng; ++yyl ) if ( yytext[yyl] == '\n' ) ++yylineno; } do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 1: *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP /* #line 58 "pp_lexer.fl" --DS */ ; YY_BREAK case 2: YY_RULE_SETUP /* #line 59 "pp_lexer.fl" --DS */ ; YY_BREAK case 3: YY_RULE_SETUP /* #line 61 "pp_lexer.fl" --DS */ { set_label(clt, yytext); } YY_BREAK case 4: YY_RULE_SETUP /* #line 62 "pp_lexer.fl" --DS */ { add_set_of_strings_to_label(clt, &(yytext[1])); } YY_BREAK case 5: YY_RULE_SETUP /* #line 63 "pp_lexer.fl" --DS */ { add_string_to_label(clt, yytext); } YY_BREAK case 6: YY_RULE_SETUP /* #line 64 "pp_lexer.fl" --DS */ { add_string_to_label(clt, yytext); } YY_BREAK case 7: YY_RULE_SETUP /* #line 66 "pp_lexer.fl" --DS */ { prt_error("Fatal Error: pp_lexer: unable to parse knowledge file (line %i).\n",yylineno); exit(1); } YY_BREAK case 8: YY_RULE_SETUP /* #line 68 "pp_lexer.fl" --DS */ ECHO; YY_BREAK /* #line 754 "pp_lexer.c" --DS */ case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(INCLUDE): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = yy_hold_char; if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between yy_current_buffer and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ yy_n_chars = yy_current_buffer->yy_n_chars; yy_current_buffer->yy_input_file = yyin; yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] ) { /* This was really a NUL. */ yy_state_type yy_next_state; yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state(); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = yytext_ptr + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++yy_c_buf_p; yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = yy_c_buf_p; goto yy_find_action; } } else switch ( yy_get_next_buffer(&mbss) ) { case EOB_ACT_END_OF_FILE: { yy_did_buffer_switch_on_eof = 0; if ( yywrap() ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! yy_did_buffer_switch_on_eof ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state(); yy_cp = yy_c_buf_p; yy_bp = yytext_ptr + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: yy_c_buf_p = &yy_current_buffer->yy_ch_buf[yy_n_chars]; yy_current_state = yy_get_previous_state(); yy_cp = yy_c_buf_p; yy_bp = yytext_ptr + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer(mbstate_t *pmbss) { char *dest = yy_current_buffer->yy_ch_buf; char *source = yytext_ptr; int number_to_move, i; int ret_val; if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( yy_current_buffer->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 ) { /* We matched a singled characater, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ yy_n_chars = 0; else { int num_to_read = yy_current_buffer->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ #ifdef YY_USES_REJECT YY_FATAL_ERROR( "input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); #else /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = yy_current_buffer; int yy_c_buf_p_offset = (int) (yy_c_buf_p - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ yy_flex_realloc( (void *) b->yy_ch_buf, b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = yy_current_buffer->yy_buf_size - number_to_move - 1; #endif } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]), yy_n_chars, num_to_read, pmbss ); } if ( yy_n_chars == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; yy_current_buffer->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; yy_n_chars += number_to_move; yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; yytext_ptr = &yy_current_buffer->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state(void) { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = yy_start; yy_current_state += YY_AT_BOL(); yy_state_ptr = yy_state_buf; *yy_state_ptr++ = yy_current_state; for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 28 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; *yy_state_ptr++ = yy_current_state; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ #ifdef YY_USE_PROTOS static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state ) #else static yy_state_type yy_try_NUL_trans( yy_current_state ) yy_state_type yy_current_state; #endif { register int yy_is_jam; register YY_CHAR yy_c = 1; while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 28 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; *yy_state_ptr++ = yy_current_state; yy_is_jam = (yy_current_state == 27); return yy_is_jam ? 0 : yy_current_state; } #if 0 /* --DS */ #ifdef YY_USE_PROTOS static void yyunput( int c, register char *yy_bp ) #else static void yyunput( c, yy_bp ) int c; register char *yy_bp; #endif { register char *yy_cp = yy_c_buf_p; /* undo effects of setting up yytext */ *yy_cp = yy_hold_char; if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register int number_to_move = yy_n_chars + 2; register char *dest = &yy_current_buffer->yy_ch_buf[ yy_current_buffer->yy_buf_size + 2]; register char *source = &yy_current_buffer->yy_ch_buf[number_to_move]; while ( source > yy_current_buffer->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); yy_n_chars = yy_current_buffer->yy_buf_size; if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; if ( c == '\n' ) --yylineno; yytext_ptr = yy_bp; yy_hold_char = *yy_cp; yy_c_buf_p = yy_cp; } #endif /* --DS */ #ifdef THIS_FUNCTION_IS_NOT_USED_ANYMORE #ifdef __cplusplus static int yyinput(void) #else static int input(void) #endif { int c; *yy_c_buf_p = yy_hold_char; if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] ) /* This was really a NUL. */ *yy_c_buf_p = '\0'; else { /* need more input */ yytext_ptr = yy_c_buf_p; ++yy_c_buf_p; switch ( yy_get_next_buffer() ) { case EOB_ACT_END_OF_FILE: { if ( yywrap() ) { yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; return EOF; } if ( ! yy_did_buffer_switch_on_eof ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; break; case EOB_ACT_LAST_MATCH: #ifdef __cplusplus YY_FATAL_ERROR( "unexpected last match in yyinput()" ); #else YY_FATAL_ERROR( "unexpected last match in input()" ); #endif } } } c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */ *yy_c_buf_p = '\0'; /* preserve yytext */ yy_hold_char = *++yy_c_buf_p; yy_current_buffer->yy_at_bol = (c == '\n'); if ( yy_current_buffer->yy_at_bol ) ++yylineno; return c; } #endif /* THIS_FUNCTION_IS_NOT_USED_ANYMORE */ #ifdef YY_USE_PROTOS void yyrestart( FILE *input_file ) #else void yyrestart( input_file ) FILE *input_file; #endif { if ( ! yy_current_buffer ) yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); yy_init_buffer( yy_current_buffer, input_file ); yy_load_buffer_state(); } #ifdef YY_USE_PROTOS void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) #else void yy_switch_to_buffer( new_buffer ) YY_BUFFER_STATE new_buffer; #endif { if ( yy_current_buffer == new_buffer ) return; if ( yy_current_buffer ) { /* Flush out information for old buffer. */ *yy_c_buf_p = yy_hold_char; yy_current_buffer->yy_buf_pos = yy_c_buf_p; yy_current_buffer->yy_n_chars = yy_n_chars; } yy_current_buffer = new_buffer; yy_load_buffer_state(); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ yy_did_buffer_switch_on_eof = 1; } #ifdef YY_USE_PROTOS void yy_load_buffer_state( void ) #else void yy_load_buffer_state() #endif { yy_n_chars = yy_current_buffer->yy_n_chars; yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos; yyin = yy_current_buffer->yy_input_file; yy_hold_char = *yy_c_buf_p; } #ifdef YY_USE_PROTOS YY_BUFFER_STATE yy_create_buffer( FILE *file, int size ) #else YY_BUFFER_STATE yy_create_buffer( file, size ) FILE *file; int size; #endif { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } #ifdef YY_USE_PROTOS void yy_delete_buffer( YY_BUFFER_STATE b ) #else void yy_delete_buffer( b ) YY_BUFFER_STATE b; #endif { if ( b == yy_current_buffer ) yy_current_buffer = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) yy_flex_free( (void *) b->yy_ch_buf ); yy_flex_free( (void *) b ); } #ifndef YY_ALWAYS_INTERACTIVE #ifndef YY_NEVER_INTERACTIVE extern int isatty YY_PROTO(( int )); #endif #endif #ifdef YY_USE_PROTOS void yy_init_buffer( YY_BUFFER_STATE b, FILE *file ) #else void yy_init_buffer( b, file ) YY_BUFFER_STATE b; FILE *file; #endif { yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; #if YY_ALWAYS_INTERACTIVE b->yy_is_interactive = 1; #else #if YY_NEVER_INTERACTIVE b->yy_is_interactive = 0; #else b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; #endif #endif } #ifdef YY_USE_PROTOS void yy_flush_buffer( YY_BUFFER_STATE b ) #else void yy_flush_buffer( b ) YY_BUFFER_STATE b; #endif { b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == yy_current_buffer ) yy_load_buffer_state(); } #ifndef YY_NO_SCAN_BUFFER #ifdef YY_USE_PROTOS YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size ) #else YY_BUFFER_STATE yy_scan_buffer( base, size ) char *base; yy_size_t size; #endif { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer( b ); return b; } #endif #ifndef YY_NO_SCAN_STRING #ifdef YY_USE_PROTOS YY_BUFFER_STATE yy_scan_string( const char *str ) #else YY_BUFFER_STATE yy_scan_string( str ) const char *str; #endif { int len; for ( len = 0; str[len]; ++len ) ; return yy_scan_bytes( str, len ); } #endif #ifndef YY_NO_SCAN_BYTES #ifdef YY_USE_PROTOS YY_BUFFER_STATE yy_scan_bytes( const char *bytes, int len ) #else YY_BUFFER_STATE yy_scan_bytes( bytes, len ) const char *bytes; int len; #endif { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = len + 2; buf = (char *) yy_flex_alloc( n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < len; ++i ) buf[i] = bytes[i]; buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer( buf, n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #endif #ifndef YY_NO_PUSH_STATE #ifdef YY_USE_PROTOS static void yy_push_state( int new_state ) #else static void yy_push_state( new_state ) int new_state; #endif { if ( yy_start_stack_ptr >= yy_start_stack_depth ) { yy_size_t new_size; yy_start_stack_depth += YY_START_STACK_INCR; new_size = yy_start_stack_depth * sizeof( int ); if ( ! yy_start_stack ) yy_start_stack = (int *) yy_flex_alloc( new_size ); else yy_start_stack = (int *) yy_flex_realloc( (void *) yy_start_stack, new_size ); if ( ! yy_start_stack ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } yy_start_stack[yy_start_stack_ptr++] = YY_START; BEGIN(new_state); } #endif #ifndef YY_NO_POP_STATE static void yy_pop_state() { if ( --yy_start_stack_ptr < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN(yy_start_stack[yy_start_stack_ptr]); } #endif #ifndef YY_NO_TOP_STATE static int yy_top_state() { return yy_start_stack[yy_start_stack_ptr - 1]; } #endif #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif #ifdef YY_USE_PROTOS static void yy_fatal_error( const char msg[] ) #else static void yy_fatal_error( msg ) char msg[]; #endif { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ yytext[yyleng] = yy_hold_char; \ yy_c_buf_p = yytext + n - YY_MORE_ADJ; \ yy_hold_char = *yy_c_buf_p; \ *yy_c_buf_p = '\0'; \ yyleng = n; \ } \ while ( 0 ) /* Internal utility routines. */ #ifndef yytext_ptr #ifdef YY_USE_PROTOS static void yy_flex_strncpy( char *s1, const char *s2, int n ) #else static void yy_flex_strncpy( s1, s2, n ) char *s1; const char *s2; int n; #endif { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_USE_PROTOS static void *yy_flex_alloc( yy_size_t size ) #else static void *yy_flex_alloc( size ) yy_size_t size; #endif { return (void *) malloc( size ); } #if 0 /* --DS */ #ifdef YY_USE_PROTOS static void *yy_flex_realloc( void *ptr, yy_size_t size ) #else static void *yy_flex_realloc( ptr, size ) void *ptr; yy_size_t size; #endif { return (void *) realloc( ptr, size ); } #endif /* --DS */ #ifdef YY_USE_PROTOS static void yy_flex_free( void *ptr ) #else static void yy_flex_free( ptr ) void *ptr; #endif { free( ptr ); } #if YY_MAIN int main() { yylex(); return 0; } #endif /* #line 68 "pp_lexer.fl" --DS */ /************************ exported functions ******************************/ PPLexTable *pp_lexer_open(FILE *f) { PPLexTable *lt; if (f == NULL) { prt_error("Fatal Error: pp_lexer_open: passed a NULL file pointer"); exit(1); } yyin = f; /* redirect lex to look at the specified file */ lt = (PPLexTable*) xalloc (sizeof(PPLexTable)); setup(lt); clt = lt; /* set lt to be the current table, which yylex will fill in */ yylex(); clt = NULL; lt->idx_of_active_label=-1; return lt; } void pp_lexer_close(PPLexTable *lt) { int i; pp_label_node *node,*next; for (i=0; inodes_of_label[i]; while (node) { next = node->next; xfree(node, sizeof(pp_label_node)); node=next; } } string_set_delete(lt->string_set); xfree(lt, sizeof(PPLexTable)); } int pp_lexer_set_label(PPLexTable *lt, const char *label) { /* set lexer state to first node of this label */ lt->idx_of_active_label = get_index_of_label(lt, label); if (lt->idx_of_active_label==-1) return 0; /* label not found */ lt->current_node_of_active_label=lt->nodes_of_label[lt->idx_of_active_label]; return 1; } int pp_lexer_count_tokens_of_label(PPLexTable *lt) { /* counts all tokens, even the commas */ int n; pp_label_node *p; if (lt->idx_of_active_label==-1) { prt_error("Fatal Error: pp_lexer: current label is invalid"); exit(1); } for (n=0, p=lt->nodes_of_label[lt->idx_of_active_label]; p;p=p->next, n++){} return n; } const char *pp_lexer_get_next_token_of_label(PPLexTable *lt) { /* retrieves next token of set label, or NULL if list exhausted */ static const char *p; if (lt->current_node_of_active_label==NULL) return NULL; p = lt->current_node_of_active_label->str; lt->current_node_of_active_label=lt->current_node_of_active_label->next; return p; } int pp_lexer_count_commas_of_label(PPLexTable *lt) { int n; pp_label_node *p; if (lt->idx_of_active_label==-1) { prt_error("Fatal Error: pp_lexer: current label is invalid"); exit(1); } for (n=0,p=lt->nodes_of_label[lt->idx_of_active_label];p!=NULL;p=p->next) if (!strcmp(p->str, ",")) n++; return n; } const char **pp_lexer_get_next_group_of_tokens_of_label(PPLexTable *lt, int *n_tokens) { /* all tokens until next comma, null-terminated */ int n; pp_label_node *p; static const char **tokens = NULL; static int extents=0; p=lt->current_node_of_active_label; for (n=0; p!=NULL && strcmp(p->str,","); n++, p=p->next) {} if (n>extents) { extents = n; free (tokens); tokens = (const char **) malloc (extents * sizeof(const char*)); } p = lt->current_node_of_active_label; for (n=0; p!=NULL && strcmp(p->str,","); n++, p=p->next) tokens[n] = string_set_add(p->str, lt->string_set); /* advance "current node of label" state */ lt->current_node_of_active_label = p; if (p!=NULL) lt->current_node_of_active_label = p->next; *n_tokens = n; return tokens; } int yywrap(void) { /* must return 1 for end of input, 0 otherwise */ return 1; } /********************** non-exported functions ************************/ static void setup(PPLexTable *lt) { int i; for (i=0; inodes_of_label[i] = NULL; lt->last_node_of_label[i] = NULL; lt->labels[i]=NULL; } lt->string_set = string_set_create(); } static void set_label(PPLexTable *lt, const char *label) { int i; char *c; char *label_sans_colon; /* check for and then slice off the trailing colon */ label_sans_colon = strdup(label); c=&(label_sans_colon[strlen(label_sans_colon)-1]); if (*c != ':') { prt_error("Fatal Error: Label %s must end with :", label); exit(1); } *c = 0; /* have we seen this label already? If so, abort */ for (i=0;lt->labels[i]!=NULL && strcmp(lt->labels[i],label_sans_colon);i++) {} if (lt->labels[i]!=NULL) { prt_error("Fatal Error: pp_lexer: label %s multiply defined!", label_sans_colon); exit(1); } /* new label. Store it */ if (i == PP_LEXER_MAX_LABELS-1) { prt_error("Fatal Error: pp_lexer: too many labels. Raise PP_LEXER_MAX_LABELS"); exit(1); } lt->labels[i] = string_set_add(label_sans_colon, lt->string_set); lt->idx_of_active_label = i; free(label_sans_colon); } static void add_string_to_label(PPLexTable *lt, const char *str) { /* add the single string str to the set of strings associated with label */ pp_label_node *new_node; if (lt->idx_of_active_label == -1) { prt_error("Fatal Error: pp_lexer: invalid syntax (line %i)",yylineno); exit(1); } /* make sure string is legal */ check_string(str); /* create a new node in (as yet to be determined) linked list of strings */ new_node = (pp_label_node *) xalloc (sizeof(pp_label_node)); new_node->str = string_set_add(str, lt->string_set); new_node->next = NULL; /* stick newly-created node at the *end* of the appropriate linked list */ if (lt->last_node_of_label[lt->idx_of_active_label]==NULL) { /* first entry on linked list */ lt->nodes_of_label[lt->idx_of_active_label] = new_node; lt->last_node_of_label[lt->idx_of_active_label] = new_node; } else { /* non-first entry on linked list */ lt->last_node_of_label[lt->idx_of_active_label]->next = new_node; lt->last_node_of_label[lt->idx_of_active_label] = new_node; } } static void add_set_of_strings_to_label(PPLexTable *lt,const char *label_of_set) { /* add the set of strings, defined earlier by label_of_set, to the set of strings associated with the current label */ pp_label_node *p; int idx_of_label_of_set; if (lt->idx_of_active_label==-1) { prt_error("Fatal Error: pp_lexer: invalid syntax (line %i)",yylineno); exit(1); } if ((idx_of_label_of_set = get_index_of_label(lt, label_of_set))==-1) { prt_error("Fatal Error: pp_lexer: label %s must be defined before it's referred to (line %i)" ,label_of_set, yylineno); exit(1); } for (p=lt->nodes_of_label[idx_of_label_of_set]; p!=NULL; p=p->next) add_string_to_label(lt, p->str); } #if 0 /* --DS */ static void show_bindings(PPLexTable *lt) { /* Diagnostic. Show contents of knowledge file, as arranged internally */ int i,j; char *la; pp_label_node *p; printf("The symbol table's contents: \n"); for (i=0; (la=lt->labels[i])!=NULL; i++) { printf("\n\n%s\n", la); for (j=0; jnodes_of_label[i]; p!=NULL; p=p->next) printf(" %s ", p->str); } printf("\n"); } #endif static int get_index_of_label(PPLexTable *lt, const char *label) { int i; for (i=0; lt->labels[i]!=NULL; i++) if (!strcmp(lt->labels[i], label)) return i; return -1; } static void check_string(const char *str) { if (strlen(str)>1 && strchr(str, ',')!=NULL) { prt_error("Fatal Error: pp_lexer: string %s contains a comma, which is a no-no.",str); exit(1); } } link-grammar/link-grammar/string-set.h0000644000000000000000000000217612536650433015173 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ String_set * string_set_create(void); const char * string_set_add(const char * source_string, String_set * ss); const char * string_set_lookup(const char * source_string, String_set * ss); void string_set_delete(String_set *ss); link-grammar/link-grammar/regex-morph.c0000644000000000000000000000717312536650433015326 0ustar /*************************************************************************/ /* Copyright (c) 2005 Sampo Pyysalo */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ /* On MS Windows, regex.h fails to pull in size_t, so work around this by * including before ( is not enough) */ #include #include #include "api-structures.h" #include "link-includes.h" #include "read-dict.h" #include "regex-morph.h" #include "structures.h" /** * Support for the regular-expression based token matching system * using standard POSIX regex. */ /* Compiles all the regexs in the Dictionary. Returns 0 on success, * else an error code. */ int compile_regexs(Dictionary dict) { regex_t *preg; int rc; Regex_node *re = dict->regex_root; while (re != NULL) { /* If re->re non-null, assume compiled already. */ if(re->re == NULL) { /* Compile with default options (0) and default character * tables (NULL). */ /* re->re = pcre_compile(re->pattern, 0, &error, &erroroffset, NULL); */ preg = (regex_t *) malloc (sizeof(regex_t)); re->re = preg; rc = regcomp(preg, re->pattern, REG_EXTENDED); if (rc) { /* prt_error("Error: Failed to compile regex '%s' (%s) at %d: %s\n", re->pattern, re->name, erroroffset, error); */ prt_error("Error: Failed to compile regex '%s' (%s)\n", re->pattern, re->name); return rc; } /* Check that the regex name is defined in the dictionary. */ if (!boolean_dictionary_lookup(dict, re->name)) { /* TODO: better error handing. Maybe remove the regex? */ prt_error("Error: Regex name %s not found in dictionary!\n", re->name); } } re = re->next; } return 0; } /** * Tries to match each regex in turn to word s. * On match, returns the name of the first matching regex. * If no match is found, returns NULL. */ const char *match_regex(Dictionary dict, const char *s) { int rc; Regex_node *re = dict->regex_root; while (re != NULL) { if (re->re == NULL) { /* Re not compiled; if this happens, it's likely an * internal error, but nevermind for now. */ continue; } /* Try to match with no extra data (NULL), whole str (0 to strlen(s)), * and default options (second 0). */ /* int rc = pcre_exec(re->re, NULL, s, strlen(s), 0, * 0, ovector, PCRE_OVEC_SIZE); */ rc = regexec((regex_t*) re->re, s, 0, NULL, 0); if (0 == rc) { return re->name; /* match found. just return--no multiple matches. */ } else if (rc != REG_NOMATCH) { /* We have an error. TODO: more appropriate error handling.*/ fprintf(stderr,"Regex matching error %d occurred!\n", rc); } re = re->next; } return NULL; /* no matches. */ } /** * Delete associated storage */ void free_regexs(Dictionary dict) { Regex_node *re = dict->regex_root; while (re != NULL) { Regex_node *next = re->next; regfree((regex_t *)re->re); free(re->re); free(re->name); free(re->pattern); free(re); re = next; } } link-grammar/link-grammar/utilities.h0000644000000000000000000001656012536650433015111 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #ifndef _LINK_GRAMMAR_UTILITIES_H_ #define _LINK_GRAMMAR_UTILITIES_H_ #ifdef __CYGWIN__ #define _WIN32 1 #endif /* __CYGWIN__ */ #ifndef _WIN32 #include #endif #include #include #include #include #ifndef __CYGWIN__ /* I was told that cygwin does not have these files. */ #include #include #endif #if defined(__CYGWIN__) && defined(__MINGW32__) /* Some users have CygWin and MinGW installed! * In this case, use the MinGW versions of UTF-8 support. */ #include #include #endif #include "error.h" #ifdef _WIN32 #include #ifdef _MSC_VER /* The Microsoft Visual C compiler doesn't support the "inline" keyword. */ #define inline /* MS Visual C does not have any function normally found in strings.h */ /* In particular, be careful to avoid including strings.h */ /* MS Visual C uses non-standard string function names */ #define snprintf _snprintf #define vsnprintf _vsnprintf #define strcasecmp _stricmp #define strdup _strdup #define strncasecmp(a,b,s) strnicmp((a),(b),(s)) /* MS Visual C does not support some C99 standard floating-point functions */ #define fmaxf(a,b) ((a) > (b) ? (a) : (b)) #endif /* _MSC_VER */ /* Appearently, MinGW is also missing a variety of standard fuctions. * Not surprising, since MinGW is intended for compiling Windows * programs on Windows. * MINGW is also known as MSYS */ #if defined(_MSC_VER) || defined(__MINGW32__) /* No langinfo in Windows or MinGW */ #define nl_langinfo(X) "" /* strtok_r is missing in Windows */ char * strtok_r (char *s, const char *delim, char **saveptr); /* Windows doesn't have a thread-safe rand (???) */ /* Surely not, there must be something */ /* XXX FIXME -- this breaks thread safety on windows */ #define rand_r(seedp) rand() #endif /* _MSC_VER || __MINGW32__ */ /* * CYGWIN on Windows doesn't have UTF8 support, or wide chars ... * However, MS Visual C appearently does, as does MinGW. Since * some users have both cygwin and MinGW installed, crap out the * UTF8 code only when MinGW is missing. */ #if defined (__CYGWIN__) && !defined(__MINGW32__) #define mbstate_t char #define mbrtowc(w,s,n,x) ({*((char *)(w)) = *(s); 1;}) #define wcrtomb(s,w,x) ({*((char *)(s)) = ((char)(w)); 1;}) #define iswupper isupper #define iswalpha isalpha #define iswdigit isdigit #define iswspace isspace #define wchar_t char #define wint_t int #define fgetwc fgetc #define WEOF EOF #define towlower tolower #define towupper toupper #endif /* __CYGWIN__ and not __MINGW32__ */ #endif /* _WIN32 */ #if defined(__sun__) int strncasecmp(const char *s1, const char *s2, size_t n); /* This does not appear to be in string.h header file in sunos (Or in linux when I compile with -ansi) */ #endif #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif #define assert(ex,string) { \ if (!(ex)) { \ prt_error("Assertion failed: %s\n", string); \ exit(1); \ } \ } #if !defined(MIN) #define MIN(X,Y) ( ((X) < (Y)) ? (X) : (Y)) #endif #if !defined(MAX) #define MAX(X,Y) ( ((X) > (Y)) ? (X) : (Y)) #endif static inline int wctomb_check(char *s, wchar_t wc, mbstate_t *ps) { int nr = wcrtomb(s, wc, ps); if (nr < 0) { prt_error("Fatal Error: unknown character set %s\n", nl_langinfo(CODESET)); exit(1); } return nr; } static inline int is_utf8_upper(const char *s) { mbstate_t mbs; wchar_t c; int nbytes; memset(&mbs, 0, sizeof(mbs)); nbytes = mbrtowc(&c, s, MB_CUR_MAX, &mbs); if (iswupper(c)) return nbytes; return 0; } static inline int is_utf8_alpha(const char *s) { mbstate_t mbs; wchar_t c; int nbytes; memset(&mbs, 0, sizeof(mbs)); nbytes = mbrtowc(&c, s, MB_CUR_MAX, &mbs); if (iswalpha(c)) return nbytes; return 0; } static inline int is_utf8_digit(const char *s) { mbstate_t mbs; wchar_t c; int nbytes; memset(&mbs, 0, sizeof(mbs)); nbytes = mbrtowc(&c, s, MB_CUR_MAX, &mbs); if (iswdigit(c)) return nbytes; return 0; } static inline int is_utf8_space(const char *s) { mbstate_t mbs; wchar_t c; int nbytes; memset(&mbs, 0, sizeof(mbs)); nbytes = mbrtowc(&c, s, MB_CUR_MAX, &mbs); if (iswspace(c)) return nbytes; return 0; } static inline const char * skip_utf8_upper(const char * s) { int nb = is_utf8_upper(s); while (nb) { s += nb; nb = is_utf8_upper(s); } return s; } /** * Return true if the intial upper-case letters of the * two input strings match. Comparison stops when * both srings descend to lowercase. */ static inline int utf8_upper_match(const char * s, const char * t) { mbstate_t mbs, mbt; wchar_t ws, wt; int ns, nt; memset(&mbs, 0, sizeof(mbs)); memset(&mbt, 0, sizeof(mbt)); ns = mbrtowc(&ws, s, MB_CUR_MAX, &mbs); nt = mbrtowc(&wt, t, MB_CUR_MAX, &mbt); while (iswupper(ws) || iswupper(wt)) { if (ws != wt) return FALSE; s += ns; t += nt; ns = mbrtowc(&ws, s, MB_CUR_MAX, &mbs); nt = mbrtowc(&wt, t, MB_CUR_MAX, &mbt); } return TRUE; } void downcase_utf8_str(char *to, const char * from, size_t usize); void upcase_utf8_str(char *to, const char * from, size_t usize); size_t lg_strlcpy(char * dest, const char *src, size_t size); void safe_strcpy(char *u, const char * v, size_t usize); void safe_strcat(char *u, const char *v, size_t usize); char *safe_strdup(const char *u); void left_print_string(FILE* fp, const char *, const char *); /* routines for allocating basic objects */ void init_memusage(void); void * xalloc(size_t); void * xrealloc(void *, size_t oldsize, size_t newsize); void * exalloc(size_t); #define TRACK_SPACE_USAGE #ifdef TRACK_SPACE_USAGE void xfree(void *, size_t); void exfree(void *, size_t); #else /* TRACK_SPACE_USAGE */ static inline void xfree(void *p, size_t sz) { free(p); } static inline void exfree(void *p, size_t sz) { free(p); }; #endif /* TRACK_SPACE_USAGE */ size_t get_space_in_use(void); size_t get_max_space_used(void); char * get_default_locale(void); char * join_path(const char * prefix, const char * suffix); FILE * dictopen(const char *filename, const char *how); void * object_open(const char *filename, void * (*opencb)(const char *, void *), void * user_data); /** * Returns the smallest power of two that is at least i and at least 1 */ static inline int next_power_of_two_up(int i) { int j=1; while(j 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) #define GNUC_PRINTF( format_idx, arg_idx ) \ __attribute__((__format__ (__printf__, format_idx, arg_idx))) #else #define GNUC_PRINTF( format_idx, arg_idx ) #endif typedef struct String_s String; String * string_new(void); void string_delete(String *); char * string_copy(String *); void append_string(String * string, const char *fmt, ...) GNUC_PRINTF(2,3); #endif link-grammar/link-grammar/prefix.h0000644000000000000000000001224512536650433014367 0ustar /* * BinReloc - a library for creating relocatable executables * Written by: Mike Hearn * Hongli Lai * http://autopackage.org/ * * This source code is public domain. You can relicense this code * under whatever license you want. * * See http://autopackage.org/docs/binreloc/ for * more information and how to use this. * * NOTE: if you're using C++ and are getting "undefined reference * to br_*", try renaming prefix.c to prefix.cpp */ #ifndef _PREFIX_H_ #define _PREFIX_H_ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* WARNING, BEFORE YOU MODIFY PREFIX.C: * * If you make changes to any of the functions in prefix.c, you MUST * change the BR_NAMESPACE macro. * This way you can avoid symbol table conflicts with other libraries * that also happen to use BinReloc. * * Example: * #define BR_NAMESPACE(funcName) foobar_ ## funcName * --> expands br_locate to foobar_br_locate */ #undef BR_NAMESPACE #define BR_NAMESPACE(funcName) funcName #ifdef ENABLE_BINRELOC #define br_thread_local_store BR_NAMESPACE(br_thread_local_store) #define br_locate BR_NAMESPACE(br_locate) #define br_locate_prefix BR_NAMESPACE(br_locate_prefix) #define br_prepend_prefix BR_NAMESPACE(br_prepend_prefix) #ifndef BR_NO_MACROS /* These are convience macros that replace the ones usually used in Autoconf/Automake projects */ #undef SELFPATH #undef PREFIX #undef PREFIXDIR #undef BINDIR #undef SBINDIR #undef DATADIR #undef LIBDIR #undef LIBEXECDIR #undef ETCDIR #undef SYSCONFDIR #undef CONFDIR #undef LOCALEDIR #define SELFPATH (br_thread_local_store (br_locate ((void *) ""))) #define PREFIX (br_thread_local_store (br_locate_prefix ((void *) ""))) #define PREFIXDIR (br_thread_local_store (br_locate_prefix ((void *) ""))) #define BINDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/bin"))) #define SBINDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/sbin"))) #define DATADIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/share"))) #define LIBDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/lib"))) #define LIBEXECDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/libexec"))) #define ETCDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/etc"))) #define SYSCONFDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/etc"))) #define CONFDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/etc"))) #define LOCALEDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/share/locale"))) #endif /* BR_NO_MACROS */ /* The following functions are used internally by BinReloc and shouldn't be used directly in applications. */ char *br_locate (void *symbol); char *br_locate_prefix (void *symbol); char *br_prepend_prefix (void *symbol, char *path); #endif /* ENABLE_BINRELOC */ const char *br_thread_local_store (char *str); /* These macros and functions are not guarded by the ENABLE_BINRELOC * macro because they are portable. You can use these functions. */ #define br_strcat BR_NAMESPACE(br_strcat) #define br_extract_dir BR_NAMESPACE(br_extract_dir) #define br_extract_prefix BR_NAMESPACE(br_extract_prefix) #define br_set_locate_fallback_func BR_NAMESPACE(br_set_locate_fallback_func) #ifndef BR_NO_MACROS #ifndef ENABLE_BINRELOC #define BR_SELFPATH(suffix) SELFPATH suffix #define BR_PREFIX(suffix) PREFIX suffix #define BR_PREFIXDIR(suffix) BR_PREFIX suffix #define BR_BINDIR(suffix) BINDIR suffix #define BR_SBINDIR(suffix) SBINDIR suffix #define BR_DATADIR(suffix) DATADIR suffix #define BR_LIBDIR(suffix) LIBDIR suffix #define BR_LIBEXECDIR(suffix) LIBEXECDIR suffix #define BR_ETCDIR(suffix) ETCDIR suffix #define BR_SYSCONFDIR(suffix) SYSCONFDIR suffix #define BR_CONFDIR(suffix) CONFDIR suffix #define BR_LOCALEDIR(suffix) LOCALEDIR suffix #else #define BR_SELFPATH(suffix) (br_thread_local_store (br_strcat (SELFPATH, suffix))) #define BR_PREFIX(suffix) (br_thread_local_store (br_strcat (PREFIX, suffix))) #define BR_PREFIXDIR(suffix) (br_thread_local_store (br_strcat (BR_PREFIX, suffix))) #define BR_BINDIR(suffix) (br_thread_local_store (br_strcat (BINDIR, suffix))) #define BR_SBINDIR(suffix) (br_thread_local_store (br_strcat (SBINDIR, suffix))) #define BR_DATADIR(suffix) (br_thread_local_store (br_strcat (DATADIR, suffix))) #define BR_LIBDIR(suffix) (br_thread_local_store (br_strcat (LIBDIR, suffix))) #define BR_LIBEXECDIR(suffix) (br_thread_local_store (br_strcat (LIBEXECDIR, suffix))) #define BR_ETCDIR(suffix) (br_thread_local_store (br_strcat (ETCDIR, suffix))) #define BR_SYSCONFDIR(suffix) (br_thread_local_store (br_strcat (SYSCONFDIR, suffix))) #define BR_CONFDIR(suffix) (br_thread_local_store (br_strcat (CONFDIR, suffix))) #define BR_LOCALEDIR(suffix) (br_thread_local_store (br_strcat (LOCALEDIR, suffix))) #endif #endif char *br_strcat (const char *str1, const char *str2); char *br_extract_dir (const char *path); char *br_extract_prefix(const char *path); typedef char *(*br_locate_fallback_func) (void *symbol, void *data); void br_set_locate_fallback_func (br_locate_fallback_func func, void *data); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _PREFIX_H_ */ link-grammar/link-grammar/externs.h0000644000000000000000000000227712536650433014566 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ /* verbosity global is held in utilities.c */ extern int verbosity; /* the verbosity level for error messages */ /* size of random table for computing the hash functions. must be a power of 2 */ #define RTSIZE 256 extern unsigned int randtable[RTSIZE]; /* random table for hashing */ link-grammar/link-grammar/jni-client.h0000644000000000000000000001264512536650433015132 0ustar #include /* Header for class LinkGrammar */ #ifndef _LinkGrammar_H_ #define _LinkGrammar_H_ #ifdef __cplusplus extern "C" { #endif /* * Class: LinkGrammar * Method: setMaxParseSeconds * Signature: (I)V */ JNIEXPORT void JNICALL Java_org_linkgrammar_LinkGrammar_setMaxParseSeconds (JNIEnv *, jclass, jint); /* * Class: LinkGrammar * Method: setMaxCost * Signature: (I)V */ JNIEXPORT void JNICALL Java_org_linkgrammar_LinkGrammar_setMaxCost (JNIEnv *, jclass, jint); /* * Class: LinkGrammar * Method: setDictionariesPath * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_org_linkgrammar_LinkGrammar_setDictionariesPath (JNIEnv *, jclass, jstring); /* * Class: LinkGrammar * Method: init * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_org_linkgrammar_LinkGrammar_init (JNIEnv *, jclass); /* * Class: LinkGrammar * Method: parse * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_org_linkgrammar_LinkGrammar_parse (JNIEnv *, jclass, jstring); /* * Class: LinkGrammar * Method: close * Signature: ()V */ JNIEXPORT void JNICALL Java_org_linkgrammar_LinkGrammar_close (JNIEnv *, jclass); /* * Class: LinkGrammar * Method: numWords * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getNumWords (JNIEnv *, jclass); /* * Class: LinkGrammar * Method: getWord * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getWord (JNIEnv *, jclass, jint); JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getLinkageWord (JNIEnv *, jclass, jint); JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getLinkageDisjunct (JNIEnv *, jclass, jint); JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getLinkageSense (JNIEnv *, jclass, jint, jint); JNIEXPORT jdouble JNICALL Java_org_linkgrammar_LinkGrammar_getLinkageSenseScore (JNIEnv *, jclass, jint, jint); JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getVersion(JNIEnv *, jclass); JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getDictVersion(JNIEnv *, jclass); /* * Class: LinkGrammar * Method: numSkippedWords * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getNumSkippedWords (JNIEnv *, jclass); /* * Class: LinkGrammar * Method: numLinkages * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getNumLinkages (JNIEnv *, jclass); /* * Class: LinkGrammar * Method: makeLinkage * Signature: (I)V */ JNIEXPORT void JNICALL Java_org_linkgrammar_LinkGrammar_makeLinkage (JNIEnv *, jclass, jint); /* * Class: LinkGrammar * Method: linkageNumViolations * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getLinkageNumViolations (JNIEnv *, jclass); /* * Class: LinkGrammar * Method: linkageAndCost * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getLinkageAndCost (JNIEnv *, jclass); /* * Class: LinkGrammar * Method: linkageDisjunctCost * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getLinkageDisjunctCost (JNIEnv *, jclass); /* * Class: LinkGrammar * Method: linkageLinkCost * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getLinkageLinkCost (JNIEnv *, jclass); /* * Class: LinkGrammar * Method: numLinks * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getNumLinks (JNIEnv *, jclass); /* * Class: LinkGrammar * Method: getLinkLWord * Signature: (I)I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getLinkLWord (JNIEnv *, jclass, jint); /* * Class: LinkGrammar * Method: getLinkRWord * Signature: (I)I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getLinkRWord (JNIEnv *, jclass, jint); /* * Class: LinkGrammar * Method: getLinkLLabel * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getLinkLLabel (JNIEnv *, jclass, jint); /* * Class: LinkGrammar * Method: getLinkRLabel * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getLinkRLabel (JNIEnv *, jclass, jint); /* * Class: LinkGrammar * Method: getLinkLabel * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getLinkLabel (JNIEnv *, jclass, jint); /* * Class: LinkGrammar * Method: constituentString * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getConstituentString (JNIEnv *, jclass); /* * Class: LinkGrammar * Method: getLinkString * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_linkgrammar_LinkGrammar_getLinkString (JNIEnv *, jclass); /* * Class: LinkGrammar * Method: isPastTenseForm * Signature: (Ljava/lang/String;)Z * @deprecated -- past-tense verbs are tagged with .v-d or .w-d or .q-d * subscripts. use those instead to figure out if a verb is past tense. */ JNIEXPORT jboolean JNICALL Java_org_linkgrammar_LinkGrammar_isPastTenseForm (JNIEnv *, jclass, jstring); /* * Class: LinkGrammar * Method: isEntity * Signature: (Ljava/lang/String;)Z */ JNIEXPORT jboolean JNICALL Java_org_linkgrammar_LinkGrammar_isEntity (JNIEnv *, jclass, jstring); #ifdef __cplusplus } #endif #endif /*_LinkGrammar_H_ */ link-grammar/link-grammar/extract-links.c0000644000000000000000000004313612536650433015660 0ustar /*************************************************************************/ /* Copyright (c) 2004 */ /* Daniel Sleator, David Temperley, and John Lafferty */ /* Copyright (c) 2010 Linas Vepstas */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #include /** * The first thing we do is we build a data structure to represent the * result of the entire parse search. There will be a set of nodes * built for each call to the count() function that returned a non-zero * value, AND which is part of a valid linkage. Each of these nodes * represents a valid continuation, and contains pointers to two other * sets (one for the left continuation and one for the right * continuation). */ static Parse_set * dummy_set(void) { static Parse_set ds; ds.first = ds.current = NULL; ds.count = 1; return &ds; } /** Returns an empty set of parses */ static Parse_set * empty_set(void) { Parse_set *s; s = (Parse_set *) xalloc(sizeof(Parse_set)); s->first = s->current = NULL; s->count = 0; return s; } static void free_set(Parse_set *s) { Parse_choice *p, *xp; if (s == NULL) return; for (p=s->first; p != NULL; p = xp) { xp = p->next; xfree((void *)p, sizeof(*p)); } xfree((void *)s, sizeof(*s)); } static Parse_choice * make_choice(Parse_set *lset, int llw, int lrw, Connector * llc, Connector * lrc, Parse_set *rset, int rlw, int rrw, Connector * rlc, Connector * rrc, Disjunct *ld, Disjunct *md, Disjunct *rd) { Parse_choice *pc; pc = (Parse_choice *) xalloc(sizeof(*pc)); pc->next = NULL; pc->set[0] = lset; pc->link[0].l = llw; pc->link[0].r = lrw; pc->link[0].lc = llc; pc->link[0].rc = lrc; pc->set[1] = rset; pc->link[1].l = rlw; pc->link[1].r = rrw; pc->link[1].lc = rlc; pc->link[1].rc = rrc; pc->ld = ld; pc->md = md; pc->rd = rd; return pc; } /** * Put this parse_choice into a given set. The current pointer is always * left pointing to the end of the list. */ static void put_choice_in_set(Parse_set *s, Parse_choice *pc) { if (s->first == NULL) { s->first = pc; } else { s->current->next = pc; } s->current = pc; pc->next = NULL; } /** * Allocate the parse info struct * * A piecewise exponential function determines the size of the hash * table. Probably should make use of the actual number of disjuncts, * rather than just the number of words. */ Parse_info parse_info_new(int nwords) { int log2_table_size; Parse_info pi; pi = (Parse_info) xalloc(sizeof(struct Parse_info_struct)); memset(pi, 0, sizeof(struct Parse_info_struct)); pi->N_words = nwords; pi->parse_set = NULL; pi->chosen_disjuncts = (Disjunct **) xalloc(nwords * sizeof(Disjunct *)); memset(pi->chosen_disjuncts, 0, nwords * sizeof(Disjunct *)); pi->image_array = (Image_node **) xalloc(nwords * sizeof(Image_node *)); memset(pi->image_array, 0, nwords * sizeof(Image_node *)); pi->has_fat_down = (char *) xalloc(nwords * sizeof(Boolean)); memset(pi->has_fat_down, 0, nwords * sizeof(Boolean)); /* Alloc the x_table */ if (nwords >= 10) { log2_table_size = 14; } else if (nwords >= 4) { log2_table_size = nwords; } else { log2_table_size = 4; } pi->log2_x_table_size = log2_table_size; pi->x_table_size = (1 << log2_table_size); /*printf("Allocating x_table of size %d\n", x_table_size);*/ pi->x_table = (X_table_connector**) xalloc(pi->x_table_size * sizeof(X_table_connector*)); memset(pi->x_table, 0, pi->x_table_size * sizeof(X_table_connector*)); return pi; } /** * This is the function that should be used to free the set structure. Since * it's a dag, a recursive free function won't work. Every time we create * a set element, we put it in the hash table, so this is OK. */ void free_parse_info(Parse_info pi) { int i, len; X_table_connector *t, *x; len = pi->N_words; xfree(pi->chosen_disjuncts, len * sizeof(Disjunct *)); xfree(pi->image_array, len * sizeof(Image_node*)); xfree(pi->has_fat_down, len * sizeof(Boolean)); for (i=0; ix_table_size; i++) { for(t = pi->x_table[i]; t!= NULL; t=x) { x = t->next; free_set(t->set); xfree((void *) t, sizeof(X_table_connector)); } } pi->parse_set = NULL; /*printf("Freeing x_table of size %d\n", x_table_size);*/ xfree((void *) pi->x_table, pi->x_table_size * sizeof(X_table_connector*)); pi->x_table_size = 0; pi->x_table = NULL; xfree((void *) pi, sizeof(struct Parse_info_struct)); } /** * Returns the pointer to this info, NULL if not there. */ static X_table_connector * x_table_pointer(int lw, int rw, Connector *le, Connector *re, int cost, Parse_info pi) { X_table_connector *t; t = pi->x_table[pair_hash(pi->log2_x_table_size, lw, rw, le, re, cost)]; for (; t != NULL; t = t->next) { if ((t->lw == lw) && (t->rw == rw) && (t->le == le) && (t->re == re) && (t->cost == cost)) return t; } return NULL; } #if DEAD_CODE Parse_set * x_table_lookup(int lw, int rw, Connector *le, Connector *re, int cost, Parse_info pi) { /* returns the count for this quintuple if there, -1 otherwise */ X_table_connector *t = x_table_pointer(lw, rw, le, re, cost, pi); if (t == NULL) return -1; else return t->set; } #endif /** * Stores the value in the x_table. Assumes it's not already there. */ static X_table_connector * x_table_store(int lw, int rw, Connector *le, Connector *re, int cost, Parse_set * set, Parse_info pi) { X_table_connector *t, *n; int h; n = (X_table_connector *) xalloc(sizeof(X_table_connector)); n->set = set; n->lw = lw; n->rw = rw; n->le = le; n->re = re; n->cost = cost; h = pair_hash(pi->log2_x_table_size, lw, rw, le, re, cost); t = pi->x_table[h]; n->next = t; pi->x_table[h] = n; return n; } #ifdef UNUSED_FUNCTION static void x_table_update(int lw, int rw, Connector *le, Connector *re, int cost, Parse_set * set, Parse_info pi) { /* Stores the value in the x_table. Unlike x_table_store, it assumes it's already there */ X_table_connector *t = x_table_pointer(lw, rw, le, re, cost, pi); assert(t != NULL, "This entry is supposed to be in the x_table."); t->set = set; } #endif /** * returns NULL if there are no ways to parse, or returns a pointer * to a set structure representing all the ways to parse. * * This code is similar to code in count.c * (grep for end_word in these files). */ static Parse_set * parse_set(Sentence sent, Disjunct *ld, Disjunct *rd, int lw, int rw, Connector *le, Connector *re, int cost, int islands_ok, Parse_info pi) { Disjunct * d, * dis; int start_word, end_word, w; int lcost, rcost, Lmatch, Rmatch; int i, j; Parse_set *ls[4], *rs[4], *lset, *rset; Parse_choice * a_choice; Match_node * m, *m1; X_table_connector *xt; s64 count; assert(cost >= 0, "parse_set() called with cost < 0."); count = table_lookup(sent, lw, rw, le, re, cost); /* assert(count >= 0, "parse_set() called on params that were not in the table."); Actually, we can't assert this, because of the pseudocount technique that's used in count(). It's not the case that every call to parse_set() has already been put into the table. */ if ((count == 0) || (count == -1)) return NULL; xt = x_table_pointer(lw, rw, le, re, cost, pi); if (xt != NULL) return xt->set; /* we've already computed it */ /* Start it out with the empty set of options. */ /* This entry must be updated before we return. */ xt = x_table_store(lw, rw, le, re, cost, empty_set(), pi); xt->set->count = count; /* the count we already computed */ /* this count is non-zero */ if (rw == 1 + lw) return xt->set; if ((le == NULL) && (re == NULL)) { if (!islands_ok && (lw != -1)) return xt->set; if (cost == 0) return xt->set; w = lw + 1; for (dis = sent->word[w].d; dis != NULL; dis = dis->next) { if (dis->left == NULL) { rs[0] = parse_set(sent, dis, NULL, w, rw, dis->right, NULL, cost-1, islands_ok, pi); if (rs[0] == NULL) continue; a_choice = make_choice(dummy_set(), lw, w, NULL, NULL, rs[0], w, rw, NULL, NULL, NULL, NULL, NULL); put_choice_in_set(xt->set, a_choice); } } rs[0] = parse_set(sent, NULL, NULL, w, rw, NULL, NULL, cost-1, islands_ok, pi); if (rs[0] != NULL) { a_choice = make_choice(dummy_set(), lw, w, NULL, NULL, rs[0], w, rw, NULL, NULL, NULL, NULL, NULL); put_choice_in_set(xt->set, a_choice); } return xt->set; } if (le == NULL) { start_word = lw + 1; } else { start_word = le->word; } if (re == NULL) { end_word = rw; } else { end_word = re->word + 1; } for (w = start_word; w < end_word; w++) { m1 = m = form_match_list(sent, w, le, lw, re, rw); for (; m!=NULL; m=m->next) { d = m->d; for (lcost = 0; lcost <= cost; lcost++) { rcost = cost-lcost; /* now lcost and rcost are the costs we're assigning to * those parts respectively */ /* Now, we determine if (based on table only) we can see that the current range is not parsable. */ Lmatch = (le != NULL) && (d->left != NULL) && do_match(sent, le, d->left, lw, w); Rmatch = (d->right != NULL) && (re != NULL) && do_match(sent, d->right, re, w, rw); for (i=0; i<4; i++) {ls[i] = rs[i] = NULL;} if (Lmatch) { ls[0] = parse_set(sent, ld, d, lw, w, le->next, d->left->next, lcost, islands_ok, pi); if (le->multi) ls[1] = parse_set(sent, ld, d, lw, w, le, d->left->next, lcost, islands_ok, pi); if (d->left->multi) ls[2] = parse_set(sent, ld, d, lw, w, le->next, d->left, lcost, islands_ok, pi); if (le->multi && d->left->multi) ls[3] = parse_set(sent, ld, d, lw, w, le, d->left, lcost, islands_ok, pi); } if (Rmatch) { rs[0] = parse_set(sent, d, rd, w, rw, d->right->next, re->next, rcost, islands_ok, pi); if (d->right->multi) rs[1] = parse_set(sent, d, rd, w,rw,d->right,re->next, rcost, islands_ok, pi); if (re->multi) rs[2] = parse_set(sent, d, rd, w, rw, d->right->next, re, rcost, islands_ok, pi); if (d->right->multi && re->multi) rs[3] = parse_set(sent, d, rd, w, rw, d->right, re, rcost, islands_ok, pi); } for (i=0; i<4; i++) { /* this ordering is probably not consistent with that * needed to use list_links */ if (ls[i] == NULL) continue; for (j=0; j<4; j++) { if (rs[j] == NULL) continue; a_choice = make_choice(ls[i], lw, w, le, d->left, rs[j], w, rw, d->right, re, ld, d, rd); put_choice_in_set(xt->set, a_choice); } } if (ls[0] != NULL || ls[1] != NULL || ls[2] != NULL || ls[3] != NULL) { /* evaluate using the left match, but not the right */ rset = parse_set(sent, d, rd, w, rw, d->right, re, rcost, islands_ok, pi); if (rset != NULL) { for (i=0; i<4; i++) { if (ls[i] == NULL) continue; /* this ordering is probably not consistent with * that needed to use list_links */ a_choice = make_choice(ls[i], lw, w, le, d->left, rset, w, rw, NULL /* d->right */, re, /* the NULL indicates no link*/ ld, d, rd); put_choice_in_set(xt->set, a_choice); } } } if ((le == NULL) && (rs[0] != NULL || rs[1] != NULL || rs[2] != NULL || rs[3] != NULL)) { /* evaluate using the right match, but not the left */ lset = parse_set(sent, ld, d, lw, w, le, d->left, lcost, islands_ok, pi); if (lset != NULL) { for (i=0; i<4; i++) { if (rs[i] == NULL) continue; /* this ordering is probably not consistent with * that needed to use list_links */ a_choice = make_choice(lset, lw, w, NULL /* le */, d->left, /* NULL indicates no link */ rs[i], w, rw, d->right, re, ld, d, rd); put_choice_in_set(xt->set, a_choice); } } } } } put_match_list(sent, m1); } xt->set->current = xt->set->first; return xt->set; } /** * return TRUE if and only if overflow in the number of parses occured. * Use a 64-bit int for counting. */ static int verify_set_node(Parse_set *set) { Parse_choice *pc; s64 n; if (set == NULL || set->first == NULL) return FALSE; n = 0; for (pc = set->first; pc != NULL; pc = pc->next) { n += pc->set[0]->count * pc->set[1]->count; if (PARSE_NUM_OVERFLOW < n) return TRUE; } return FALSE; } static int verify_set(Parse_info pi) { int i; assert(pi->x_table != NULL, "called verify_set when x_table==NULL"); for (i=0; ix_table_size; i++) { X_table_connector *t; for(t = pi->x_table[i]; t != NULL; t = t->next) { if (verify_set_node(t->set)) return TRUE; } } return FALSE; } /** * This is the top level call that computes the whole parse_set. It * points whole_set at the result. It creates the necessary hash * table (x_table) which will be freed at the same time the * whole_set is freed. * * It also assumes that count() has been run, and that hash table is * filled with the values thus computed. Therefore this function * must be structured just like parse() (the main function for * count()). * * If the number of linkages gets huge, then the counts can overflow. * We check if this has happened when verifying the parse set. * This routine returns TRUE iff overflowed occurred. */ int build_parse_set(Sentence sent, int cost, Parse_Options opts) { Parse_set * whole_set; whole_set = parse_set(sent, NULL, NULL, -1, sent->length, NULL, NULL, cost+1, opts->islands_ok, sent->parse_info); if ((whole_set != NULL) && (whole_set->current != NULL)) { whole_set->current = whole_set->first; } sent->parse_info->parse_set = whole_set; return verify_set(sent->parse_info); } static void initialize_links(Parse_info pi) { pi->N_links = 0; memset(pi->chosen_disjuncts, 0, pi->N_words * sizeof(Disjunct *)); } static void issue_link(Parse_info pi, Disjunct * ld, Disjunct * rd, Link link) { assert(pi->N_links <= MAX_LINKS-1, "Too many links"); pi->link_array[pi->N_links] = link; pi->N_links++; pi->chosen_disjuncts[link.l] = ld; pi->chosen_disjuncts[link.r] = rd; } static void issue_links_for_choice(Parse_info pi, Parse_choice *pc) { if (pc->link[0].lc != NULL) { /* there is a link to generate */ issue_link(pi, pc->ld, pc->md, pc->link[0]); } if (pc->link[1].lc != NULL) { issue_link(pi, pc->md, pc->rd, pc->link[1]); } } #ifdef NOT_USED_ANYWHERE static void build_current_linkage_recursive(Parse_info pi, Parse_set *set) { if (set == NULL) return; if (set->current == NULL) return; issue_links_for_choice(pi, set->current); build_current_linkage_recursive(pi, set->current->set[0]); build_current_linkage_recursive(pi, set->current->set[1]); } /** * This function takes the "current" point in the given set and * generates the linkage that it represents. */ void build_current_linkage(Parse_info pi) { initialize_links(pi); build_current_linkage_recursive(pi, pi->parse_set); } /** * Advance the "current" linkage to the next one * return 1 if there's a "carry" from this node, * which indicates that the scan of this node has * just been completed, and it's now back to it's * starting state. */ static int advance_linkage(Parse_info pi, Parse_set * set) { if (set == NULL) return 1; /* probably can't happen */ if (set->first == NULL) return 1; /* the empty set */ if (advance_linkage(pi, set->current->set[0]) == 1) { if (advance_linkage(pi, set->current->set[1]) == 1) { if (set->current->next == NULL) { set->current = set->first; return 1; } set->current = set->current->next; } } return 0; } static void advance_parse_set(Parse_info pi) { advance_linkage(pi, pi->parse_set); } #endif static void list_links(Parse_info pi, Parse_set * set, int index) { Parse_choice *pc; s64 n; if (set == NULL || set->first == NULL) return; for (pc = set->first; pc != NULL; pc = pc->next) { n = pc->set[0]->count * pc->set[1]->count; if (index < n) break; index -= n; } assert(pc != NULL, "walked off the end in list_links"); issue_links_for_choice(pi, pc); list_links(pi, pc->set[0], index % pc->set[0]->count); list_links(pi, pc->set[1], index / pc->set[0]->count); } static void list_random_links(Parse_info pi, Parse_set * set) { Parse_choice *pc; int num_pc, new_index; if (set == NULL || set->first == NULL) return; num_pc = 0; for (pc = set->first; pc != NULL; pc = pc->next) { num_pc++; } new_index = rand_r(&pi->rand_state) % num_pc; num_pc = 0; for (pc = set->first; pc != NULL; pc = pc->next) { if (new_index == num_pc) break; num_pc++; } assert(pc != NULL, "Couldn't get a random parse choice"); issue_links_for_choice(pi, pc); list_random_links(pi, pc->set[0]); list_random_links(pi, pc->set[1]); } /** * Generate the list of all links of the index'th parsing of the * sentence. For this to work, you must have already called parse, and * already built the whole_set. */ void extract_links(int index, int cost, Parse_info pi) { initialize_links(pi); pi->rand_state = index; if (index < 0) { list_random_links(pi, pi->parse_set); } else { list_links(pi, pi->parse_set, index); } } link-grammar/link-grammar/spellcheck-aspell.c0000644000000000000000000001026512536650433016460 0ustar /*************************************************************************/ /* Copyright (c) 2009 Vikas N. Kumar */ /* Copyright (c) 2009 Linas Vepstas */ /* All rights reserved */ /* */ /* Use of the link grammar parsing system is subject to the terms of the */ /* license set forth in the LICENSE file included with this software, */ /* and also available at http://www.link.cs.cmu.edu/link/license.html */ /* This license allows free redistribution and use in source and binary */ /* forms, with or without modification, subject to certain conditions. */ /* */ /*************************************************************************/ #ifdef HAVE_ASPELL #include #include #include #include #include "link-includes.h" #include "spellcheck.h" #include "utilities.h" /* For Win32 compatibility */ #define ASPELL_LANG_KEY "lang" static const char *spellcheck_lang_mapping[] = { "en" /* link-grammar language */, "en_US" /* Aspell language key */ }; struct linkgrammar_aspell { AspellConfig *config; AspellSpeller *speller; }; void * spellcheck_create(const char * lang) { struct linkgrammar_aspell *aspell = NULL; size_t i = 0; AspellCanHaveError *spell_err = NULL; for (i = 0; i < sizeof(spellcheck_lang_mapping)/sizeof(char *); i += 2) { if (0 != strcmp(lang, spellcheck_lang_mapping[i])) continue; aspell = (struct linkgrammar_aspell *)malloc(sizeof(struct linkgrammar_aspell)); if (!aspell) { prt_error("Error: out of memory. Aspell not used.\n"); aspell = NULL; break; } aspell->config = NULL; aspell->speller = NULL; aspell->config = new_aspell_config(); if (aspell_config_replace(aspell->config, ASPELL_LANG_KEY, spellcheck_lang_mapping[i]) == 0) { prt_error("Error: failed to set language in aspell: %s\n", lang); delete_aspell_config(aspell->config); free(aspell); aspell = NULL; break; } spell_err = new_aspell_speller(aspell->config); if (aspell_error_number(spell_err) != 0) { prt_error("Error: Aspell: %s\n", aspell_error_message(spell_err)); delete_aspell_can_have_error(spell_err); delete_aspell_config(aspell->config); free(aspell); aspell = NULL; break; } aspell->speller = to_aspell_speller(spell_err); break; } return aspell; } void spellcheck_destroy(void * chk) { struct linkgrammar_aspell *aspell = (struct linkgrammar_aspell *)chk; if (aspell) { delete_aspell_speller(aspell->speller); delete_aspell_config(aspell->config); free(aspell); aspell = NULL; } } int spellcheck_test(void * chk, const char * word) { int val = 0; struct linkgrammar_aspell *aspell = (struct linkgrammar_aspell *)chk; if (aspell && aspell->speller) { /* this can return -1 on failure */ val = aspell_speller_check(aspell->speller, word, -1); } return (val == 1) ? 1 : 0; } int spellcheck_suggest(void * chk, char ***sug, const char * word) { struct linkgrammar_aspell *aspell = (struct linkgrammar_aspell *)chk; if (!sug) { prt_error("Error: Aspell. Corrupt pointer.\n"); return 0; } if (aspell && aspell->speller) { const AspellWordList *list = NULL; AspellStringEnumeration *elem = NULL; const char *aword = NULL; unsigned int size, i; char **array = NULL; list = aspell_speller_suggest(aspell->speller, word, -1); elem = aspell_word_list_elements(list); size = aspell_word_list_size(list); /* allocate an array of char* for returning back to link-parser */ array = (char **)malloc(sizeof(char *) * size); if (!array) { prt_error("Error: Aspell. Out of memory.\n"); delete_aspell_string_enumeration(elem); return 0; } i = 0; while ((aword = aspell_string_enumeration_next(elem)) != NULL) { array[i++] = strdup(aword); } delete_aspell_string_enumeration(elem); *sug = array; return size; } return 0; } void spellcheck_free_suggest(char **sug, int size) { int i = 0; for (i = 0; i < size; ++i) { free(sug[i]); sug[i] = NULL; } free(sug); } #endif /* #ifdef HAVE_ASPELL */ link-grammar/debian/0000755000000000000000000000000012537606406011560 5ustar link-grammar/debian/README.source0000644000000000000000000000471412536650433013743 0ustar Running dpkg-source -x on this source package (when downloaded from the Debian archive) produces the source of the package, ready for editing, and running dpkg-buildpackage will produce a modified package without any additional steps. However, I do my package maintenence in a git repository stored at git://git.debian.org/git/collab-maint/link-grammar.git (and viewable on the web at http://git.debian.org/?p=collab-maint/link-grammar.git;a=summary). When cloning the source from there, some preparatory steps are needed before building and uploading the package, because automatically generated autoconf files are intentionally missing from the git repository. An overview of the git repository: The `upstream` branch contains AbiSource's releases of link-grammar, taken from their subversion repository at http://svn.abisource.com/link-grammar/tags/. I export the tagged version and commit the result directly into the `upstream` branch. I use the `git archive` command to create a .orig tarball, and then I use `pristine-tar` to commit the tarball's diff files into the `pristine-tar` branch. After this, I merge the `upstream` branch into the `master` branch, which contains the debian/directory, and any other local modifications to the link-grammar sources. (This has been known to include modifications to upstream's build system, bug fixes, and the inclusion of files that upstream has packaged in their release tarballs but forgotten to commit into their svn repository.) Because frequently it is necessary to fix Makefile.am or configure.in files, my git repository never contains files that are automatically generated by autotools (to include these would interfere greatly with merging changes when I have to change things). To create a shipping sources suitable for upload to the Debian archive from the git repository, use pristine-tar to regenerate the .orig tarball. Then run `./autogen.sh --no-configure` to generate the ./configure file and the Makefile.am's. Once your working tree is populated with the automatically generated files, you can use `dpkg-buildpackage -S -I.git` to create suitable source packages for Debian, or you can use your favorite build command (I use `pdebuild`) to build binary packages. Summary: when running `dpkg-source -x` to expand a Debian source package, nothing additional need be done to have a buildable source tree. When working from the git repository, use `./autogen.sh --no-configure` to generate the configure script. link-grammar/debian/changelog0000644000000000000000000001760112537602324013432 0ustar link-grammar (4.7.4-3) unstable; urgency=medium * Use autotools-dev to support newer architectures (Closes: 765232) * Orphan package to QA, at maintainer's request * Fix typo in package description (Closes: 698587) * Update architectures for java JNI build. * Remove obsolete Dm-Upload-Allowed field -- Wookey Sun, 31 May 2015 14:22:39 +0000 link-grammar (4.7.4-2) unstable; urgency=low * Update homepage (Closes: #618610) * Remove debhelper boilerplate from debian/watch -- Ken Bloom Fri, 29 Apr 2011 08:35:45 -0500 link-grammar (4.7.4-1) unstable; urgency=low * New upstream release * Make binary package link-grammar Multi-Arch: foreign -- Ken Bloom Fri, 25 Feb 2011 13:08:22 -0600 link-grammar (4.7.0-1) unstable; urgency=low * New upstream release. * Update standards version to 3.9.1 -- Ken Bloom Tue, 26 Oct 2010 23:19:25 -0500 link-grammar (4.6.7-1) unstable; urgency=low * New upstream release. (Closes: 576201) * Don't install /usr/lib/*.la files (Closes: 570633) Various commenters on #570633 tell me this works when rebuilding other packages against link-grammar, so I'm going to trust them unless someone reports another bug. * Update standards version to 3.8.4 * Add debian/source/format = 1.0 -- Ken Bloom Wed, 05 May 2010 10:27:15 -0500 link-grammar (4.6.5-1) unstable; urgency=low * New upstream release * Set JAVA_HOME correctly during build. * Link with -Wl,--as-needed so that CLI and JNI library don't have direct dependencies on the spell checker. * Versioned depends of liblink-grammar4-dev on liblink-grammar4 fixes lintian error. * Update standards-version to 3.8.3 fixes lintian warning. * Add symbols file for shlibs * Update short descriptions so they don't match for all packages -- Ken Bloom Wed, 18 Nov 2009 09:30:03 -0600 link-grammar (4.5.8-1) unstable; urgency=low * New upstream release. -- Ken Bloom Thu, 13 Aug 2009 20:52:05 -0500 link-grammar (4.5.7-2) unstable; urgency=low * Fix bashism in debian/rules (Closes: 535405) -- Ken Bloom Wed, 01 Jul 2009 21:39:50 -0500 link-grammar (4.5.7-1) unstable; urgency=low * New upstream release. * Bump standards version to 3.8.2 (No changes needed). -- Ken Bloom Mon, 22 Jun 2009 13:12:01 -0500 link-grammar (4.5.6-1) unstable; urgency=low * New upstream release. -- Ken Bloom Tue, 26 May 2009 10:05:50 -0500 link-grammar (4.5.5-1) unstable; urgency=low * New upstream release. * Fix /usr/share/java/link-grammar.jar symlink to not include the build dir * Update minimum debhelper build-dep to >= 7.0.0 * Fix spelling errors in changelog, copyright -- Ken Bloom Tue, 19 May 2009 21:02:38 -0500 link-grammar (4.5.3-1) unstable; urgency=low * New upstream release. * debian/control: fix an arch: line to make the line continuation correct so that liblink-grammar4-java really builds on all architectures that support it -- Ken Bloom Fri, 17 Apr 2009 15:44:55 -0500 link-grammar (4.3.9-2) unstable; urgency=low * Don't pass -z noexecstack to the linker because it's overridden anyway, and it breaks compilation on several architectures -- Ken Bloom Fri, 28 Nov 2008 09:48:34 -0600 link-grammar (4.3.9-1) unstable; urgency=low * New upstream release * Use default-jdk to build JNI package (Closes: #506209) * Don't build liblink-grammar-java on architectures that don't (currently) have default-jdk (Closes: #506531) * Update man page to refer to the binary as link-parser (Closes: #504538) * Fix debian/rules clean * Update to standards version 3.8.0 (no changes needed) * Add link-grammar-dictionaries-lt for the included Lithuanian dictionaries * Pass -z noexecstack to the linker -- Ken Bloom Sun, 23 Nov 2008 11:16:00 -0600 link-grammar (4.3.5-1) unstable; urgency=low * New upstream release. * Remove Linda overrides, because Linda is obsolete. -- Ken Bloom Sun, 22 Jun 2008 23:59:53 +0300 link-grammar (4.3.2-1) unstable; urgency=low * New upstream release. -- Ken Bloom Mon, 04 Feb 2008 16:12:33 -0600 link-grammar (4.3.1-1) unstable; urgency=low * New upstream release - Adds JNI interface - Expanded dictionaries * Add a watch file -- Ken Bloom Fri, 01 Feb 2008 13:40:14 -0600 link-grammar (4.2.5-1) unstable; urgency=high * New upstream release. - Fixes boundary in separate_word() function. CVE-2007-5395 and Secunia advisory SA27340 (Closes: #450695) - Adds new API for extracting constituents. * Removed all local patches as they've all been accepted upstream. -- Ken Bloom Fri, 09 Nov 2007 14:19:10 -0600 link-grammar (4.2.2-4) unstable; urgency=low * Fix stupid bashism in debian/rules (Closes: #376478) * Return to quilt for patches to more easily manage the changes introduced in the last two versions. Next time, I won't remove quilt, even when I have no patches. * Bump standards-version to 3.7.2 * Fix homepage pseudo-field to have 2 spaces at the beginning so p.d.o can parse it correctly. -- Ken Bloom Tue, 4 Jul 2006 22:49:41 -0500 link-grammar (4.2.2-3) unstable; urgency=low * Get my fix for the sentence length error message correct so it doesn't leak memory. * Import prototype for safe_strdup() to prevent crashes on amd64 (Closes: #366490) Thanks to Dann Fraizer, and his script on the AMD64 buildd. -- Ken Bloom Tue, 9 May 2006 08:35:22 -0500 link-grammar (4.2.2-2) unstable; urgency=low * Updated manpage to be more clear. Thanks to Maru Dubshinki (Closes: #364532) * Merged patch from upstream CVS to handle unset $LANG. (Closes: #364738) * Don't use sentence to generate error message after deleting it. (Closes: #366136). I have not done an audit to find other cases of this. -- Ken Bloom Sun, 23 Apr 2006 22:44:03 -0500 link-grammar (4.2.2-1) unstable; urgency=low * New Upstream Release * Eliminate quilt use, and eliminate all patches. - Patches for dictionary selection were merged upstream - Rename the commandline parser using debian/rules rather than reautotooling. * Install -T is broken despite being documented in the man page. Work around that in debian/rules (Closes: #359280) -- Ken Bloom Tue, 18 Apr 2006 11:27:15 -0500 link-grammar (4.1.3-2) unstable; urgency=low * The commandline parser (and not the search path) should have been patched to fix dictionary selection (Closes: 352165) * Use alternatives system to manage the default dictionary for the command-line parser -- Ken Bloom Wed, 15 Feb 2006 09:01:45 -0600 link-grammar (4.1.3-1) unstable; urgency=low * Initial release Closes: #337277 * Patches: - dictionary-path-references Since the dictionaries live in data/en, they don't need to refer to en/words as this would really mean data/en/en/words which doesn't exist. - binary-name Named this link-grammar instead of grammar-parse. Partly personal preference, and partly because if other kinds of grammar get added to Debian, this one shouldn't have the generic name. - default-english-dictionary Make link-grammar use the english dictionary in data/en as the default. (Upstream stored the dictionary in data/en, but told the program to refer to the nonexistent one in data/) - acinclude_binreloc Needed to reautotoolize. - reautotoolize Reautotoolize to deal with the stuff done in binary-name and default-english-dictionary -- Ken Bloom Thu, 3 Nov 2005 16:53:09 -0600 link-grammar/debian/liblink-grammar4.install0000644000000000000000000000005012536650433016275 0ustar debian/tmp/usr/lib/liblink-grammar.so.* link-grammar/debian/docs0000644000000000000000000000000712536650433012426 0ustar README link-grammar/debian/source/0000755000000000000000000000000012536650433013056 5ustar link-grammar/debian/source/format0000644000000000000000000000000412536650433014263 0ustar 1.0 link-grammar/debian/watch0000644000000000000000000000013512536650433012606 0ustar version=3 http://www.abisource.com/downloads/link-grammar/([0-9.]*)/link-grammar-(.*).tar.gz link-grammar/debian/compat0000644000000000000000000000000212536650433012754 0ustar 7 link-grammar/debian/copyright0000644000000000000000000000710112536650433013510 0ustar This package was debianized by Ken Bloom on Thu, 3 Nov 2005 13:54:35 -0600. It was downloaded from http://www.abisource.com/downloads/link-grammar/ (a project page is available at http://www.abisource.com/projects/link-grammar/) where the autotooled version is maintained by Dom Lachowicz . The original, un-autotooled version comes from http://www.link.cs.cmu.edu/link/ Copyright (c) 2003-2004 Daniel Sleator, David Temperley, and John Lafferty. All rights reserved. Copyright (c) 2007 Mike Ross. Portions Copyright (c) 2009 Linas Vepstas. Portions Copyright (C) 2009 Vikas N. Kumar Portions Copyright (c) 2005 Sampo Pyysalo License: Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The names "Link Grammar" and "Link Parser" must not be used to endorse or promote products derived from this software without prior written permission. To obtain permission, contact sleator@cs.cmu.edu THIS SOFTWARE IS PROVIDED BY DANIEL SLEATOR, DAVID TEMPERLEY, JOHN LAFFERTY AND OTHER CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. link-grammar/java/org/linkgrammar/JSONReader.java is Copyright (c) 2009 Borislav Iordanov, and is released under the Apache License 2.0. See /usr/share/common-licenses/Apache-2.0 for the license terms. link-grammar/minisat/* is Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson, and is released under the following license: 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. link-grammar/debian/liblink-grammar4.symbols0000644000000000000000000001653712536650433016340 0ustar liblink-grammar.so.4 liblink-grammar4 #MINVER# analyze_fat_linkage@Base 4.3.9 analyze_thin_linkage@Base 4.3.9 build_deletable@Base 4.3.9 build_disjuncts_for_X_node@Base 4.6.5 build_disjuncts_for_dict_node@Base 4.6.5 build_effective_dist@Base 4.3.9 catenate_disjuncts@Base 4.6.5 connector_new@Base 4.7.4 count_disjuncts@Base 4.6.5 count_set_effective_distance@Base 4.3.9 dictionary_create@Base 4.2.2 dictionary_create_default_lang@Base 4.2.2 dictionary_create_lang@Base 4.2.2 dictionary_delete@Base 4.2.2 dictionary_get_data_dir@Base 4.6.5 dictionary_get_max_cost@Base 4.2.2 dictionary_is_entity@Base 4.6.5 dictionary_is_past_tense_form@Base 4.6.5 dictionary_lookup_list@Base 4.6.5 dictionary_set_data_dir@Base 4.6.5 do_match@Base 4.6.5 eliminate_duplicate_disjuncts@Base 4.6.5 exalloc@Base 4.3.9 extract_fat_linkage@Base 4.3.9 extract_thin_linkage@Base 4.3.9 free_connectors@Base 4.7.4 free_disjuncts@Base 4.6.5 free_parse_info@Base 4.7.4 init_connector@Base 4.3.9 init_count@Base 4.7.4 intersect_strings@Base 4.3.9 #MISSING: 4.6.5-1# is_entity@Base 4.3.5 #MISSING: 4.6.5-1# is_past_tense_form@Base 4.3.5 issue_special_command@Base 4.2.2 lg_compute_disjunct_strings@Base 4.6.5 lg_expand_disjunct_list@Base 4.6.5 lg_strlcpy@Base 4.6.5 linkage_and_cost@Base 4.2.2 linkage_compute_union@Base 4.2.2 linkage_constituent_node_get_child@Base 4.2.5 linkage_constituent_node_get_end@Base 4.2.5 linkage_constituent_node_get_label@Base 4.2.5 linkage_constituent_node_get_next@Base 4.2.5 linkage_constituent_node_get_start@Base 4.2.5 linkage_constituent_tree@Base 4.2.5 linkage_corpus_cost@Base 4.6.5 linkage_create@Base 4.2.2 linkage_delete@Base 4.2.2 linkage_disjunct_cost@Base 4.2.2 linkage_free_constituent_tree@Base 4.2.5 linkage_free_constituent_tree_str@Base 4.3.5 linkage_free_diagram@Base 4.3.5 linkage_free_disjuncts@Base 4.6.5 linkage_free_links_and_domains@Base 4.3.9 linkage_free_postscript@Base 4.3.5 linkage_free_senses@Base 4.6.5 linkage_get_current_sublinkage@Base 4.6.5 linkage_get_disjunct_corpus_score@Base 4.6.5 linkage_get_disjunct_cost@Base 4.6.5 linkage_get_disjunct_str@Base 4.6.5 linkage_get_link_domain_names@Base 4.2.2 linkage_get_link_label@Base 4.2.2 linkage_get_link_length@Base 4.2.2 linkage_get_link_llabel@Base 4.2.2 linkage_get_link_lword@Base 4.2.2 linkage_get_link_num_domains@Base 4.2.2 linkage_get_link_rlabel@Base 4.2.2 linkage_get_link_rword@Base 4.2.2 linkage_get_num_links@Base 4.2.2 linkage_get_num_sublinkages@Base 4.2.2 linkage_get_num_words@Base 4.2.2 linkage_get_sentence@Base 4.2.2 linkage_get_violation_name@Base 4.2.2 linkage_get_word@Base 4.2.2 linkage_get_words@Base 4.2.2 linkage_has_inconsistent_domains@Base 4.2.2 linkage_is_canonical@Base 4.2.2 linkage_is_fat@Base 4.7.0 linkage_is_improper@Base 4.2.2 linkage_link_cost@Base 4.2.2 linkage_post_process@Base 4.2.2 linkage_print_constituent_tree@Base 4.2.2 linkage_print_diagram@Base 4.2.2 linkage_print_disjuncts@Base 4.6.5 linkage_print_links_and_domains@Base 4.2.2 linkage_print_postscript@Base 4.2.2 linkage_print_senses@Base 4.6.5 linkage_set_current_sublinkage@Base 4.2.2 linkage_unused_word_cost@Base 4.2.2 linkgrammar_get_dict_version@Base 4.6.7 linkgrammar_get_version@Base 4.6.5 lperrmsg@Base 4.2.2 lperrno@Base 4.2.2 lperror_clear@Base 4.3.9 #MISSING: 4.6.5-1# match@Base 4.3.9 match_in_connector_set@Base 4.3.9 object_open@Base 4.6.5 parse_info_new@Base 4.7.4 parse_options_create@Base 4.2.2 parse_options_delete@Base 4.2.2 parse_options_get_all_short_connectors@Base 4.2.2 parse_options_get_allow_null@Base 4.2.2 parse_options_get_batch_mode@Base 4.2.2 parse_options_get_cost_model_type@Base 4.6.5 parse_options_get_disjunct_cost@Base 4.2.2 parse_options_get_disjunct_costf@Base 4.6.5 parse_options_get_display_bad@Base 4.2.2 parse_options_get_display_constituents@Base 4.2.2 parse_options_get_display_disjuncts@Base 4.6.5 parse_options_get_display_links@Base 4.2.2 parse_options_get_display_on@Base 4.2.2 parse_options_get_display_postscript@Base 4.2.2 parse_options_get_display_senses@Base 4.6.5 parse_options_get_display_union@Base 4.2.2 parse_options_get_display_walls@Base 4.2.2 parse_options_get_echo_on@Base 4.2.2 parse_options_get_islands_ok@Base 4.2.2 parse_options_get_linkage_limit@Base 4.2.2 parse_options_get_max_memory@Base 4.2.2 parse_options_get_max_null_count@Base 4.2.2 parse_options_get_max_parse_time@Base 4.2.2 parse_options_get_max_sentence_length@Base 4.2.2 parse_options_get_min_null_count@Base 4.2.2 parse_options_get_null_block@Base 4.2.2 parse_options_get_panic_mode@Base 4.2.2 parse_options_get_screen_width@Base 4.2.2 parse_options_get_short_length@Base 4.2.2 parse_options_get_spell_guess@Base 4.6.5 parse_options_get_use_cluster_disjuncts@Base 4.6.5 parse_options_get_use_fat_links@Base 4.7.0 parse_options_get_use_sat_parser@Base 4.6.5 parse_options_get_verbosity@Base 4.2.2 parse_options_memory_exhausted@Base 4.2.2 parse_options_print_total_time@Base 4.6.5 parse_options_reset_resources@Base 4.2.2 parse_options_resources_exhausted@Base 4.2.2 parse_options_set_all_short_connectors@Base 4.2.2 parse_options_set_allow_null@Base 4.2.2 parse_options_set_batch_mode@Base 4.2.2 parse_options_set_cost_model_type@Base 4.2.2 parse_options_set_disjunct_cost@Base 4.2.2 parse_options_set_disjunct_costf@Base 4.6.5 parse_options_set_display_bad@Base 4.2.2 parse_options_set_display_constituents@Base 4.2.2 parse_options_set_display_disjuncts@Base 4.6.5 parse_options_set_display_links@Base 4.2.2 parse_options_set_display_on@Base 4.2.2 parse_options_set_display_postscript@Base 4.2.2 parse_options_set_display_senses@Base 4.6.5 parse_options_set_display_union@Base 4.2.2 parse_options_set_display_walls@Base 4.2.2 parse_options_set_echo_on@Base 4.2.2 parse_options_set_islands_ok@Base 4.2.2 parse_options_set_linkage_limit@Base 4.2.2 parse_options_set_max_memory@Base 4.2.2 parse_options_set_max_null_count@Base 4.2.2 parse_options_set_max_parse_time@Base 4.2.2 parse_options_set_max_sentence_length@Base 4.2.2 parse_options_set_min_null_count@Base 4.2.2 parse_options_set_null_block@Base 4.2.2 parse_options_set_panic_mode@Base 4.2.2 parse_options_set_screen_width@Base 4.2.2 parse_options_set_short_length@Base 4.2.2 parse_options_set_spell_guess@Base 4.6.5 parse_options_set_use_cluster_disjuncts@Base 4.6.5 parse_options_set_use_fat_links@Base 4.7.0 parse_options_set_use_sat_parser@Base 4.6.5 parse_options_set_verbosity@Base 4.2.2 parse_options_timer_expired@Base 4.2.2 post_process_close@Base 4.2.2 post_process_match@Base 4.3.9 post_process_open@Base 4.2.2 print_one_disjunct@Base 4.6.5 #MISSING: 4.6.5-1# print_total_time@Base 4.3.5 prt_error@Base 4.3.9 prune_match@Base 4.3.9 sentence_and_cost@Base 4.3.5 sentence_contains_conjunction@Base 4.3.9 sentence_create@Base 4.2.2 sentence_delete@Base 4.2.2 sentence_disjunct_cost@Base 4.2.2 sentence_get_nth_word@Base 4.2.2 sentence_get_word@Base 4.2.2 sentence_length@Base 4.2.2 sentence_link_cost@Base 4.3.5 sentence_nth_word_has_disjunction@Base 4.2.2 sentence_null_count@Base 4.2.2 sentence_num_linkages_found@Base 4.2.2 sentence_num_linkages_post_processed@Base 4.2.2 sentence_num_thin_linkages@Base 4.7.0 sentence_num_valid_linkages@Base 4.2.2 sentence_num_violations@Base 4.2.2 sentence_parse@Base 4.2.2 sentence_split@Base 4.6.5 #MISSING: 4.6.5-1# set_data_dir@Base 4.3.5 set_has_fat_down@Base 4.3.9 xalloc@Base 4.3.9 xfree@Base 4.3.9 link-grammar/debian/rules0000755000000000000000000000155612536650433012645 0ustar #!/usr/bin/make -f # Sample debian/rules that uses cdbs. Originaly written by Robert Millan. # This file is public domain. include /usr/share/cdbs/1/class/autotools.mk include /usr/share/cdbs/1/rules/debhelper.mk DEB_CONFIGURE_SCRIPT_ENV += LDFLAGS=-Wl,--as-needed ifneq (,$(shell dh_listpackages -s | grep liblink-grammar4-java)) WITH_JAVA := yes else WITH_JAVA := no endif ifeq (yes,$(WITH_JAVA)) DEB_CONFIGURE_SCRIPT_ENV += JAVA_HOME=/usr/lib/jvm/default-java DEB_DH_MAKESHLIBS_ARGS_liblink-grammar4-java := --no-act endif DEB_INSTALL_MANPAGES_link-grammar := man/link-parser.1 clean:: $(RM) -r bin/org $(RM) linkgrammar-*.jar common-install-impl:: if [ $(WITH_JAVA) = yes ]; then \ install -d debian/tmp/usr/lib/jni; \ mv debian/tmp/usr/lib/liblink-grammar-java* debian/tmp/usr/lib/jni; \ install -d debian/tmp/usr/share/java; \ fi; link-grammar/debian/link-grammar.install0000644000000000000000000000002312536650433015522 0ustar debian/tmp/usr/bin link-grammar/debian/control0000644000000000000000000001422612536651744013174 0ustar Source: link-grammar Section: text Priority: optional Maintainer: Debian QA Group Build-Depends: debhelper (>= 7.0.0), cdbs, autotools-dev, default-jdk [!hppa !alpha], fastjar [!hppa !alpha], ant [!hppa !alpha], libaspell-dev, libhunspell-dev Standards-Version: 3.9.2 Homepage: http://www.abisource.com/projects/link-grammar/ Vcs-Browser: http://git.debian.org/?p=collab-maint/link-grammar.git Vcs-Git: git://git.debian.org/git/collab-maint/link-grammar.git Package: link-grammar Architecture: any Multi-Arch: foreign Depends: ${shlibs:Depends}, link-grammar-dictionaries-en, ${misc:Depends} Description: Carnegie Mellon University's link grammar parser In Selator, D. and Temperly, D. "Parsing English with a Link Grammar" (1991), the authors defined a new formal grammatical system called a "link grammar". A sequence of words is in the language of a link grammar if there is a way to draw "links" between words in such a way that the local requirements of each word are satisfied, the links do not cross, and the words form a connected graph. The authors encoded English grammar into such a system, and wrote this program to parse English using this grammar. . link-grammar can be used for linguistic parsing for information retrieval or extraction from natural language documents. It can also be used as a grammar checker. . This package contains the user-executable binary. Package: liblink-grammar4 Architecture: any Section: libs Depends: ${shlibs:Depends}, link-grammar-dictionaries-en, ${misc:Depends} Description: Carnegie Mellon University's link grammar parser (libraries) In Selator, D. and Temperly, D. "Parsing English with a Link Grammar" (1991), the authors defined a new formal grammatical system called a "link grammar". A sequence of words is in the language of a link grammar if there is a way to draw "links" between words in such a way that the local requirements of each word are satisfied, the links do not cross, and the words form a connected graph. The authors encoded English grammar into such a system, and wrote this program to parse English using this grammar. . link-grammar can be used for linguistic parsing for information retrieval or extraction from natural language documents. It can also be used as a grammar checker. . This package contains the shared library. Package: liblink-grammar4-dev Architecture: any Section: libdevel Depends: ${shlibs:Depends}, liblink-grammar4 (= ${binary:Version}), ${misc:Depends} Description: Carnegie Mellon University's link grammar parser (development headers) In Selator, D. and Temperly, D. "Parsing English with a Link Grammar" (1991), the authors defined a new formal grammatical system called a "link grammar". A sequence of words is in the language of a link grammar if there is a way to draw "links" between words in such a way that the local requirements of each word are satisfied, the links do not cross, and the words form a connected graph. The authors encoded English grammar into such a system, and wrote this program to parse English using this grammar. . link-grammar can be used for linguistic parsing for information retrieval or extraction from natural language documents. It can also be used as a grammar checker. . This package contains the header files and static libraries Package: liblink-grammar4-java Architecture: amd64 armhf arm64 armel hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 m68k mips mipsel powerpc ppc64el s390 sparc Section: java Depends: ${shlibs:Depends}, liblink-grammar4, ${misc:Depends} Description: Carnegie Mellon University's link grammar parser (JNI library) In Selator, D. and Temperly, D. "Parsing English with a Link Grammar" (1991), the authors defined a new formal grammatical system called a "link grammar". A sequence of words is in the language of a link grammar if there is a way to draw "links" between words in such a way that the local requirements of each word are satisfied, the links do not cross, and the words form a connected graph. The authors encoded English grammar into such a system, and wrote this program to parse English using this grammar. . link-grammar can be used for linguistic parsing for information retrieval or extraction from natural language documents. It can also be used as a grammar checker. . This package contains a Java JNI library for using link-grammar from your java applications. Package: link-grammar-dictionaries-en Architecture: all Depends: ${shlibs:Depends}, ${misc:Depends} Description: Carnegie Mellon University's link grammar parser (English dictionary) In Selator, D. and Temperly, D. "Parsing English with a Link Grammar" (1991), the authors defined a new formal grammatical system called a "link grammar". A sequence of words is in the language of a link grammar if there is a way to draw "links" between words in such a way that the local requirements of each word are satisfied, the links do not cross, and the words form a connected graph. The authors encoded English grammar into such a system, and wrote this program to parse English using this grammar. . link-grammar can be used for linguistic parsing for information retrieval or extraction from natural language documents. It can also be used as a grammar checker. . This package contains the English dictionaries. Package: link-grammar-dictionaries-lt Architecture: all Depends: ${shlibs:Depends}, ${misc:Depends} Description: Carnegie Mellon University's link grammar parser (Lithuanian dictionary) In Selator, D. and Temperly, D. "Parsing English with a Link Grammar" (1991), the authors defined a new formal grammatical system called a "link grammar". A sequence of words is in the language of a link grammar if there is a way to draw "links" between words in such a way that the local requirements of each word are satisfied, the links do not cross, and the words form a connected graph. The authors encoded English grammar into such a system, and wrote this program to parse English using this grammar. . link-grammar can be used for linguistic parsing for information retrieval or extraction from natural language documents. It can also be used as a grammar checker. . This package contains the Lithuanian dictionaries. link-grammar/debian/link-grammar-dictionaries-lt.install0000644000000000000000000000004612536650433020617 0ustar debian/tmp/usr/share/link-grammar/lt/ link-grammar/debian/link-grammar-dictionaries-en.install0000644000000000000000000000004612536650433020602 0ustar debian/tmp/usr/share/link-grammar/en/ link-grammar/debian/liblink-grammar4-dev.install0000644000000000000000000000015312536650433017055 0ustar debian/tmp/usr/include/link-grammar debian/tmp/usr/lib/liblink-grammar.{so,a} debian/tmp/usr/lib/pkgconfig link-grammar/debian/menu0000644000000000000000000000020212536650433012437 0ustar ?package(link-grammar):needs="text" section="Applications/Text"\ title="CMU Link Grammar Parser" command="/usr/bin/link-parser" link-grammar/debian/liblink-grammar4-java.install0000644000000000000000000000007112536650433017217 0ustar debian/tmp/usr/lib/jni/*.so* debian/tmp/usr/share/java/* link-grammar/.git/0000755000000000000000000000000012537602571011176 5ustar link-grammar/.git/branches/0000755000000000000000000000000012536650426012764 5ustar link-grammar/.git/FETCH_HEAD0000644000000000000000000000062312536652441012534 0ustar e8ce12ad84b2982ad5d46cfe61f78b5e010cc433 branch 'master' of git+ssh://scm.alioth.debian.org/git/collab-maint/link-grammar 1aef3f19b97400589229b83ac37e11d55350f18a not-for-merge branch 'pristine-tar' of git+ssh://scm.alioth.debian.org/git/collab-maint/link-grammar e2a9612ea075de1b8e46c18bf72f189af9cfa32e not-for-merge branch 'upstream' of git+ssh://scm.alioth.debian.org/git/collab-maint/link-grammar link-grammar/.git/refs/0000755000000000000000000000000012536650432012133 5ustar link-grammar/.git/refs/tags/0000755000000000000000000000000012537602602013066 5ustar link-grammar/.git/refs/tags/4.7.4-30000644000000000000000000000005112537602602013617 0ustar 4fcd6be2b8699c71fcc598466c68475614783861 link-grammar/.git/refs/heads/0000755000000000000000000000000012537602571013221 5ustar link-grammar/.git/refs/heads/master0000644000000000000000000000005112537602571014433 0ustar 4fcd6be2b8699c71fcc598466c68475614783861 link-grammar/.git/refs/remotes/0000755000000000000000000000000012536650432013611 5ustar link-grammar/.git/refs/remotes/origin/0000755000000000000000000000000012537602613015077 5ustar link-grammar/.git/refs/remotes/origin/HEAD0000644000000000000000000000004012536650432015516 0ustar ref: refs/remotes/origin/master link-grammar/.git/refs/remotes/origin/master0000644000000000000000000000005112537602613016311 0ustar 4fcd6be2b8699c71fcc598466c68475614783861 link-grammar/.git/description0000644000000000000000000000011112536650426013436 0ustar Unnamed repository; edit this file 'description' to name the repository. link-grammar/.git/index0000644000000000000000000006757012537602510012240 0ustar DIRC+U{Q8PU{Q8PzXըs*-dP_o_ev)! .gitignoreU{Q8PU{Q8PzYN1*4mō=2_AUTHORSU{Q8PU{Q8PzexQ4z &ͣ+yGCOPYINGU{Q9ZU{Q9ZzT,Xcv̡cxrN. ChangeLogU{Q9ZU{Q9Zz T!/,hUW32-4BX,vFindLinkGrammar.cmakeU{Q9ZU{Q9ZzexQ4z &ͣ+yGLICENSEU{Q9ZU{Q9ZzNmr d\*S MAINTAINERSU{Q9ZU{Q9Zz) f8{ }_lf Makefile.amU{Q9ZU{Q9Zzty!p8bWˊREADMEU{Q9ZU{Q9Zzn(GAl`TODOU{Q9ZU{Q9Zz D;4QaJ'ac-helpers/binreloc.m4U{Q9ZU{Q9ZzDcAST_ autogen.shU{Q9ZU{Q9Zzl~d( 2Ї ;Oautopackage/.cvsignoreU{Q9ZU{Q9Zz/"$n,x1autopackage/default.apspec.inU{Q9ZU{Q9Zz o@K<ƮC {} build.xml.inU{Q9ZU{Q9ZzN-[data/de/4.0.affixU{Q9ZU{Q9ZQ܇ZX7AzoGdata/de/4.0.dictU{Q9ZU{Q9ZmT$0.=F!D #data/de/Makefile.amU{Q9ZU{Q9Z%C ۄ r5k!~data/en/.cvsignoreU{Q9ZU{Q9Z"ze%&*o`,w8data/en/4.0.affixU{Q9ZU{Q9Zp7B@;>,&M0\data/en/4.0.batchU{Q9ZU{Q9Z1e|K!cyIj{data/en/4.0.biolg.batchU{Q9ZU{Q9Z: ncy!data/en/4.0.constituent-knowledgeU{Q9BdaU{Q9Bda7j$H d ŗ ldata/en/4.0.dictU{Q9zU{Q9z#џM!6x h2ټdata/en/4.0.dict.m4U{Q9zU{Q9zM_d]4Ƚ+ϊdata/en/4.0.enwiki.batchU{Q:U{Q:] _qh:Nhdata/en/4.0.fixes.batchU{Q:U{Q:5j1g K4 D (data/en/4.0.knowledgeU{Q:U{Q:&yl.7Q+ 1sA`kH9data/en/4.0.regexU{Q:U{Q:!Šo8c/רzD^data/en/4.0.voa.batchU{Q:U{Q:\*qK5,O+U(Gdata/en/Makefile.amU{Q:U{Q:{ؓ5S=]$_EUY1cdata/en/READMEU{Q:U{Q: 3!T"JxEû^data/en/tiny.dictU{Q:U{Q:!=roů&$Q`9;:pedata/en/words/.cvsignoreU{Q:U{Q:"mԧG|ӬuaxZĢdata/en/words/Makefile.amU{Q:U{Q:#lCJmDl 'Xdata/en/words/currencyU{Q:U{Q:$*֔^Z%#**Er雮data/en/words/currency.pU{Q:U{Q:% * ,;7k5 8yЛR&'data/en/words/entities.given-bisex.singU{Q:U{Q:&#@7|Wa (data/en/words/entities.given-female.singU{Q:U{Q:'8hȭe,R=&data/en/words/entities.given-male.singU{Q:U{Q:( Pb'$Wj%data/en/words/entities.locations.singU{Q:U{Q:)Mj+sWMo: %$data/en/words/entities.national.singU{Q:U{Q:*? VM\ 5+_Rh;)data/en/words/entities.organizations.singU{Q:U{Q:+/} *bc,*811%data/en/words/entities.us-states.singU{Q:U{Q:,z.5KU`t LS&lkdata/en/words/units.1U{Q:U{Q:-^r1.[v0 ] Q Rdata/en/words/units.1.dotU{Q:U{Q:._oT3wl$?Yer1data/en/words/units.3U{Q:U{Q:/YKvP8Bdata/en/words/units.4U{Q:U{Q:05;rĘ#w/{n$data/en/words/units.4.dotU{Q:U{Q:1MN i"ŰN/|A !data/en/words/words-medical.adv.1U{Q:U{Q:2@Qp> !%율W؆R&l!data/en/words/words-medical.v.4.3U{Q;gU{Q;g6 -e`4Zܧ06o!data/en/words/words-medical.v.4.4U{Q;gU{Q;g7\-Dv-;O!data/en/words/words-medical.v.4.5U{Q;gU{Q;g87]fϛZ-vk`ddata/en/words/words.adj.1U{Q;gU{Q;g9|2刋]ιL%data/en/words/words.adj.2U{Q;gU{Q;g:"Dp^*i$籼}hdata/en/words/words.adj.3U{Q;gU{Q;g;E1pqRB2A\VX3data/en/words/words.adv.1U{Q;gU{Q;g<)WT#% 3Jdata/en/words/words.adv.2U{Q;gU{Q;g= }1#X @&data/en/words/words.adv.3U{Q;gU{Q;g>XUW?:A\"s@)W.fdata/en/words/words.adv.4U{Q UU{Q U?Ҿ@iOHch=data/en/words/words.n.1U{Q UU{Q U@ @ޟ?TjV)data/en/words/words.n.1.wikiU{Q UU{Q UAAtW}.Ո~:b̠Rdata/en/words/words.n.2.sU{Q UU{Q UB)\'`JTCkdata/en/words/words.n.2.s.biolgU{Q UU{Q UC ~ 6Zb3_R/Jdata/en/words/words.n.2.s.wikiU{Q UU{Q UD$<m2J_'oUemndata/en/words/words.n.2.xU{Q UU{Q UEiHR2`Jns%Q`data/en/words/words.n.2.x.wikiU{Qx5U{Qx5F,XEۇy"y2data/en/words/words.n.3U{Qx5U{Qx5G\[ӝђ_w,ɒ>^data/en/words/words.n.tU{Qx5U{Qx5H(31O7 ԰t9data/en/words/words.v.1.1U{Qx5U{Qx5I,9FݟJXd~1%Xdata/en/words/words.v.1.2U{Qx5U{Qx5J7[eйEdata/en/words/words.v.1.3U{Qx5U{Qx5K2GF 2pw8`Җ"Yٔdata/en/words/words.v.1.4U{Qx5U{Qx5Lؗʞcu[C data/en/words/words.v.1.pU{Qx5U{Qx5Mo L 9To/́data/en/words/words.v.10.1U{Qx5U{Qx5NΫט8 _̛ &Њdata/en/words/words.v.10.2U{Qx5U{Qx5O$:IhF0pJ׭data/en/words/words.v.10.3U{Qx5U{Qx5P\|n46Zo6v/data/en/words/words.v.10.4U{Qx5U{Qx5Q4hUTH8vHQPaGg |data/en/words/words.v.2.1U{Qx5U{Qx5R;n>9K8J Sdata/en/words/words.v.2.2U{Qx5U{Qx5SF{_+ruj#data/en/words/words.v.2.3U{Qx5U{Qx5TBM95 pд ѣ|data/en/words/words.v.2.4U{Qx5U{Qx5UBX XF* x{Zѥa;`β]data/en/words/words.v.8.5U{Q/RU{Q/RiP &⬘Ce,Hudata/en/words/words.yU{Q/RU{Q/Rj%C ۄ r5k!~data/lt/.cvsignoreU{Q/RU{Q/RkL}:ǚ^PZ>֙mdata/lt/4.0.affixU{Q/RU{Q/Rm+=p(EGK\3_Imdata/lt/4.0.batchU{Q/RU{Q/Ro "%$j~;>!data/lt/4.0.constituent-knowledgeU{Q/RU{Q/Rp `&XGo_vudata/lt/4.0.dictU{Q/RU{Q/RqrʳS@jabZdata/lt/4.0.knowledgeU{Q/RU{Q/RrñPÜ+3>}`%Idata/lt/Makefile.amU{Q/RU{Q/Rtj~֙ƴqU data/sql/READMEU{Q/RU{Q/Ruu7 E$͂=ySdata/tools/READMEU{Q/RU{Q/RvͰhOg Pae{data/tools/cluster-pop.plU{Q/RU{Q/RwޖESSjWҭEdata/tools/delete.plU{Q/RU{Q/Rx{|$G\{(u'data/tools/dict-splitter.plU{Q/RU{Q/RyvB4]L|S;data/tools/fix-len.plU{QoU{QozO'3wU,\T}-data/tools/insert.plU{QoU{Qo{yI?Pb^IZdata/tools/membership.plU{QoU{Qo|KXm7P^zER9data/tools/wiktionary.plU{QoU{Qo} i.wކx!\debian/README.sourceU:gU:g~sfc,;*Kt53debian/changelogU{QoU{Qo=`C۝,( debian/compatU{SwoU{Swogje4=D{80debian/controlU{QoU{QoA503,rdebian/copyrightU{QoU{Qo⛲CK)wZS debian/dirsU{QoU{QoEVlU}5),7zi debian/docsU{QoU{Qok!IM,XЁz#debian/liblink-grammar4-dev.installU{QoU{Qo9 KiLӣF6-$debian/liblink-grammar4-java.installU{QoU{Qo(jv-N&ǎ37ydebian/liblink-grammar4.installU{QoU{Qo_(3;S DUrdebian/liblink-grammar4.symbolsU{QoU{Qo&7fwS{Y jR6O+debian/link-grammar-dictionaries-en.installU{QoU{Qo&Ն[uHm9kqJˑ!~+debian/link-grammar-dictionaries-lt.installU{QoU{QoE :Š\\}debian/link-grammar.installU{QoU{Qok Ӎ debian/menuU{QoU{Qon2׎ֳ/u),~ debian/rulesU{QoU{Qoӂ~u۟~ђ21 debian/source/formatU{QoU{Qo]_B{zPuI debian/watchU{QoU{QoL=>6ew)8J glink-grammar.pc.inU{QoU{QowjGNI\cwUglink-grammar.spec.inU{QoU{Qo=roů&$Q`9;:pelink-grammar.xcode/.cvsignoreU{QoU{QotbDz,aV(Mlink-grammar.xcode/Makefile.amU{QoU{QoG^sЖ:C/:T"link-grammar.xcode/project.pbxprojU{QoU{QoWzM Z2link-grammar/.cvsignoreU{QoU{QoIocQK\wslink-grammar/Makefile.amU{QoU{Qo~P^zO`D(Dlink-grammar/analyze-linkage.cU{QoU{Qo7[8dl[link-grammar/analyze-linkage.hU{Q`U{Q`ą響ҸT0C`A'ɋlink-grammar/and.cU{Q`U{Q`<[ې*jW͓:Rlink-grammar/and.hU{QU{Q4>]XpYh WK؋link-grammar/api-structures.hU{QU{Q QSlרJRKk$link-grammar/api-types.hU{QU{Q'"v=fE link-grammar/api.cU{QU{Q ˅W\!cnrA8#link-grammar/api.hU{QU{QΓ3QL3naG!link-grammar/autoit/READMEU{QU{Q%! õn`.x/link-grammar/autoit/_LGTest.au3U{QU{Q`Ѱ7ڳPV,N1x$link-grammar/autoit/_LinkGrammar.au3U{QU{Q*zdxGKbf !ۙ8link-grammar/build-disjuncts.cU{QU{QP&]W1Y}6+Clink-grammar/build-disjuncts.hU{QU{Q8#3 Wh[|^:Dlink-grammar/command-line.cU{QU{Q[\fu"}7C/"link-grammar/command-line.hU{QU{Qv>ģmݹlink-grammar/constituents.cU{QU{Qu>4n"e%,GNDlink-grammar/constituents.hU{QU{Q1 Hj90_)0 \link-grammar/corpus/Makefile.amU{QU{Q"~MUmE[mlink-grammar/corpus/READMEU{QU{QU@ V Hhozy!link-grammar/corpus/cluster-pop.cU{QU{QNNi1y i=6`/ӧlink-grammar/corpus/cluster.cU{QU{Q)JŃY~vPyjXzҢ D* link-grammar/minisat/Makefile.amU{Q+U{Q+dj1 s)zۚlink-grammar/minisat/Map.hU{Q+U{Q+ ,ΟŜ"8?a<link-grammar/minisat/Queue.hU{Q+U{Q+l8vTbw쟳!Plink-grammar/minisat/Solver.CU{Q+U{Q+EM G[RwU jjlink-grammar/minisat/Solver.hU{Q+U{Q+BV''zuk"link-grammar/minisat/SolverTypes.hU{Q+U{Q+ 0\)v[0link-grammar/minisat/Sort.hU{Q+U{Q+}@Lqߍlink-grammar/minisat/Vec.hU{Q+U{Q+lm"HLlink-grammar/pp_linkset.cU{QTU{QTJSw6]7x>link-grammar/pp_linkset.hU{QTU{QT*y%cupQ~}G <4link-grammar/prefix.cU{QTU{QT!l5;#ȅAlink-grammar/prefix.hU{QTU{QT.ʾU(tcy-ӵYbS_link-grammar/preparation.cU{QTU{QT_&:5Cs5& yclink-grammar/preparation.hU{QTU{QT Gx]0,klink-grammar/print-util.cU{QU{Qp,t%2nlink-grammar/print-util.hU{QU{Q{A'+Em(mu"P,Y'dlink-grammar/print.cU{QU{Q_Fv)ir"ׁlink-grammar/print.hU{QU{Q06PmKv@wOIlink-grammar/prune.cU{QU{QBbPz link-grammar/prune.hU{Qν=U{Qν=/N dTAp?l E▫link-grammar/read-dict.cU{Qν=U{Qν=xTÑz&yr%Ұlink-grammar/read-dict.hU{Qν=U{Qν=]+DHXX@]"p link-grammar/read-regex.cU{Qν=U{Qν=6KAʍ_x&rAO]link-grammar/read-regex.hU{Qν=U{Qν={Pm-cܐqzWlink-grammar/regex-morph.cU{Qν=U{Qν=Y:8Wv8^link-grammar/regex-morph.hU{Qν=U{Qν=ZYgaW`link-grammar/resources.cU{Qν=U{Qν=e2Wg,4͞Vlink-grammar/resources.hU{Qν=U{Qν='YÁ+GqKInc %8C#link-grammar/sat-solver/Makefile.amU{Q U{Q  iѹ;v +e&=-gK!link-grammar/sat-solver/clock.hppU{Q U{Q  u ~-RjŽn(link-grammar/sat-solver/fast-sprintf.cppU{Q U{Q  DZ'e`MfŸ۲Z(link-grammar/sat-solver/fast-sprintf.hppU{Q U{Q  !/ܫWqӤou#link-grammar/sat-solver/guiding.hppU{Q U{Q  Qnx:_qm8.u[*link-grammar/sat-solver/matrix-ut-test.cppU{Q U{Q 6Ox]-U)a:%link-grammar/sat-solver/matrix-ut.hppU{Q U{Q 7ɘNQ1X I' $link-grammar/sat-solver/rejected.cppU{Q U{Q TOlgRÂpN]0y'link-grammar/sat-solver/sat-encoder.cppU{Q U{Q v}P-B5^ LMFHV%link-grammar/sat-solver/sat-encoder.hU{QHСU{QHС0p*p}N[p'link-grammar/sat-solver/sat-encoder.hppU{QHСU{QHС GjW*s$- link-grammar/sat-solver/trie.hppU{QHСU{QHС?瓸>]%t-( (. link-grammar/sat-solver/util.cppU{QHСU{QHС3nVA ?ƒH link-grammar/sat-solver/util.hppU{QHСU{QHСO~$ [Vv[5%link-grammar/sat-solver/variables.cppU{QHСU{QHСX)aLJ ]zSQD[%link-grammar/sat-solver/variables.hppU{QHСU{QHСUu]4n$link-grammar/sat-solver/word-tag.cppU{QHСU{QHСe6 /Mx0 '$link-grammar/sat-solver/word-tag.hppU{QHСU{QHСJ֙ɌZgAXH link-grammar/spellcheck-aspell.cU{QHСU{QHСZRx?< ,link-grammar/spellcheck-hun.cU{QHСU{QHС/;V2kGiMlink-grammar/spellcheck.hU{QHСU{QHС˟_Ok~aλ++)link-grammar/string-set.cU{QWU{QW~:`}X&link-grammar/string-set.hU{QWU{QW>A"Z[xp*-link-grammar/structures.hU{QWU{QW qC+c\kO:# link-grammar/tokenize.cU{QWU{QW!j5{U0zoͤ] 3link-grammar/tokenize.hU{QWU{QW"LXS1EbDZUXlink-grammar/utilities.cU{QWU{QW#p;"lGqy"8link-grammar/utilities.hU{QWU{QW$\ _7-dlink-grammar/word-file.cU{QWU{QW%7I6ӏC0hM}c/link-grammar/word-file.hU{QWU{QW&2@uĹ `n]link-grammar/word-utils.cU{QWU{QW'ғ {LDWlink-grammar/word-utils.hU{QWU{QW(=roů&$Q`9;:peman/.cvsignoreU{QWU{QW)rs!r ?7Zwp*Nhman/Makefile.amU{QU{Q*0z`,&˵?@Mman/link-parser.1U{QU{Q+},(Nqlq *$=9msvc6/Link_Grammar_All.dswU{QU{Q,o,Gw'{msvc6/Makefile.amU{QU{Q-$@M$Ϭswz-"msvc6/link_grammar_dll/Makefile.amU{QU{Q.)"e`긆[x=_+msvc6/link_grammar_dll/link_grammar_dll.dspU{QU{Q/$K"%*Lg8'mp"msvc6/link_grammar_exe/Makefile.amU{QU{Q0&QGߩ+msvc6/link_grammar_exe/link_grammar_exe.dspU{QU{Q1)~&I.. tƱP'msvc6/link_grammar_java_dll/Makefile.amU{QU{Q2kx/_#=T3$^5msvc6/link_grammar_java_dll/link_grammar_java_dll.dspU{QU{Q3  ޶EPKR?ӻVH*msvc9/LinkGrammar.slnU{QU{Q4%OL+6;͠fmsvc9/LinkGrammar.vcprojU{QU{Q5Bן%auh3T#msvc9/LinkGrammarExe.vcprojU{QU{Q6Ni=a3^tmsvc9/LinkGrammarJava.vcprojU{QU{Q7tvxaWLU@O=msvc9/Makefile.amU{QU{Q8!exCI}/Zj⁛m msvc9/READMETREEv299 9 \#oC#/Sman3 0 qX&16Jӆdata109 5 ,K)fn'iJ de3 0 "!0Rs9Յen88 1 3u1{j, sDwords73 0 0 Rm1Ue\~lt7 0 ";ɶ"lsql1 0 `Oc>q^tools8 0 0&&+c"wmsvc68 3 A7(6ޟ}T {link_grammar_dll2 0 pPHHhwλlink_grammar_exe2 0 3G:{H%klink_grammar_java_dll2 0 M}T+-&f pl hlmsvc96 0 d}_OUQNSdebian18 1 # PP J{s2source1 0 ; 'ld5>³`'uac-helpers1 0 ?z5OE/ttG$.autopackage2 0 B=˓c9~TC link-grammar134 5 >0C%"Pf#)autoit3 0 DdnO ľ\corpus8 0 i&v)hOcC|yWminisat12 0 z߭ctLK-~#vREUCdebian/changelog100644100644100644R/0eB DӚ@v_@S( #enKdebian/control100644100644100644nSw] _&hogEje4=D{80/$v0ڷG7DrPAlink-grammar/.git/HEAD0000644000000000000000000000002712536650432011617 0ustar ref: refs/heads/master link-grammar/.git/COMMIT_EDITMSG~0000644000000000000000000000041312537602510013452 0ustar # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch master # Your branch is up-to-date with 'origin/master'. # # Changes to be committed: # modified: debian/changelog # link-grammar/.git/info/0000755000000000000000000000000012536650426012132 5ustar link-grammar/.git/info/exclude0000644000000000000000000000036012536650426013505 0ustar # git ls-files --others --exclude-from=.git/info/exclude # Lines that start with '#' are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want to use them): # *.[oa] # *~ link-grammar/.git/packed-refs0000644000000000000000000000263112536650432013305 0ustar # pack-refs with: peeled fully-peeled d4026d67c983f94d57f66cd3e7cd73031e3bb003 refs/remotes/origin/master 1aef3f19b97400589229b83ac37e11d55350f18a refs/remotes/origin/pristine-tar e2a9612ea075de1b8e46c18bf72f189af9cfa32e refs/remotes/origin/upstream 615954a63a2743d185b7536e9ad99cd0c399d34d refs/tags/4.5.3 b9aeefdde33ee31ce3c3166fbab11c960d7cd974 refs/tags/4.5.5 487adc04830612118e961b631fc87d53735bfa4b refs/tags/4.5.6 ee448613e346dce045fb0811854fd909bf993365 refs/tags/4.5.7 0546d3b0512bef13df92a85520fb948c8e28bb4d refs/tags/4.5.8 a95f0f45e5530b7b14e5a409c96f3f665acdc052 refs/tags/4.6.5 b5be2f59bc17f669c8f7fec6415dcb629e17f237 refs/tags/4.6.7 272eb9f0072c58872a0cbd1e8f8762b0c4c35662 refs/tags/4.7.0 30ddbd9cb505f2df0b07e8a940208bb32adf8f72 refs/tags/debian/4.5.3-1 c787d0dc3a8855671a1d822cfb42b5a0c7e613cb refs/tags/debian/4.5.5-1 de21f067f56fede9fa0ec7a9357037fd0a1c663a refs/tags/debian/4.5.6-1 b37e6336bbf1e8978fa22ce62b70ebf6b74f05df refs/tags/debian/4.5.7-1 56a8748eb0114076eb41398dc03640c6bdf4be30 refs/tags/debian/4.5.7-2 b16f1abe3ddfacc9b33104f1a6ddeec8ce4a8118 refs/tags/debian/4.5.8-1 d006473f71bc611f5f135500aa72effdbde84821 refs/tags/debian/4.6.5-1 591054d57087cc3cda9cb722aecd6d8e0e3bed7e refs/tags/debian/4.6.7-1 79668e7fc35877f5d59509704b5ab7cccaa897fe refs/tags/debian/4.7.0-1 c7ce1273594b90c1d57a49b89b4d27a5c9435569 refs/tags/debian/4.7.4-1 ec367107a718b34b19dafdf23ac75bdf3d54d2fb refs/tags/debian/4.7.4-2 link-grammar/.git/ORIG_HEAD0000644000000000000000000000005112536652441012436 0ustar e8ce12ad84b2982ad5d46cfe61f78b5e010cc433 link-grammar/.git/#COMMIT_EDITMSG#0000644000000000000000000000040212536651704013370 0ustar # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch master # Your branch is up-to-date with 'origin/master'. # # Changes to be committed: # modified: control # link-grammar/.git/hooks/0000755000000000000000000000000012536650426012322 5ustar link-grammar/.git/hooks/pre-push.sample0000755000000000000000000000251012536650426015271 0ustar #!/bin/sh # An example hook script to verify what is about to be pushed. Called by "git # push" after it has checked the remote status, but before anything has been # pushed. If this script exits with a non-zero status nothing will be pushed. # # This hook is called with the following parameters: # # $1 -- Name of the remote to which the push is being done # $2 -- URL to which the push is being done # # If pushing without using a named remote those arguments will be equal. # # Information about the commits which are being pushed is supplied as lines to # the standard input in the form: # # # # This sample shows how to prevent push of commits where the log message starts # with "WIP" (work in progress). remote="$1" url="$2" z40=0000000000000000000000000000000000000000 IFS=' ' while read local_ref local_sha remote_ref remote_sha do if [ "$local_sha" = $z40 ] then # Handle delete : else if [ "$remote_sha" = $z40 ] then # New branch, examine all commits range="$local_sha" else # Update to existing branch, examine new commits range="$remote_sha..$local_sha" fi # Check for WIP commit commit=`git rev-list -n 1 --grep '^WIP' "$range"` if [ -n "$commit" ] then echo "Found WIP commit in $local_ref, not pushing" exit 1 fi fi done exit 0 link-grammar/.git/hooks/update.sample0000755000000000000000000000703312536650426015015 0ustar #!/bin/sh # # An example hook script to blocks unannotated tags from entering. # Called by "git receive-pack" with arguments: refname sha1-old sha1-new # # To enable this hook, rename this file to "update". # # Config # ------ # hooks.allowunannotated # This boolean sets whether unannotated tags will be allowed into the # repository. By default they won't be. # hooks.allowdeletetag # This boolean sets whether deleting tags will be allowed in the # repository. By default they won't be. # hooks.allowmodifytag # This boolean sets whether a tag may be modified after creation. By default # it won't be. # hooks.allowdeletebranch # This boolean sets whether deleting branches will be allowed in the # repository. By default they won't be. # hooks.denycreatebranch # This boolean sets whether remotely creating branches will be denied # in the repository. By default this is allowed. # # --- Command line refname="$1" oldrev="$2" newrev="$3" # --- Safety check if [ -z "$GIT_DIR" ]; then echo "Don't run this script from the command line." >&2 echo " (if you want, you could supply GIT_DIR then run" >&2 echo " $0 )" >&2 exit 1 fi if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then echo "usage: $0 " >&2 exit 1 fi # --- Config allowunannotated=$(git config --bool hooks.allowunannotated) allowdeletebranch=$(git config --bool hooks.allowdeletebranch) denycreatebranch=$(git config --bool hooks.denycreatebranch) allowdeletetag=$(git config --bool hooks.allowdeletetag) allowmodifytag=$(git config --bool hooks.allowmodifytag) # check for no description projectdesc=$(sed -e '1q' "$GIT_DIR/description") case "$projectdesc" in "Unnamed repository"* | "") echo "*** Project description file hasn't been set" >&2 exit 1 ;; esac # --- Check types # if $newrev is 0000...0000, it's a commit to delete a ref. zero="0000000000000000000000000000000000000000" if [ "$newrev" = "$zero" ]; then newrev_type=delete else newrev_type=$(git cat-file -t $newrev) fi case "$refname","$newrev_type" in refs/tags/*,commit) # un-annotated tag short_refname=${refname##refs/tags/} if [ "$allowunannotated" != "true" ]; then echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 exit 1 fi ;; refs/tags/*,delete) # delete tag if [ "$allowdeletetag" != "true" ]; then echo "*** Deleting a tag is not allowed in this repository" >&2 exit 1 fi ;; refs/tags/*,tag) # annotated tag if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 then echo "*** Tag '$refname' already exists." >&2 echo "*** Modifying a tag is not allowed in this repository." >&2 exit 1 fi ;; refs/heads/*,commit) # branch if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then echo "*** Creating a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/heads/*,delete) # delete branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/remotes/*,commit) # tracking branch ;; refs/remotes/*,delete) # delete tracking branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a tracking branch is not allowed in this repository" >&2 exit 1 fi ;; *) # Anything else (is there anything else?) echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 exit 1 ;; esac # --- Finished exit 0 link-grammar/.git/hooks/prepare-commit-msg.sample0000755000000000000000000000232712536650426017244 0ustar #!/bin/sh # # An example hook script to prepare the commit log message. # Called by "git commit" with the name of the file that has the # commit message, followed by the description of the commit # message's source. The hook's purpose is to edit the commit # message file. If the hook fails with a non-zero status, # the commit is aborted. # # To enable this hook, rename this file to "prepare-commit-msg". # This hook includes three examples. The first comments out the # "Conflicts:" part of a merge commit. # # The second includes the output of "git diff --name-status -r" # into the message, just before the "git status" output. It is # commented because it doesn't cope with --amend or with squashed # commits. # # The third example adds a Signed-off-by line to the message, that can # still be edited. This is rarely a good idea. case "$2,$3" in merge,) /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; # ,|template,) # /usr/bin/perl -i.bak -pe ' # print "\n" . `git diff --cached --name-status -r` # if /^#/ && $first++ == 0' "$1" ;; *) ;; esac # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" link-grammar/.git/hooks/pre-rebase.sample0000755000000000000000000001144212536650426015557 0ustar #!/bin/sh # # Copyright (c) 2006, 2008 Junio C Hamano # # The "pre-rebase" hook is run just before "git rebase" starts doing # its job, and can prevent the command from running by exiting with # non-zero status. # # The hook is called with the following parameters: # # $1 -- the upstream the series was forked from. # $2 -- the branch being rebased (or empty when rebasing the current branch). # # This sample shows how to prevent topic branches that are already # merged to 'next' branch from getting rebased, because allowing it # would result in rebasing already published history. publish=next basebranch="$1" if test "$#" = 2 then topic="refs/heads/$2" else topic=`git symbolic-ref HEAD` || exit 0 ;# we do not interrupt rebasing detached HEAD fi case "$topic" in refs/heads/??/*) ;; *) exit 0 ;# we do not interrupt others. ;; esac # Now we are dealing with a topic branch being rebased # on top of master. Is it OK to rebase it? # Does the topic really exist? git show-ref -q "$topic" || { echo >&2 "No such branch $topic" exit 1 } # Is topic fully merged to master? not_in_master=`git rev-list --pretty=oneline ^master "$topic"` if test -z "$not_in_master" then echo >&2 "$topic is fully merged to master; better remove it." exit 1 ;# we could allow it, but there is no point. fi # Is topic ever merged to next? If so you should not be rebasing it. only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` only_next_2=`git rev-list ^master ${publish} | sort` if test "$only_next_1" = "$only_next_2" then not_in_topic=`git rev-list "^$topic" master` if test -z "$not_in_topic" then echo >&2 "$topic is already up-to-date with master" exit 1 ;# we could allow it, but there is no point. else exit 0 fi else not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` /usr/bin/perl -e ' my $topic = $ARGV[0]; my $msg = "* $topic has commits already merged to public branch:\n"; my (%not_in_next) = map { /^([0-9a-f]+) /; ($1 => 1); } split(/\n/, $ARGV[1]); for my $elem (map { /^([0-9a-f]+) (.*)$/; [$1 => $2]; } split(/\n/, $ARGV[2])) { if (!exists $not_in_next{$elem->[0]}) { if ($msg) { print STDERR $msg; undef $msg; } print STDERR " $elem->[1]\n"; } } ' "$topic" "$not_in_next" "$not_in_master" exit 1 fi <<\DOC_END This sample hook safeguards topic branches that have been published from being rewound. The workflow assumed here is: * Once a topic branch forks from "master", "master" is never merged into it again (either directly or indirectly). * Once a topic branch is fully cooked and merged into "master", it is deleted. If you need to build on top of it to correct earlier mistakes, a new topic branch is created by forking at the tip of the "master". This is not strictly necessary, but it makes it easier to keep your history simple. * Whenever you need to test or publish your changes to topic branches, merge them into "next" branch. The script, being an example, hardcodes the publish branch name to be "next", but it is trivial to make it configurable via $GIT_DIR/config mechanism. With this workflow, you would want to know: (1) ... if a topic branch has ever been merged to "next". Young topic branches can have stupid mistakes you would rather clean up before publishing, and things that have not been merged into other branches can be easily rebased without affecting other people. But once it is published, you would not want to rewind it. (2) ... if a topic branch has been fully merged to "master". Then you can delete it. More importantly, you should not build on top of it -- other people may already want to change things related to the topic as patches against your "master", so if you need further changes, it is better to fork the topic (perhaps with the same name) afresh from the tip of "master". Let's look at this example: o---o---o---o---o---o---o---o---o---o "next" / / / / / a---a---b A / / / / / / / / c---c---c---c B / / / / \ / / / / b---b C \ / / / / / \ / ---o---o---o---o---o---o---o---o---o---o---o "master" A, B and C are topic branches. * A has one fix since it was merged up to "next". * B has finished. It has been fully merged up to "master" and "next", and is ready to be deleted. * C has not merged to "next" at all. We would want to allow C to be rebased, refuse A, and encourage B to be deleted. To compute (1): git rev-list ^master ^topic next git rev-list ^master next if these match, topic has not merged in next at all. To compute (2): git rev-list master..topic if this is empty, it is fully merged to "master". DOC_END link-grammar/.git/hooks/pre-applypatch.sample0000755000000000000000000000061612536650426016464 0ustar #!/bin/sh # # An example hook script to verify what is about to be committed # by applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. # # To enable this hook, rename this file to "pre-applypatch". . git-sh-setup test -x "$GIT_DIR/hooks/pre-commit" && exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} : link-grammar/.git/hooks/applypatch-msg.sample0000755000000000000000000000070412536650426016462 0ustar #!/bin/sh # # An example hook script to check the commit log message taken by # applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. The hook is # allowed to edit the commit message file. # # To enable this hook, rename this file to "applypatch-msg". . git-sh-setup test -x "$GIT_DIR/hooks/commit-msg" && exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"} : link-grammar/.git/hooks/post-update.sample0000755000000000000000000000027512536650426016001 0ustar #!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, rename this file to "post-update". exec git update-server-info link-grammar/.git/hooks/pre-commit.sample0000755000000000000000000000315212536650426015605 0ustar #!/bin/sh # # An example hook script to verify what is about to be committed. # Called by "git commit" with no arguments. The hook should # exit with non-zero status after issuing an appropriate message if # it wants to stop the commit. # # To enable this hook, rename this file to "pre-commit". if git rev-parse --verify HEAD >/dev/null 2>&1 then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi # If you want to allow non-ASCII filenames set this variable to true. allownonascii=$(git config --bool hooks.allownonascii) # Redirect output to stderr. exec 1>&2 # Cross platform projects tend to avoid non-ASCII filenames; prevent # them from being added to the repository. We exploit the fact that the # printable range starts at the space character and ends with tilde. if [ "$allownonascii" != "true" ] && # Note that the use of brackets around a tr range is ok here, (it's # even required, for portability to Solaris 10's /usr/bin/tr), since # the square bracket bytes happen to fall in the designated range. test $(git diff --cached --name-only --diff-filter=A -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 then cat <<\EOF Error: Attempt to add a non-ASCII file name. This can cause problems if you want to work with people on other platforms. To be portable it is advisable to rename the file. If you know what you are doing you can disable this check using: git config hooks.allownonascii true EOF exit 1 fi # If there are whitespace errors, print the offending file names and fail. exec git diff-index --check --cached $against -- link-grammar/.git/hooks/commit-msg.sample0000755000000000000000000000160012536650426015601 0ustar #!/bin/sh # # An example hook script to check the commit log message. # Called by "git commit" with one argument, the name of the file # that has the commit message. The hook should exit with non-zero # status after issuing an appropriate message if it wants to stop the # commit. The hook is allowed to edit the commit message file. # # To enable this hook, rename this file to "commit-msg". # Uncomment the below to add a Signed-off-by line to the message. # Doing this in a hook is a bad idea in general, but the prepare-commit-msg # hook is more suited to it. # # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" # This example catches duplicate Signed-off-by lines. test "" = "$(grep '^Signed-off-by: ' "$1" | sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { echo >&2 Duplicate Signed-off-by lines. exit 1 } link-grammar/.git/COMMIT_EDITMSG0000644000000000000000000000043312537602570013264 0ustar Release 4.7.4-3 # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch master # Your branch is up-to-date with 'origin/master'. # # Changes to be committed: # modified: debian/changelog # link-grammar/.git/logs/0000755000000000000000000000000012536650432012140 5ustar link-grammar/.git/logs/refs/0000755000000000000000000000000012536650432013077 5ustar link-grammar/.git/logs/refs/heads/0000755000000000000000000000000012536650432014163 5ustar link-grammar/.git/logs/refs/heads/master0000644000000000000000000000212412537602571015402 0ustar 0000000000000000000000000000000000000000 d4026d67c983f94d57f66cd3e7cd73031e3bb003 Wookey 1434145050 +0100 clone: from git+ssh://wookey@scm.alioth.debian.org/git/collab-maint/link-grammar.git d4026d67c983f94d57f66cd3e7cd73031e3bb003 b11762bf85ff8abe6742abdd4bf75eda7d336a10 Wookey 1434145187 +0100 commit: Orphan package to QA at maintainer's request b11762bf85ff8abe6742abdd4bf75eda7d336a10 a7a429263134e02dd80664b565026951fa3a5480 Wookey 1434145568 +0100 commit: Fix typo in package description (Closes: 698587) a7a429263134e02dd80664b565026951fa3a5480 b52723bfba03ae6537d82ba47836a364894df784 Wookey 1434145675 +0100 commit (amend): Fix typo in package description (Closes: 698587) b52723bfba03ae6537d82ba47836a364894df784 e8ce12ad84b2982ad5d46cfe61f78b5e010cc433 Wookey 1434145843 +0100 commit (merge): Remove obsolete field Dm-Upload-Allowed e8ce12ad84b2982ad5d46cfe61f78b5e010cc433 4fcd6be2b8699c71fcc598466c68475614783861 Wookey 1434387784 +0100 commit: Release 4.7.4-3 link-grammar/.git/logs/refs/remotes/0000755000000000000000000000000012536650432014555 5ustar link-grammar/.git/logs/refs/remotes/origin/0000755000000000000000000000000012536650721016045 5ustar link-grammar/.git/logs/refs/remotes/origin/HEAD0000644000000000000000000000032512536650432016470 0ustar 0000000000000000000000000000000000000000 d4026d67c983f94d57f66cd3e7cd73031e3bb003 Wookey 1434145050 +0100 clone: from git+ssh://wookey@scm.alioth.debian.org/git/collab-maint/link-grammar.git link-grammar/.git/logs/refs/remotes/origin/master0000644000000000000000000000107412537602613017263 0ustar d4026d67c983f94d57f66cd3e7cd73031e3bb003 b11762bf85ff8abe6742abdd4bf75eda7d336a10 Wookey 1434145233 +0100 update by push b11762bf85ff8abe6742abdd4bf75eda7d336a10 a7a429263134e02dd80664b565026951fa3a5480 Wookey 1434145612 +0100 update by push a7a429263134e02dd80664b565026951fa3a5480 e8ce12ad84b2982ad5d46cfe61f78b5e010cc433 Wookey 1434145916 +0100 update by push e8ce12ad84b2982ad5d46cfe61f78b5e010cc433 4fcd6be2b8699c71fcc598466c68475614783861 Wookey 1434387851 +0100 update by push link-grammar/.git/logs/HEAD0000644000000000000000000000212412537602571012565 0ustar 0000000000000000000000000000000000000000 d4026d67c983f94d57f66cd3e7cd73031e3bb003 Wookey 1434145050 +0100 clone: from git+ssh://wookey@scm.alioth.debian.org/git/collab-maint/link-grammar.git d4026d67c983f94d57f66cd3e7cd73031e3bb003 b11762bf85ff8abe6742abdd4bf75eda7d336a10 Wookey 1434145187 +0100 commit: Orphan package to QA at maintainer's request b11762bf85ff8abe6742abdd4bf75eda7d336a10 a7a429263134e02dd80664b565026951fa3a5480 Wookey 1434145568 +0100 commit: Fix typo in package description (Closes: 698587) a7a429263134e02dd80664b565026951fa3a5480 b52723bfba03ae6537d82ba47836a364894df784 Wookey 1434145675 +0100 commit (amend): Fix typo in package description (Closes: 698587) b52723bfba03ae6537d82ba47836a364894df784 e8ce12ad84b2982ad5d46cfe61f78b5e010cc433 Wookey 1434145843 +0100 commit (merge): Remove obsolete field Dm-Upload-Allowed e8ce12ad84b2982ad5d46cfe61f78b5e010cc433 4fcd6be2b8699c71fcc598466c68475614783861 Wookey 1434387784 +0100 commit: Release 4.7.4-3 link-grammar/.git/config0000744000000000000000000000045112536650432012365 0ustar [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = git+ssh://wookey@scm.alioth.debian.org/git/collab-maint/link-grammar.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master link-grammar/.git/objects/0000755000000000000000000000000012537602571012627 5ustar link-grammar/.git/objects/46/0000755000000000000000000000000012536651541013060 5ustar link-grammar/.git/objects/46/ded906555ab1b71c5c69ccc298cf25eafedcab0000444000000000000000000000137312536651541020736 0ustar x+)JMU40b040031QK,L/JehnJWe5CC<5c2ܣFgnB8Dz30VL 49\ūڇ+g)HKOOgݱ+򙅒*HmU䖙ⓙ^XÞn|HwSkNT_+>}=B يxĿKo| j/Ц̜T\G?rYT=^߳9'TY+÷[+xf!.y6zۭfʜ9 ׏0BbnFjNAjQ1}k~,qW[hBbiI~zj^qÎ7.;{}<,8Ӭ?F$&g'2x4VIow[= s:(43'E"7G/3Avw/ocqU=Zr~^ZfziQ*H]5Ě#.2 C!$$2YyZhY3vqJ&e&19UfqFn:4 A_7vL);ͩ^Tgߑ;ǵ΍ObxEr~J*{MZ'?S޵ĭȊ U?)]YGnEe@0NWl+ִ= *[\lhޢUٽB&ދd{?Eeͷ'xa"blink-grammar/.git/objects/52/0000755000000000000000000000000012536650643013057 5ustar link-grammar/.git/objects/52/111fb497e72fb1c2e930f0651612d3427fd50a0000444000000000000000000000573712536650643020046 0ustar xYrFgEWylyl+l5$"2H~O (eFU- Lw>}g^6s̢eQ_{K%J(z9'ȋ۳7gWgMZ:[[ɼgψ^{-I]5M\Pא۶QV**[̺^IM/,-uJqёY7ծDMȮR==&ET/4)W/u=hkons9/D7jU_S҅XS 4xF ٳu'楼7lnm.:I-qcq8㭬I8J-l7E)U[ Tyr+le 釲w\KX]YSTqLьN[ŦL8IG yAϔQS.-|ZJ…4/j֛Px/;Ednz@}K\f2x<1@AMRžiN{%;_~8C(k{2ֿmѭ<".$|0`A(*OYޭc c:,Q&Q kyzT\h~^I\' 9:6B/CT4 ;SjiO^^6͠| F~1X?PT<ЧPM7F*z%ؤ5&~|zbJ4$6e<qkU,WN=Z3p^t '\ԝjJ *d2ZbW٢SP D9zMz۰:ڮ2aWr8aFT'*mP40N_aYZ}b̐e&z EATp#Dk~Լ99_ѢM7~pAN$%d#uH7ni4G\}^3Fys:d^+yWdW@-Kx\\^sVUdl;e^(ِGS'A#{藮oy<&J (/#KYŠ 38@Q͉[aU5y ){fthظGE!9z}&(32K u#s[',68{ {b3k[A!Q3!@$Eͭn SepE? >a66Zqǽ(YLΠdDnt+&*Zs܉(h0΅=w۵yeд[ r+#fry"=Vq _clg_<fC_PZ'>gvȪoy#nix"͏Vx v3UҦKou!TO90&|YumM)C1;(؁I@Wu^JF7?; NcU/ :`䐨BD,PcPEgw{q|$I0"} ~; [caOȃ8(;Rlco.#[#峲@cȾWYLL[EwW816x vqkFsAR 3eMլkv6E0D;FuX! wz*u ms͢YhXѸd)@f Z:>ܡxf 4=)R6k06s .2n!ᵹcTL\ ƋCՈB[е5ܠɵsolv+TNM| Ґv>@`{.,= `'m 9`,/a=lAD60(5[=~2c-{]X?잏8nI:mzsզx9? Llink-grammar/.git/objects/75/0000755000000000000000000000000012536651440013060 5ustar link-grammar/.git/objects/75/1bb53adc6d043926ba42024811caf8641fcbed0000444000000000000000000000111612536651440020320 0ustar x+)JMU077b040031Qrutu+/-JNe6Sσ?TWl*LHKOOgMrjط^} S[XP(6ҳsu`WWRàcͫWr=y;p%E% + 6?Щg`;R4kۜPE)E >5gnuQ7= O.fxsh M7gBs2r2uӋssLtSR2Ksr=}G,jxuq~ӌepJ,Kk{gE>./v3[İn.Ad},\Wd?}ƛ͗a^qenR~N1v-8 qay\W)%yEźyp;g<:r:xV3^m.{pva鉊u臫w'hu+fu@㲇k]M+eڶv:.^ʛ*3\2u6,yQ)ך[='Ԯe2 7nPX\6Փ_z.t'N30link-grammar/.git/objects/e3/0000755000000000000000000000000012536651613013136 5ustar link-grammar/.git/objects/e3/55e5915f85493a1a286dc1238ae049163ebcda0000444000000000000000000000137312536651613020214 0ustar x+)JMU40b040031QK,L/JehnJWe5CC<5c2ܣFgnB8Dz30VL 49\ūڇ+g)HKOOgݱ+򙅒*HmU䖙ⓙ^XÞn|HwSkNT_+>}=B يxĿKo| j/Ц̜T\G?rYT=^߳9'TY+÷[+xf!.y6zۭfʜ9 ׏0BbnFjNAjQ1}k~,qW[hBbiI~zj^qÎ7.;{}<,8Ӭ?F$&g'2x4VIow[= s:(43'E"7G/3Avw/ocqU=Zr~^ZfziQ*H]5Ě#.2 C!$$2YyZhY3vqJ&e&1|TYeu] ['gBݓ`th $l[ÿnRvfS5-8xӱ..Hr#w?ϘɝCӟ@Tj3N:`Wkq[38~R Hneӏ b!ra,1avW.i{yT,ٌѼE G{k' L:[!o~pxЛoOm_6xucylink-grammar/.git/objects/4f/0000755000000000000000000000000012537602571013140 5ustar link-grammar/.git/objects/4f/cd6be2b8699c71fcc598466c684756147838610000444000000000000000000000023612537602571020043 0ustar x;0} {DB3P#cq{7mfLӥIcԪU@jM\ S>hHt dx &avd2>D UJL$W;*\RJ=fb ET"5n7$>?F link-grammar/.git/objects/e5/0000755000000000000000000000000012536651541013140 5ustar link-grammar/.git/objects/e5/ed8cf48f6a19fc6534e73d44147b380594fa300000444000000000000000000000216512536651541020234 0ustar xXQo635( FXKѥh 2$-ɒTTߑ'җa'w,)aseSmNSę0/8Jԁ 8Rߏ3,V33u̍o:,S )K_|'y6. &|VՈE'ة]3Ic-TF0A.G)Y԰,?6^ FW97Ӓe hBx} 2:sɨ:cgzZF6*g|d|Xh͉¾sTlz쵩+d6Kc{gY)׋t)Ih^.?h:ϖqrIAKlR%)z` 7)oaL  >?7uj)tm)+_ zM$ѵu[ׅ2yKmMkZT;Ht2m;%5XZ)IGfT5"KKwvBBS)ſRҤ_ԭyuSSZ&u38g7hߝ -jE[A^]мˋ7_x+VR=u!YoZdެ(;"E0xQ7rMܙ<_wD]uBqHbMQ&Q4'xXc*݊y!ϺۃR6MP_0 q ,db^TMAX$;Ѧ+{Ȋ~(j99(.qT~Bфf⣄q2$ɾOJQVIQ"ÅZ_IjN.ͽ9%$Q3$3Lj"a!22MRi' ?dQtVWZPtiuZ~!PvI'`jql±_GXDrMwWjIu,hAX tK08!]ū53xD aOV/05a|<$Uc`P9˲jtݩTzh[ }25N(Hz:( h ^SCC?yF6neK>>9RhXS)۽]ޮ89w/(o$ҟSvc?3̫wBUX98 vC˳WzڇHWe.C$U}&Lq0 }g@?d/V 1ͺKLh ky{q /}&].AE[Q!n!4 slhj\TK`VAq+|CThK!?spb@QAd@CQ P̃ E=Ϙ@MZtHl.23>ؤ5F~z zbJ4$6E<q6k/W!h4:8~Gp@'2~V"yvҺjU]@,BVSf7KVR*~6:adk G{j= tmLjJۄ]QdAQ^p X~#eM \$Їh.Sa[PJ9wb)=/oi@@494k8/qJP)~1=JU|Y 52+xvk̯*5[fn>(FѠF^!3rmϢg͞JBjV8*Zs܎P`\ Y-5G!k׋X C Ob!?“˺5P(m2']}p8^<UP䟤Z:o1<zbüCgEQ+\jG`7*? X2(\But1V797pλѶo@Oęޗ~zfQn؞I@UVHF7} ϝGб8<{HT8 "x 份0>֔]{}.:u¸0vl^XK92^<~]-[yc0XXC,&L[Mw06 x0x%`b٧ CK9&q|Pf5+uCM)؞(q'ٰWYgz4W{`E7fd͢uu̽qYnl_zw'[HH&w V%M6?47C?JUex.cLZ6!:UWwp hST؜⨌YqC#"WZn[ \u k m5E7^m|J!4aqBQ5|6.gTo^(=ৼuoH35&k/lʾo`LV;q7c [b震CW?ѻUͭskKg=B+##W| lAHgG8{@Ә [91r,a~j(,-ހ! -wKpː3s]!®b-_3 )I U#3n(rzAmx1VnRԮ۞6TBr1?Hygn08;yV80'_hx2M1uho' 6i~r-ѲW vmp؁ laDFvi3xv I1*'link-grammar/.git/objects/pack/0000755000000000000000000000000012536650432013543 5ustar link-grammar/.git/objects/pack/pack-ec06a32186f9ffee713b54e6a67af752d3568243.idx0000444000000000000000000007605412536650432022575 0ustar tOc  $')259;=AEFIPSW\_bdiknqty~ $+,2:>@DHJQW\``bfint{   "%+/9<@HMNNUWX_dmpqsx{} "%'-026<>@HNPUXZ`dmotx} #(.149<=FIS=^6o6h>)ޞtXWq̮}^Δakh\Q =_"E@]C32aTFXu/b:_g-rj:kqX&16Jӆh@'vj[]\lwlwro3n0SC;-DՆ[uHm9kqJˑ!~8K?u_v0</ڛSL:Hu7Faw& ,u3%C)Uٻ)s"!h)na>6G3;߅Gh'Q}6~!NE OL[=2% D7,hz_1i`x6)";lp&cjN o$pkoc/-TXevxaWLU@O=~&I.. tƱP,b4aWNR{B)YFӰQ+ߒU (MN]ŁݴAXQ1R7^W,{Mmqaw gC+/a[Fcef vM7} ʀ:lS Hl(`o&adS]lPE-X b/&\-Dv-;O:i]Ω'3G:{H%kZRx?< ,usmT Wl~Mg%;V2kGiM G;bTj r3x -2IyGJ[6ݝ -&W R'ǻ T!/,hUW32-4BX,v aK\_}m\L s9PccY) -8忡E5FѡM 2y‚]kIe_ Vz Ϧ;58scHf7 ԞiLӵi24 _qh:Nh XF* ;} D݄Nm s4ܵ!5YWK7շŭqૌ#expOP.&FT]Npv8W;rŃIKgb r(J一=_ mh\z$CKXm7P^zER9l.7Q+ 1sA`kH9X[ys{Yk Ӎ>V0qYf&5, P2ϽקFעw<х\hfh<Wp| &m!0C%"PfJ*f$<ɫC>b<~uVBXVΓ3QL3naG!MHuD ~/| PŦM;d6nx:_qm8.u[eb1 ϻl"ݮ`z {B+q&E=#='+YRm"yѭ߆щ"ת?tX):~SPhUgnpY`>5"̗ɹt9BulO{,Qr]Hz6q$oB( T#+XxI8`ӢX, T>s2ڵ,8VUҚfP;Ր,Gw'{,ΟŜ"8?a<,]<i&l>#U-ecC+O sFk- ߀&dn r -8^u6R?W\H-e`4Zܧ06o.E&ʓ +Rkg .kR9 m24. R٢+7.{̏#||=/.4zPB//!>8-w)ٰ /uٯغƹKߎfr/ysX& 9ťeS /=tiLagF3/_Yy߽`0z/o<50 Rm1Ue\~0e/rv8 JK03wsOd/u~#v1(4^?a{}81Llk7^%/{hQ]1 Hj90_)0 \1r=׿oksʎ1׸ mI̞_92QÂVbo629pT}س2byWo+STo4n3"dqv}dEc 33IcY{@((S9%3P@7cq$;3t*,&M0\7fwS{Y jR6O7 E$͂=yS7ɘNQ1X I' 7ޜqའWja)98onH7S1v9*?\|`AġGjZ<9FݟJXd~1%X9h6Hjl MDO!:-o~x533ʳ:Ihqa 8sH?/:)KS҉bWV:³`'u;rĘ#w/{n$<.4b=|<8sSaLpwpMY z/vPNRI:Kp'>QP,uw5A>`)駴|xog?;nq([=?z5OE/ttG$.?{NMB y? J孨a=ҧ @ޟ?TjV)@&\\r,|[}|U@/ΫM0]7Q@M$Ϭswz-@W$> Hz3Ւx@iOHch=@ ad&,YC\@$ V-N`6@ԘbN])k!@6+^K=uDܒ@ V HhozyA7(6ޟ}T {A"Z[xp*-B4]L|S;Bk6[c$W!*cBbPz C5V;SkPkn;ĢCvn4eB>D؛C!8Z ~%:D?@q*?VxD5KfAW!_DQƭ[KiS}%D\Ke%Z\Ľ/DM&e`(N% iM!v<]0N dTAp?l E▫Nx6zX80N i"ŰN/|A N|9`g߹YN`NNi1y i=6`/ӧNt'+,2+8?]dsWN\i#)9PK-O{F>jhbOOV 1:0GBeOV qDI)7MiQOL+6;͠fO%1ATO2ҙ7ꤵ]^Aa" vt%5kWX<=}m5e2XHa9b/xXS1EbDZUXXUW?:A\"s@)W.fXcv̡cxrN.XMZ#/߂֙bXEۇy"y2YTp<ڜ"m;~Y8=(Dԫi0ZHYuIuxE\8)'^zYS5vóY:8Wv8^ZVAUwaYT:'CхSnٜÙMaa|XkNb"߰i"Tlm />ebJfU/bk١]bfE-F|cmbuOGRjZ c,/}wX* H$c>n&=Gl[4qcuO1G=͘Old #nI*ux[dd25P! lZdr^bIw]@*Dd|iByJyΈe7k\d _О+exV KOʆH.e9 T8(ifCP )*ƙ7BdffTڙqF.f0;gF$NifϛZ-vk`dfaӸj_Vhȭe,R=h\e9td/@J+Woei&v)hOcC|yWiOt`j&6k7/i樒ZR/j"PN j XOfBp(Ӟj mϲȎ8+')gjGNI\cwUgj4 ojmvtBj5{U0zoͤ] 3j+sWMo: %jv-N&ǎ37yk3b% $-k[2hXko3zUlt@FuyrU\= )l oBlz؃G(vz#$p4 lNVEճ3ꕈ(-l~d( 2Ї ;Om>պ%UmmmԧG|ӬuaxZĢn>|,|&OcTg$nVA ?ƒHo=tWNE?*oW9 τ:z=qoT3wl$?Yer1ocQK\wspPHHhwλpqRB2A\VX3pT"EHpF&q Blc""],iq= fꜦOPr iS.q3KZ3(#[UrB)CBQ>N-[rʳS@jabZr1.[v0 ] Q Rs!r ?7Zwp*NhszA\ \4n"e%,GNDuG{[܀Wuh('[K8u ~-RjŽnuksַ8ѾvTbw쟳!PvYg"iL|Dvp_>율W؆R&lvK֓3tQC v}P-B5^ LMFHVvyf8[5fr˿wʰZmYkBJwϘ\&~mB߅bFwa_Rd>ݩ ΋)waj(u#x,~γwRMXxfkA ViʱxaR܅cM4$3yLk^{mGAgyfXwՕ pKZʨyycxr,[~aONgQd@P뵡~Кh)v$F }~g vwo+|ZF^nd/gvѸ[@Υ=`C۝,(y\y(˶.ղ疇qUlƀ %=:xWE8Gțʛ㻯>jm9$0ؐD(KCGGiȟRtf $:IhF0pJ׭ځ,W;֐šEHHBBNJN #c\hDd0'GsfDv-TQq/,Zbkm а< !Y6T v9/TBZ0J‚iRD9BNG,_-Y>ޱ]DÖvPyjXzҢ D*4Ʒ/7EٞAaޙc99-2 X_zdxGKbf !ۙ8^+P[YD9s9ۅcӤ[ӄxQ4z &ͣ+yGjjN%B@ft4Ct5:4S_ S/ړ`|:vk g~ f8{ }_lfև!/ܫWqӤou))5_wY(!5k?fG&x`/!r]zf+L3եK2I7XfE&։tW}.Ո~:b̠RÉJCZM(bǟUTH8vHQPaGg | L 9To/́*#;<ҟG@o8c/רzD^͊#aU%`'U"n\\z74Ɵn2n MbSيmeeA䎔g;oҝd-4+JDHe9S_펶9D/= {.]JCL!s}W)ut, mҒ2iːC J:2)P2 ";ɶ"lԑ "%$j~;>0{{uka3hYÑO5;شR]iZ\A/Vͨ`171 g7NMtVY@ٻؤ9BamZWr?c럡)B*9Xʏ? :#aeY=3~q8Ǒq"g N<뾡]q-F’|Eܗ䖙P?h3>L1=ddu𡧨8(LX.$"IܯwirZ^I^suuf句-M-Ps/%F*W@CC|zLL܌cI tXE׉pj[9SsW X#x)b{ {LDW?iLY1uO[Lѳ 9pQ۔ 3#]eP*D! ^kY 6 o8*Pi%S"BSgA4}2KӠK%!-/_M[ $SE m1O7 ԰t9_Rx{Zѥa;`β]l> lǿɇb %i/5T g;NYvsCkCH͡uGmPP9ec\sV$)!ЛHd9(i ;-ϷLad:Y%! YqlA! ]%t-( (.|n46Zo6v/)E:9&_{|@%эZQ9ozΐCr5JA&" |KˠŸHxmjXE9钙٥A yned$.C+c\kO:# DdnO ľ\sDaUwθMid::|Jσ 3ܛ%l$xq-N'I͡fGЎ[\fu"}7C/"ڤڀQsjzveB\ _7-d㾌T Z}Lwyg@Rlq[[sv[eйE}:ǚ^PZ>֙mf F _$VSI崦.:dtoua[yQr68:wU=2[ג@JhsU6hᩦ*ypչ$\GzqUhs搽jFhw'z̽y Ϋ7 !k |]A_gǻ"ŌM߅@Nu̻ ǁzuk/hy~(0υ]UQ_Nש-{?q/ޥ&h ݫ˙N]ȼ_/;~ט8 _̛ &Њ WEGs9L=>6ew)8J g]+DHXX@]"p Cph@B[D Wu}Ly& J &(':+$g :#Z^[ې*jW͓:R`Oc>q^+I{B\8 r_B{zPuIYldc`"7TD-YcJRݒ%(~2\\YRǒ䶡o^,9(~Caxr^7]>2F_9r+lCJmDl 'XӯlYD e/$]?iwl ASI_ֈ+gد42WDڢZ1 iP &⬘Ce,Huɯ?&: ~[yPgD+ >#)m<⑙(F -Y *h@j0gbE;{;A7ʆĒ*} yȰw &jʨI]ķ<,p6^;ܰ ncyΰ:`}X&? (]+ Hko=߬ɳ1JrA8?y[o OlgRÂpN]0yвƯ5*Y6Ͷ2z0YА-D122Eð~(*zºpnG)QT8O=wbg7 ϳ~c6藏,+pOߴ>]XpYh WK؋ҖʒqXiAê)KZ1;Г=f- é/YiA]b7jL|J0kD7[͵sKs杓 =+m"Ho |t*YbB*4Wz@1ճCGݺ)dm,q3]<%wLnl:-<>Sx"T(ד$hQ9 Ӻ[8dl[kgf&'+Em(mu"P,Y'dGحfY7ƺ}~{?AdR5@z/%ҫ^sЖ:C/:TtbDz,aV(M}" ttwy$b?~7Fr̈_VQ-Tԍ/HO$)[ӝђ_w,ɒ>^A/_l缘>9bdlW #ֆɢH~t1R /S+C'c0]y&>ģmݹL ˶wFEc>/xH&Kmi"&QGߩU(tcy-ӵYbS_ #Kf?d/Hיt~֙ƴqU hܭb.$(8ma=؂4V(Q))aLJ ]zSQD[JR͒e;:n.ihiRJ٨g/'7 R 'M>'G8J!CCr\dUtl1:'}W7k>qBeI5D~7_yK2ٻ…y6%IzτNi=a3^tÉ )DQ6їolìIfvG"e`긆[x=_/-kT7XStOpk M]hC M:Dtn>9K8J SĊãd~SnĜSX]-3b&]XIqji2N#?hIoœ2nW֡Ӽ.Ǝ94\3[Dz6ړ2H/e![\S0 fcMUHg "E4ᖚLJ:Ug,BnjjLmz_1 !FɿZ)zO c#xOsYKzIM'CUi95 pд ѣ| >j^Z'd݂}.:$ÑmiT RO=-4U}biDEp6'} -b*QhȤYJl-3ȹɰsw opI|8оz}V}ː_E)TyKBHYo@iͪ ۵up}ʹW ;:6r )~xH=9-XFË˕AK٫Pˣ *7BP?ˠ_* mj7cn4w#!Lળy36Uڳ.Qܜa;L2f=  ꯏU_9 oJͰhOg Pae{ͷC1,w3F՗?ͺYm4䇣j]WoJdy%rbn#;"lGqy"8 s1 Df#αpdrz~Dh Y$j$H d ŗ lp*p}N[p9MErW(tL6ti#YZ;$U[_{Ň"!u,&qm*Z(},(Nqlq *$=9ϒ?IT}Ty|pϜ ]aQ!,`Ϭn?v-kVFtbϺR[$Dg\F G?qa_UrH!f5^ #c51T$^(jԔt: xսf'Oѯ)BI~Q=I(%[Ѱ7ڳPV,N1xѹ;v +e&=-gK2׎ֳ/u),~K9w u^Ts9lcb2=1yrd඘ڊB2`Ga=1~ e/~ӂ~u۟~ђ21 ӈe3[ OFjXز1̐ʎ$ !%ๅL>*~^A|?exTgA]Zm pJSSϭG@ #NnMFDUQ5@Aa 0 v࿕Ř_!]njk;!"PvOLY$2Wg,4͞VMFk϶AS^㚂KZ]U,f?KW%BJ5J=xJ! !|\ZOof):;Zj ?͂OfaZ'+|2刋]ιL%%ǜ9Pja.uF/ϣ.F$ğ]a8/gkF,;|ߑsn7pt/,`M}T+-&f pl hl K$n/PkC6*<꾠~7%RMȤ/3Йqzë 5[P䭈L7, #_8(䯠p m1Ok~$ [Vv[5(hlYLђI@uĹ `n]ZWID v>̻2v;ݪfbcOrH׼B⛲CK)wZSP^zO`D(DF1I;-Tm]':c`pwfñPÜ+3>}`%I ٠V=z*9vx8 |]„\ JdS+\%Քf, K6qK:[=TzRJ.F6lA'EPL xǎbU09kLTz%zaΉw!?JsP]PŎ'B daV)PjD ˌ~u.xAQSM_d]4Ƚ+ϊqR]rZFE0a"TRSf+p<@a̓1KAʍ_x&rAO]~+8W0U\3.U)>KtmN(юV[q1*4mō=2_J[VlW95"6Q`~E>R U1#X @&-kgWu~ﵓ2S-0&&+c"wO)a׫\d_6p#_.d;.uY=ty!p8bWˊDٯ~lž߅> NTBVV@<'xӡ4kv본yw"-$+YkVǻ}91{i y}5w0ؕi6ʉNaE;Mz8Og5>csA݃`Is:IQV5s8:Ġ-L ~{d[ξW΍KaA٘Ý4y6Z."$n,x1DGPj%oI4Z# 5Db2ҫ:v|F ج>e1\죃Ʈ_X)O9?3`N"Pm-cܐqzWB=˓c9~TC 8k+qSf _,HgL;=ҕh"hN/ǖQV !F 2pw8`Җ"Yٔ kdϜZ/qDXþWQܥyFe2ƱXo5ud}_OUQNSb'$Wjb<¥mX"U]e )ppV, 0OwV 6;"i~?]qn\P1lM-ck7Mvsūh;m\ɊXsvZOn(GAl` ]j~S96d#Bx<a v)K AHnxu.S1kÄ65\wC"3cK-%G3msXdׄ( ?}$jK )S&MK$%RrBg`,L'RB}" kYIu*.kUu y(EElG .n2xqml;4JJ( Oݺt:L_EK7D)Xhvy^C4&WBU/~)k@8+SE@5@y2͝3@'u{o_7Q1?g2prOHsB~QAcN?0[*d*fj@Y#vkg-!5y{3iL=7[ FbA=W[DĉBkb tYcQz9 ǐ-dfdM9A54P{j zz%\ S: H+–g̍Nz;f#tj,r[t!4GڰF'?f@wL'3%Rę!A(]54+]&Yp1B1 1SvY#zNyOФ_$iToɱuF׋ /pPEݜ;L0+(tMMX18\\R+, oh*) Of@ )LPUhS3 O:kVqyA[߿I/@yUBdJ.-"zZi`K>P/^|1ٚd3Ԕ-WYH=tӂ[5AZkCV|S!tذVGR@NOG d,hu6y L{I grQo8gfB.}E9w%~/ą؀B {hebI$ո:O?VO]WKi ɷU-ŸiKY0qM2Qrnf.Qkn"EӬN"h5#L7$KKF%- Jr286cϘ$P_ܦ* ۲(S5VI`eW֩d{v*CVʐRK8E('UD̑`) ``97V/k+{x{1Ŧy*l!f{)NjU3eoD(?WmEй;9ҾsJz766+z ʯҵeӇ&")흖&o!sV)q?~@G@t/4N|Wt; Mވ+ݣ#|Ide 'y 8/)U^*l-Y}O_j]( p%P=^F>DpTO9-|z yaexK? !ܤ {|HvE9_0nz[tuq.K2cZi&N_lD]{[Edcie*1ͨ),o<ù\Hx"!OB|eۆw5n/D:3jO{&9Z"c]?SQZѸW2H4ͷ"aj<7Z K%~ m5e>OMTԵ 5RLzO&G7A#r12ͫ2hiIEZH3{?R1ֿ[a:%x4R GmHn%q!LGSʚbd5n2͘reؘbcqMyo<=ks:qHUHD*"DbC2"IF̃.gJ׽ORj} 9Q -qyk 焷mYu} T,rNaIHڹZ}=r #xe[7hzE}nrTPa$/%iM=pzgOeM&$Z2(܈Œe45}ɗF tYpFinv)M i\`(s1߿Sa"JX/u%`̪)KVu:nTdք6^#ًX&n `SDP @hbڸ+@/յ_גnX MsJwPB&J4ˏHCY;XQ:RLiX-wniߧniGRLoojg*ը3?DaMë;nӺyd=B4꼙n=zqf |s ?!`eB 1ȳG A;EgwKjFA$}0[Sw ,DsUxE"tJߏ-XcFGU?֥ĖxeKj#oRMgyh1SŗIEnf.0&ّc* ڹ agk@ k J 6ub1zچ IIn ڜ/, C^ DYLwd  K +  b >} a( 6uu$ S0+ evߵ 2.o' b zH  L RG X%'M )>B(_fN OT 6k 8Z Q2Ѧ'}~ ҵ x )Ez .t Ӥ.Cd/>K H |~ S~_3 $F%6 ,+ l!j3.hF5b 7 K + P' ؉]) m|rP Y;/+1ۓ-< S!ٿ7 } p i {Ow[@a Lz׋~FeLNE(= R% bi0 3  TG  } d Q+ L, '^ +;!)Vk( a &vy  CA"fQ \ lQ`  _! C+to ּ$yA AS& I  y bcv .( З < 0 R a D1/ p CL ` N 3 <`&ќ 6 i-u; 0Swj u!Z/;k .t DE,`2^ p J &g3 F[ 2!M [ eL %gdf8 d"K $ #,PIBfUضvDq p Cu 6J --Eh : v :!| ^   D 7-H A{ 4 Y ֎ $  j3 1$ K +p*k L8;$h%FB ;\ޤ f CJ Ok S T JFdQj !_7 d_ #X yK ^v 3c ' K NM~s 8  K,*  B5\iq  `i  # y[y^ܗ c ߆ ,[ ,Z N5KEX/ V/ D  ]r {:ir Cq0> ; 0  S j(J{ - j Dz ^ ~ aX%^ E  ;^9:XhcD*gF Bы  ξ b>: 5 ؅u +1ը D cE1(G+?Mor R4  $c  > h>K>x0 e^` G ~,9 : 6 ϔp "9E) kc muG v @} R}Y f4 e  Uh\Y Z &+~ /)#  >"Z |a#} Lٮ _Q1eH J p>= J  mRz n &i j f"i҄R$+ jNd(p e ^g8;;iu d^hs oy.p .r ` b=%U  F Yd<8 , ;+C _ GϬ <-{#  e F Nm (F o _~m ' j7 j,n\V37 Xc /- ~[ D+! 0 Q9  (4 vI _4 JJ 9 < s # ], z i A~?~..9J dXh Z 'D QH iB $ru ' O T  ` Ri ] } d I u  e 1 u!8; x# /  0vr 3G GB[Tu SF 4 S k, KS  <L! D # -&. M + |d Βts Wˣ Y} Jх *- Q!\ Ki/(4z v Dt4We ,62 Dm0IB4+9 { S 7 7 S %[ ej t G df!D  } I1  S9jej>) 6$$`  0=ׅ ]hw;1<X3' vD Wx C5 N %Oe %F N X!:G|ULoB+_ u<} S v$eIY |toX o> $T|w d!q;TzRVC~/M,AȎ;B k=U&'D}7ۼ4"F9k$뫦XqB5F7C fBĒjM9X-+CE9r/3m/87 ;mVד`+0_K371|< eYuxp4HUDxA 0y~4ɦl[-ڦ[ L"C@E#~Kls@1cRs%b$ֻLĤ},қwFE(U g|izu'0V;k:OɿLM-L7Hݦb׫/ZH x[ 0s\@c)شbӔz3b` ZUDjN)_`!NYlqu!@!fBA>cOTEޛ}ҏrͽ%Г qı8X9/}_%A@ xK 0@9E.7Dĭk0I&miJ{]?eՏ}c3GMCҾhL~ '2/2CܓxA 0@}N1LNꀈu&D)i\}x[U<#߇)1XkcP*U”0 D$rd\$N7jR d8<¯[Œ`ѡggWܚ뺵uC|YoC xM @=Jbq 06Ji.zW/7:LSfJ0s6:m5cH#cmH˞K"bRsfc0O&]tKF>[H^[=K .^YyP^)պA~$s}!>QBxA b?`,%1x`F) WiLo" YLid͈A M-Ֆwa¬Yf&9GGLb)g7,+kIcZ`'M1NזwSٛoiϥ0xʊC=xA E $Ltl(˞b1 {&G{<~Elȓb1$=FSHh^>rY],:hYZ;yd)ݠ~׈BxA @= @Cbq@;hc) EϯO^[$A1 (zlɺAGq1E*kDvƊE7Rl k:RUV,d8>{ҍ%{8hZ}5ϭɿm{2sY;X}Cx[ 0Ele2ItyL6RK.8ps~$A?pC6 " F(w=;k53uu{Nu|w|}FuxA0}~@ҥ[ZcW> [%RJJx}0͐%NjvZN=֭ R)/@mCfxK 0@9\2i>M@Dܺ3FJzW<^;T!)4fc?:AV%;^͋eT,i 1xʊ\rBYz'Z4ns=;Z78?Ѳvnw.!d8a@4_-鿝yBit߷BO|n$F*xAJ1F}NQIjA ޡ#z N-hd!fjQ ZjEHQ!nfI9j3 Ֆ-P6qǠ7\u?N_/.R~ $^Wz'ݯ˜M}XvrZ-E xMJ19۹jI2IFĕxNe& #(d96a[>ڈ)«؄`R05(ǜC~_r;bJ珗k_@:>Ҥgh*rn%v!0n 3Rv!$Wmyzj#ShYu&x+[Kp6]Ӱc}&e 9c,'l,'k&z;Rel^>rєʞj)-$է'`3Xe 3RoAxn )ǒ q馼R~ AJѺkdrLK]Ǽa. ^* -x\!CzaYbzKMr5r.W&7Ql_ Ox2vSh MRd( ᯍ֓ xA b? cz[(Ci/>L2ɴ 4NLHvZ!9:oJ^W-d8矯Li h㴂J^sj㳵ʔລ D,G5 xA @= @Kbq=AK1O~z ~2$~f&;)hldQd!qL& @jÑ4h(gARU68>{ :̵@dX[je]u& x>`p?*xAN0 }N v߲vЊ|>FћTAA'\RH~-˜ܺ/S!$%8WnBOQ~6x/˷G~Yta'f]̇욯Yە+6nt=M;x1n0 w@fhAY%E4c<$Otof@S֔g*1kY 䢃[e{Mj~H!2FSLB\2$QB#;׶Vpr[޵=01aDtZo?w^'Vmqi{|q~ujEyxA @= hPc[O16Ҵ\%o" `ѱ0HJE6`bS8g"ĂjMD|}&Eb|$ [cW nunɿ^Z=qD4.88hZ}N˿z43D:xAj!E T]*!6e9BVYd&<[V !q1xЈ#S *lRu]bgЇW#~#޸j&QOkrmuN10uȦsxs@asdS xAj0z~ fV2Pz ZeӘDVPu0w6IRq.̶8 %XXZp?k^SidDۺ̗|[ki+)NmD x0{?Ŕ9`|"EץG=` c#c㍢RiOD0$V)-d=VS V7ݶ]s%׫ي|!3&1ȆKoCPJ!vRpO&DF] ||PaJvZ…L9w +'g|". F] !y%dy6A20S)PrOəE>"ӒC"k1yDGdhmkZl:zC!G!LAkC۩W/?2 x0|+sZ;jQ^V}Hz_[NxAN1 E9Ev]';B-i+*gXpVOz_o3rUxtT1 Qr%3{MO9F ªQ[ZjGFy`Ta,#`=iYЕǼoW۹Y pگs|eӋ?=sX'QQxAn b>`)ZE{# ZcVqSK*" =:" aYd[}ڲ"e3)dyŌbpCa3ϴB}֦j>ZGr9 fx da2dh-c;{S||L{Z:h[/$_NxAn ~|3{\"?#RuW"`Q`$8'N/ G Zi4oFII</ sݠ'پJ𾕒&ŕ ̀G =ASlMu^l|˳:R7x Z9%pnǼ۟?˰XxQ D=^anT(P1c{&fxVAi0Q`*r82PZSQIN$m^w{ w^6 ^OsKF'$D9oO3-ٿ?vaDptɪVYvP4NZ݋aLf)~ܨ4(SR3lgx`|Z{\W ).=mvX Fr:(D xRm2͇yP]Uj`o73 B&x9?w0窈H 㕸TNݖF|xM 0@}N1Pi=$3Ŧ)%zW|}3PL01yY;oɓ-QBIHѥQmaж䘅g4rء1Ej;^P(9!K- _;vi\mWE" #:w}_(w |ZaQ-VoJ̛xMK0Eoi'-؊׼ih6*.{ dhm]{ :aF9Zc3ZD-"7qCmwM H,+>1D1n{O3xy힮TiJzU[(wa i D[2r L O N_ԅINW':/tNB$H>`h[#~º]L* gs6xm0 @ѻ1Dt$\{IFc+f>? [-ARKb.ZR-|F38Iu :YՀY12+*7v[<{xOҶ `cp_u {sap ޕ_v ┦{Htx˽N0E>O1/d{? -='Y@MEuO:stagUd-l2wAowbڤ䃵"`1^{c\2msdDq-s~Aohz^&}TΧ icfjU9eN[17dʸ"gi:RilkǗodRHxA 0y~@$MxۍMRE<&Cwy̮:d 6!k QʹHi!G8j:XZu8?kpx ?nk>6.hGءGTߚO]Wm^"!S&0 P7WQ\iIxKj0:.`_!lj;b,kP4>"U9evђḛ&}^5n&GAdS-; PO~}ݷa=*c&EE[%_'~z2qȂv/p|x>.I;Mx[ 0s\edSyl4RGk``vh-&!IBf#YCRp)!efrLQL'9QO[ꡟVkїW6n}qIL5zؠˁa;20sX||xA Eb.)hb Ц[%M!L~Fw<NHwiV+oRL2L9 .cXuBCkr)q)oo|Ku4 -:lZ3Q$Y&q]}FxKN1DeE=6Bqv;e>?ÂӫMՖ0p@#w\x @F}NMnauK${@X$pΓNjyOyZ [`xK0D:E_ 3)ZVĶGdž "uL5S YgkRT1z*KMqFp g0Vٯm_Y<6^4Nǡ_GLjػ|YmS?R9Í^cAwۛ=e<^?L%xAn "1qEQ1+^'R7 8qQ8G%h]Maٷy!ؑBqOX DPxM.qZ} &ɍ~vzl忞z%SG;:tgP ڧ7l-f~N͔x;NC1{]*HBiqj֧̚IY 1,RVz`4u[28!'B- -I:]^=Dk,/Q =eC7{/yfG.zq]KOg3w9\3|·soF„'Tլy2?MxK0D:E_i[Bs#bYAQ6saVU`ČK*k5fEK^ 9ԥMmcu1_ { GӆWSlH<08hɽ=lS. 6:?&Hddk˻Fv1MxN1 <7\rC!PF$N/j>T' Y<7kdd d5JTa NgZ4@d?L5^*w%atiK] Z3(I B 046D9c&+PNʘ &bxY#N G~aR"CdU&$ԁ}Z})s Jiogn8gG[P[B=phgӖ/WJy3ƾLj=kN@{/+ FqXs /Nox[ 0s@K6觧ؤGk``V!&D>K1QO70DYǐ㨒5I18A6 wẖ~L-kvT8k RnKko'n3e~mo;_EExKN0}N j;t,1#Ă X9'|.*zc`KB2ER`E n 4޲ٓ42->f0\9՚~ӚMLBΒzTé9 /R,=Zmǯ;?Xm xpulqO==gq܎X +Ј#_b:xN1D{-(HB(]eďh׋gCCM59># ,J-7.AJjYPeFrZr3Tr?!P昌k-F=#~S + <5SZy˅pGdkK#/0b/a 4NCejk.7W&yF8+{#ZYxjC!@O1Z8w RS3&kI5E;.S\({gR"vxIݣ%E00/@Ml䌶fC6ED ?6&|J6{q\`3 ^4jzԵ俟ZV{0~eΚE=EhxN0{?v4H+hyəd;DOvff"OvBTG _ '8 fTbҒ5ˢZm"%T̕esNN>|k@L / $[kj؛r VErnwxE>.fP$5]S\ `FAM\ YZ¼pKa? -jxxMj0:\FtCx[W1S-70٘\2&Vc-w~Sϖz>y`Î c~?NxOKN0]S̮O!`UPY8z{$jj!nB-y*աҢbv+vgg,+A]+=sFcOz0J?5H')$w$},ZkV /u Q4m Zֶ `±Qԁ3O#wg{y u<î]gZc`Z+NV.O=z?BL5rP{Z1l2+ rp<وqG#$+$94\ҋh 9*e\Y Oѣ V93+mE]1 yd WZ︹KXA^HSږS QiCƎ=/8@V xA Eb.P2iCi"i#{yYu['Lޒ4?w{ 7pJIpZ^B鹤3 !" Q4N=k|k\scX- Sz'=^%> @xN1 D (lB+_ře6H=iq/zh fW4I Q{/JιŸ ljNf3)!\Gg^LؔE0I{ Joku<^_`,Y8;9f"]jBpR. tr;ȕqnp| |l֡!FF7:t_dxn D|zi RUUV50^F3f3#=j3fd kt:l1u^"MuIqaO;2M@K6_V>y[m,"=CT{Zw:di=2aʭ\a7y΅Jɍ0E /llU:S}AjG'*T dQE]xA0@}O1PNbq)@ ~_7U ])g'Yu!nSDO EKmC3I"lԹzo>w]623Q|ZD!8`h>:꿟yB4r/NeZ>6& 2TKxJ1@9xP2L)RMi2inve <*K֖}_ēJ/12Qpvh>eѩ %:fvť1#_8/lyn9thRU#XbD #mwg:t,P 9cvg~CG*xn0 E C"+|mQb=z4ߗE2D\^HͤƮk:wr'9I+8EIFC$ as 骇4"nX"|%m>s>=-=BɦiZ);86C:3N<ϰeCR0Ft#l`&EHAy7rfX,q ƃ٠?b)1bWϏ\R<;7e*yƝtBw* ~n츒*Kl&ӒKd,rU_*j& jͺexݨz?7~;r7A2,.$~IxAK0{#Mڦ7?$mxMRۭxs`fcd#^5]czmF-ڡk0Vjō79u0z7ȖCt ƣCxYjp|2j~ƴqu:לD/)O#-AJ%ŠfP]f JׇΣ"S@洟LD LI.WdPxAj1 ~>1Rr },iӥ:'>s GR+6*QQW%KE4̖:}=B يxĿKo| hSZfN^b.CSZ,yٜv ,ו[ɭǕ ~<J _xtTE?ÿs^pw\eΜGM @!1Y7#5 ߵW-4T!$?=5O8a=>iP S~Kre+vzɻ-랅9BTW ;ͱuԞcy-9?/-3(.sb͊ދ[}![SKn,<-,{S^8BS2>Co̷$fړ`th $l[ÿnRvfS5-8xӱ..Hr#w?ϘɝCӟ@EyEr~J*{MZ'?S޵ba;gOJim[aQ,DY.?"&U3455m?%18hZ?+Ve=FRW\YRW_ʰagμgxq1iۋ4d&0r1׽THyt:o\U4kX#›N$eyٙP~]ߚs]Y'jbT*Dr%D SDbn6XX$Q:|lSA$:Nh(w")9hF D ^cfqۇ o'~w4>KV^DBn-MFӡȕ*>lK^Eau4:k3C"i(45zƢ։c|!zCX\t@]Gl*!Ly>a9V>0/'Q[ݻ/L/-0*rΫ U>|+u8>OrDeR&%S]iJސ+N+5YxABjuCYr |niN'dyC|[`Vm [ MTƾ6hPɎx7%麂RÀ!*2z1\Zk 0)/?=7&}J*!: >n[&rz޲醡3~15֢+zFؘ*kLbp|&zE;\0J^~rNF3Ja <85q+Rq%/LLTfqTǧq lL$Xp*[d aS~Z|@آj)H~ HYI[llQ~䙌$ֽ,s^o]- c`CqnAs |jM1ur8;ghDoC}0vKF G?|uw8t.t൦棝^oa6^$pHL1jpmЧȃx340031QK.+L/Jeh{}"S뻲$ !L 2+>j?>k@ܗ標 ERXm@J㾫w:S=#+J+.,)M+/IMIOe%*YۛZ~[~n')%3!Am_^twYHj:Y,xծ^,;I' }S2sRs^M>1 LBڇ 'ϩN!Cl#x340031Qrutue_~c[|PVs\_ٝتx340031Qrutue0_ٹUE~E޳MwW*$00G R*SRsRKRAMs {ڙkD;B,LL.-., R[rUGbĪ5v-zj`ZfnNjHSIɇSk7 }z/2SJ@9NXF'FH]IE`Oxؿ4oy>b脚V]XT R(;B"yU,]Y{I0x340031Qrutu+/-JNe6Sσ?TWl3(LHKOOgb&jrm[Wk)-H,agn|:Si0~+)ak`?'֙BGn>\IAeQfzF t؎6g+TQJfQ1ófoxٻ[s]yԍCOz'^ZkBS<ͪP̤̼l"ݔ2̼ĜEOf:^]h4cٺ*\oޙ`Ϧˋ1[;Fe:[vxӕW&3hl7b㈼握 4d&d%e4o75Akz#[۹^{(onjPTZph׹w_ۼ[TSG' P\knfSC$PVjCybIr/rۜVO~͞\--xx340031QH/M,aTWOvqs#Cfx340031QK.+L/JeU4#z5 V{ !|S2sRsv$~god۫tv'iBg&$U ㊻.L;o%7VB1HR /8(H1|%@ִ}& N-s$m&6]ǽ(:}1mwJ>S3Kn|?Zܐ0:2Z MKt6@T}ޭmm@Y‘W( {/?85N{-z<'^[ה%2gQMT f!Azu/4ݿD"^Puf ׉1dЭת4\6r;uW*r-` f0)-GgаB14 y88Aer cFN61P?AAC-JOi*(n``s^ES)ֆ4CO Ԝ'Ii1PAʇy}GQ;K-1HXc.(Bは!eԒYLe`Ō/'\ZQXﮙU,JH=HLJb02~#[yg3Ko:Kxt1jV+u[%eՅ!#4*!$/qis{(7.=?\6q[_kɗ2NX\s C)τPRh]u.tjwl5%󊘨ofSۡP!E  MAî%۟zx%:iZS' 3/HU yJ[bÖ*L:§} 0fǣcB6Zs(nWZ)l2_̪o=I &$[e7>l =ג XN,B*Bx'}ؔyU:{οn|1oƐ֬hi_Vf1/`W>{!r5k0I,nGpcxee7쵈 iX?4b 9gzgfhgL3IxLhVO^M`.΄z4? D3bI Rj5*%k& Ĝ>հM.ԗ^`dz̦U8C9@"wҙ†/ 5#]>JtxkH=DB9hv]|۹DQ9OY:8mwO78AY&Kcր{.3_`8=@ '[bT?i6"+:?q ϩ'ٹaUL@I&XAGUf`axO~"Vݜoc#nDx:ȭ~Y*]sW/&LuXk՚ͨUP8ۍĵivG~tH0pO߄ϐ̛?Ich][e~mvv(,F`O~gg8J@ + "  R}ƱE=o}Fes" h~Tl꧀k^fOe #ԂM[-dBce;ʢ,WD/Re+8tS`=B#wQ><  o'ovY: 46>V/D<ٟ+#+ n_cE 4h<%oվKn_̀my|ghQZ\Xj̠x7s'ȟKW!W^XV{qG[w%g(\4,5x340031QMNMIKe0lXeii"#4c !ʂ\]|]"tԮ;\wG| USZ\Z[_׃0e&{dW}AUTiXɕikaMm)`:{9)+׺|(hМ5wu*^KMj2X/;aC3<]=8/3- h̛MjkV`ݢnfux340031QK.+L/Je^`-?v?"~]C WG_W/^`j8D>oM @!(TL)UOV?y2$)x31̼"w?ti"oݛ'k5dOx340031Q JMLI-J,Kd!pN粿#rϿn9?/-3Pjσb"eQz~pA%9y%ّϾlC0IpEeɩd]z^>IM˥S QhKs_1XrkHp"D*.]|tH̾)%r &C-vL;nҟ{ٖʻܙUXTZ\?I6F(= mNm>teɯx340031QpI`p+$] 5B8%g&{&s*RQ5O~ ”W&UE{XO{eó%_JNNia婨U+d0:71;5-3'U/1i e,"T\ZW2g,CK,f}%j~V̲kƵP5%9`ͳ{,v{Jthpi!毉:?6TMYbQfbRNj1ذ'>.[&T" h&x{ƍXk]`Q_[6Pf={7N䡫GZ) \篹QX"Tx340031QK.+L/JeU4#z5 V{ !|S2sRsY9G*_TYNf^nAbQqj!ӧwGoV. x340031Qˎw/JM,wK).g8_᷼0gNMs9_kZB&fe%2Yw^57~r@CMMa(pȐ(|nXV2?0{ϥV=Ωf_sҬIJDяֆhrMPs##X[sx340031QMNMIKep}W˗T13ڨ;,'3/;>(177(>%'G//ԉ +_hc]a~֬xe#ex340031QMNMIKexiO+ u6= _Bdeǧ%&ŧV0z5w_}rL$ex340031QMNMIKe`᫼+=56lX,'3/;>(177(>+,1>%'G/AY~66L* ⦾"x340075Uv/JM,+cS5`b 'wx\Ժd,(?Slf'|i}vA}j3dծ0 PMZ[i=B+cXqXLD{ŕ? 71;5-3'U/1bTbgOC:y:2V8{ӏսQGCdNxkcocߐ$J-,;5'IH Px7:J[VlW95"6Q`N1K9w u^Tqe Fx340031QM/JM,733/L+I,KKI)Id(1|.B we - ҟPJEg,MӊNǥ)(좒w]~8mqOx~V]j )FSP.ks(-?=q7ӑz?3qi6bcc7]GkykC~n榩|σK}N~ci!e%5ט&H~ˮT̶`uƚUZ kqx1tJ?O<8@ˏ<^lhgga̛qi쁭q0W4havN1_w%?5`\å^I& /mN"N?ra xN4lqf,_,ZU6:}ň8@-~w~cpYMf~զQx340031QK.+L/Je^`-?v?"~]C WG_W{$f}$-x)sM @!(W^)6Zt4)O[)vx31̼"ݹ{Nu?`}KvƟrx340031QK.+L/Je^`-?v?"~] P/Jg8Z+I"iΉLԿ2<Ʀx31̼"& 1זN~x340075Uv/JM,+c8o&pÒQY.bQZ0W7>gCgqٸҲ䂢,ݖf2T}No8ƺSWbY"LKsÍvbv21Ӫ[ afb |Ԥ6nv~P\]|]DR+=kGM^qvW™bNx340031QK.+L/JeU4#z5 V{ !|S2sRs⽭s:ںѫp 6L PHIePPR4~2]Q1۶UW,NhH1H]w"Aw@Wo *eV0||uͬnO̺\+!GD*38 f<~3E;n1ؓS0ҁ<>m#WW Ņ9 XKZy>V*=2U`)%3y7DXx%_Rnx{i\0S^aD${g펹X8UiQ7¢ %2.>TtyN4'LK5k2 ΦdB !},rES@0lۣv0.3B9(*^Fxz+2/qXW5)=m\hYB.ҢhsɆ T.YU,RmD1%yZe3pk+r7k,% BS?h2Ud,hT闍>ނ)8,}&'`&t114^O8t*4\ pW /{J⑆  &._SZ[:Sf |FʍHc1-47Lu`ɾT!C7㻶4e*6/o~/bUb.`{V/FUׇ b"~  1yhrd;!u`}"V'2]\bo ǁɮodNw4\{QW/ِ ̾$Թ/r9 ahNog%La˴&-d^ԭ]3&F $ZxFsv߹uNQ.#,B%(Lk<'ĭFˆf*n@%K6=`tz2 )$JSxԎUdUUע5 0c HCAɤ%ED_|y*aOO* s? ~uX/пb|mھM¡,KG舥, ;מ]Xa0A2*7l>1ŋ@X{sd=QTam}l[_ɏŒb!  :x?o`o_?Ba?7wVV04,k*Y6IEA ;M{_zᝯt 7>0,0"u/ eߚǬQ3O*_ :\֞(py:;_6 7pN'A!7J-ڄ%jA:w01v8GTP1ZjKvR"sm9)n+gK0#l+/eiy6zeB:w(!HOMg ae!̎2s:N@)_P uYpq٣!pMx;_}Rx`*L+\N=#:;QGV̷%]Y^4:x340031QrutuextsyKsh]2[sTt , x340031QMNMIKehZKf8D~4T1( rutue(|,@+}>7eH/*(-Kf=ID/GokK``M,͑.)yFBP5yii@cdlR{_טOmwpB{x340031QK.+L/Je^`-?v?"~] P/Jg`v=?pQ~W k x31̼"eܬe&xq [VƲ[CU$%38lS:Hjڶlj2O*_HdPq޳j2Ҁȼ٤1mA -E"x340031QK.+L/Je^`-?v?"~] P/Jg}` ,go\" 6x31̼"O)2ٳ{ɟ[pO}/4x340031QMNMIKep}W˗T13ڨ;,'3/;>(177(>%'G/!~W.=jRz>!>x340031Qrutue z`]nynΡy x340031Q(N-L-fx6M9{wk+qIODxU;0 D{ p a GqohxY]M`y5e&8]-I(&ćܱddR" 륶/pN&s,~r~9J1R|7cE҄k q )8K ?2Y4xuMo0s*DU -m)G4g7CmOIi%NwO^|U>pkD\-ő4вqٔDK9Z7P.|ݔ馍&@XD_Gy.[ߘO2$,`cuu\XVY%"2ux;uO)WeOϨ 8g!x;Ƕi# hg>xzuY&IkOxĺu#X;vxUn6+9mMv ^JKͅ,$DoĀ;lĻ Sui̛ތ x*YN+A/e.bbn_Cw?ex 5= e ݠ_2PS_AJk^d ypkś}~[N#o7PIyՏ>(:̺^MM^{3`T3 ۳ `]QFۛT@+e4!ETFafz|DuO75sFߓi<=2ŤY+$%VN,\ᶺ؍k93nYsҙ#ySӬ+, 8kcaiYuWqϹ'$sUi3/b6Wgl}hڬ(_ +c"ŠX:^UsZЉC%naMCYM9NS3"glnD;&mq$҂rSee;9˻ڙs&\&+OWU1Gȃ.t5e]l%nPwf?q(5y1ݡ8,|KcӦO?YtYF3,ۍ]em/1zF˭j]r!Z6՘ۛIi]sˍKQ`n'ht0Wqm27éb;?S)fТq:X|5y`vm ٖr6+J4bS2s59-1vd,G;Axo5ryI-UW|\Z/U[C>6kr]] M15>q` [WG]U1؝{㈐ȠE+4Cs%uٔ|ȚyD&Ec3Ud1w[#['as0zϟa >ٮ`nk=0X jۙ}2E5 l#S4d9h+ sf=80,X{z#e?kXt85+l*7-G:ڴ`\m=|}w!v컼7hCLIr1ڨ }*/4 V&r^BӞQ.YMMW1\ 4,@Kٓ}Go7)20-{e..G9#QcBL [0 Kvc~QUb_F@\mqY%( xhW0j1e8o N" 4!2?f Ӱ񵶴UBKOȪ ,|ȅQ{PW39F 6 Kfcс1wGul&YFb]bQO5i^J#^ Œ  -[|wawpDPAAɔΪCŲV=Fb%Vb?}$,V& mH b8 y%sᮦc!eD7ZÁS  !nG:&\0̥ADNU'c)ѵ5k[>|-Nn (D=iE[_!8!Nhm/mY4h (\Z T.;~{ =8P¶C+7)@^e ¡WWSA0qL:l/a&ޚ¼q2t8Hh16**C*d+tG̑|q;̍_u5I_=j`zQ`ʶ5cS@0=]e lJƏ.@5@߃~6'- ͩDPޭ%@-VN#6tf,M5{C ½ki(QLQY7~xc3|@f*'>4V$]Q;w._& K&)_jǃ$h5xdB噥#~861& -4tΠ5[srF7O-3/roHc4 F|AmL W"žyţ؛#fl35px|7G1q~!$0SiCY"1T]w_o`Uxa!Q(Q5άFgH,B-nL~ ^ o^Kg0R l \zpCl3UP'+3Y3h՛!+,OG_a$s$ 3~CL"ިH2 ?Dصc- ^sH);y!nMѨ:|MQG0 QW(k s_Z2 Y5qf$?nE3C[TE^DӐ.3!X GDWg/R Y`C F e〣ϱ+>W7AjOi$.!d! q2"zS;hX;~4Ĝ_ZStݠk5C#Nj+1Ҫ̔;*`3YL vz,xJ{:cO}3v ??spwh;=kה3#$7'O???~,&Qno~{ZM.s[i A60"Ud?1C 1壻{{- zD ùrjфK.`N)˿@<ƥ%>`@,6v q|  A*XӮ2{생0FP\@HAGz_'dJhdKgj-R:q5x% _$$QxXMB6LMŐ`xT2duǵ(kN:l0ß:$Ht"J p/{' au)Ow2) 9B=Ga:/q[aHH }'BJI|zRQJ%݄:X4g:7kѥ8Jޙw]82 >Sh5Q*k{o"mYdu8c#~לȈ?VK/<|tQD<&8ˊoZ%`FLl3$ϫWLf&.+/.H1:q ]:GDzjl)4Z?l=7#Gͨ7Ko(rW`a hfo# Sx}@&)\Mx'DM^^ڪ4V F10v`4He)u v;I,^X90?ɦ|ȭ/Fqۊmѓ]!JWwulU"Q* 1GګѠ-sYT &Plmerm <<ەL UK/8cc;#S^l$pſ0o5 i05cǡϚU!),*![/gb(A%T'əM 7ELIao ;Cu#_ȤyTd ~ BROG.М|g-\`Y">uO&E?*%W{kau٪G2\U 8h59{0}Rm+"_B][5el4dChV_!3X+-VhF[MIB^dmK-WTtb8ge$|$1dsUL `T6ĐJw~%>"i@>2Yb}V_Yn+59 Jʶf2[ 01)^'OЫ/#%t4{;R4(s ~4Cm9^f:@ɇq22ItEo|v# iB] mђ'CDwBWRٚ?쩄Y)Q^si>|=;%zpB&5Ӗ) X!e}ʇMO-E]Hla_ } 127䮢/I 1U6s1$EHjr5&'ʉӵKv(`qGhyXQy-"K Eb {R9C9O\U=g+g,>U_cYO/W̼Y a-.]&$=I]I}'hcH^U-~v]6DVjc C/$.δ*c6KƋ\=ŪBʶ SdK'EN K5 Fx>iܓbт*CDl!]̷#, gq/^lizJ%ѶH~[TT97tZ2۠pMP>`^m:x`L4TGRJ^9bCr}anNCBdڣ3 ,/cicÐ~#y.'YadF0(}İi 9rPz>;q\^ 6ۨ:^W.B^RV$Ϭ%0E:w ][s J #[rD>ǁ?si\bNhzQ\۔U-Y~۰T";8'VI\()=˃RsF p {rnN><ٽ~ 6/o x[\1X4 kx;?D͏Yx#1x;ϝ،wBia a@ijHg+`g_,p"1zx;?i'0o)P| jx;?qif-˼i'0o)Pu@ Ax;?qwfi'0o)Pv ex;?qmf%i'0o)Pt iHx~{3ƺ|xTn@=WjOpbp%YR˪ 6ԗ7ؙyf"Ȝ@A˗'Mg2%E Sk6x2_Bdy"z/b=ߞ.7v D8ZE!I*YԻsUxTL( HDı"Kq8Pl 'gUSaM%eeBG ms ԀO;oIi5 r)_M[ڼuQ!9]U WJ޳w6uke U磨}˸|/f<8]4)FiփZiݒI{Uf#%/D] P][֏F%h0E7gxWͫlrb4CKશ% i<]9 ^f:~?V[O˷]gk}8OfTxsUIL/LRH́s3ss5|2R KF[!+igg2xmQ]o0}ŕ"mӤUT78- ӔInD@JUi@|ϏQzTh[C!F0E+$S~VyKU.̣ E;]N]ђ]zˑ~#n)@F401b ZO/C-z9O\i{ CQ- EJP#ضTژ;aO=u7,~^ኜ21Xz10fҟc~!A  P U]8Ωً%u~X OppKqBX4|cWI{d.#> ?.9AW+[ZG[x/Y5_6@k:x[6mw|v{Px[6m$͓ 'a2xuC3-"9y i *.!.A*)%)EYe@>wq qģn?F!FIxzuFIJĔ"M} 31QSAE583&R#lxuͫ%qxzuɫe7_fg=3-mxzu/#kpgdo͇ux}vG>E۳"mTAu=ML(K>$ Up]H;cݗ'""@P3;< TFfFF=46odHJs-x4У-͓ydkjn7e2 וaf(WvefWd:eڢreɓ)dI>k5K\$@.uj+ɍm>>LYR44{SZZTeJqLleI26'XO_izGߍKI=C[{cVFVѓ4[/eQSUuX m6ۣʋ$Y:-NߘeY|: Xڵ[4R,ۼfvx) Z,:evH &ʹ6[&I4ӢZ&-l(k۴oM-^e:ioekj[.*n]FRZ3Ko,0/NOχDŽQN>a5*-c!lTEޚr03x\EI38׋PvH2[;"|i`QZM91vخZ4l1ĒEgty8de:K$R](P@ эpq 0}*8"q@褷q _?i] OÝ{AM%@. Q|h"iUc\R'#:Dez-}r ĄQHJj̰itT(v6wnYVvJIZY$~Nn@ d\uXyq MΑh1 ִ`{iV:aΈo,q.܇|άF.EVVfК X{L j)@SgmQNڋf {,ZGIMoTDd:!,"z  [LɃMj+  V_G Ǡ1E>&:_T6`e4V>nYp@~ F/&chp_Ë˟O0KF ' 93{Zև@$!ma;t)ߜ]4u1y\9Q@_ue@0uQ05,>,$)$v 䶵G kUB*%WE"W: H}RUvT2nD˽'ڛ)wZ ##'$u)x"*.k2NbHW;?$4? 9(j҃䩠jr{$V9) u|7(r- iiM !MlZueBԣc:qKū=Zm9;z:|ӫ~/\}+T0/F!z{K5DI+r=U/ZZp7t%)Mʢ{ђVg?&2rb[) p}Lw9:L K4U9 "Q#m[KXI15e:f ^wotg, wM#G|kҎ4 wOi{|ͺ`dK֞ Mh:ѢVM<yׯ̪hܵȭe42Nݒt^L bch?/uҌ :3L,+n+OtoGms"r0(iY'LA4* Va4IBa`ei|d2w>H݀uH̼E2lürq'$_6* U*&p'[i<@x버d =RU{ٰ|[/ R!"^=:NQ ~_Zzx'2_ ?qz&Rm9I X+:>LҳGdX&(IK\protD9*#*Ӄ7zQRu٧gOzk(aͻYzEk7YzMQJe;Ql.rh+Qq|ݦė3pcxxyriۉR<#:|ҡl16c`1#  9E_O!0W;I Ά?E!JaEu9' e^j'ti֟"Ktt#t-;krEMͻ "?|ֵ`Yz^g\"Y.E:eA4n -tȏ‰A){gM.GS6 /tT <Ԭ⩹a}tlFAC:3aQ>9 7`H9 F~ j:O>VmܽxlԘ>4OoO>]_D_f(&F_G+QYD*(OH4g/akgtwm}sXaUG. d2faRL@qa4/$P9~M7\EL`>91&!(/NcͪGTq gz{2CZr)=lG_`K崦.Qqc5 .>{?ń6CڪU朞ք-2S A7A]9G?|=LQ>,R 鰚gE䫠9p\ 'Gy{dtԦ|{U;߸UĻ{j$zD뀬1s?>QsS|)EBnj Rů?"k0]"(Ȭ9,,2s6.bN0soH(RM#^A@aF25{jBiQKq:uԞgwxC{;w0Aw𩬂mgHTKPv$&0|('5ɝ]bq:}pzj / ݻӃcsqNꛟNW}sp~d3g9XdPl̈:QW€`v\NdaA02@$m7l#BUɘ57x9,LUKI] a5<1Kx[CsaS- Vv.(Yru$&;RbAZJ'_b e[//ۂDVv"t>ہAwb}Eq7k!2u~aA7R╆v.mxW8om,K{fw/BVpȞB"rb@>7:]@={+.~/Rn0ӅuR[gxa/*ėxi ~4H'FŻ+xӎST,lE7%hI}z<20PPFBAOW|5u.*#h#{H!WnHҝ IU3*BwbXMRCh8C$A1d`PdsRkCj 2_6%'Ef!+:qEgAp&ZRh(⥟psW}Ij>yw6 ŒVW!%?Ёg\1j1$AY"8_+U(vc$Z9cEBNqj^'d30 eh.WȥҰ*Q`!ErՐ8>/zX?#rO|gO"[ 8W|V_](Vqt3 m׫e4{;`I~kei< SJ^miq<$;]ZfF7Wo|]u:Xt,hiLJ¯;!btR4`%Xs{>$%>S'l>^[~- =ѯ|p3uPs뾧3S:8ij5U&J&0%UeZ2Qv'ʅ qD%:aI«B%}&ut |V+΀D~mHn_X̯=G *ooN+G$LPU5]QMӘgljDIɯW8'X-.:$%/qș{$;|R% I`&ote\ y\DsA}C3~'J90m7uStDOQ,oMΒ\d\}~,'j6A,0q`&Kd&4;PdyIackm.=;&\oB%Cr E/hEy =g,{#;EU(6btZatT.rY4vLnu}#~N|Q̈G[a"B|la j -˽#09G%W\X#A&cB² -5DI/|WDk0oR,y60Uim[L`6{$jzV;Ko.+Ng.#q z揮y:#4KfUgد~ \ܟFs`݅(gTkZTbTkalYy‰8#0H0DžDc] ^\c?t}xgxv<6-\o0;jYL)+d)YZג өp:A:KNzYǏI81mu? qD=s'Hei߁w+9ΜVYXGXTkZ\y\ARBbhi?PK=.RHj5:靘o~2+E2h~Ӿܫνby //9͛k$WQZnwX?Ow>IzӇVXB? IZR؅,I7i-q0 m!$?ML.=沧u#=as֜EDvʚImx/H|OB.)k 2bO TR1\v fwN !FyTQX)ǚ@w|,A΍J&pN `:6AwPho?VF9=`_ k.׶XWjH`MFˤ+PQ'd7(WxI{;ɚڱdXqM ԩ4w sՏ.:,ffD4$q!+DBߒ~C8.f˸.EA`& $) \q(fM:*8v16wD*P=dh$j)yXiQfiA^ni]lRL/RzZ-=3jӜ槎jg[<['nɠuѷ&:U$e.n YmhoǓQ<}OO^-bāؽRCt5_MXۻ=Z]0_BS=h^Llt}ڑC_x@'7ͿX4Ui-ȹ%~Wy +Irf O <$" g֪y¨8&j}f7.C0ߙËw==}nޟ} E4~?=>N[`e#[jAZuln.KE3}+3E-+-9ΩjHE#܍ !ܙ-JXJP'5\->l>q{&t޳^  I)gD)jjeMQr6Ke؆*}%+$n7_Q:ce 뙀<*'iRvqkQR~;oݟSsqڅ))s&(T\S6='zBtN'gnf{̓ j/ܤ|EUEl G*_/xIotqٓ'Tߨz{rۋ}ً'߾|3[? /^: x;x *h|O?~?:;Hzy0 #{(#[hG='=5~f'{xvS/ݧm{OcO2"\:f%}#F=uq'ֿ?HfmgONP[s|d7;z[A*dj9KqOogRsmV4pĠƭ2SMg$>"Q3׆+X%0Mr .x[K W]uVF Mx+eӷI`.h 350ŕuF]0@R!5: )h1ADn|Lkb]?N Ntxs0R3r;m.Jw`iA&2.#Y =l>TBk2Y87Hi |ƝhWV-j V$O$"VZuvkȌHuɨNNna͆m|U@Čx>\|7m4!Z{7@9K[vai2 m-$Eqy,,%N !bzz1j{OLK.dck''z3bD3ikbrUQW3GHe(>35-<戞y{~r߰e*3%bMF3eNĤ=ND=y6sWGj%Fz@hdQ#NM4t fIXu0Zה0h$ք'FWu W=:x seS jp!ߐ9{ (@&C6XDbm>qM-*J6ɻ,p3WO)..l9FgHUԡ7=j d":S>\1̀T <` 3#܀`,6$!dta?;jB؞dUWe*"K7_%gB"K$"bi-t.id4;,G X/i$#,E ;ks8sqNb#Xx0$?M :ʪU>.I/7CR/kbywp](Rg؜SU=rwd}v B#V2ۮ5CrYh:n9[wk(`āӇДV\(ܡ5('/X z􌷲Grvm|]߸Nң9ƭeїOq(m{ Z/=8pҥdrg;y8m~Žy]lV嬀vdqi "TR.-/(2%NQԈ}СI.\˩Cj[54Zd4G-j$D9|"|MMi_:_(nF˩اq|Li]t|}‚>jЉ(S/H|VѴC2zS6b}O(k&]Ń.F3L kfM]ĥ456!W.j#-j2}RDul"j3z~Yw$dsD펑ࠒqi8lzl]ǩn%DiLr$:-y-q.oK3!ϣ Cq!ifLB+;V7huF _˚3G3}"&F2kɊ-5(<@ݴB3'U}l՚ds%`ѻ 1Q@ّ!RScL'|PstL삔%U}ۂncWD{9nilFmpx$;僝7(cKږ^G$ MT%_.# ǬØ#B9D~E{^Dϟ>V$$f5gtىSowi;O]_u]r6to[ 1A;?̞c[-b< #tLLsNRpCg'ӧe3&oWvK Zg'<7Mg ={r?zBn/B .oiΤŞ=VI}V@C'_sxO~$83uQpE[9@q+ף0AsC]g%tHM}*1q4)$yHr_᤹ɆGEJ9OYr &h  zpS?$~ˎƉk?h\ƕ83O/SjhJϋ 'c-1#`_{V>5ة~%6Z[Ey!>8K2Ei(u-WͽE!<[\(N}}gٳõ⣎'Mlt塭q r`Yt .05f gOR3C SZ} 4TJN)5pGGmW j_E .bh!ڐ%W,9ߜe,(IC|xRQ,al ?ݓْǥ(*; l#{h M$ |ί|۬E!YޭB7v1HVwgu/h:t X;W1>Hnc|^ؗ"'̥aiޡX1nX MUlQN=mY0 *+y,!59f'@Jn 4G6{\Ah`)ZL#SɤF-v8%g!)7#Ďo ˀz.ź̥Ϥ mjd"bqb; 'ژ;;fw|*P@{$H7jQÈ=iybb[X|vT-ɐDA*6ީs, J 7þHrfBJtk" lirÕMBvJ:(6.Bo^Wd* ` \Q˺nP9Qb8Ԏ7#X^iUFM]!V큞Dz~CY&MhfW;Ctf e*Йb|.Ļ)}ʀDtz-e*]PWC:i{qs ƥ՜oM/|)wӳ<78#vdKHJ0 JO)iJ qWxCrQ͓l*$gDErȓ=kY!u~ȬeP$d/21 iZv ] *Mx:o/OCrit'&}y]HHNX }wdRH?$1߭i8|3 78߹ v^Ҕc/(*mIVڄK P /ijW9miA}taҫ'A))S4wP 5 Ѵ\FS?`6JoY;ϐܐG'6HhKZKen tfN(#FJ^B{ܝ8'IܟGi8j:2c'Z?Q (dI-91 Kh,)ňv_DFVsU"d~A0G̻洑 ,MDyݓ} F%#aA?:o\?>ѵCܖ}nP`Xp ;$lZJসd`s<|(_Ja-B(쨾%4jaX z:0叻e}\{9Y?~6w_ គ!O"\ O+W׫C|| _PXt՟X-!HAbGo)L,V]+x] dFG{k#mNn|FA9KfX4uAɠ/gf+iU{"#gMyy`fxW<7Ф-ྥͻw߽v9zñ0<~wr<4|1o^h.7oNO? ;==9wЊUt2zx/͓Ez@IˠA=gχAO]\ߚ~΍…XT|''t~k%lϜǟ \0KkC@]7=٪=/L/͜T[M6VK*DA(lN||MT i}(!zqLvx>;h3d+ge[卶p7{{B˺F ȀefIU"sߘFaҀEXjuZ$嫯Е=V^O67ha!{0Y!4h0gfGP|I(p9: } L8eq=hCB<]+AA_ҕSL߫͊Gȹ]馃X*1y-M'v>Es֢ӵ;ui jiIl$>ё9KA`#vV$yb1 [-7QJX{W$y GY'X3r7;Xnl9ӷuXaf޽Txt29[O_+27ʈ""En׺o;tTr8Vph[O7ׂyv5} ËozsE( ) [~Q*fuCdGJrS&\q.}JcW~I&zoyQ+s;nn[O|m{;Di>͒ wS#‘6C7, Ĩ-j`0\ly/g`ac1{18厳o2MМ6 ^T=$ض p;0Czì h~pA-C$}ɭym8Um K q'$:*Y,I Mm>ZA 7^ɜbxmqIӉm6Ƙ)7\&;mᕛ!J[jd4;E5I*9FSWsRFdY77EkrPC;f`o?GFya9s>d^ a~˰mOCrnbRmXˤۤq-/_RPTf`i˯489[9_ bWEUEc3HeJۥ9J54*ͷ12~>BfȭyxN)>wVS@BvtJ«۵oL]ώz| *--:j:˟WyQ_sc1? ߰.'m&?;]b~G ('fט.}o@s:餼sPkGP@8ѯm-)68i{U;4LĐrpr,;b b[LW9 ;~ }keve0XJ#ŕtI?|[Q9V?-hLB}Grf݋P}ӺٔF_CS; sBl"-ճ$- Bs o|䲬l(/Ff~̫ȩ-Fﰛ5ҮZ*P_$INT]}/Ev%WWn]1+||mDOѸ62lk^s{R؉= ±aqh1PHH}%*%c,yU z}8? y](N/ˁl`{%D"t;d=q~^J\ĽkۣelR٩̕f\GY`Jꑫ?kk1 QLR.У{>4hC]˧$! Gt0~_W}xFiMSH9`=cn 7Moж(831_mĹ*Qn6D;ycv{A*jQIk+]>\pg,#6_Q;j1oiH6μ蝝j=7("uFQI+G.r#Bl{GU5lˤaq˗/>pFȋ}=}"k(fx=AJ@Da7\p5ffixu#t:?wc^bț bm U}bS~?M>|˛,\s (Z{TH3Z5RKyR1Cd^B-\JpbŻpFţ1 CfFsjj2$AO0^dwӑ6K|`ŒV2~\/cx%KPű%A i3.ɭ}^JnE`B\]tuϨ&.=hTx FNsNg6*53Wh: kV>M[:'4uvRqX$FMw*m8&*Ib!Wtͦ?zWح,v9üwH<&N%Lx ި-hc-H?PVT+Υ|_4~[Y7%rnC`S<)Ýe`5s4Ghޭ-BYm_?ޫoWm{?;rro1R.~G Ia̗~oxEOK@&-*ĀU:< v2A)B.D8/sz."*]7w W']L?];Oqy|86[[;CGh~DbT^?I:蔘_'_z<_.F&N%IE,L~̍5sح1e8f$:TR7#J֧H h)"Kh= X,Q`I7+GJEGeBbC*!iIIvC"Q^?*+p c9*3 6y7rrL$X:8둹}/E QnX'?b*ưgϕ<[SdG>c=+򜫭_~oSug/k'ÛvUuâx;R 7f&*X\Y\[PZĥ0yB: MҊsr oVmڬhDN x 1 buOtP5\p>c5K(ޡ%qpd54u/ۛQj3=tႧ3>jI+ӈ3dԍs>>,qC"/fM$lna.V;UhCy2x#DxVo0~E#Ht)F˲)iXd9`UvF& }w\i'9ؑ'c4eiέ+p&{J9Ͼ Oh?~hY)oW?'z9ݺoix;|<'hGgz9#@8BG*>xq*<_9zWGDݺI2Xmd<W]*{ FFP`VBd ANor1kk#+Ke4p"2ϧBfy el;А)V #O<&H828`,y-:G(*;f[sξ/I.s8Cab۳! .q1ʱGɮ%T h˵Ă4.<.f8S;`IZ#Rd϶Z@C@ PX>3S{'x'O;w5mP7^M;'UpDt @(/LGڨmE3k~nVvԅfJEυ@|GS34[!!3TR9~R)Oǜe8  cD:aՠD:&Z|Z$jĄf@C`s^sb6V -6kIk*T?]G5o[w_d =ܯI@(lZ23ޯov>l3iOCkMM|2֋t ؇<:?ڊ?}E+įBp9c:tQFo5)g`,P-f mV䘍:(*TyxiWBVF J3 S!ӜzPM占5 (M娈qQ+5T'KL_f] [yG kpVD` ٰ@F)5tl㓳'gߜ|Kˣ$=%ĴĊD^  kwg?m.ט#P<*sE6t3A2Cv>uBcoziVZ'ueet /<]J*jG[yX` V!4 nK5:Dy= 2 LrZfY$ lH-]GyC3BRQyj4m( |.$M>O [ h@ ТnU_hl8[/y n3ئe3ݯ8|݄~"3u e筧 m~Bí[h +x4̥P-pӐCj(t WN 5d@cۜf[o"4h5Ԕ] sD`45qV2)(Lt+`r7⶞3dNbaaNkOIwR2I vg1Mg4sQ`^q0l%E{>]?5ߛ,.G^vF !nR޼Q֝ Mn/ x4dtt/qNg ~ ^L{3t,>]h4X\.HR#~NzQ2t!A 'ėL>u>-δh~h酜?_ =p]9޻a nEX0񣱁;O",vp>+Bx´4 t>կkiG?h꣩To\>+4>~-]sfvذ_CX؆5$lw߀ol1}w >cy5]fCvY=|k`m![GA9Z!њ^шa\̂fE6 mχ&D 㣒-j(4X_" .yoRza0'"ڎ 3č6D`"RX|T.O۳ H{ c>Sp2B'| U8xzc8KRjOl#Q"Wj[J%ʯCG@ϓ3ӼBJ+mJ-&Si٘@mcVGk3B۵i* Uin(5RA΄@ArtWoߞ{Af I"O<%ZW@UP0w<5|4RPR!N"oˆySʼn9;_xIkkeY^_7lN'ގc/҂m0k7 2)Ja/p-6W?p8lx2(-.PB)ו#5U*Tpup]s2罼MW4I6N^M,ڊC 3!ͬT; 6ru#L?T[夒 p;ktO-} T%B\RAךv SQַ;SΗnRGQj DvM6ap3lWpP(+[X Gq ]b6ii uwiraW7*ey,*/$ 7fv-| K3iO+D.M /l4m}ރŷalxf愘9YHa29 8^ٴ.QWhau .dbE;:lnXtQJ7r^$_L7u11n\TV)͊ -y_J^;9c%^rne""uO`w+O~B?f}lnWg`㰿[i)r˲<@Y\̡;B O͡<>Z (<C|EdGn *a3R¥)2Fyصi!S)]3&F1u:K uN!]ρ9~bo/i)v3Fs#߫)h.8]ߤ~T m{̻(}jƛcjI&n#:B\fVBԾe{p*g(MZR0|KY/}EdvMP8t@ôP(te}576E~|ǛdoTa7V.;Kv͇[IXK]@-Ҋ)dʻ67Uwx`4x^ bĴ?@Ejc%=/s[T:U!,l}t?eD~I^o^Q/O_+o 'bPo+ʟ7 r!`@,:?o2nog;!ve[`LrDQ$kԆ+[63gu$0aϋShO2 p ~Or"q+GY;j*Xqx;Uq|=fNue&5mW (x[~|C#BsZ^N x[5=ft7Dzy3M#<9d"V&}xS Rsrl5' NjI^cQυ@ ʌ<7l((Y_bLUVtu s5TRH V@ eE'R-I-.QP**TUN\ʺVq%ZvWkO6QM{3f}uLN]xۚ:bC#Bs>lf|^mV`ΓD3J Rsra1<~>>J 5$&/PJkrBa b̚@9 I)NGP xg7G|'ױm7ɫB'k%f%%g%甦NӖAPKrd):%@u&wk[nu8'43n‚Slqx;6|Z܊)=x;6|=f\܊L\;'x;?l=f{p<̭ z%xtV]bC?CxxV]bC=xMNMI򅲹SWVx ur MIUHS)RVK) d*'eĢĜ||Tq PL!D5"$138(ZTWa!HgdxKM71@ xRTRPRb b+ b{ VbuuJV A~\J@ NH@ESRRRADBpPJ! K x\r6־SpR唜DKۖl--OMt7"D6轥j|a\&z=5Vɯt:κRcg# #=w?ښ4n;ɼšOUYG]'0}]=y56Q]/')y̱5tӺĭi;zv{^?V^vvyj2+nU8YjiƩ ld TyKgE:it\/pIq=ΟA^+wjd}mUyB9|Z#O4F|/d_}I4õת g_]Oo2y<}F^W.'P&-.>-]G;IfTuEoUOyԌKSseeGJN%ƚR' ^;=kbNwZ<ԓi/ CcܺZb#V'sd[/)}V Q(*UnuUE|:V@^WJ :΢HC`DؿhS5JO[*هR!b#KG6([So[Td%} =UӑҏiM XЅMχ ޷Sff79Z}gL[CS^/5(Sb08 S05)LLyc!ddj~y L"3o1谍> @MM J 4ڇxM}}٨bԉQǰ|Fq-p䆩yͲ)AN+;R F\dhWcn(:s@c8y[9}GǢ"xED I䅢VqCm%۲sD1#P<{A(RHBEG/靤4=r!A48Su<4@jigT빕u2n'rxGo^kL7l F|Êk0 X%^i`wcU>.4S]P>̺n|H[=9+ *b- ԐzcMbU@,~ hG, T>l\0^TJF>@T ,%%UBFީwTͮ?ʎ8WܛiV܊FCmBmdD;j2 6#.E1!R.ňf}V7bLܬ[%(R+$ C}B@Pj+TcyuۗU}5L}?X,#7!&%'N QweJ(y{DM;lU˶lh t/ yދIh}j3`} ,:B_ΐGU -]Js3u NNN/o od\ 8}-@5a" &9igIo@,%/erx/DlL=l۲tH5H,d"r"bD\h =ʸ;qv$ 1Zx ZCybۨM17xv؄l ֭WsSבjy`6f`6fBe)67tZR*t7UVUx-U7v4Aفe3cgHq N;8;K|&.~ySYSL4R(tk >&GsvݔW4^3T @O 9X)sXj 5[# ,;J2Gm zWzWzWq9,Ǜ; gkD^6xWZYPh,(,WW֦mCۂrlSB?mDΘBלgW6=&m&m&m! u +[Vr5 V0V= 1j+#su !Bi0i¦kCA.}D̙h:@]莆ﴐzf:Xo.9p<|2 O8'F%xPC|N9.֮r|[RQAN8#So)t+I v‘e G4q4y4D G_bh gz|TJ PK>jɓ^!b]BpLY: *i4D#SߝݡIb-b]vGm&lC84yO#F8L[}1De(Є(X,Fqq& Nf:e^ٓȚDoH1Ho$ ^ɼT3lU\SX=8)G?g՜XvX#Asz+{c&5CmLEUN 61G(4U(ڑwZnB0ԴF,$L2Pw=y ݋  "HxAw6*va@E rNR)bԲXh7>؍v`7v֐xl8E+D[Ky^{էKImFb(%7<98P)l6   JY5ԃp{M\]@8~LL" "od%u&AFTͭ,l0 +ß-KA&)!KP*š%R@S++ MH86rX/L8mɂ;JG llC/%?__|j.u^(|,wp0Ƥwak||t\ުRsc'uը64<<=A4sز5?X5$g  %Vn,`_pKb wMWP=1{k񁅘Eh>X?~Yf_fjۣ;e&, ~_ƒ7x}xj1ܳ6^+*f1v1r,<]kÖ!fK$b_ϧM!d%N>ODbQ\K.hL?3N9A *ˆH0ƜI:W)uWD`e+$;;jj\ٷy>gwa[+ċD EFWhsPեw p'~~Lii^~gieKrҸ}+ /g؃c=$>O;{纗RIoql/WAZ/ㄈF*!lPg+$V{lmâYUOJ]Nr*m:o\[H\]67Tޓ~~+~a;}og;_}w8≘XhW_ޱZ7z///+lfa./oL˯g_.nϱӋwY7 β?t|Ff]M-S}_qaz% ?skѹ_wtw5?~HP+Y'>@ xYp5y^S(%eBؼhCKcDHh§ @Q><ψzpPHO1yD6Geq~s?x7m c|V=z @`GNmk;DGn,mS<Ԙ>UA(H$߀힜_r DgH%hr-*37*C.xq{=A %cSΑ:/u-/+Sk"Ol]Ue9\QBڃ7[ho9- O$/)QbeiDߏ,.oN@"QE$~he)0Hm"af|a =: ìZ}:",kK䦏hJڽlzhrh0+Mr)'H\@\D%H)#R. RNr)R.E ڄKr R. zR.;j>EnAnܾ6$}S}*r(O>{>rW"wD*](w]rWU rWAJRT*]ET* rWՂs͓Ui&sl'!Oz)KwN o}LTOϥؖR.|LC.~OQpܓAœőo?o&/HX/KoӭV))O Q^ ?}(QE{=_?;;r(>rjL4ƶo?9?J'`Ξw>{Q"J`=Pp4:Oo>|Wا|Ze(P0zuF9ИyS5培0M^C%خ,afz#Ԑ+Q~1&]%Xwmӵ¦vdJ ~D(z?ίUxrt .N=Ĵ 7%3 Dd٪hd$$9)`xG[ i\\!A.!AxMNMI򅲹tss3KJr ?x}_KQS<\FIG.bB@IֽY;8{f3DH2AZjfE`E0D=,BR {ϙ}g0ZRcNfY52@ 3*@թG$ 9y҃n4SHif4lQJeM|su1o,L8=*IÚ1|CФ⢎z޹o0#Ʋi`\2EdYXb|<$\Ah.xf{& Ԓ~6dL&;"B.vl|bp\ _] 8 l Lputﬗqjuj~?oj\X7.%.~pJ^!f삓 6Lޙl_NV{-Pl9IQƕ^q3,հ ?tթ $/H3GKg:aqbx˾} fFuR%ugEᙊd:8Z]Ofj a 9O <ĕEBoh􁛲Sjg? EnihΪLOhz"ȷY{7Pj^IŰ=}־l,pIZZ's\ӗ٭a hnj2=[A/-McJ= NphU{L զQG! \@򔬒gg"L]aSq[EDgWYf JaX0@A_{koy=M͚ ˻vKMUk{$U (L <#\UGdp) u,Oy74T!\Gļp wS)|M|mw I$#m~|-*1$GSh^@-kH`D6GKh5 GLf9o}S- z9wXPȗ;ʤYA]f?ymkd$g9./KfKJˊh%a*-z3y^viI3Gkĵ-0ݓѧQ'Sz\.ka%ƯnFw( $&SFFڤ̍.gABcQ6 \#k66;w6KV `.;Vْ_䅹䕭ɰ0Ď~F-'&J0eM4,Ӆּj؀{ vyYB-RyKsG - DzڑԻGpUe<+X:m!IRkیt[@bmQޟ'OwOh7UYniacxEn5@'M-N X2Ra}C z9 iO% KYu$aiHCSfI)/ ,6K4+ZŢٹBfՍ,>F\M'eN=В5I.gޑyNz1$nWfNAuN֡.`Z2M$Z-M&Xn/o]{O%$(񋫛o_'L޽k͝-w9#NX--Bʑ{ C@M#ݚNp'C!H28ŋkv8:fC#:A[hx -M*W7,%ܳ"MQ{bz̞$} [q 6mVJC;x$fDo`eq0ac,+@sueybߦLDF(h s[Yb'j,G $GG,3) ˒VhkjYZ8i41b+c8{dm"%vwq':<2:n`?: '[?5}n8"ь!AbHǬ[thLV󱦬< %Ȑrړt@sUK)i\MQ]&^VGf<{=ِv܉iD"+P,!dF/6 Tbz]`\yhmaLf U^&ѝDO>; ѢM~||'8]!BѤ(bkj |4 x` Axf{\~_a;㠗V x7beH͖!skn6$?В'9v-iiK0/&ij:o毯-KeL,Ӻ; 9aR4Xx}n#VhR !^['t k1_@¦91 41Q (aj v-M!~2ED:F!˜^mM>PtͯH)ew*rU6heRf=8q;̰-VVe%I>s> {N>EodK24-%+\xZ,u@c C2MI* >:Qw5``~HuV߬g~UVh)Ɵ&-}CY<9W(?p^!T1$pdz TaE'=L-8;y7Qpr<p%_o_ͰY2ْ}9""\>sPF=&;ĭxrkkm^ʉfwI?KXFڬb9\,ch@|,4G[ٱBH.?&1)G,/3.7[XX*trEWЫ7rÂ:%.@lӐ94]ڗ̌>0a d=J*`݅ǻш|LVcZ!=Yq9Up< @lOV''n)cS?dRMDqlGPlāQPC$8`,Ĕ J^wki}녆4)SK[լ WVmj[3 ^!}cܴ qu,m|o 2{\Y=^7ߝ죶h/4Pe2LwD & KV@∗y^voW-'[%ڃTB5N' a7(v_OЇmbs<>X'6QtF1› ZP'_Q 7r,_uuaWF,;-8,8Q[k 1+6yDpr4o~@!ӶhwL9 3i*8ᛯF,5bXu FXr(v0{ #o-or@7⅕M|NMӁ]BHT 6{G$NtۈIʎt$4 F&u|DBFpzJRf-ЪXYQh ׾@ ;0 lu 1䭞vCu4yy%^1Buc𔒉Az[-v(F3!#jUܙ,7ܶ5]7LJKh~Na 𼉑Z (Etrb3dk9{;v?XiC3zy}u:'51]!{3;HWCAD7 BꛭHghhN)oOtK&p/#,c\c%^T%$ 2p54[ilXAz8|yWkV^p̈́$8Բ,4}-v|]W;pt%wba]R@7BsbU$l5.[b>QG\LzkzosI2qV= %fُ}<} 25UY[tn(A{8=}*(^e(}555Y#fcH5+dW'bc4?k/gv`o ʵwcVa 9pj,硚Twvi*1ȿt<5O52’-?a\V.?-I8Rw ݗRp1KN?~qQc͌ә܈/5R'o3kѱֆ(> ?U#y4ݢЄx\F!u!"'H>.u]CV{ 1g|R?(Sp`K4tsMj#b}5ybEӟ‹Jzpk?֖{:؅RUF[u" ZK[jCBDj;K}iNYdl /_`H ѝhl$C-2J%| P@gCrW=͊C齽7b dY-Ѹ0|.5o,ֱqLsf/q6NY},a@̹ ԋOK C,:FSG{ʣa;^ ! GyVYt"P~)p"ktz: #: a^G]+ u2_^|\JKR_%Vd4i0l8b4NekdePJ~؈-F{ jV{=v Y!4BVK"$)Ap9\[r&p%3(4ކ+\X&lU4c;1i~D%8~F-yL=};p.p|*8D?A(hcc'Ғ(kad7tC^&([|e|f~;KĒ$hԜ:Nr:`:>J {I79u~L vsŜΒf =3z!7D6ҤkRQO:e&Ϧ[:}:8lG4Z)IR3"d$I[ ͗,uSԹNL)q2o_0ħx n QzWkB jt*:3d9OY]SjN0Fϥϒ] NY~bo4@$Rya&?\%:ePe63Ѩr$geM݀klN~@uBЩyQkr vmb70n^*?Bk-0Tȋ$*^DI|9j+4>: ZҲ L*J Ml0FYR'[@vg>ȵYCDZ*NIlYrWJ9tE9z+%4(7'`>=QZOBfG{ 5˖YlRa+Oc0U w` Z|EZAB/*BҲ[' s ɱfb\۫Z7$*0$!I11p XltC%P"4g((ۇݗ& 瓑yӃ!bI=1_-뤃<< f DrZOR *XCx~uSƽT&*gyC-dMQ`9OH 적 6|.:/lt"ӳkWSt Ux׻? LVSĕ_#bwʏ:l46D!}ϱtnQ\k^8:?@'84$G7z}(N=Itv( .*I8H3!X"87btKG %L iU#T[Qoʂ=mndK2f , I/47m5T|̭7-;"yٸkxSEB}~9S>QF>wJ@zu9tdK*Z6Z,4˗_ZJī&Zl#;B&K U 3J) oiP| 3Um$(Y/~zDuu@y͛ZTk_"`ԃ`q.U{% Wi| u[ >iakAmQX2.0d.e'kַ0ZJ 9-XF4مY:%˫ (|p[\]X#ނճD%0>B*>I:#@^ۧkiP~!q^<,!S}-r{a`Li0g2IsNM <-+Xb{VVK7HC,;1O^zY:BEic\g[K2I=g&;g!N",dH%o*=Pb8搑&Go-$o>NtF"*N )\Y=h҇iJPXw`20Ny#|2=*:xלFv(JTm$f4R|Xc-K%=EuYb 2s?j@ZLH[gJm b  "އfx!Bb# P0t}(7R F겷ͬ59ˏ~) C/yooR{3mySe|T.&BH(Lk se%o|_#IY"Zrq%C*Gd#~A8+}q?o8I&ׯԲb(#JIgYPPI( I0l׹Md=s>0)dQG&+9 "%P W7a*> WHq|^]fA)Bo㫢H1D7؈,jRsQԤ1+pںET 898 Ck.6NB:{ɟ1@OˊL-gE8\9`]C^gK(CO0)b#p=Q ϭjp帣ɻ^c;`HJnk0~s^-P鑱7.췇}/Nؼ(>yo?KaAl@8ZlnRF!ۧZ.r9y(aO}\Vo._kT]G؂rg;ǻ~>!Jl@C ._?mg)`8c뱷YNaظs(%Ԯ"M&$2ΏV~`&QHx}b\ʌcv 9ړY lޘdϥ؟+Fg - Ŝ|V1eZ#x]ha5YAĜ ʮa[d3t{4C89W27˒ՒàR5$5ˍNؔ(2E ,i m9 (wZ~&0]qw%;x 7 ^:H9(OC_܎P34:qxG3a|8-\TsRaˮaY˓2RŅ[p65MjV:SbčQ@4} U#44&@FXLp8_=Md8O#dy<~ܼy4~xWnun5WuŨ\#_5q|LI~ Ed>u٩RCRh Z֛E!iטn"68?VocQPpEdK̵ZPm/C.l[} TJpdT٫)Z훍Rc`#a0"np$';.UdN 876ca:Y7[o\3i.fc&{eBDŽdRbqE,ګS~/rj!b#f[4wpN`$t 8rIǏCƐfm"Kk,94UnFL’E Tl/Yg| Tz +r ڈcP8/%sXz9Ԓe@"m|?~vXQ G!om#b/Fi xP>LK,[s $?'H7>?mPkvEy =1ٺ K+B}͘3\DjvY2ԏ6eJڬ 3Rq@cѹ %^#2[~oKXsJܰ$ rτBN{.J$eJO<`&YMPQ7oY8F^C7c8[tq%K@lC$:Q"ˆ`@./O yH`;[HW?yA<.7HRT-̰Gni|^㫦!Yq Φ1q{r[;Vs;nP4myyOEG,5xaO;GTcWCڄ:B}> NԯRG944Mxêy6Ɲm#Bѕ;l|*+cՍdA[S)#!o}=SMd0hPYd ]FwhÌwl,=kCJ8$- bd:wqe~EOL⾺4q[\ߜbt%v!x3w%@~\QV颼DtxV4wjvRT:ekwĄT:I,+'7"V~$V OSN`8R CRCI꫸a3;<~w|~* yyߓ͜=3쌟y1O@IxyԩWT mKJRx&$Eܶ\y d"/t= ڲيw)Ƃs |qiԮ|MB[I ȬRpoHg}}hس~ <|7 *Dkէ@>uMh,,yFzQ|h,%c׉y8`I(cW<ͧBقzD-jr0x+@?!5_wa)K&%xrI[ [[wb-.| GͮriIȚ7.Uͥ?( D 1fz !nqaM=uk'U OH1i&¼GAӺX@PЧA {v#}ӧN`Qhq$}- иu ϩR0.^A"> "w3;")y^PGF$]#hn' %3i&tLq5Ua_Ô΢+}H ""H?.4%ea_-+s)m ] 2ѝ$#`Qvk3FMc _/?Uxœ%҃ }ژZ6u8KNBtkӓK[Dqi(AovΕL罢H1ֆecI^-JM~! d0$YIiM~)˭8[h,:~3%yU†~"IV[K"yij^dOAw e=1YVHi0[6kַr ob) OthH/#tOF@w%'k}~]SűC\E悁Njt.@Vh14Ѧ_<ҸP׆@Z 8u룪?~Et?BāGލV`"gi9{$] ;= |q8m{x taWF v<ݔox#)Bz+i$2}#UC3`ge 7ړ?ft>]p|3 ?zhJзn/ҔJ'asHZԌŭ"hJ~twip|Vq-q-#ʔRÆk1J tFKĉы>닯|ϱ$*&vxpie ^C&%m*Bqn-x[t% ;7Kt-4yFx[ti% 7Kt-GBxZks7>fREEJ#u-6+zHǻ0ID$= %Jڪ8Hht>;].rkͧaJGN6 UcU&rVY^fit|5! $2iki~'X!(186 Ho\HV*γJe+Y ؊Lޠ~K@i IleIX 5DAa<"l{0SWg}AZVY`ZWy Ь2i`E:1:ܝrduX:ǻ{rӮuٓN['XRlJg1a(ߋ 깓G$y[;Ĺw X:^U۪' tbr3=U7˯\l8,NMaJCl@:Cs409 E#6O2{$:0]U ih2g\0]at+{D\sLThRPaeqJhy  oZWdy7ptH8' @EX`_3faÄCU0JSFp;&up:a ]%SuVJcA,1H)ZRGC1 .XEiU8SqJ|6:1 qַ&a|Gx*9^I ?(8:ks6Tk^`S{{B7nR:saHGV`#sX,C n2c,5L~gB_rr*?}ؕBK2uogPV~ F"QH}«AoxRM i׀ PHhѣS==X %9:Ϙ®/Xԅ+9";lI n!2U`M`Wd.eM ۍE@{"PVe$OZn%h(cuIV!a!"٪ZKTKl iKUHS̘zPMsB%\t€2M=-| @/eJ ZYÑKwMajH:C7Mrȱ>0Sk>% Q w/AT딼99)bՌ>GX@0S!S9 7w^Y Nq!+I;#τ8ENd#N5TSe'{On@-c<꒒Tut RqYQHkZY c=r\Յ`6%߁'gUĐ)p}2%]#0HXX?!%J&E^WjەKflh20)dm9l\#YbE8 i!\uN ei*Ga[w`* zR7,iL H",ɣ.l<)G-,9)!Miۯi0rdYڰpb:XK'B 9ZQq췯hzG-&|~~zle'ǿa_Em8e#>kjep|Dv(!M| y>1PYHMP5]"ddXꏉ3,z6 bT󹖥]|W!YkIR2E=ɖ$D) 7|SyڍhvIahS#&O YÑkwN&e Qeg_\__՚9Pn,=>VyY 9x,Q0QcZd:瓛YaI4LCEN>:;uR%k"=炞8 $FHYղ:Zvs{8 1=- Ft%RTnSIb_pfpFte U!( }*d ?FSQEN3~l7{ Zl~~ԈLk\cߓH,CJK5}Ru1vRo58qd&k|2gx>9 ٺ@s9NT3c?d/4(+: 㾌>cp # _S UHC:N4jS&TU`48Q}"[ N$ƮC 9VQ`(eGZW2nV{H fQm,'vEⅰ]AX-ieG"](y`F0B{j' ݔ4b򜶲'( HȕLJFz +%VƓg>5R{o7.8Ʊi r\BM]u윜dR^&Vl?=;ی#Hp[出K{]츑x `H-9׃ռ>>a$UOV54|~M5Ǧ &:CM{iϨ]ddfa:-[>ҋ@hjo;j3 _渳 7d[DOMRvnMoZ[Ec'ܠ&"MC u\3An\ågl4R;k2/MUN%fPx=r#2T>NC 7Rp"^KrN*YloΊF:ɔ&I6^}p`f|'(r%ovh殍uW>gQmSw=A$Aq @F+{Sa* 0֏5˩`^y]Z)}]" #MStQp]uǜ+Ii3/Q:l}dC|OӶOމc(%vί#ǹ}b=/wr 勐ŷuΒh%ʊ, ;rmla3+ J=ؚ{%L_) _R'|jvR+Q*#1W}(]/O[|~f6ɹYooDJTLۅ* e[NBd߁KC$QZc<8v(yRY/{ľNr"yZV= Uۓة']Yܨj#8$:@s>9rNPyGcA թbv;6\M9lKk:ڌ.=ٶ#1d\LtϦ$-O#)i*ގ( j3ѣ'QlBO;<;U"EbR]>31jD:9iwt/Dn|詟-Q/,jBݑ;|1O@BOqdo7'SҨ4I#;̉RKAۈIh^r)_RӁXE}@siL߃, FӒabm#aFo  -PzMUM%˕$;PDیӋ뫛r:_ONܣ5vLϯ~tqdym_AncK ^4h^6}ԵNs裃Rok'kB 5)"?4H:tL}IEJtGTQմ >ӫZO\hJ [u|oHvol#x{/ifͷ8,o:x{5iF,ͷ8=+Tx{4qF,ͷ8T7_k> \cxKsH+27E}$c%_xaٿ~3ۚ9a]]]Oi|Ƀ~Ʒ_nn&^=3b!AjjCa3EZ _"="}C4üіJ3FK eΰ7AoB/w 2Mw9϶ ʒPNRsPouΡ|-9"!of4x3e8Bdƈgey򸸬&+:LN`aRʅ"ȚpxrH0x)j!el܇%٦:(ݣp8@aR{{cn v/vb($:)n7;,*2I/óg}{ 7O@>)TpfOب(R?a^^:Oa|).b[rA*7D8 !F *{bHѡ;>NazrvЧ'ǯz,CzON}szxzWa1#z:KdL2@S{, +K % V#YsUPtƸG{LJ'o’i{|x;/zoijߠI꿟|XلO} H?UU' |4(F>|J&1vAxy ?Byc0^6T5X&i) @vY3<$I:Z'(UjDQ< av4 ,|#X@_| r`36BUuP .0cG&j" 6O,̇A#,Qap#BZԈUBǗURg^ 6ҶTEj\=L,ryZ@T J\.X!$ujk$,$À)A2fLǠ]\\Զ޿88 LJݸmboT^ƀlcIsw,~b#"C$.]ڰ v`0$EUW9| '}@wށ; *y^uTS앒? EcP H2OomS~,NcZቃYPLd@A>pZz6ٰ}?s>_@xv{*P{7f/շLR)E~E)3S+JRw*垰#ڵͨhN%h@D'/4+ߣ{EB"1>u*`#]l\R%%Y^n~.>+>cs2+>?Q-GkAjfdf$ѝџoy ]r;d qR>`@a4V - v>߀s>ŪOsΠA<UO̐#A}CHrn 9 020@ (QWY{`8 UQ)uE e`68R[ /x`FkX6 4:Yh@8I]Dc|Gπ Ң uwۺMPʯ#_({܂L]QA=24T ki2#h"rLB, <4"~*Xw W}EO³'["6g~ٗ?5\W~-K?g~?6O2bE ;s JyDP> T]iGѾi2tTg4lP>x U#jP@Bm4_E(8 H /AoK|ez4Gjs;j(zevFI8>{|J|1cRQXo(dzz, RydN?ZA& C[%'hH9Uy "ٝDW~atG(44ֶxT~2 j=މ{a*Yl:= 1/1/+cBeE/ajSȺ9pue9$;[P)P}{+ݷv澝M՗9:Gv=U%ҌsPw71N]߳@)J ~ QRl'j4 5y@E;R^\ $~yh6Okq4Nܡ@Urwj%G4€΋.| zł>φ@ FvŸL;Q@k>7C^,vIwLc8XJe?An7`Vߠ tgIt3M I_b"OE_*/5YT5eZ3qȏur@ (ٓOA Uo Bz7f]@4Ac|J >MX뒽̾v숏ظVJ r(Ce0<`Q21e"JRU2 f2DU3;=t[#]+q 4.W5.kɤc/X8z/uu:NZ?Aݏ?S(aSki }[{Kr ^,fdCA e!PvBUT5AL> fVFG³yFb%S|bWegD4^w1< 1Dp·#@tO'YN_חrE~Xt)hOp"h+]qssO [uyTmCrMS4딺J}4 ?))/v'Ð'W`{?=Sr-[tZ݉6ӈ088O- d)?KrȖ= :? Q 0d Ȃ1{Ԩ(+o{q{C,ZDe4j#jK;BOs1ү5 V!6N8CkPݏotQUzM>y)҃j=V&I;x tiR-jTǤ&Фczb`4 JӂiZ8M i!5-մZBk9uZZBkYh- e,ֶZ!ֶZBk[hm mu,ֱ:NYh cu,ֱкZBZh] 0ֵкZBZh b|?MK D7 }p)w  O 5,b,,,",b,,,",b*bZeVVVVVVVvvR1m1m1m1m1m1m1111,qhNNNNNnnnnRg*b-b-b-b-b6t-'v'u#'I?q6s]MtӅt7]M|Ӆth\ Z\ Z.-AŠbr1h] 9] .mAŠbq1t\ :9p1t\ :.AŠbu1tsLbu1t] .wPGQ!ɔ& =,@'»4,< (o 5ttTvEe]QhcX- ]G&wZ[o)B7Ѐ^]d2YP=/#kЃr#? h8u3ںѝkf}(qE%{=*>R7ܜ|6S_B1Ç@]uTO}hC_ռ5B6|&P承0cO Y˘tL.lQI\7(l)Nl,SŤrV [~YYùc\vE?TIy !+Kw Em)duPun: REmS1v⵶s2ڊ>:4IMcR]zhRLI=10 i4-ԴTjZ`M e:Yh- e,ֲZZBk[hm Bk[hm m-ֶ:ZBXh,ֱ:ZBXh] ku-uBZh] ku-[3)$wJ]5[/ *z7b0^owȂ愛X@ $<(5A|,/8d0BЁ' vQq2uj߮0 :R<#М$q1z qd@ '8Q8VaR~*>hXY%{U@S1 őZTjܟ׭L8b19Zu4ppR%óAѳ31{u#K$`@ʹpe.E;2,?DM#чGrx.t T: UX:#i~.pWT`Qe2EQC]\@ӾW@:&MI->+lgN(FL. q _l:iMld&;6ٵɇ6& s5Mbt`6Mjt-ܖm9p[ܖm9pܶ؁vmnہvnǁqvܖuvnǁqv]nׁuv]]nׁuv2{a;> 2 X܈RF>rHb7z1OٜZ'w* "@/it~?PtȢ'W8WTBX9Mk귥~귣~}~')PE6uM]hS6uM]pS% .Kn[.Knۺ.mȠKnۺ.Knۺ.K;º.K;.K꒻.kO%wu]]rWL}K? ⧟~l=΀B/+}|ڣסU05f4WЄW̙ZHQLp?C; q/qυW}~/ҽYC\fW3H -YOJ5aH6(U?t iw/~ 1S}D2}sNHE\OGMJt}^g{\qe mZ$љ|S"0AL @#L$" L"BQBd`*0 D?Ukϕ_\(~L7Dw+_ຟP#{>Ϣ>-n|@pRqQ5nT{/_ڋN3*=^g#uşBctTx1}qC. ;]bk6YK4:OYc^%T] ҋӆipq:ix?5H9OGc=%Qpa$f}̹?`{ d]! $+W/pEJm خG73{Fi9RGT#U˓GNtʸxz0? K?z8;c,M՛gBt1Z~ zs_#&ٯ܊?KLzb\NK,Z׎嚏sI7JQㆄB1αJ;C.4ZeS8br3Y/_ `'͌7$׋P#[C@jB3MGvn ] æ\3 SK@Mޖ;Yt9WʚOO;ӝgG,DG6\_dsW<ޛ{ #HfIʿ)c@?B2Pa‰ݎHh:&z"EE^@eiuUnB/;"jd{(ly9Zw۫j5=j/ځT=(nm%\+[G:N]~vC@(rSG.19`DM ƶVd%篖Z,0\H)>,݁O7M_^ L/N_WUW|@Apzfa:Lq&zc2"U~=(gm tC~>,uSEZR 1K:\ 7ϕB{<,lTe'.\Μ}pm7kݍaDm6`%n(@NnC_N県40pQ.NVLS7'< ;<ܤ3=c5)ƕ;t3GJQ0.QmjbsZ! qx=$qvDR5`sYdD /K|W\8g3l) `tR+*xU˷\UBbWjW-\*[(Fާy(ZhjU$ ƨjCLU^ܷˈĸg`P`0J߫uBi h)a}r7A+QWRK\~mq*ן)>,f,1𯏊 H?ta6B_x15Y(+dܱNjn1Wx}.ۇdD/ψ_yw&ha_^ʲ yM-d-,:O4G4;n r8H+1΅YS1M1x4Lc5=o(`̣Y2ScNoWۙqqlvÿ~d(! ވyd~>%6,?C|C>JW|r*Th~ Q#ܳy{ f!mz6Cw,FZ^RY6HFrs1;(,4/?cX+3pf2VPH7" =?]y#nZTy5ƅ9Jp;VuN{0aa'))BFgf;?5nȢS1$ؽEzo`6ti6|[Y p(c^ 0 cL Low8CW(E1F,ѶRכ=Ԟ2`s6M"ܠT-J+?@[Ӏp& 'AKN/}<"} xh/i]r/\k_.#?} V35-j6x@`LYtmY+q(.VX6C0F9bSQoXWpOz";`H/PF_AxC|$bEk4Sn 2 5#/o c1O4>˜_Tܶ_,@&B{X"SbG6k&H~Fz(9MgơFwD*3:U,?TCsv:ܒ фǺ]^dݭ}Äucmur("]< N=$J7_N̵l逘4Ó4QD3xjЖ4x(!u'|c RI;hty:!H&F()EHHH=ʂb@XK*&h, yAe($DVHG:qI>I+sd^ȜRjЕA#ŁT AbGP"XȜHa%T#4B&N2=I%N )=ʍ0ri 2r#a ^$ 3orDH(45t0W7%IZIU'iu'i' "2HђDn0(kmg͹dNVYv^vfA"KMs ssGFI Q:BΌnţy?g@^>o>+-N-^ZNr4=[:uVṳKuJe֪V߽(nd {`o8 qQ:,(Q"L#tWDsˑ%z4[IYbZCLw-~6tc/9}WmB&b-ty7 5V0[mob].Sf&_G "Zj0 Č"1T%_~:@Z) qkR}d E6 _Nu:iq!MI:ߋhEuqXHϢUlN_ArZ nY7Z8ٛ>ᔲ@]}bPeuwz#h,nyJ (`HeqN\rc#*بO=Z{a {؉4j}2ctե1rUtl/@]0@ ;0^CbI5R)~-RJB:F.VF6 C:hfAcp`"sW"ēpgS ڏt}LmEpvKhU|->sQj6|}*] &z#Bݩw ~#%[zן!۪G\*P IW,S-򡍽]\fb *rQo@H}"fw!xV"ҙXI zՈT Gn]@da ~p `qaʼn)D ޽aD~L?tKY-T9E5 T$+vZ\Z^SO Ԫp$VMhDEF8pZ/+Px[{MJޫhěJG0 ڶbR,>S] iT|-j/rr$Ak@ʼ f͋5gtij4 .89_Ol>l 3+6E {7(ON>?^_#^)khkH q]ڧ hVdWۼ,2fcx3Bynp0Чx{??*A{3bm _sぶgI4RT!(ASYL8o[g n*~8L/IFj qO>UpvɍX)Tpl:4(S>*e=x{e+4B` R`jǽӒ]V6y5W4sWӯsknK sk쪅LP*AyT}&˂ăd9EbnǍE&BV ]] zWL0^_sPma~DŽc zvpƴL+5– aSRV)Ԁb%]*0 0`\h!%f#Pχ{= ^խ@1qWwR0-t qz$=&ڽ~ | 98]Z3 ]Փ1;!JMQaĔ" C4{hzC@k|g0L Vꦲ#Q7:3\6i/hT:T#p\݀]WOlDaEA# e s)^ֵ;;Xq(A0{μAX{zTETʧY8߆Y-TAMyrݿ=~A'MyiZ(7@%5f I>PeMUEWūk#R];Oq| hy,%ڹz2G=m}OA&9k/kWHJ],rWsxCT6t+V;9>:;HmXh+wўl빀'0୾FoŦnZ(|i nب~T8P!KXXx0(Fq9g5j?F Vee`5|w:UcalmE  N((.q -w5К@'୓j; =;DQFe7LȈ/kfjP)ѫtɡorz\?̲"I`HqO0%}?NunJ=Insʃb0VmAL]k?6FR1𬷿Z;=;{'}|$CFJ&JTD J㝎p-,OKRv3])8(mlr~ Rdjy$i8`!UJ,%ZW~a2رi'ESwD9NUN,\(*h=[$U$ q͛EfD2]|G&Q 9, -?ԦƪV_6rZhY1`qxBbD _CCoPY~ zLPRB E ʋ:ȩ$!=}4⫓Aa U#ouLN2PQ@Mxe^Pd| 5Fe)RJ#8N"4"`fXVn(J(N1(J+P&P$PbPV(͠oJ(N3(V,@4E|tISi R)Sg7 \%NhuÐ ViiꆁRG@U$U7 T PF:I@Սh2!HP @J_,~P!A .Kх2T\.@ϟ\%NP98Q II.T2J8[5crw=Htu- μ3l:d@=|n\l99cZ}/.TǢill6P6Ӵ ə5}R`̓Oyg5ܿ<wdԱ^;̾V± lT~|EǼ9(Xֱ"qOu2+pFQM7Ua;+JElUܷ\ d&#^罣C *`m_=:k{GmpUpCE)99N+9nTd eQCѩEۋJKTNijWNd;Vێzh(I>yH :}azF*NWvNL*׹|p𹞗cmXG^rC< +x91^᥏s[wx / $ Q٣Mhxlf(Bw^>>vǢhD-ZCz$Zz"Dka`y+KQ˸N4t=v7Ngsiє1 A0 ԊGhc9`C!X#ю 3¡:*g a 5uJ3h@R4 Lŏ2.HRhCI% xpr9NQniJ1&LuXNyXVUרK$$BS à z{p\E\wи(d_Ht bȏi>{ZA[<<CxX_#{ O*[llpU V*Y, Ъ Ѫ Ҫ Ӫ Ԫ ժ ֪ ת ت-چ|U`*pBX Pf7TU`*pDX `5iRFc@G>pvNm'_4kUĂ"u o[4 mGlb4Mx-%L0ΐX6ha-t1POZ|H K/0/ !@SNoٮgbJ7h  9̎q,)j|-re)4a\Wnw%1?7̕{7נKgy:y2JT.Nzz7PKd&ѤDgˏ~G2|R*~|l5oS$Q --$L5#4,#ɆoxIjbYڶqӺ6+mK϶m<3,m+KI? -8"O7k8X?2Wi &"=?15?;|{s2ec.,ݧ\I;Rwar;0O ?_G?–<> o٩\ G]Agٸ暴jQ{J5t[^S;UhF32r7!0H=ߤ r"`JJьCݮU gLŌ)v(`*S/_wk #08vO'nozq*r(ʃaU͉Бfev3(5^?o \mvڥC>c>MGTQךvJ:StD7bO/u{fZOF[w3:ULDϏm4A4ʒՓ 8R\7Hmf D1 l)53JB ՙ0SQ:<8wLBaf_GN^O+R L֨~쭣hJ"[-U*<)#NKJ~+8O,nʉ!\]WAEuݼdru̪+nNa1 C7"rnAyq29L0h(2<2ShlKG1} *67tyIWqHAUtnh);VNQ) !?5pEjvSrɶy^[3Z^ thdkvl2iu_ۺUk\U6w]Dt /Fr!bsb(;x Uw9+CX2 p=]H<ͽX "ڏ\8F1"P\:̇J`ʠӱ5 TvZ{z"wrdx֍Os}A:I8@< 61nq%^" ]mG_tBfy{xyk<+n^gJ~]֡ONj(LO6kch4|v(H K[k :OС BiJ!-4++qF_ ,BeDŰv$SZJI"c}Q<|6C1X+"+Z}=ۙMѓ9W$>=u1c}fRPy~V;wwppvc>XWg 0bO0788c_4p.v+..v;HuV [waqIgfSmN(ͤ-YvM{43b67{,4ky *qTγtW2I̙ [Wky-B1 |Cni,ayc,2dP%*`mhE,ޢ07RT9+E\rNO+ťdQ{K)qyU%+x%w࿦Q9R'/[|U<ο0*X|7unWP7`e)dcB1 cJ4ܥD3Nť|3›Qhl4Ƨ1p=(*9@摟:7x5Wh܋K|ase@V$p8NDBahedlQ %\<\# PĎbN1Lu\Ki" ܎]v^jZjIAX^AzGTvV\&Z-F3CN0r>wf~djXQT+m|-7Vwz[lJ#*oZj6X=d4HB`+c?*UWBcӧJ" $N(j y$GotUqwPx^ 8 VBl`50X G*ęPU|U@_s?|<g_3G5v.yYld+̈́EEsJyK++.khY R-+Upw׽߄rjXQ՞A8FXϿvuZ;rO99{GٽQS&KוsS0[\dSǞ=J`bR7`/z1=ko!ȩ H[I(u=%,.KKLi3zFt]\`;87bcrku U%]$b(%y Xu6(`ȴπ+:, b D#WV^8▵{ebMփ6U, tOl `v~S>+8 ~P" gĆ $.Z.2VbxZblРpJ}8vs"E+sbdT_N pr/zDI;7X;ڸb|JpSJd(+ڒД ,e6'"a[) 0FOP9ė P+7[FP7qfvKf6HvB&bP!(AH^Tp ^lE3_]QZ<.w(T*uQᏒhwgICsVٽuX+CwV f.&-_"r-ž|*Q \^HG>ߴta;X| Bd?8Y8? ,ˉ$#Ȩ/gYewS0=o_9ڎ=:_͈c&x{yAPz2`D?(fhx k&v*ޯiBVܩGP/%Fs杇0[> 8 ܀ QnV[q|ygJR.}Xw5 겨qTgo-uxv^e,m9vq z@Ck&q;QpÔ O+6CրNX 1Vײt]} *\3}[;Z cۣ+⢏!g*N%ܶ,n1/75-Vh-T,i?,iSemuSm,)n!,]hD߇6둁h/qgjF'oZ]Wހ:auylB<A~L!aNڑ#{z)?ĺg.̶LGɡ:̂y,$ ,kuqDZ,Gwd,Œ=U"J<ڈpȹo$M9xrqJF (e,aPP؄D/a )\ ^WB0*\73pԥ[v)kV"i6cƆ]% 0z+Kc[+_Os:Ⲭ9u}GΦsOBovI1gbO;lL0; 8Ӈ*x KsJӗ|]Hw[;r/_߽ S/M6UM7mޖoC1 'g>0+(>jURC40 pTX!-bvD̶#?x[`LDZ3G|'-2h4 X: :3Z+wv>LE‹i$:X{xn5E4[Eb <ܧC4?}5y~(@q_|VP__F{ўNƈ[P1c*'/)#_0u8@ 0Oգudp#_юUrWAXIʀg'74Wj qʱ t:G2%fF&0>Z<)fEߣsK['}?^Eu:Uc Jj?饟T200CJQ8ĄlrnHBH}Kn\5n.LCo6/c .ق/Dk9a1,!9|$U (U[Iij)M5ZrTI~mdBhj4rk4254iN|8tzQD0q5:kyh͊Q9 2wD4) `T⦺Hn`z;&$vN+n1)3͘jk,)BKu?\$ p $L/-YE'w$,RbW=P"8CJ{Pd"˔N1F"ߪwr URd%*k0i=l5>{W)JoQ:SF-]#F{ߔ`D!XK+(;x,gήUi*4pt ׊"Ei2zULM Ite(uϤ?THvW`PY UIULͽ j)[ycEZS.awįdV䗓B?MX Fܸcc.?hWAz of0 tHc qw،ꚰ[K:wk !&cisCͯs@9J \ezJn`\PY6Vyr g0l2J+8I/}VFV OΒ0≏y<bNNrWR^A*>h/ 9irB%)[pUR\ly A=%'iw;uf9DA_ )$xugRuvef5򏺎smf@8]/Z x ==ʇ 8h35) ɷA>a)X\CV:Шw [Ҭ^]XιeoSv nбfum$QxhlNwѹN wK x{SS4*ei~UJ*V3* #tu``WWbQ`^WλeX8U &X|K4GDQTwb *#gJ(q5/u4-%(g?D?aD?TA+0􃱟=GjS\q e'j7CzI n}e$S-1 yFא<[bðYZw}+[2Q^*@ SȢdv`Qٜ[@Wl >t`ݛpC ^w$ũA$1#o ,56=\gƷ UU*ՆÕ*#tMHmw85hd͢9K^CH=n2然btqUN.jKi[?ߕV/B('~52&7SnbSA3QY)Fb.>IFn̓HhX %I Gyw@ m,&=LHdd<^|dʅT6G$x2p"TAA}?--<4M}S4Ѕ Z#Ah`WϼA%}8gԖ捂`栂4T}@1 5D- )i^i/-O4I`Of`-t%thrĤd*xfi2u~s|S AO.) y3jC%8/N<V5x77a:2.񥻦eǠ#S8N1Z3UXpuJsǹJU>~J*<LnӠ`ULsĸvaco!p$~%M+\-)AV" (Ӯ#_n3 iݺZ+L<_7}BHQwDO諧x~*wh*"ڤάWft4USe Yɒ@pT=3^RT+ 7[u߃^%Glk!y䯉*ΚU,k_JйeȡOx 鐻u}[c}q 8և*I]#٥R7}強S4It(Ꜹ'TL^\J0#έin}O(&iO( o0g>x8 "x۝s7GJZUVA^2B1 Cj-|{meowJXCܙ;>GԲI"{:,-O*e6/l@CW3֕8[BZW?3Zn2CC`ʸbٕz[ʗt/M\J []S\A_XWhuZZVߩj񍪕Z~uRϹJP ԪUvy^#AxSS6c+w+7l̠ޕrAL0w%bkY:I9Ʊwqř'eh32 YD>ʘ;!f~E鉙q{?qt̰T2WRe) ՌuH3Pa~6vqntP/B9)%~@?g@IlBP{c4}?ƭJ_r"SkeV|mRmBb5w՗s6 @Q,DBGm! Ә]tJC_dPD7ziNj~h{ˀϵ{帍eQy+0RS>yx M٢dd+  hРߘyy'%Sy i^k@ݲ22'*_Ӷ p#(]::` .Hu*M4[Y\`xr2dP P V Lhecд'G0y&F<j6[k"}HP͌v{<nPzznWu: v@ExZHuD;@%|0dvd^NЪmF74I = ^*t| ^duGF|;ײ"w!Rzfߍl'<Q|yt?,|mx'Ancݔe+CV>ylGẹKu(:,GV#`[!7mm|Ug/ɬBu&,4)i%OJ@\_=9)F?MW|eHݒK*ǻb[l&KRql~&+DT>Dqoa:.tυ.Ly{/L꿰 bD9$@;jQ9>˷;`_xNx:({,F}> zA_ف\Ȉ5Uzd}1鄢A3QznXq $̂8 ˄@,"?3"D+y0 u2ފ5eibM&#7tAd ZБ ] (s-$@fa-ja-4ܡ@Bp*{+*B)UI Ff y-W; (N Z TӛYY.[Iߴ2<_*-3Iڲ=zE7hȷS ^Ӂh OQ[!d_Zg0/lq[e4';BZ }s{H+'tQp$nXɁ fX8̾u_Z^tep]IGCQhYq{V7UT^;5 `_D6 ]m4IHIB+3Z8gԅI5v:Ϭ<'ocb)6`y|9ƶՔ},LiӄK|= 2G3 Ti/pi9vSjLeQa])K*Nk!>[0nGJ@=Ii>s7:/^j`Ex|E@ib:Tx0nO\YXuTێQ6yde0>IÌ4G1%G r]C=0EkHE 밼ڨZjxƒrZp.0TR (T8-E [mv>/5'fU::ΑҩyS3A {bC7*{=Q9 7젡si=?3[@BC5 "n#J*'B%:)@>~*` aN_"$$(& .0"aםTPq%q+6ADS0LAM:S>rz,Ĝ`1LVXcEd =YoJ&\]TGBnWMz)7OsTCp_u1blpM*A۬rpSW~z r~S4x'w~yOn9 d@1zF:S)/rh|MSu)@|Dy2ג%8v"wͭ9xmCCx8y膾@<$q+$88 5 gN[)m&$!  Jl[Dl|.Gbe^JBnOС4bԒ'?%2nv^$)j3&D6M[241S:dz HB;"RLQDRGB}}f@nLyc@ڏ5mt7mʹ 19W+J! ΥͷفjUu+SF^Y_2!R Ku=Qg[.;Y7E SKudl 9l{CrEURU=L_>G\/ fk6 p|B5_5WNDс( }uX#XCSu7dZE|kXf G4^]z崯cHUBI%rTb( )pLiyp<ǀöcg:G.!MP"Nz(F`Ƀ'D(TQ)g<6@ &P-Gh*:N]+fe'>L #,1یTΊbiUܶQیxZHG,2o ~tr{@W)J3.f^&$t6= LP }.`C"Jp<]JفB2k:7ii0tKzdžmeCvx -^!J B!'t!|adyUL<sFЉi~Ơw*{R;gJvG]W; ϸht87];:<sVhąL~ƽd?&^܌9~NGQ laa}]R W])ZQmnkjcg $s  S 0 Ѡ]R!$H4&s.2=O)6TK[=n;=n3둕zkwZ]ov[u9%)2~h@9JWwvkw<O^-M޲g2suVˤ&@ j.gR=8սwT mȋ֡<6B|מ} cw#?c+ $0R蝟RB1KS/ D}N8hԴ6[Ͷ& Wy!Ԟ?>Gwo6L-nc)l7N7ӜS o}R0#|w95P .gؒRUPr,T^ ,)GOwz&Q$gh?-"w ExA܅RcN 0 jhtx+.&9A-d+{A{2'} `@y=g:oUFٷqU}۩5#K7,YeGA.TFD z#;AP\Ȁxh;0$= 6ه00.~pzά t+l &cx!i|-%z w J';`2M!)%uRuޝe2L}ã?4edʂ 0D39)Sd)SO܃> Byw ނ(z>| - W(dE(TiQT%9(@˵=dnVlY~L6oHw.!\e0T6l7\FUprcp8MqR3 omTfMҤ$ o+8ţp'l$K\mO\E%`pB o>NLaRחʒbL\;y3 [Gخ: VjdSwjZUk5)I^vߗ=%#"i,Fx0:+B_s6b_5 & .nkkrP7'o~5פm&lүs:"VW\u7F:ϓ;Z3RO,mH4 OEkw6Y͆Q?ʲxi 1Bcq6o_"F04sB30Ō^,"ʙTWhG:5ءYKkb=UʙBߺndlNRԱ]Qk*jUEn?6uccnkV|"f#6 iK葏oͶ~]? vI^i() /iJ~5m]l Q`$ Hܢ)J I<]9jVt+f\)EрD DF76u>.I\i2zr5„1%5M0©& ބF@Dʾd aO( B!Pt0c+ewua0zˈwGa_,1@ =+4[ۃB6WM#MLwQos7E+UeZ [~H:bMOodlC%92V$mK5Iµ1[[znLULEo4\Ҙ .~)tCCkZxh;hhm46Z ֠5hh;hh-4]48.)U h)v=&kWo~O2Z\!V*&& B^m2/+ Bvy[fnt2lnykVQXoޖoTT>'c }ay؅Գ7n>~R&5yB8S;J$3]e+y忇ØY,V nkOm(RPl_LX+Ü#һc*Pm/9N|^kZ?XP_9O*6p&pup8MMQquEޢWB4* k y'1E/+ABݏ)Vn5 4aE(T 1$,61aP&4I)DJhd eE|#b,({6[z I\(Ll7Z6/T_`\$l\Kϕ)XiNaD+&!e|#C9[G5RKכ23 pZV*8˞-X&ư:2eT'?r`l CaP"l )hԄ~ĸI@V7!jƥDƌ1F(LlD,Dc1c ~Y7c>8kNY]5!eס? `w;wW.s;wF2S7I)!!w1,+3+ЛyW@Hn5[d%ɫVD&oݷ[k}k;}k;}k{}kUZoշ)3njZ?lbK*Taahרj0A {Q#,8S ` ^̐ȡmeѸc!~ܰcngnHXo;e3,vC̳"ZMUyk*oʝ&BLHޮ$'C\(jJ%z$t>1U{Rkv#i u ,ULA [ mm׭VẵqZn-\[uk㺵pZn-\]\6[ m׭Ƶ=-QJm׭kɧB:ISޏ`MNJŚ w;zn|ڬN)_͝`TBPFeH8)`ZnC/: 0n/I2z;:Y_FqoTiP]]wm7@Ӧ3Ti,º3.%s)ҥwm5`+C=uӭtk5Mvme6" zsm- 0&PyHeGg,地(9_A_UkOȘMǎ#SUO"($"*xwTSG[IT7ס!I0"> .""q֋N2g\TRC78P PVߝKXhͅ6 nE+ (MAPނ|&YKwı*λR|UOh*JPtVc[.*tO4覇mǔ*.#TQCC8qiơ4bj!CG r9 I~HHGQGrw ԉL߅eS*UAUXZ]?jLrفv/P6C Ls=hx>WC4:thkBkn:Zh&4j1Li=M|C$.V+m۱bLۢŖHO0,ryY!B S ¡̩θsANz`ls/K{H"{(GΈ\M0Zݱ-HŞKҼAq[i.]}we>'=!BY *hZ :ep9\%:ɼRFvVފnw/"B0}A;w9tD"`E '*kCB&b(UTJZ?HƨbWᶯ9 qtEeF,3qD+X҈GuX֚34^4ԭn{PmֆP5=p_-oQbivhMH|J~EXQ{3lL @S" s fH<&-4SSf=u:/Q0߿Co\]WʢlϢIQHD^hHp;ZDn[j@Rl0tNv/ x5brA*f+Q=˹~Y|rlޱ\y^Bz6܆b=]\UɅ/dq<~I]hE7~p!QDyGgtNur(EdUV7p-]zUaiƔsЫ"DHv"Y=ä]:SS\iZWe;Y ΅qt $|ʤܹމ+$ȭ'HDbgW{ 7>O`l?~OܧdL ZcFảr7|D]]s[ Vm OHAah=yHj{@utP\IGZ:Js ->PaF>~LUu L>(#fLC8\c(95#toB S*ޚ⮹kRw ϛWsC.I]M"t̂,未9?͝i/775v)@A_u"Jj5W;ȃn3%3TՕO٬d$4 "F εQk4.\tFfw:ꋅQA{H^|Yz~W7_9},Ͽ~}߾xg2y(VV_B㑭ytFե Q rYnJu%3mA< /o]z/ooVj$8@.4Y;$P_QᄉDPɠX7jd6{4rh_YQhm;uvʡ݉a11R>HI3=14! F8D>M?lr^+!3NkrpRDˣ?G)ɰhV. ,٩>'R$7yi,AZzBڄo3byn|ݚnf[kah;vyږ1SɘH^oͼwgcI"W3~]Z+zSתذɓ-w%A~ZARy5-*dE)<N2sߒ0l7vZŮ@LՄu;dEvܑDMW^L}GW;ȶʳVosg7[,D nW&AB\EG99Ӝi~ާeW[siq]eBreO}=,B}1YlrA|zwر[j/>f\@ :i裬BNZ0(piOydvI0"xp%Sm9=)և1g !arh+9Y3]i[,d8~4rp5A/zMb,"MdE9eee^ĻÂ9_(Ȉ #"L%!BPX,8Q 52@j5-9.cK@ !Nϔ9=Ssz$Z?s,Ul}pEuq=QFǂ3+~DC<~LJ4HHK,O&~:[ZG"7s/KZQơs1;?C*(0~'=&>'02 =@;BqUYyzS~:Y$4`mt֣NüajhM ʘSɕwb7΀Xe0'5%|O~zCЧ ' z2QG,_0j{pS8Ab5&kSj`Ze*)L'FH4>p$,2e6.ne he be ky`{{HȬ%`#iؾ ۥY։2=/ECY1V0ϛCy<&^@#A`s %9 AOކmU00?a:`.Zp N|1[aΚĆBIDIQ(1OO=NsGDISR2NCt\6+ ؔNpI]r;+J)"Hf_`(l-GI|C]tQJ>ؼ쓲ه] Ij((SvqCg(M?Xc>7;`ubZ!tQnS GQ{Pw6jTVvtYU/w^M9DvU>&':``|I9=."T+ˈ5{ 36e/d8C m=)f']E\" nV 4[MegN쌿<,53AsqP81zL驐rtQ|?\NBǩ~~/+DdSEkp]=ڬ-"1$|V[(nBڊw Ăc8Ags)`.({2#B}}dujM>яRDt) L:Lu;/SWeAY0N^01.3(U(` /PV` /,q?`<66%$=FZپ,}IIu2*BpT=eU!߈5} ʄ8,`^!D$5SYk*kUe.uVmTuT%M0gBg'o8a#[pJ7%ɐQ8S[\ju{4܃t抢;z:ߩ3 FկEOԷ.rcj:k5tÊe&OI8Nvo89c @2؁-ئKEwJ0$0r(2%]&U7m1fDooP32bgD<#J 1-A0p`N~CtOeFQ Sc#b ֠CN2*ߩ lvP!"CTFR#?zD'1و E{r4x'яcAs/)m"8;2qLAu0S\gZsw (`P>AGPz=Pg Ih(Bg+`>qޮ U1oP/ Q< Ǡr8U)f4b*ݚcZ2jaĞA cqe%!0)}IIKBq 2ΰ%w xЄvsS*BJuR%`9IY#j`~wc>bϋ~sNW.86B6w" ;A>Y=mt/v\yth* f^Li~" T`5F.k5ߺݘOfΝeY\fJB.tZ f8M^z d&̈́(%-+1hO Ǩ7m2^RӢYaբT%D :&+8j'wż>Z.6+k Fr\ G 3zBDSQ3gF4`eVܸ奊 4Gs(h0\`.,0̅sa\Ā0`. szT0Ote#,ɇkY?D_e ϔpJz= ,~%*KdWR-R$̏Q!]dre1ҟ !IpSmH 藥[ }d2 },ntLNoR^&x Y^n!%>Bl!ϒ06J2NŨpf?.N ݀ !#{Bk$DpW^F,G&DVj 76+vAֿ^ܖɓ7wgsCFȤǛ߯?'҆ yMx7>)MЀ[a. &9SF7ڏLX$Ѻk+&c"k|3mo1|3?aЅ|A=g;u.ˬNXw{Ł'=󬾝 CrTFNu|xʡ>W9.8}Pܟ}3%;qSҹ}]w@ Pй'H )t.DURdbx hqڒ#.l>~wbσ-24bRһ0R[^E_ p]vmDŽgI,[NrݛLxQIL]ƇÞA{nlQWEܲoIoltuPbNљv0nhRDg89/`Z`6A&wɡɔbxxˢw,:xws'bfOBI?u!Ry8mB9LOB9#ΠG AAgfG#lC4ʬF=sG_l{F :,wb&S$yUO}?r%O p/{fs瀑<6"h,JϜIΜfL>PF7ڏP2Q&ԚC3]CL?%j#BlP 02&(0XpiRѭd L..ܜ̶Ͳ# MN3I&v!hIMNéؠe ޭL:WQu!w(x ,JOh$ x4_oV4ÚV,_[[j˶V[&YJAi)%U-`?muf YJ?DOI`!JT oᑍ<*;d':Jz-ր EBSܾT"Lx#/:C/ 3}_S &a@(2DI$ZFD BSAz MBQEObMgYfTYNCzQn~N\0ೡU25ԣj&a#pMMTS 3)RJTHQ|mPYT~'uD]q9&-Pn32"3eFeԸiEl =gdEsܔ-{ Qi<@S0[dཧ?Oy.QivA!B8ڒWv0Cr8P0o7T=0m(6J|& M f K%E `+, uJLODqP-tc8K^8KL/rІ>8App~pzgt%6ф]3ܭ=ܭ=ܭ wk 7>5mw|[C!-ofͨf[5VzkzkzkFGzkzkFzkzkFGFFzkzkzkzk&/hX{!{ҷVvNѽ`7 ᎉfwj?v~H.Mz2VOp *6-l.{l8@zg`Pq}ɏ2JD`Q2a}$.i2et- ~)dމ:㚗cB͒ze V U U+ \w !)\Xeraox}O,Um*Bf';I42GpM|MINfWU cp@K~cCk bo=e5ENl[X&_z#Z6# ¬TնV1` O(51O{alJ`"d9UJ!x֜Lsg-SGV'xnpy!Y`AvCEWk]Xt4Bwϑ1rБCjQgk?(9#KXre%wZ 16gINfT! Zcq:bV5&2jUxSz <.z:(AEYQ"ĪؚX6([GoLI'*I`Ϧ&=آ3Ŋ@arXqT FB548Q.TJ c;13d$18Z ~0aijܱFy or[,r5߃}pcJ>f͓:GSsgնI!?x&]'ȦZ`9P!!{h%QQw"?8iMUZӼlV7{ >V GL+s0b`lF3}r.Ѡڠ[ f4*d8 ;z`GOll(K9/R84g㜆W>w _ Ttg0hWIo8Ϛm!.(; fMװ4N&~ĕLSW 7+>^Rⰳ:L+;x j`e{=侹)NΔ)[{Vd6ϝAz*~[ΠQEp5QXw$)+^W |a{ /1|'Ѡp\)' $9BA^-  ڎO`GJt+%; tRwH+:_½Ryy;Sk`N(JY ]-Mxq EN`Ep6]l3 A&M1+]=w+XA{T>'D'P ra.ELa֚~T9T>wTF,L?α&p5z::}YpM̼?P+i?| G]eO 0[4vnNî+ D7>ҞMퟚPBtއy? 80o!9tH5.~6eLt77mlȵ !VyHr$*z=Q`{l T F"ds!V,Tӆ C'>Y>G61AaJR%i po~>@])щ I<;Pu%4D 2h l s흳y7k DiO @"QFUsX0UBIm6u>-&^UdT٩{dyxm5nQt A˯Y}]N]R极iu|dwHA5S'1=,hemf3p\ \>SUޟd,T8~hSbSf=~yN#o%*B/P+< 0'TΎ.N=_ 3pL XXkY^+̛1:88ˏg1TGU_ "0ח<;.Fߧ0c'sQ)' āXT&}DiY/3&n{Ѧm-=4U gh 3y",Ē% rJ'R*ZlECQCq.ˬ)uV'c򺝜]G OB!J(L Ue[׷O%+&,gBk }@Ϻ򙂜}f>3fa`M;aMA5 iXxs)3L@Փ蹗m*4Q-COKIZӉ! =Tf,cɔB`"5]X]X]Xtuaa`Pɏ>^џǜc?~|f`fY fӇIع3i&:Mє; s`3KPv~:Q;}M*cKͼ-E[J.D7c&3ujubO(ƒ|6{Za՗Zg,lWs@(l=q bdy^2c#~x?u<@ӌe(OAԮvuE&܁5fyycsz2}}r]CR"x#Tˣ?$ 5=|>z,F)lSCES1A)K_xH,Ĵ..{\t~:uG5mf}>wݜsJ!Iq^E,QRBO`$XKO8׀CH.F%WoFS¹.ږY\Y ȶ 969a|3T'p `E怇?6 sCҦ}r5B"bOV*zLYATo,Zj͵\wkTv =y~3 k|&BTi]U6![k@`U( WU_eWШ[HqP=$|lz#2j~-/Ko63[~w5QW5$db:Z|0<3U( N\[>Ū{SuKUIv-гbSBU]񌀏ebM ̭r&u%8bX3Ȯi/Ě:g΄'dLzT|@$YZd&L25 z1)?*w*͔V2rXHp0z0nAs3a0sQ4TOLMMllnNb7^TգjJ/ܔ~iS>g1m /1AI.XX.Kjm'jgE'),AvOG>`9O_Ol\: rs]M$\azC;L+jM,yGq@1ad.C6͆j;fAș3C ?^ JA+A^뗐sj&>$ @ 5)@᪓|Ff6p~& 8pNY}ӝ`Vڒt R SLUuJKR̸D(6aW/, Y$j^t']4ۺ<ipPaFf9A'2C)AP*Xl3^^ƹt$:/:Oa|Dg(8y@!j`0B`֪jrCZd ‚J gL$TmO42WoyݼAN sfح)qUoȌy [n ՀϫF@ C!`U`&܀F3|Rz%uU!)A WDU5cixCAÇ7i3)cDb<yPo)Ln$i0eg`wri0trq.TV`6̒Ϻyрuz߮z&a{o`>H0eW@B0DE6fhD!5Eր+~W!d1eeBVgdl"&3T"|b~}Z >[.>yWgoј3^^XG~T|ѐOU?+EAQ,PFE@( E=5=H:{ZH==I|9WeugW93.ϋz :䲔0z_;J?~Tg:$ Тuvq'h]s8ā^ckZ|u䑳L۹9L"G~r+йU-v< U w_Mo{xP?|'Rf7XK&FܧXXҢ[p qH`<0.PN8WsN d76noQO*ѭkW:zBd`S2T9l,A,@ouJ .' }  oJL_ 2gC k* _#]-]D>+g]L­܈iS|uz.ʆQD{q4mKD< o\"ThH a^`EҡVk0@6 zPm2 hJ?޳NgL5ʅUlnCTօuѩuѩuѩZwZm#]m%*8$7g''oNϠiUR%%܈t~AYp"-rm{ԙ1߹IN_մ ~<.d*nh15kS ]J ^V[.\U^ I3/.⡥8JrFpu͚lޮ@aAA`;3ٕK0F'w Iϰ+VcL?s*5R>qOhLaq6D?';u*90HnFd}nsMee,eo1ٵ$IyXqFWߡ wFyn8 HE|xەcRrlj c@1hۈK sINV~3T5u~Z%N^F+z;&C*v;=i30P~ $O+Z. Pʽ< h e Mս_. ?'F=U[V5M/t7/sQ`X̛ \TAUn+O`Q&5rxF =:Uץı"O>R< (!L>kLP~U!Ȱ7$7.b#8p:,;vr:(Kjw(_~w&rAm}őc`S`=}N4t~ e+HW KVUºgۯ,Zk=I e.x.nL3)xr)w;RR?86"9ミYŎD =~';6IzzmOx,sUr3%p5beJxl-OjҹHy'?r& JtWK __#`řBZv9UEn{[B M~ً#^8Ŀ|;l|pIz^g%HŇ{0z^9b?Uϧ|cV-w o޾8}??BK}{,od/Nez+ʼ^֏H2'*}Qdgq$%-;~We%rx('pJ" &RϑRXtڊM.Jm,PKR#'8@FZ?ap9io .@NKЈ{x7*U6So3+ߗa6J`c{nwNxFk=VQD`|ZbM;KQRǦ@-wdh6"p6(gL3r4ǣƼ3%!p5cTgѣ+M?=wl1n"Diȧnꢪ_kGCr-.Йp+5 3|Zorf[XJ*ӷe3 pSL\ TС N6jE^u 2 !Ԭ*W ȳ6'[VU#Q(h;^x:#X%dBTIsd )2+"VW6US*ZiLlL[x) %6ÕXJ Qw޴!KwsL{V-ЯB*Rq&"gI EQʟM /Jjr  C4i6oeM`^ tv ]ZbSD$ CREbl2$ rVl<KeLY'\iApW哰=F/RעLWR *{8<[f `)ge W t7%",Vh<\ccG Xu7 :Odxl5 ~A_SxrR&|k ϸ>DL^XUn]varf0Ȫ.`$Yʥ^RxFś/_is{R?Rѣ1 IIız_S,wj5V 4jڤ|a|WCI.X'T+6*oPE n?^/3fYʙ5kB`K[K~)ƃR3-Aj/Zs:Jj5?|n5H2Sg/m@I57kV"eRfo?ǂ ,kmQ>B.Ą6T) M%`wLMp+F;ZoQ 9mi:Vs֔V&wg黐ԖJq4 eɋOM ;i?o,9-||G 9qo$sT|0~ 5kYAVQY}B^eA$Yg d±ӽPోW{<]ʅ6 tYlhK.I3𻶒X)'Nl/Yx8r*X63-6±MVLV$y*TS gBV:e)(%jlE/M@EL[C$WMw]V+4h^B+ƾmCuU!={y"g^ě  Ry.m"&y9]Ml2E^[ik)>iTę'[mP RLtU&#Ͷ1'Cy!eHgbɿ+GO+Z2V? hD"Gfʹ&-ARV^ &?0׉eC_yOa/VkLsjO2W8*01^/>j0hupA~Qo]RԻ-~ ;M9%,0xƒet@sǦ70!>|撪˪)DmEPX]`|,lF&d}8A6Ϡ#If?Z!CSW#* *rƇ5RҳL7a %p̜}dE =iS SdDeae)8v\dre~Yãob%?$&=b"=7R̒Ӄ|~3m*>nj!}ES#;HOd;ZӛSYEæ_?V-? J[vIvǯ"}5p}nOPJӫJi O$Ÿ˩?*'y9$LJϞ ˟o~=}3C^_N{A?C7j~ln[ jQ,[1yt +j@rN$ d۴qp)|Lմ ƎL"ùT*RMG%>p,LaE5"0?i3VROQ%BzܡjV 9~\DFGOR?:eR}یTMr^_t`kD]jR,xRGlM t+$+ڥapӀ#2 ;4cg <|^|;ȷ7[-/ȭ =\HUdl;tpyƪsZQ+>}~4|nt3HPQ SP۱,4bJMzt[P Ù.(gG;˸C{>M~8=9?~ d iV\9Tw$͛ôFCgUcn8>6)wE Hf9xN/32/4oF]͜놉:]=Jk YVUX:2 KoJR?"y˗Ut[ Igi4e0'Xe<0s-C$.P)~YD)ۤ{g{xeT<u!Yh/e fZ:9i W$H0$L-,`r/%1 H+JsR<0lG.'p@x^,VL Edӓ9O'$~A :! kjDnZn >/?8 L /enH1^B kub묢3":p@ d I`6%|Ë3𖔾3Թt߳KԾ~ 3"g5ԳGZE}O.t`'˓_gx G=QQn+>ǔʎ%;V {kqdgC}׶KmHJq-QDȠ&N9Lt67RмGÿ9t[8_+%D4-uMz~ `#l6 AD~y9^}Bd2hC0Fȿ?G&E'l87$믨k߬Z"gIIHvuwuwIU= #,00`};? mKl_DdVV?4;lpp)J[yIfuX)b;%ZO ` ^;ߨ𯯚ǜk6C ?n^V۾!ߥl{7ӝi],{>S×CǞ<Vi2<m9C6 ZO Aw$u^yipEiy_9tA#q^,gf>daڥj^K+ z[>̑6KfWNԸO dȿ:aOX}fxö8DfR3\kXb߰ eM>gۻy薠2{ƽMszb+b_C@0.[j[f8q/nlfj }$nߦ VNݠS3 RV>e6qC {~1?0^-̲(@:Og 7{(9p gD޽Gi'=oHe;8i'='xf~]R)RY!vK:l~5 _׈؈P`eakae$Ixk* ?(߀"M8TLTQ=G#K]2Ǔo > Qht*FQglT"oFoOo=h^i1tT$X9dgG/6i9Oq8IQTWt]+<R\%"9sm 5p?Ah03A40xUT+؂]¹s1x%}o}Vkh$FanJ{H%<{*!L mu2B u Cn;VǦ`[v3B a#x (;LoxF p /A`k4߀u5q`-d(s\ @0dA`m8לDdyJ+ [[@whǴAd˒g%3Q`k64Pߏ}S_/C!g5i׵u0cA`8d9EGpސ -ηNמ+L"45y Q)T6AZ#NCTV|f~4LJFok8co^ zR~9šo(ܖ8K[AW"xR4קq}2<|EyfJ Y黊LrӰ:|Dp:! 6SL?'=ADA,Ƣ/EݷPf:ї5·ǯxԘR^zF A.U<eV#L^h} a0%x2DgEjNks4T͢x( Z9]?RL̲>F{:Rdn,tb,Q0Ɣ|<ǑSkDkxpr0j`[|F =k|b [ K(Vz ҜDjHi+D=ZoЖp4:`6xq*d͚ٚ2a`; |ppnoeL3δ㢓9?'rwH^%%S*'2o9%U#Å~3^SlzA)فؕzVi|ŅF\fvi=|l/β$@'yr 2., ڞT۞|PۓEmO]T۾bQۅ],jBb;??XŸBVeAr[tJw5ARKƪr;sӼyfj)|&oRxgy8wJ[E<*XBmfIFm? TPL~.,Ƌl\L@0J?bu#Xl8XqeRe/Y0ɺĞtiDG% u$c/icD`$?1d;gDQxb*WvmDicB9)‹K#!.niEE(B'Z,6._*4{1e/gn̼%D7z$RWg2QFo`|$`!*8ab^YX.WP|JܷۗBe_Jpvo$t"ݙ$;z9oׯS$tUZ'$Y5@C*$Xe:f;3As=NhhG&$U Ig>XA!y#ɻ1*gW15zރh[njr=^cR>1гT#8| %6޳E[yx]=>`-Ҿ s5PU<36-vvV~gsn9.Qس=+ .?Z{8#B@8qo 6bdXLXQ=G]$a/F5#u1w#c*Z2՜&cWء%2όݡ3־jl绳Nѓ/Ke^0hr>L5׮j~du`w̦ZTGmـ +9@L_$nP6>1 &FJ/=ip1]4Y^ &|b~okgW=O;}|T;$$Ae=\/?p.#tJmQaT:3*@jhޅɦ&=1fN=i!<<2s*i5V" ٴ1!Ҥܺ?͟_ ԴSv렲Hq3]3L+Ɠ/PFS1WŜ& dB95/={EsYK@/2U&klҬWnԲ~(yVEO+f.4)AlFlϧ԰}7}*im(ë(*=F`SRt݉r&,x+@%/Reì;ع8" 3 J5-2ݥ,|}4 N׸+R^c\(vtܛX{MC-.z,|!Q A( hLh")I 3+EڑF@k&2k!(` X ?^J+{G`#ߌ9>‰MӓʅKys"1H]$ u^ BeU [? GF [H *2gAӘO!l\tBI^%/4J^r_6 "ĕPp$I$-k9| ;  (iO(6+uZ\_TwXL7rw!F7X (u.΅1QG5'wQeu0ݿOŒ$옼d$M%Q]Jc٫a#MV-#b#LY5_"L+FLX"-4QMhxcZłf hw/AD{]US".䂷BcQ 0*)L蘈l%DbKagHT\&b#2Le,^1t* 72 Q>dymo̓fXgoNDJCQ-+V{&S Og0@Km~h:  h{O ! ۩Pa,FFozQ"yd4I\9"4q!/lJ F. ~hR%R T2_,"oUӏZw50_`KX]ʇOO3'_9Ӫjy{#mk(x镒_SN9{D0)b.7Sr6N=oc^O ʮ Lq:]BU \U&IGJPO\RJ҈I0E^.ElJC|!teB6"Lik_<uT}VDs31~EO1rj i>D +͇CVK|~HYd%˧@4KxPD#X8 %ͧyuIaP;.eՏ3*SJ$Uց .Tp$a01'%RK? YLA20e0Oz%f{GC?g"YmF}N}/x!, {wfOHve(dM*K{rYMRqNUO٢榏XN8`B XhqS!l~((7/# #RNmI,!QyTĺI|tK93ߢ-5 TPG@kxls xwtU]d5m81ӛ00EF{Fˊ1.f8W!i~`Tibh NJlDDBm]O8~#uH?ߤlQvL|ȁ>r b%+di6^^H 8d|It4 1OXt-lA[q`rZi$M$I a%.XC4MM\F~0|ИF ǷzQv/ìIԈDaX܏2}I! :l ` [rᣧ?j"RF`SEAoӸEQìOٱn6]ꂭl!ιXhC1Jbg>FrG=[GDZ]hS |WB4`1 JUMQq3$jPP钏"|~meOOVHk `S=F=\u&W\. t*d, 5)]d;\Om7ҳ]y v؇o'/=R1lł@<{-M)_Y|-~+f@eAQSFjvDž]?"'uAd V]dגtc|0VGٻul?pF;fI[;xya-pZ/y<&o0ݳ@{k<+QWiUƁÉrHUajWs"yed%|OM7LFG}_'* EҰ*Luާ\ SAFS v; =HEij7&|eC1GMECiDֱ-c;jif<3NxF5)ͭL/{z#<$ؘE$Qg&xD 5TcGP;@t-V͆\" PA升?<秌vyj)B//%Q0LHCk=q621xjv꣫JO="6۰iU d&=FbwK5 ̲!F09&Bq "qKčEDSHaȩR-(`r$ 6\q1~ kEo='jG;0C*eb3LfMilof_!sNv&}wG]ؚ!T^[G *& x)TP~U+`Q磰zeێIWCe>km]4$&pOJ8qfiØڒ\Wlh9l(R.@Fڛ13B/^7 aGz3OOFŸq(9@qOqaĚGc,!'7,;`g*o}\bNJe+Fq͘:0 x^L|8H#q H#@c"xB$Pt& /!7D?OԶ7)lFOa?0?I3e*(c!fRtN :uE4e|. Ǘȁy<#%Cԫ5:'{4OmFe?aҫ,%*z;bbq \:c&LBLː,(SWucYppfcz@҂`":WúB[,"Bۘ0=6'1'Ƀ~:DB@ f)X"9JhMzt'd,08fcsi9 %#n".9&D\А!Ӭn2RPC wm}G2 Hp֟;Auޥ,k!6Dw4@TtaV'^=]!g5 '\S1o}֛S00]B\DR $9deFѻ (^p!0L0lS G1B^،q$TF4ބqy|&PɳZG 6,YYׂ)=#P 1ꔉ WnxY4.F$x[!$[+|X.&oMEl3-o{uU5ᅈ7lZWKOʈ]I_Of#kE>48o+mM2{6'5`w,=&I9Sfyv:PW4ml?&1 U"t| Dn㢤"rrDъB|}2` X=ײ]c부-mUξրGY:tOM_n2s|+kfWEDd9La2-^c9 ܨ2;*z"V" bL="i:Lhz)A l1Tk< C;kk8t '0[ա?7²;qX;/ -R3X,^[^6 ;۷|(GLB8NKqA4e(E3ޞ'`rm!-RD8-md86kTp.GUjIl!^E;Xгu!)8 { B8GF `|hMLSCo1族^A7,H҇_"/SPQ4Ֆ<|E] ~a2ć|,W%=bPEUrRu{Qj#?2OfKVutx>K_>S]c]E;eن3bdb߶*ޣ8H84Q,3,RK^@X?t 'S*_ZF.%ЛrQEoTHhi7ޙƎRCeuRPQ*ק{ l?' Ht_<_a_#7cjG&FX|6bOn:$f~я_YL;& r &Kc=D-^^`0?{uwć<(]89}:?>0C2HWL>|հr2lly/"Zl_4/r:5хQb'kMV'z2XA^Vw_UM>wB9NMfiVAX"|lR f@rK1〠nNh0L,i8nʁ/Co25spBI*h93*իWXRXjr ({ /}9as3f~NJD( L2r,mq+x,YOl&zY &è*(Y{XrJ쯃0Eb@7Gmmm8CXQQQQQQYYYXfffffVVVVږ ek[ek[ek[ek[Z'EHޜqіלSpʛη[_8_:_9eݵJnknknknknknknk.k..땾lllT߅`Å`Å`Å`Å`Å`Å`Ӆ`Ӆ`Ӆ`......[.[.[.[.[$t!r!r!r!wנ%6VXIDڔliݖ6li~e–~iK_/֜FVfvʆʖʦʶ֝>mmm8CXQQQQQQYYYXfffffVVVVږ ek[ek[ek[ekDSH57sNNWNmwҰ z..........w!p!p!p!p!p!p!t!t!t!ج` V ]\\\H'"]Bs@R%:|)pR\m1#pܕa2JSP 7)Vf:sO"։& hʉP#}g9$ &D9̊UFFq/AəFٲi*@[)!qys&9-jXZ掉h_eŌd. IUº_1*Z* >b5î_de#uNz:jp]FOȕƟU'Ǫ%@MQ_JzפZwSNJr?q΢u '}!.xvyQE1d_DQcth)zL/}&񼧯Ww3qax1<%Yɣ(yucI[87 JnBkZΩU:q((Q=pH(F=J+sφjcļ!WQfMz'XC4_Y?ݖVjKķTqSoDOBMPOFbg-{%,lʑInzq[& ds#-W[{iCu7H1s'Ǭ2j]ڳOFDX#9هa=>~{U3O\ ZR!iq C]KX+)eZFWaU!9Qų!0XI'#Hխ34x>sVן&zFDrvǑ\n}ɓP= C@2OE>b f14UM*>fvi׷`p4q@8<}]@LV 5ygr&1di)yFxݰLa`{~WxqztZ}_}#?i,rxw;;UwEd5a_?1??[dOK]x84vvNHbKԴtGzXsyS!pŸ7_6 geOsFac&Ln\$qr0MA{Z5c{$ gww8{:v4:ŝ]*zl y vOĵkA$ pPo)rp(.MѺįacT}-}M3-2!1/) )~*Cuʍ/cd8?T2ed8 Sͫ(WsO'aYT $QhM"Oâ‘f+ 8sV,B؜pW7 h1jE43"gH@Ed?|B 2Ԝh[&L^OhU^{^Q{ aɄ4:o?@M Oc[)ƫUc(M_^^6I*4Gݬ}N&.t, bgAh8R=Ϗ[oE(B6st6]a0PYا)!%ulI{4L2 օ4:D͒MF(]Q,)>QAẈTnvNL8?SgO-}6N28з$ky֌< (dB 'O r4F9c((x@ qdqDL ˚>_7i75?TB} tx( <"e}W+яC2Ib">^̀pƦYuލCcel2?d"/fa=eg0LOެT\ PsC5Gr%}O{9'v$yF傼-#S[%}^ y\cm_4+9Y^ݡnvקw^v9=&Ėjwj%΂x^a]I _d o\`54dȔےċ;Qk1Ay꠳Eyj4fQ`1o${{!wd,ʔy|ԭ1%m偙7f1' ^ 0 Ob:Ͳ"';Fy+й9v;֢H2=SŃKǹ 4}#*T^v;V1OydYowɌ Eˎ@^* OpS`"?gE*c漻B3!qL6P-ehFO#Ff j&n1m]7TMbMLYժAqKwbםݳrϽO|ys ~fT[=yM+֙W>-T^jW2!jPUR-8HݗԹPh" 嵬ѵCk"k`Dc+,0>M 0煃9hSAP *FBNfOLlSx`Sl!\΂yX \ /!T&qy g9y#tpC{uKlSY~Y/f }G6 ՗rˆr$نdJ!@jy+v;Ϛi.L7s à_-C L̅?s$oӑ 2$|Sy(>DZt񉐤cbK!G4,?@t{\Ɇ\=$_#/_R7ueåRnJS Ab ᫇(X 'CIbK5pCyN^bʼn PGAVoCP'mۤ?+) !F=oNRĖ\[UQ )EAa?GTل>`-@X>e 9H:;ݔrTns&J 07^řð䈤_^)h!f1NN~dʗ^q]2bpF4Gz;6ZRYxb6nV_4! A^R;C]o& {#(Tw/S~\ Y4խCSNG*l뜣xKUEԖ"hWmNkO)yG/x}ZTCzEq:ef0>~~1'=s{}BMHQKĤkL^$# 2wy*YmS˽ëS͐ŝMоyEZpc GtXRjmN;S)if+6ĉat]Xbؕ<LTuWŎJ番irêi> g- =`3Uf'yCx_*N)UGt=:O ;y*BwDy7Q'Խ$ʎ;ܨ04:TVg%zl ' iS;FrF8vrݤV:\ȏċACw)&G8|,nEa]g(|K_bI5ٞ((M8K%2_H4Ra.%М)Yi2YQ&E9sA#}(/axKh,qԇ_0Lp1C'ovcꪂVO9<^R49b/bž '"rk"թL-u:WTEMۂ4a7Q9ߦ-FJJĪc_idTZQm;Uk*D#O֖,b7ڼ.hz8Dab"2Idw I-+@,)G,]"]ר 0 U@r#PgX~jĹt r5fKZ: yoa|4-\l`xY?7y\F-O ۳y80_=ʗfm;f~cϖI__wߤOwO؈͘$.[IVOy(܆򥓱èu7Edo߰u0$}^ j&<"NVղE!qj>{g Yk*ao9#KpKEܯPĕxLFL~6E{gˮ⋆> juj-~{?P\DmltߥWzVD)=W H\q"1ޢEOV>ť|+20f?F[!+238굕[1Kkfa܎HZ5#'YgÚe|E/huGv/vbH#.rZ8Ng׍Fĸhe\ŎVe2Yk619D [IY'&'(wPaOg_|d$fȶ$iɬ"2xTK k"˵&(2VM:]x.5ёԱ(޼Eu,@-4d8DZg Zϒ,jYmAO,T7.W]q jĈKLቕ>x}y|E:!t}ߝ aB&w&!`\,tI20f& 0( Xވ`v}ZRDpu}==U}u]W=gOtgo=UUߟz P*S.m@bh*,xWA6iJ k'ʥy2D2 9ݒ-*ߙe,* PqPf] +Tb&l5)N\/'ޟTXaQ>cJ0ٻl>2%MHM^H~d2|?eғVc?w D~mLc\teqkV8ˏϑKp`>_Gbv_DQ\p9Lai( 1AF Vv5[$ig&-~pu<ʶoL "y ]HAP0_Y?P/YUVXj aN1+ݵӽr3_YP;WpAUAI[Pե4hn7v\ g?ה7 Z4KC[i\kKbz/;e2ڞXYNI$O_h{,^]LFkN"7||irsΘg叫ʷ:߬yTeV>ZrhP'`Pq̒;&.=GiDu(z!w6%JUVQRYSThPO+#BrnqRJIY1G\<*{<& m bH.3ק)ɽsu3`ˁRyp$7D2mY^A7#|wX&kni\F[9SkP 6VZYMo ^Fb :bf%D4/X;{_ #jai|4µ7n] `;HqTx-b,YrvI[ BF~^Y:KR(gf|nn2p”L=f#-GOx,N),2cq#)scetbWk:=Xi|^{>>ןsb>ǘA0w+RojFn괛zAid7O4ȃrl'ZJO_g%3ْhLd&X2+̤JfB%sH\d.P2'̥ID.Q M?T&8U*Sa8L0U3SQվpjRQ9J5G&(Saj8L 05pSaj8L grZRQj9J:L+0q:Sa8L:E:RQ8J=G(3)ԫSa9L=i0 4pLGi( pQ9J#Gj04rFӨJ&zUr s%G2Wr$s*VX`*lE_UiYgM5DZiMU6WxX2JQU6mV۬ Yp*fUͪU)7bnV\⩂nV%LD}nVݬYw*fUͪțU7BoVެY{sfTZ~JQU7oV߬*Y:ȨU50z`VjYUs X`̖ *YfU'̪RU0jaV¬*A*ޔfU;̪zU0aVĬjYU#FͲjUZRjI%U\K,g "B9h #yFcA*( ¼Vnx iE6v7=Ňc#q+Wv赖_:zڠ^rd֐Y2k`f <5@XgMC4* JC4* ZwzJE5j ZC5 FCXh5 )NCk5Z ?%bX!j,ju`XRmwY4: NC5z ^c^ˍX2D bؠ!6h bE AcQl5F iRkb_ ^q}ʃod)B~o?( r绅[ kMBkml~ay}6[M, , -I)h%]+wD%1|C+Pv~8I3^Eh•nwKwDӛ?(Q*?Q?I"J?K V-nҕ? | Tn9_u׸>lwZeʹ/r8U,x`V|}2 bg X\A%- Fqka|N~ i6VDˍtfZ1nQ.| Fgle_h>J$]anacQ!hQrr^E2uP?Q؇]IJDZ 7lx?I9s]&^ x0/;Tv`\T.ៃ:5x(& 96jD H8W` 4bsQ1hهxg Hϭw"|ڢD ӄe /ALzX?Y9ϜlbDvNCpZMSE\|iDd/~sOՁ#`9|$A \@4{ :|&x_EJ #[7nb)F̍?Xd2Vq@jO\2bK8y%ʠ#9ͽ:E2g0 \,ѦNP|gME;->Tȓ+(qvP$0BCi'4 ǖyCYFWOFd+PA4 qw!ˌ *f[Iø vP?> ߫2;l;hxN1K0/KF9Tӓ ?^Jk#âBkr[' qW׀TUws^`oFD)}te6ul]0c57ȦE9-|%Ďt~$'amjs ^pMa 713ܦE8X'jwxB]Cψ4ɿ E"L> o1tn\<L7RP?0"  wzLGEWp`k? ā-=Hf 2 >}ؠci&ķ ;he+A 徧W>qψlfٌ_ `"?iKe#*͐Ǭ!ǣk5) rc,{_eb'tdO;>HS`^"DlV}e5 %Y)ePքŸDM;U|"(Ky/յ ÌƦ~†$ߢF gYD2z.z:ouNL(sAe'_ӱkL*Edπn*5k f'4Rr!OQr./o>+NfmH#l[G Pfo@axJ3$[_؜ԟg͖H8rqIg*ŋ#'F~*(gρܙs}ȭwAr6iNNi\i2X";z2t"@ZjǛz$MaYTw2o xNNj8E0ҋlטƯ/_?|**F!=Mo-%IIZupa^4m Ze ?2ck~CpYP #7A+Y0r[D `~oz={/$?3pH&A,3?Jo3?Q], =VZG$<׭w 2R[>x o"lt:o۬Ԙ=!0w_8NX+HEq#p}oYi~^;Gtx dyPQM7ed)]]׿d܋{@FOO8$Lû?)}O| /#13k)f7Q`3Jo|=DO0Ho$%.o fݧK 'ё6cL) {|H=1nbA[(#0:6ߩA} OA9#Y7'jt /tkD*R[,j` l։4w8dEO|;=NP}}[T"D]d@B{/s{[dr[kXt5h&ֈu$X\$K/"11peNrÞ: f'\Z}<ܛwS Р3jc7T,+7RhԩT~r17 r|cwuŒؽ<ڗL$fn;EptM"g7ZFO\gE†-eKZkFS|!Ve katzXceo:L =loP}}4Et|"y].7'ENw+%hYl=+h9mi\6œh W99JӫG*#C2%̗gJ ]e +EW}ҠQYЀ?Z+[&V^F~hKɔ2gH<36')|̗,6Xr xnOQ7+7@04CIhfw]o ^2/U;V>w䢛0hŮXcDa'Դ|O'̌0Nh֞n1Π"_wQ!9xI1[7lⷿGԷ;dpÅ㡦ٳ=6z\t^VG< =dH;EfS\09`mp"hzѪr\%3t!b!R_pj}>fsD?˚5"H!$3FT pJ/&bZi:`(gNcq;n|k0aˠr ,O?J]`ff8.r(i{ɶ,td)znbY }9XȮz\(#P9{xE+A-lhU7F_ DcG?-8v@Rd$5 &R*w9'´t 2ZR }|jE,b3ERnGʹQ#4|,r17B2d˫Wq/=0y6Kn_8{QvDьk{>-{a>wNgB<8nf=' ~lD%}//ysB9M \M4}D͗x2H }0A*~eLg!ڿnLQ?@/nxPR= *8I0l&v$).]9T*Skq'bCPe#W+D}4׾:OкMUpo-߹tsNT/|9qoH6SgпpOu011L߸Y'uvf1Lr¿K1N j4,]:2L zxqxK7]4$x6ƮH XJz'+Dk~p+fq@ir=̟[KК9V~6s* =(3?~>9;0珐8l+D[Kބ_8 KGafXi⠨VG9#Ȧ܎ 8.L$*>CE|{ (Hx=1tN(N͗L>$a bAt >LL3L_-=$ eaHFy7g 9x'S}`-muF xR2B >7LtHQn/L|>kU.mϓ8};\xVmpwaJdsCBl~ D;1FaKRc4{m:P%e%>$8 =߇ے.`: [!/\AR;tfU?vF[7,` 'F$9GA;?HdI4ob8XȈ%OXn(rGmuk8F Qd2y*0K]q8e)wSW1Ev'" Zq un :H`Ra |Ј#шFCC!Vy`D?&QÉ|vdgTv!*(VfU#NRJǶ0υ-ksaT98y!S,VOóV{ʚ5"ǫBHf|EUeGt9|I f0|^ovSX Y%+b9p} 4ɳ_ އI_Z |} z |O>Zo(EjTao<%Sk F=M_ƯHؗVuӭ]">, عgvs-'a@n7disD = *V> tY9}0[l$ KnC{ {4,(38σg`s&;_"n)b{ &!bJH $\~ _3iŷwi_͐GgN^{,J—7c2"4D\]! fQT Jh^Ȟa X"GUթg>63P-{XU¶hk&b]F'ac0 >D_p)w^+Kvn{L-[hr9os` @57|g7aGcb9v$E2K6 60<, _7` g gp>3GC#V{gZ·Wuwg|e %cRTHRx2Ia">߹?Tai>ʟr[GeWa$32PI¹.bGa:|}I;z6x=xN?} wzZpS -@[\"Lt7&S<$3˚5"}1 !QVis7GHc`}n}fM<(|f#Q|+`<_e%2;E#R@}"NVԬDYax8*)}cѝ+G6qEݭЩ'Vj\ oz(Pl]EeqTAL?쟰f|ZVo4J8E?"S8Q9^ a+CMfjOΰ&2vأn}fD70&1ɢ,M d3]+HJcQ:bQ߂ʂk'NB+f/HWNhԐj?;Dqђl#$af d6#̞ňlk{I~])X@2sJ~#Xi3.Ս;5=w%)â;xN04 bK:$a D+ r`oz'# ~>MYv( .5⠇R'HoLAeT/H0X *#hJE Xy,r[uih&xHO_4d WtT^ B]3|3н \WgR·X6{ 2QG{c7{*A3>%:peatSJĴ\L̜u}؍ܶoMौ~rٌd oCEn2p/4<X֜,Gzϻ9$݌ %" VڋuS ռ_D)?pEz4Og|η%GEȠ ]2"&oF9/=bF9'.8ΪBmޘar^B Og5B&WoYzz*Mл&EWzu(l59 F@(~߀JւJ_W޷ZPv O-F7[0G-Ov&l^mPqV ];m|̷ frwzݞ EOe0 2:vG XhGyO6d%RԆ3_ 7$:Hp:ϯ@uxJDK׶uwk_Eֻ㟉ps[<$p&T>Ў*߸A nI^Q O&*"/#t\PJb }Nhi[PH>V`B+ʡYX&E}_+y+Fmzڂף &ߖn4'~_w CM(N6|OwVЇPM'8|hn.(':P2l4d ($:h䢟knc ֠L|v3hEЄKhC~v&a7@Nt&[+[״lX#X=I~sNsCeʶo7JhK4`[7(7di='"{8 &~0޷8#Imˆ>ݍKDηyK% =nZ,}ZI5jʨ/K:8ERRw@A҅\z9ҶrteJd򇗓E iʹ)wA֫P{][A`oԱiX91_B/oDsf/X0ڣݸ (X־sW־ zA]; sm 0a/IC37ˁhht 2o]nANvЂ?a̾v1 y|N4WX>bDeBoފ&_mrV1@?>Q|/y'1EW 7Um}>`'Tɟ%v=l%m.X= isQ~F{${QnTnZW7OS&~rٽ{\\/=Uv Vl7 [$f*W7RlZVтU,%|Zm)"d" J=Nt  С)W+DŽ=&9hv =|uE OE4Z;K)n|HSLfR*VflDSӱ /9jK R $>sUڣ~| u?Y̧Q+O6Y: ƏG}=SDeUu +Nqo:wq.kԌ-/7GH!wKڧQhm3ȀJBbYoh_Þny@yMN*΍h9> 18$ C1ǑXl0Dm)P6$'ъ OtvN㢑RCi'Jl= _q&6*hj4dw,V( #SH@z^RX|hbҫ#$Pd<Ө.@_A pz҅YQ~=緛0 E4-1JbXi z D$rÃ#%^t1U-IpxE[wK( C=rNΗ9Al8O깾/^&$ )||8[/ Z^S^^CU1<{-ar5qBso(|ћ4eD}MTI}Y|J?B&֞|  ZS^"^!J :SB Ll7Pg$S7A O kVÌEY A694j9ZW>BCly47~{zPy#a)>  xn:(#.'`,|$ʈYoY ETQxs(~=Qn$YpR˗S?)if-߈o JҏQqf 9碃G_4}6HdHwD0L Q|8g8l?QAr!`!Oei̡ޑ᫸5m{􃟢\O~Db!wKf ,.!># pX4BaZa66mk!1.lU&}M[*|շs09˷B8 Q8v 8\+^Z$#|IHKc[k6\*b=^춒w7 y²QSUMBCFrYD{Vpx'l y GKmEb?q'[MB@13 9";BGKSY4Q[^\Ih%o 1cqMqpAMm.B ,Q_챎f>+H~&obLaP A¥D.Zt"}}׀o=ZF 7^b6$>䟤-6ス>7x<"/ 1'|ҲõKZ:Y')Mږ6v].r8 r+"6 կ:az|׸PL8z|@gb/\6!!?-d b -r !ߠQ$~-ԥgh.$5)|?>}4f'zfPܲWjvaR֌TEK-y&L?.ʼn.nb ^Y822a40p5R_&\ra:&7zx}0 ݓw[Լ"J~=DOR;maaQ1* #h,ЯxWYIݙ= <7߬ &MXvelX4 $~!<, V½l` RW[m^<:BSQW^% {b9j%]\KmGQkMq#{puΨ^$xmTkL\E7,,,ti]\%iuY3,RA.YeVpMmmkzSF%1>4ڂ;&55SĴM?!F[5i{iuQ̹sΜw構WXz~\dv<#¨ljEzd,Zfg)K:G QIi?'E}Kɬ{]`Sס%u3#&gsU}ٳC1U$?f$_V?n UGL+dD.nr6 ѣRilЌ|l;ϊ+I,[{P. |3 =B,Au햙m}X~F8b4zvtTc7SAE$vu1zh=&tv"唿لC`f"`-. ?ފ;"̾8L(?҆ Hg!9yL'Q0s .f<*=U!yo $ 3|*CCL2xSȋLՄңZ$=V=!:9!8!Aݩ8eGqx/FHYãX7 :XynG4~n_et5[52:BGYtqw_")P;QچhvrIz_1VpݭVx" UKo󉑯^'xIbGj(a#|*bw uM3E (姲91 %b'-vG1DKO")M ?q}࿝J⃯b<Z*NA*Wp1K`חQlsz Zh" >O7jn}T/Weu!֒G=JF[rӰ+cwrͼ OtBV3=~ ]IP[,u.#lo7]Vjh@70P}N]0m=^OփuRQ/`]ᕊX1% '?De FL ]_^x{ xESIHI9HgB2éC:3&3CwO5'JyzYU?XoDWqWwWwWz&{S[oU/;ێf"ܹ9HIܑ?~+t=]2l@h+NMgOFоlW+\ oiW:744߳}|{oa3F^VeUUnH mvTFG{lΫ)ɡVWJSJ!=*FŠiJVH"ZPbJH{8Q6;*HV e@jp3LI$Y 豮050XK1$}u+Հ SIJ5MOLp`!lEiz GrtyKvp9v!䗙¸ʥj8yfT }1<^!nu# ?2 ~UZy7ʳjzWWVuvVյ"zOG>q4y^O"mԼ au4۬锖FiY>A mߜ]xasyv1fѯ:55,wnWI⦶jCs'4ӹnȩ65w^?ca(7=„Y$h0DO2MOUg=sI-؞(Y5 $ٻ*Ƿ1i UQ6̫*|sio5˿Ҽ3)}e'¨kj7..ޱ qlil }iE'L7$۳U0v, w>}T鉴RpSxzywȌ_x$ڿiq*tCsפ%\[x[,F'YҋO&_y>oџthm "uT4Keہ]oq,{v_KyXog|zu*hbϣ=zX%ch#{⍚yBGanlo]?/452]jE9@<6 +FU:8e3 Z&>{"cS~g]0 +<x( OqFaQvn_p<?/+iZI(ֱyklb*[ +~ u˷6Cߣjb FLx~,Y++ۚ5fKfaS[skJhg ܱu)\QwHt|cQKlFW^^t"|qUUW]kRGAm`jUW9>"^e}w\EU$-T{=~оIoiWaۯ߰aخJ[y{h1 Ij7|MuN*TO$M7yhŕ0AX c"@% -J H^‹>ю=?W[̴G۔wf.Zʽ˗WKdڧxF8iɊmˤ^ѾVJ1hZo)V6-Oio/~;_x_4OAd#!t^||{+pZG^*+n:)MTLP+[9v._EO@f_+/e \Y)>XUןU"sbɅUl Mt-Y%q-6JOO, r ~e=O=x *?(G 7YuA݊s>șt)uy1>ɕE)];zO^}A;D J;#OO+Q uڼIZھl$JȾtvJzRupu{{}*$[q:2ג-Fّۣ'|1c,V)Q{>o|0;T@@БZ{_JIyY#Bٔ q9c۟(np_Aԁ0r+7P^:J]@uxR5G>,:x, f9d}!e{'~G$mZ\mDF`Id,)GE*<K `GKb5_ʥjLY{P^J!0j Ter/ӲO${T<Čճ#~T8;q t59@(2wPP uRA hѹ{ow0t筆ѯ)t%ڃRi G5a-*:\Bckq-A1a/5Xiu Ǵ yx*"o h>W@9:d-ZNcZ큍c쎂>pž?t ƛ!Fob420eFwXbtX`tx:o^4ƅD+rx@b 1?+)Zj\D:"˰l$˰?) P@Bp1P< WhpV Sl7BI*9i"܉&4wUB~Dh[6vyg=积@3GQerZZ(=i+赮O.u]yj4q)^NENu(7R켵 S~EMbqD6%XQvDN8JS~o2kh4p}o+E$x+7NPQvm&p{zEI vݢNd<5*%ΎߠՔp܃3 P\{?:m}4-At9r<ރ^sWu`g~^H3wG[UIǣp&CuIb :[Fpc/_p?n uJ#OMn놧Kp.u5O؀bg:}" WB4b܆SVQ+pIT./@+)̣7x]H|_Dy3cyn)̜0. :W19US|3$YW%c)WPEȮګS1dM,~'A@(Fh q>&|N?ڝP.\>o?FH r?zD";24鈼j~b]e5U7|I}OM>Rl8< S\ԌI=*L:e=OstN =4Eېh>g)"vGPgQ_]9T``؁1+n`6-zJ= Ŕ nhƖnIOi\OitQ[Dk\?¹ZӒJY&aeSQ5?GLaDܕ4Ғ[չ%ԦL+Bn,RG[)7ECz/9NKu@9:A!-/A ;O?gWr%At7#C8H.w^P]?R5Y hL7Gtt, ;䰓uB"7ZGg ܆pdq>3G_?;\R|~AxzkYpGpS95`Ln q\6s 2)uj nKnOVTlq)r (Tq=Z1"th̦Ḇ:ޒ+ K0sFb+Q{oDm2\|\_΃eyuH5:(}`NVqb %4P䬠,OA^W9(ST)+UIN-54Y7aQ-M6Z*LKœ%[i*JǓ |, %܁L>{"=nzTVV"Zє^cE\]ssxEfw=VJCx8ǟLe4:mr* nҀGAʶj详oÖdd`pXTGM tFhL &:c]y,$cGyoM[-xs^+ q9[v,;|jldouiVJ:)%DVk<ug(#Niݵy ]+ViI% 0暰 UXjj>iBJ8NFR>ؓE1g?^zZSǵ(퉞߀^NoGhbG GNgIW✘Z;$iFSb՝pLeÆ] EKΚkp|HxC!vtrzvnv8k@=u#Cn$l8^fMcSŜ}{:gx"of ڼwx?݄+e7 f9#J6 Rs Go ;oņcފDv 5tzቯDnÅ" (NW,0z={W{$sH^ג=dL 6'9G3duo,4oےF3P ׼OǏ3~)O'q0=rYj-3سb'Ccޏ')shlבCul>9 8?psQCfL/^%ѯp }Wx+$H,JT <6VաU\5kz\kDXs Ui“AK>yCXP:S%GACeiJD hr{Up1,?bg4}3̝f~UIt;@ T &4zaN1vvF+MApy8vn&Ǚ ʴ`PJi8;9h`P[7=nMhP7e%yA-UT=9t t'}|I.qO{pR ͘ S#AriH$O4]jjiC,e4wiB5uL\ ܇Á't;#N f &܄.ɜdK#%q.D?,]󺔠L%fg QǓ̙.ó8dҍgY6 PD~OMg)<"ץPY 2*,lXltrs_Ɋ'iE_{|h&O+a[Rq1m.B4j& Y.}2/.n>؃' FK1hDURPyBSk^bRRFf,ƹ8xmSKLSiz탶ʤ_64*$QPD q|׵Tjm"aLdƺzgƍ1FYUf2  uahQ -:ɐ:;Iߍ3/_3go ^-vDRb4rw 8-嚊ׄ4_1Y]}y\u 6xƚ?8u!蘯D)e^b;9xmU{p=i҇|F !eHv6Tt7fRZGEqE (\oqr+Qˈ>Mc~}9;/:caGqʱÆyY!goNt\tECҿ4[$*iDӰ,HY IY $&+$.%45J5JMj"S%IJiЉz7H1T ӅDR".SK1y=sF+bk tIf)SKy}c6 ~3'xD_71!wpLEYXSТsh}[e2ފ-${XտGC9H+š~PZV^ՋZZ[r|QvFRWeX.w[leHPI;};^oe91OK]%N|5ǨQ_?hj5ؤc\%Եl]( ڪOYZIԧkHRukR}:OƉh;]A\>Ţ3s6Ϩ?ÙwXې_i;(b;-e.3_rO9Y.b~bN@,|ve*/]W ej!. KY_,1_?dAޑo2 .1 AU, X O+@`F ]tfpkmK+l_+0Jx}^3n`v.bm 5UZյZ?oj'7J̎WDZAp ݱ43 T{b+|n ,>B1zn ִyrFsض!(d#Oz%u+};/D{(_!1S֤dIHbTУ?S+IϠH*_/:Mc1u\`l(,pȊS)bꗡn;=l*\Zn{ ~S=T:\ckI01{ ~J6|J'ē(+Պ잟g_a:M9!xx ^}-6OJ`V+k~qNI +3 0xH ,4pIŷV0}D /pIW% tie5 ing>; sang >U3c1 <g jмϤ> Wi- & I+{,Myxrɒ6xx8V Z*US$%A%.ER*Ud$  Q .'Ydlf.QI?2nD[2'#TřN҉J*ƪ|'\ QTGD+;tWyt2%BqLxMzEOT?$$' Jr0}@ƠFv?F<ɇ iK'puSgqcXS."0.#`f(G(2(axL4a]Ql;#6o S!Уdq}jfAT?#|#ƔjKuwo/N/tj=yjR[$GpD즢[٥:8ŗ7-J(=Kr͠vGͻQ'zL"S5?w"Ճ퍭*G28BQI:E^BbM"iї:uT*5*Q]:3ON$fGե9qDYgy}em l~|;xޮ{^m&n7~omݽlmmtw;vgFm?><$޽>x~h`6f($&I7SqYSMSsg&jo+ |Kp0#P~Ś5yE 5HGߌI t+hp#ZN( ?7 (=IgOR??^/RxTeeE.% |tIzC",IuN~N&D &VW $[@c0fX?vODq)fv7F'2*ՎƬ7Vt6͔D'K@ӄ@J(jf)3X<,.0=l;(0<1uޜ<[@㈬:bL>ͫCb":$( 5'(\T8O"M <#Yt4ˢQSӦmU$CCN'@'{gRߠ>zv d΍|$ 8BC/oXV%1#*Ê/cn4}5H./z4X(ZP7+D5&zh$0IeN,ɸKagyd+зєĊY.8T#bɀ$Q2Ұ#uJR3z Jd$Oq_ɥʢ~MzG]jY$tS < c4.K_'YB/EUErq3E0U Nt.mfbT$>ӈ*\ ?7HepRZYTq'+θ1O ` ڒ)Q(3jRnQ: u`D!asaKY4Rh:؋Y'XRBD=2w||\_Ņ^6*dh3q ,I~z64 z9!uO4u٩HV߉!,2NŮiHB딇J"zq?&eD:I3diԯW7F3٘L %μ̈ѯdPK2vZ6jJ\%է\ ZuTT/U7N^g=o^z曍3T{}Q9w/|\SLƷ'v@'qOf2[jjY4J b3c&A3-\޲P%z6hE2 (3ev'(.Tzudޜ;KT@x3J%Wa+5_JO4D QkZ/-O^"Zȧ\~Oo|3bodEafnFz 5ZGM%zPP[+l AZy9ܵv}v Ϥ/E9Wf )'>HoW`덳Q޷`A> 8vcR(t_A} *jaNUd`Hsd?YmU#jE?#{>Ĵc`)Vb{MNrګ]\ i*h|Ud &SZDzQ -ݤmt#_{B@;3hoy]Uaч'v"tHtΚ`ΨcsaPqdGdyDS%"\*PT%X<x_xr~^p܃x~4#C5K(r3J;Zyw?>f9CӪE6݉PyoP Jhzƀ%z0o}2|dRL.>,KHEyC%ĭ"2qwGغA@1mz@vM\]&4#D27cOlw^yiQ[IL@% E@ 0f%E0fø(Xzk}߮4OoOt{X3T.ocﻚ4`[_DS]bh<#sA=|/JR 3HU@S -{_4)7"RK⿼"βػ.'NҰ+0mof26O6/BTD!G<(!_D$'$HVbhg;|@$ 6Q,uvDΚec8AFl0^mRijEn%g0&;MG4;60jwHѩR\ zP1R&䰚Iz~)O5:LlL=g yeM*:(sd<+7TW:dwSeLEOT `LGmWBp5Uĺ ;2/F0eFB$|G;*&$u8'@/`@NEFn8̓ 2눨fuEax/aIR = l?ο3Ч ږ{P-)z>q=^,:`?u7+UcF/ 0XQ]KďD糜04uk&#E *4S>?<$St̂c"=@X_!/CD3R~i0j|-M^$pJxOAI*qU9"4Kx2ĒCaNF0͜ɢ>߬Гoe{㇚kUWy֐(gWhpFs/ 2Laa@4xsa!υ|d h4W̗,Fшl>bT)f*aոd1JbSOQd wHt:n=P6rKTǥ\K=r.hHY.|.wZo+pF]7|>y};Ә`qi8;3m83-rDpPT4Fiȯi+n&l:59 xHlU*qwxM>nRAJbƭ'i&_Ň"2i>QbbKz:a70s1I:i8B[:f\0m5>)lQŅ}q4l2A؍'Ҫ>N> P 4 PKULfe?gT?QjTۥV]Rk.Хczp$Kˣiy<-1hڹFh`~ MY(2k;` lT{u(́c( `s8oqч-ѺA,I/j>:>hln5v<>PWD]4'jb)VXfaE8ǛCGOai$=HO~gV]ݡ0$~Fd'i2'NSH玏j?Q6&I5>-tƧA_I捸xJ}丵@L<ݦK|퓫>5|蓏|O>Z!_+@ 0g+@ o;mxvmxvw5] ] xWjx;NXNx;Nw-] xB xk޵U]"Sx>s.eYAjO=Leޖ)`wO0ͩe}ѯ7SnIU,03@8ޖApB?D'`o4x#5fyƬ"ң2mj~;w>4ck9b˂lY- e,ؖ۲[rBn;Z-䶅ܶrBn[m m!Zȫcj!Zȫ򪅼j!Z c!w,㰅ܱ;rBX yB^,5 yUf!Ykmˊ?wTGfORxCb&26W›̹YzL- bb%\`I8[Y}1%,jf^I ;Y0l.%\_c >?~7rr2巇DS}%LGMsI$ Nn6} l!cȇ/$ϫCYRpeKR6zXLSbC "#Ʉ%#!aᅰp2 l. .?_J/y.Uj,6W ]Grf.RBK_r/> |:?^Me%i=? '~Bgfs37y\sdOq3U/_5/9'Fs5n5dn&IcY4!`"Nc* lߛlgMuH=|N+jb52}jN,c:ƗFLЏrLPtH8ϓO4'r7_~LÅG1\]y x͒qɅN\Q,v 67 q yanP=lOP_η/7-q?[nddR#&0^ mJrf;ƔlgBޘBVvRRa}A?Rn@?r׵t.=Az{kkb}&[HyAN zݍ#;=&Š?is+^kq]mϑ g IE%q+ns#[4.|9V*s Mr:'n!j|? T60P8"$[C"j0N9"#MauEjQTve]R2 3K@ݷmmOFe*YQ3)uYVmO+KDG7Xdk<%ћ{*€)F{yoFfЏ[7I%1%VHLO.Qk.QVp[]fKz2י}եJ!@~m8/lUiǻfuJ}KK*ƷH,Ay8귥w "];BU:*e)EJ̐D֪: XۛsL*7ůmJ F8pەfINӸ"zE sP8悆r?6.yeO;KU02f. #nb@*CS̨m+>*Z5|.(Uɸ ғӉq2 03(f |0sL8kx$+a+%.\HySmvy*72V#}(f1Fw7a2%gMGW<:lg5I7Ɇ a<3.3ϥCavXo 'sxNBNSJ&n7LRi-2 Fp݄bV^m~c~k;-0^R6ٹ(\-@vw_}qxzgn~U66eN3Vλ}d' (gV"^>2̟Q Y$o~ԸIsdI<6Q ?<,fF41)K5*vX<^ʯhwoķ2P;.(?OH}$!V'uL6*삞C#t,^Ǩm%j3 D?5Fc?Krׯp+$pQobNJߺLE|MN?f4Q**3If:H^qH79fG_y 6sXj<ᯱ='۱G'ORVQop32XgHpNJwQN>$d#cLzx U_< BF_5㹪v6{$vSy ׊q hOO$d0@*KIU 1`SW81(L-6g1ˮ٤mc J͢4^rgޛc0$+7//}sbl*]I^ {~bPvx-aPӋ=֬T2;EKKXWl@g`NYlm,Ug#N0*,@.h썷GulaF=A!w' y[_dĪoIaU %S;:m G];/ ֮a^& ōLkcX\ef7;yVsbv+b=pͦ&2h=$þ9j/]P8^7t.:s5S)qMIw' K oMX|Ks>yY<% iNL8tb8:#,s.} oGe?|!/ў4e3371=-a֓!ߐ9!oTX/6mܜk\:NT,̼Ŷ0hr0.1!f~Ct"5yu$pȊB%cRrhz7`0 O2La(+F)rdWcWTzfĮLTqydEҚbRh7$Sk&2Є}'&yyb bm-ex^:٘Dv8 ƕ$?%zl8@_Ļƌ6DsXS`,Ϲ=\B^3m7:lE0L*ĶSm߮yq:h}j{D`FAsao/7ggUtݓvQ#xymWr>]:um ]v2 )E3h m]]2 jwi۴QZUh9h($m4EII{ET¦U&Cg 2Lm+q(EJ.@]2 Vkhgi41bXH ֓6QB:2Qt3R"]2DxӳDEFc+gЅ٤IN[Nh:io;igq+'V{/,2׆Uwov7Cc[ZnpbF߯1"Wx~a,w5WִW&{hf,M4_~-5[b囵Ӿ@nõmk|Iw3K p yךw^Vqd/u]/ϱ)_65Բj8.fjwrhcww"d P9+!O Ey y]wYxK8fXD>+{/+MTL,(f݇<eiBʁMҏ5I-&mƭ1Vnw/)'6߃<)5yŨ7[ɻ+u#MB --5*疗`z K>b ik4 nCZlA]}}>8m G} u֧nx]' Űg= @]QjYNP?:9o_~2( N,`޽fQ,,sFkFhtrAܚͧYhk,dcP=h V0e"BWg7ܶgƛ pdi 8" wVdfE},[.S>&M`ʳwwiuO.&2 #N 7 X谭ebc8[_.!`pbq*=ǸlgSp{tbY]$̶]伾0z)٥X'FC gq!6B;Q\}e+tns}kӻݞӒCQ:y=3U;so_ӻ !.he)G,Y7 I*AEKwAr YIG1asn]LuNtvu-w:po/9T7xdipb]Zl(qEiW]T&͂R-R /:XTE "~r[v_N^h%R}jCVilob`i028u*Jd^~-͏Y2"W `;L7H;d+ywUg +5u<Gi~vT<+2Qde`Q|fCM/!- Z͒԰lE{l:%`sP[U`|زkU%9IM{ tlա-?{(QL ]MٟB*1W ξ+K#^ɗJ0neglXa`GUI|uamV𡘅ԩh[ st*Y]G妆/+E9f0B`1{ M 齍-r}^JnjӈT#<)6 ;,((=^A,%OwΆ?-/1{e}eqmڅ#<'Hr]l?K-YXijl(jH['[F {Z-mʝrv,ڌ@&MnD+nuY:zIȥУ'~%0Q"z]g*Xyz*N3,s8>UM,zmJ u g=wb|pUs^}mc DN)Nk(l$DOD#˦]x m|'Ҿ!/A1 G4h1˪+ FU6Uy GbwMɄl9a#-UsHVW< ODf6ux7GI,Ԩ_4P^m31Q=ǽwT% m]،Jݭ4!{>nnQ{xsxHs`aU5ONd%l1RpZ@YqpNbqQ4j<ҽ,~ca򐪓j,%:|leKVT,")odbwU>P傪<YR۶l38& xØ7qB)Ӝm1Tؓ^5+ol$L~Լxf?|VL!pgw%}kΈSbも3i gegK?cz)lMѿ&8-cL1|l+FG^,/UX1[P#n 6R*ua%ѳCUy{(hDbd;W(!ja=1M}Q& w]"YT_85"ch>Tb-la6Mm)6 $& 3"7P oG&C|"?1$xRAN$( \B8Aa(i`D$$d X7 ԤAMZq#ԛ.Di RI $)H 57ə{HMRʍA*7kxzRRhRI$ͤ *KSJR' *N *T%WP2i#bI1*I *IT,GF :f6-(͝AjqQ; z~v)2,MmQloؤ&}X͍ r)E$$#57IM2RsC ~%:~~? TI@@ B X6d#'D JR)䤀$Cƫ U#&7R\$n  ?>_YvpȰ ά <#[C.VlxR>>KwÒIs,*&nB! 脃Yjw"gU*;a\Fؑ!2N98g"hQNO!$ ds2{- ej^fU nH,jI]QDv&_ lIV)zfΚjWJ59w ~eFQwg7J4gWwv;o]fF8* 8MGje9ڍev9W˼Qs%U(bqFM%N ߋ!n,[Q}i?P@q-[ue r?¹fj%ySRJ3V+{; 7ޘÍ2jm;Y|(M?ELM&'؃i@}Ir:Ê ߃|A#RsRf98܎ˉ{.#2,FL9.l᲍ \^ ׸\vpť>.?r!.G._qfOѤGuAir7Up-bI>Bzchd/s?Y'j:/$ 3+)ss;Z64AjeoAnQv?'9L ޟ2nm }xsH*_1JG %S,~ayoJdh#9.+ZA[=XU:ԃ5zH=x< } wɪZ5P>R T:Ԍ::XuTZkUFlM=kړaK=laG=FP=|>VT=PZQ[=ZU:њzDmzX=zRy@=nmxU=kCcIՓU'ՓG '9C/ʹ2B~l;i,N]UlhdT/9Lb ꓥIic1Sc*X# cQSC-X!lz@5w-LG .\t]'t?ŗ*?YH~҅#3%Mkblжs+Lt|u]=R#&%*&譛I^qsJoOL쐎<|#K;o_cr!дa.<!W w7]Dڛg8s%sW>¯]~?b$+'oIIF}zw" nFNNl²VK5k_WjWվ~`]5o>ឹJ־uPͺ>.WvQdSjhv\?22Y2OG?q%?r{9-<-L 9+7cTpoto@ R+ޥ^N~Gwdߑ{BkQ?OA &^Vn [Sѕz`s,j= f !jjxJ@ݔ˜k#65^&Fˡn&!31#%r1h]9Qi{absOBE_Oa>:23.ǻ1!ǟsa6OU}+tir؅*3UVtH0)]B!eHEvVs,1rV:B#{9錈S9%q {XQ|I-P6|'(˪ɤ z#" j>uS|tКb"ټ;!W߅oeGKD^cׁ׃d̰`TLz'&\y(~#L8.2Ѹ"D"zZld6Iݼ(W8Y"eWbL;Ɏ*pGi#\1r( 0Fa|1 ‹Q] (-Fah1bT+FbT*F> iTT!?abT(FfR%- (F~b%찤inG@Z0#w1`C=i֑fis'6 u9pga{O;vBa3s>,]f%Mqre'x  D ;3dg**8$ؙzK_Xpw|罹L>ڴKd/Ѳd$?J֝ZNyfT(_`$0n^VyVU˔jE92 YHDub\?%;8תQgs+yG3ߕgP2,Jߏ$KðdL8zx&A >觺5Gpm㬛Ǭy&<٘>=&!>ێ6K>2#s`eu#Pm 3_,c.q"ĿWzȨ`O< %lM ;xƀg]!cu" ab8\^!=6S(gC rulhOz d~?EYKa=`g?^R853#mW<~g^o`.ՂƂ9.1.\Nq.p2ƥ25edh\r\fr DM]DRCf&e:E Kdudϣ/ :AXml\?w{$;Lf-$zL'#h*K"JE 9/T)Nr+AYy)%qt 5cX+"'G&U"EzKhV| F8#Jvc1_WAF%.{J289OaQ+f HdicR5Jqک! ȂN:=)i~L4}Yǵ`GfXǿIA1~zvd/utBG$:߳$ev׻r~%iؽ6=lKh%ylXP?4[g~]eb峆hwK/=]NMQ,Rd@i@tOBJ{.>8~ceo'qA$f/uِrحm36g!޺Nf1x3Yx1MGW88Ơk9ڪt3L|>3&Uo ӔCrrA /fϮKvd޽Λ1M̡h>-+H` vIgnS/|ŜQf_ho̪ftיDQ2!h3?ŠJQVƨ;δHJt-I$P*Cy-4_bP$67-w8`;!Y3f HUʂn֦_[\֬AYiD\rի?R]jQwJI̩^=|Wk_@mjƑ9y!]|L\\%/qqp\)cevM^ރ/R.n!RZ0LtW+oy"oi2L]~AAw#|{ۓqO|Nt""ܘExleA^MRxqL?W_8[C}otq#B^c2e0cAL8#F >kAP`_˿J ۱5 KYm!3Y8Օ&!W B"]U/eY<ƞ;Ʉqp<rS(e6JKΦ[./r&PC{ X%GcjD.`n"5g}jڬlxKXc@A3[p}ȓY5]¼K&,L?ެcBo~ -GQeEd@m냉(Ly# 㱈aCÏejդPdBqaS$K@ʤ݁Tncҍr3[EڔJH0SS0U$zl|kگ"D1!r1A!$ `R0&{[kK8[F;Ϯ',Kp,J&.JZnO,w FPO[IrF|lՕ7hN[jي; pVKIӛ1 Af{zŧn*8nS+τ?F=c 3ʌ,#hQןKƬ YYoϘ6߇Pʽ>xbv.k# \î9eEWq?phjgvՕ%7JBH&qލ hR${$fW_G%""pMR ;h\aD}z,AtR. yAp9X%kSTr)\*s vX˃cUrFR1/h,u DRu;^F8zo !/_ulš,4}UL@d9R78T / Bn ٬ UUY qQ1|24 Y6F FR R+{l6J3ds%Gxuy$''~KOqHq ˁEQQw /-"Pf S2>cqlaGk'[·Hx"7 LD^1%z4I1%Q'D]ipǖH(opp]=((wR)Wt{Lލ+ 'X o$>{9سo c_չag=+4,' 6@:JGZwP T]pE|N:/[g654>Puw;.q羹3đ׃Ixo?RsQ_ց\_/٭yu5O6\*2<,<{dڡ<^#·7 kkVF0[ZM|jA5 9t31Z;UM\NX'U Y8l]>52iG|8ì(T+Y5 lX3&puNFisf U`$ѥ٠،ڣN?=nXx8Ƭr9Tҳ$2[Ag)/M}S%WfA93od޹ 5Qa?>JͬD)):rac,ls Ԏnöm[!7BAa, 0etƒh5ē{Ћ@ު;ꥒn'ge1)a uc#E+i4fҫnGCFkTqk[y( +}wNJ{1$ߛdQ ]+{+,{fG%m>!f={<%eUvC17kN.nPZx 5\^{ɏ= X,Żc_V9wƜ 7T㊼_0=S,o%\r;MDdÂE_ A9ņ۰%KTq2QJ)]%3E.kC}!|xx 7Mv>U |B$\}[_Tk{Wο_ߝ/|>8 ]nc ViθQ>_ 6xw^ϬȱP̆&Ԟ銖w$D|"t/g'&;9g0q}_߼-;]ֿ4Equbzݔﮰ~p(8~w>$a%IٓԫA S0}+N yj07vE3MWoո_]ZLW7k?p)NN,1` ,؛aef=<33^dW(ߤv=M/qU%K ydZ@b*;2`3u?{'}&q("q>չdkʎ+rF!?/cL;0pggК'1-H $ $CLdGjy}_ X,V@^Lcþv^vz,G'#V L2Z?gɫ^ +Ծ,HJhNhLVYGP[Kbt1JN81d`42vCI%b?+I|4#Q"5Ζ9,Lw_/+( pVJ5[ GŹ5A>ɫ3*}븫nC(uO~l9cUtML?UֱttnM%Ɋ62g@R=uVeH}*^ii˾Ʃa`}>5fԽHmBp"i^vGgݜgMyC00 #/qak\+z+] =YPۆDu̺:GR2Z8K;{>k^b>#aqs˱KfOb!21 D%`w545;A_77Z*NHNiXx<[oɲLG[hl$醽5{hϾswx|9mR$M k[[9C7nJoes0f9SotWMٴuDhQE- BX/T 0kYD"ftZ3_6Tփ5J=HFꥆa NK7JctK[m?uqgsigөZP&{AdF&Iujy㳝l6]C/ةa9r|;g ^UN<.ƙ80ݡM=:LQtd^Mq [[Tb/񱨨%~r, ._M[Ueǂ canSl=T=0Dl-/Ṳ l}73ü!AѢ3p S._ifz,9gڢYrpuXlhRnE`n-3XlV0WkQ^QڗE(wtf炫8h/Vlf26NN'aR>bf('8C9A KA>]Ȩm>wlUwe΃y(ruk>"faD wRx|ub |0o~0φW]X抿gqɋv|KalIՑrαR𒼼LoYoSXr|iVCE`fs:;d2|<:86 Ns kIj[j k]nX6ٖUK5FYo/)}6xq, bI@i K{`Bx\ so$^w=E 'PMOO嵗(I"-XPWEu|< ^mQ@eFFFDFFFFF D`Uhv+RCxr˒ھMPGƔ*+\/6=~p>Mz`M6*|z=VbX..^PdఆeN@|tό߳;~jf5}@aQ4Y(י*D>`_AErUg93~9SH9`IHY_+O}6y{~P%>Y!@HƖ~ mkMM!L졊"g}1Xl~0u~֞cN(5qgZW.lufL%H=ySH:iD rcZ;ZP2G1e:3#VC(,xAO&b,!}XƇj 8|T M] bٺQV3Eko\ )_TGQ@IJbj1ge1ɾl  |g`r_008Pu""$ШR!fTuz Dqn2~\F!$ۯAʰL ũ1h[)抦j TB_^/U2n%P+ymc6Y1i7yaVٷE[#P^4::./ܔNIt0;oBv]r~gn}i6C^ 2uעƕ86[ڈ9K[(:w=Y0)a7Yݥ``.9;bnR.񼀵jGcDռZW恥SL9M~}MSJ ÃZ{0S3 B΋n` xE 4<%OЧT 15HJun 0s2yΔ}:t>Nó#J4CM ;rN&xh7w)N[ (<*XLz&SKLk (Ztw}"&d?p<ߎM^8P՛ö7w=gݵ)ۘ]( qA-j7$s2UT0VjRՔZD0&o*I:lނQ(^Ćgv: 袢@TF% .ʯ4D ,m}lGooue+rS!=U۷EbIoezwlTf}V;O2H""v]I 0%I}˱\â%2}.cP;~)ueBQ {]*mYtHK*mZXF:fwoj@9n@(5[f%oXq?/D$q=kYn8 *9qH4Cr&Ƣb.&O STP׌48MDQP7S x-Fe*1vSKN0߸kF~:cRs :B/ щL 7; 2b?6 Rq`L࿦ҢUbK'h>YtgG?bzUJ,e+jxXFl ca@]jz('pyY]>W(9BKz@gai;m4llfI\pt: BD> eW9gwoxGluW+.Tؙ#n890gcjμGF\R\‘S7%E:\;\&zkG0yjN81aPJlchɳ waHF낓!P: zpT`KFGm*^0qmsQW$6C:jReWJyEZwE"3JLYmA^ ]^=Y_yz!"MlUlL" d̼m6?e N2RI@l K\uTё N KsLܶg/w׶8cY01ZKLW3^^RA"$k%f}E8ܕUbKq(R6ظ *FFoQfr-mG>[{ATQ검w>chT1e+$I݆[\E|X$AA:Kq#cی\2mZG,3~nE%^Upamdc(UwƬkCTQ;+cUE4L !胢Zk:Q}/X^ 981Ttam{vl"NvPDry°H[ nKaby'_-J:olGsn'Fܬzh8n#xI]D7,DmjkN ~b a⯩ZBE8@'kܴ_>f]Lw6j߱/fţ89'ռgMIУhT]˦0 _n(o2L Odȧf[r!ˇ=S󺂵~AS%:cNA8nrw#dlF_Z|!; whό5}3ATc/= ꀺʹUf7a/}mlPX@JmkWo[5A[ɔ8!o1,7aurL%.8k|2t:ݽMvզTE/x&nk&(LmCD44oL2쎩Niѡxth:4G& C㓡dh|24!GƑ xdhB2Dv"i1"RayqnzxOޚJ)ݥ4Bll\Z&Zb8PΧm`y;Ʀx m`j 7'C'%w߁I.X1|ӵ|W͜<2jxg yѿ*ۙ}s܇ٵp;IpnT2& ̔iB=>jjs-Ǡg^(ǼeiBL0v_qZ+=[oaI6T|*8+F@).}]Q4^gok=1c;`Ywȸ c uخ#~E %ޝU`}]_浻vZK%iw[B=vvKJc鎥Kye"c:J,8- DU]0}љDG5*b&M^zMBgVL+QLQ3KGmqG$d=q& M&%!zo\݀oP߸Gٙ{<˵N艑s&_^\t鶪`mqI8X 04K8`Տ~VgY}&y,]dkf#;_[^-v"ƨ?תF犐 X(qC<̺L9s&/LUZՖ_RyLy|qPyB&x?aWI#9ScxdiQajjak|t 6V:y3ι:=5Q=ux9">zr@Cw*kgڅw3Ꮔy WXtqF kf^¦HDLL20R,qo8[\plgo#qΎ;86)`{ɼ"DU aֳ_F@|V afZhM-|pK84bJ9 fOKѹ"[x8E=C;MfàOł| Q6{KKMIYRRSV6#nJ'q9Ot=>9V^k=Xxqmee3GHz-MhNL}([Uݰ6,0֍GƣuҺixnZ77!֍O.]ӊAfۂJb FK$k!\ r 'I# ,[^؞5MX7a1=ju$G W&>yI}41i6`zs(M^b&{4{ .*^MLFnx8ۦtnV3bLŗGGt~n`&xewQǙO"u~ؗ(."@}S#ì*QmAzpp]qډzpH,]f(bBn#ĉwX' mGc}Pd$- 2o7`Mk ^!}Rd AR^,Iŀ\ؑncZ#e'O_eUG j; پ$ߪ;Z-4^mlњ`Cb2mDԅ+}*xMtSv _Ѣa!bBLEń T :F1!E2JVq͈|]ۜ+U % pT CnvuV#;5U6Zsݭ:'fa֍źqX7AUDUXٕ7lfHYZlLzy"j{Lc.!mž$ܗuKieCq[[H ^迶CUG'vBڐORym_jEt?nDbL.S$ "{j}..%J](i]yޫACSCaf҄Rٽ;y JD !Y>-/1p|rVg"Qz֜C -ڇ KNiRx+}[˕n X_rxħfX4UCdd݋YƁ ^̾-mu],gIPdd.3Thp&58YCe-ܦJ\t!"'LxZ`MޏC̊B U%[˙v>nh`}foӿ?/iqZ, CФ>k v/[NdEN5G;<!ݽw>-M rA&0z0?xGRmzOpy]Skm9w׏ՠ-z5yJ.>l567T] БmQ2|GL)cIw,^4Zgbs[fan2Oҽu&.&  I ۊĩ O8Do e܏^@j}V4$ZS>Ø!Ol4 ߥjxwc|1pvs*X#n%c O't]Zyw>'+,)ћ lLg繧Ю(fƂ};zu kh tLkXrc+G7UeړV0⳻ziԥpPDZE"~<-[N,/빝aZfu sEbǒ'z`]Pwі9J2ʭ4[vvi }*9CA:\Kۗ*a_e^KwPfBݏ ¸r΄B@fQzز2ӡ uƞļ碆Ae[9,B5\HH'&KfL(xѮR.*FD}dw;tn!s;?PbVpM ikEmsԚ$ Lc4]f7f_렓w<© ᵻ[8`j߃TmtEVlS#ZJ*Q$V|o&4V #'{b-տe[.) K7oZ󁈝`@ݶ3ơ I/I7J5JD|ORN#k[4azC pmf$jƦnJsa;[ 2L:Ms3k 8,ޓ :mSVNAgl.a*g71C*BA?F`LԒAt1iQ-DgeK̭Lڢ\Ř6¸[ixwQG(a-]KwVN *[rvagS:6g^v}[qn\݋|×5} lcO."+VQ&z77zj==~Q6kRoII53?nh(``-0".\&ҹH-hq"7蠻NkTņwu>YS=Fї}]jWOڠϯ|mAhm D2nIS +xI`Sqaְ5'(֔y&wS$△2Ƣa#x(\qA(y1CHe'`x&GY#`%I4<w[XeԎBk츫 C!}eM'PfK}\iJHĵ@fAz(s͹ܡ9hCs84͹Csnќ{hMqV0OOpyn_p ]PxUP{. Qv~ j}hGmuwOhȟ,A'U]v]UՉ?}KR0NUi{G11wVsZ]V>7tWX+5:_g+LreMmip+F1GjHKFbM+Mi+6ʋMm0k7MY2}@FW{KA*{%d.rw;4!a~|:EOFz~3$YF/YCida_#+ƺ}:5K=H\`XŨq'EInXjBE(_4yyaJ:]vo .RCGka֎JhK\dV(ըY58[``Aa/᭲)>!ōi_kp)Ƃ983MݣuG$D{R6uwty;#MJ yrlHQS’^:=>~ ENSi!lCc.)30~"6n)zZ!4# {9X8T96hQ,sJe/lQF~dEshtQy dd &͢{bPf_ŦY8*`H|q -Єt7m:10 AɿY|Cn34aӁTV̚/`ՒqNDlB[v!dcA6dcAv&zLM]3tC4N 0#[W!d%^=Y9B +Sp|/ou&zIwMHpDY-K:&BF=uW3v\)M̆kExhLezФsc-|S(By $J9ɛ=F*ݷ"jBuZeһ>4B|ѓ@y:g'XRҾ=4N-uQ"9 T̨]ov7Q:9XsV%=~Z6;8aHܹwkK zMs"(bF1;./, !Ó{q< Ɇ)o2ڠ #3ܱ Jw`ED\r@;FĦ{F/]d(8)?=}he5~5ijgJĬ6~,"(HCh \mwv=lPuv&`ZS6}UR6[&B3Y-\7[r݄ xO@.1τz&B7&1"2wtXlXIbWb(TM'\2{)MJ/?F}E'yż֋8XUOt/S&q[:=f96J w~:Ou$W^7,#cHjDP7ANaשnlsb>gahX61Nsr?-0~Lljyٟ ]c,QBJyu J͊Si& ?JaY NժM SI7Nuڬ'iB^Bx ]WO7r[^BI=r/KzZdih4*НQz$ h41-1?erɆ$M7/Ử`Bڅ$LFP17=]m&zsq\o|7Mzqx\49TIc{,rc6SF0lΞyOj*^ש?zQfa/|ܡST|!y-%tuk˔o!` Hm7]Vio 3KY<&ڽ#$)&8}=n=`薓Y޻f LQm+,NԲױ[ru O>Ջ@m /W.Fc\R-P<+nzH9oi\#yzUg]ެ_ 31*)c>j A0(FD-Y 826M.=Hd}d>!=^[ %Cp'$ F/bNK;X 5 ~'Y!HJG.qN.!#x*vwEMQ$`c̱oۊɨymȮ4#I!:h 6s)ӟ("hT;Àpi)ovmuYCհ5܄ 7^Mp,# K$}PӖ_}FE3}z4w&DL"_GzW@ >L8l߱Yix 6ʹ迵h1tkQeAsh-Z-hAa? |2!𮠕9D/et$CX:nµ54C4ZP`(څ=1XX(">0lhڳ#V+X[z8 p*p4^875"j|HX\)~ǜ@d~պkh5PL%9$;Xһ%[yLZ}EFe K27_7n]aRc&,rR^f e[-R/ƎE{Wݢ#MX_U6+|x 6͈OpLt':)Kr-ˬoݻ䋽eV-ӥޗ1\ʻI)%9’v.オLto?dbwVT^+'pv *+4|UTjD;2BP6&o(v3ɮ%SU5ٵT9Ȥ)&`EBmhkP4i\Kl+f٩mf'nx5<:u OaJ@bSdSmmlEүr$Þ#uMv 6p4wNäwݓ^뤃M4,!5G[jXX#1H-(ild|ڪBdrpzxwj!9a!%ZIJh>K[Q;b{fY[)ôr^"'2= rRGq!Z)b5/FJư;&*bBGfK zy۔ӱsk?5 CRFГqr)-655j*ox_* ')P_ njPf˖|/%!\Fl!l)YWeanqS,*PP+N ƬYG|\R·5[:keuf۵ix8TiQUe+[=qp6:xA#OuT1'D}O}ԧQ ],]%'O[B{; ɺRGn^>YKAzmdP?lveiOujC=TGq]G>G1tK )±ŠzxpR:ao$&q֌2F_0\vc=?;R:lT~;.[pɈe,0#L \$rzW]'P vGm-~Ml_ZPo.?#sȶ?EpDk6״EVh_xmۃɫ˓đ Օj&9ڬj6+7(t׋<W]pլ^pŪPXWfSSGjz]ǫY L:m\]ſJM_͠+u88%pW^[\-0w[?F&\vS~96׸q]6g:`nc\{m1x\}D`s5any٦dIJTG,Uk %5bSU&ͩ&CnЏ4%^иmpj{ч 90`S(F*9V'EQXdr]W , nYfu̅DG\Ӫu8p(UK'PҎR0)^:-,$v657W'ڵuw3KN+Pi|ro* ~U~g@G&@))Cӱ"E\[^60J3Uk*|V%/7fe' AO\xI֯ #8b+>2ZσP0:MTW|:5` 78mav0A_6%I(X_SOsdtX,xHpoȚPE\hSi5mb`?.0Eg?eXhlz" cUq|9ʰ qg&xqՁ(' CR*OmdA yyI[HBL:p.֢CZ&V=f_Dyp_P.ǜ9`twpg?VBKuvl9.ƼNVYsl+9x|iV7xWPӬ(kr3?M(d)X)m&h<ҽLJ-(p\jBLj|5ƫŠ2 IT )? R\h-S+vJbڼ=h.X a& TtT}p>H߿^z*-| se)9 2Ddte"^]*'krxYs75_Η4e5R *ၔ"4,/Db;{smcє.{HTd# Ф@ߦ}j x< G̡EV2Vr̮sW|oS<^w}\TU\~s,ņ 9$>}!ڒ"@(Cơ2:AxQ|==I| cYx_̜ v*',.6x?chuy/VԷsqqxOQ%aqp ]XKo0[j@ȣh oz63En>+m~G| ߲jc~w_nA!Yzު"Ijsx)5Kg/m/M%\+'H|;.^ cb3L*.>* HΧ헏( ΄;zF~vBԖ M7D ]tFꙁz(}g u!<{w@Y{aC e=J#%*? KH9g=RAZLj.k@MӻTX-lay0J6n6Ws#XPyG\B:q`bOEM AC@{@zs_7c"n(u=ɦFad[2e|Xf"lfFxl!Wi_ꨓI%n V "QQonf:Kg.2xVW''/*%X[t?E|؃p8MпsLv^u|% itzL]k#T7Z淸H (]Ioт/{U.7iFٛݺ0]9ͽJu++h,p=ahhh~o r͋Vx l5˷FѸm&0/![%Fg}lⵟI>F}n:y _8׻}x;_--:g(^c')Ƭ!Lo wSk~:Y Se!kXV7 Np|4U|.!u,pu6zzKG/*`1ao)CQBvp<~MOآUz] Կ*DqUI;g+rc%::gD'~IS_б 3H(c`FƘ VF{stq|HEv799>D˸pʛ@Izf%Z{7`}=+J:Sa>+g|hkb,,_z}|~_S{WWit|uG?AeG/1NevS95۫\-sR Mi!%O;c[cM{>~!K )/'RYneswymu$bsJEIMwIJ!2 ,aTLO044H!"* )4=ALA^g-=:={ZU; k9xd\O)N@E) |["t ͮq}cm:ڠ20 iÎ<tX2B A=H :ժ\Qzį-\bb4B28|\EUӨJ}h5w :3~J|^ 1rhO*:A:jqoW%|:ǝv ~E6|$w<jF;GGbt%/Ueƪܱ!=N*CNUFAJvN nנw П>Jj])=M`$) +Lq0A3":?;]U6gQYS/3|,OiUSxaoa+8v5W7/uE^njLqRvE^ e$uS[' R{50Vo#3B9P: tMW@k4@*ЊͲQ1乇johU&căp@79Z|``#OXRHa SQz?X+2- }U& W,~XX8 @C YQ״+ ^*V<#e9Uj H_-E^ThL~Ux TfN:1;3;{.T)~Bh,O8D/+I @FV =SuȀ8@&7ZvE ^#UһS\1b%+g%`jpE(UEo0Ln)d㼪x\R':< jkSZ@ψo5Qx&`t\PF 5/*HZ.=ƀ?HaOS&Qk/R.=R1t}~~2cdR ?, i3 lܮlKb#ڧg>$髹 'Mpz=ݬ)ރžXPY'ixAY=BnrגM&X-L2WI,)X2OH%P ͂fڝzy7l)z;+M[*d)48~5t>_ ?փ66@HVɱ3#f}vat((. ~Ia Si(ru?g]zUgQw>,nBhx2B#zN ;:]LlFq?n( A;Q`]j˨pS g80@*E ]oIoo2fMsP5X"ٞ8.ty5V{ =߻݉`)iݰ VG+tb|Z ^{鈝+!NʯSmzSf/y"oq\EVqѷ -xE7W?e74ćCKj&2Z]y.ux$3M:m 3Se',3^I`Yc=ql#L}A}?dccF9Q'IL#CG=uL m8KrmNn*X>CC/14 J~ P@GS1s}njFܶ:ywhU5ƚpF7 >3,Ρrp"\J)bĶ%pJnĽ %wz;U)WKk%5;xys_līwXr[C꼜ݬ2Ly^/7{rW y@OY'|“|| )mN~B _6qfQg 8"gxKf!XdwD)Z=/_ty TkvPΪ;y ?Ӓ.o65=ї^dޠ (df.>ei#Wq&n9 DHY +`]Mvӗu`NVuϰ?)~XܥGJ|[ ,Pj)9J_$!gϗGB꠿}iMsgGD[vdw<)kܮ }bgwwckϿr wbXL$EB1EfK ]!X)nq|$h \\l_ hԔ.O=qɟ)_S~^/#9z'~~NcwAߒ sLOo/ϷƷgw??^wG?9>\ksstNN菐{9?//HN_o_й?O1O;-υ|PgC^xv5ғ'>PK_PT=_Pwo] f8aJȣ7p^y vtUZ 3_kfF@;h 4 8ߐpG?N>k=I lW3F)Hv`< F?IS  ~?c!P r7X.[`oK@/o&nîDv[DOYl0J{c/ёoܗXCȹ^УX"O{抏QSC~K{%e S2 %)çj^1͌, aUM=NzFOG?珻!8>JulnV e ?i{[P/[NKjUm/i)+`Smy1ܶecJu!JUG%k&,뢚ROe*UEVExC/0bVǻs?AwY cqv&ZӗU/Ɠ"{F /Lӟ{pppeڨt[߱QbpMI e 3>S1Qb X#TXEN)#V'F4^PҞ 7WkRML@OdjIQ:WE)*2EUi Zq ć_jSu`m yT DP%')r;&0ͤ@M3+&<{㍇ܠ>.òٚ}t~ryP$ IV0^9Twft}mV̰]ڝ4|mYNOڤ{ڙ &/{it'՜Řy4]=L¹rLn8#hc_0RE0NY T,#OdM65ޱuEb.^&.|y4}6dLOSuQ7 I??TuN !e|'Eロ!f6hIyz55@FSv k)0/hxb Cxx >x̮Ljt09/(MܡOt"ĕęD:+9p7b}ٳ7#\P%jH\c~Bgf;Qv)b`sbr{H2\?_`ݫ7/.r~s͠t{ވKcj~Ey-.ѣ[>$8=??;}:MDlzPYI]9:ܳwR׈㎝k}w [!)-L%h6$X@&v9_hV7okQ8m"ݦ_թd-Mni6iy(d;[̣008_v^`ňbrhքnbzrH:LN}u8e6c^z`a"{G-=R*DCi,>2Cڙ!+b;0KǟHDX1:9Mȓ]t6$/DF;HdϭնahIM}-=#wGbXr@TFOr$)W5)?yzy 3>Tbzb5r f<8T AAÑ+ZQ^0UU.4K+ @5Ía ̒}_HÐ#g~Κud;zDNC{)50Մͮ!s7[aVޞc9E_om/ }ݤӰX*V?pcL>C( ca<6t+KtC266}tۛ:W#}vEIgWD/i drY%sj+O8CHP{uBzh^1ڧ\%렅V8Y՟ƃ_F;C܆+F? G;B,I/a=)/H/hUf<1eK謾;&DRyˌ ,"1æ׻)B|7s[y6#tv%iStD?RgLz!ilvFQ?Z ~= >+v9sx=,䳚(yx}kgX>aF4Q694ސM9y#aK((IEbsʪaH_zk0' ?H)sL.z|-3;zj[V\ϱ@`b"ϟ`8I݉M=jJ~RNiT d唜|Vk!tm%G( 꿣2} JE[.),q"l7 Ьk<] 5G)>VOG65;A^O i6'-IXX-2/pd<'5#1x9bӒ1~܃.c'f^y^e)>gae&鉛BF节\;i&» n܅6١̿+(댷?rGyE9-)|44iI3l>mx%XSPc?ًJ[U^tCJ_}Ag!7! Ζt ;sF,%rg[#*g"gVt͎zbWR_ʅ'G3Mtډb1 qwhw(cmx_Az;jËyWm]a0j_.g}C&"e OP]-=@aCcq*:5::m_187I985LZ)(w(P]r?uYHdHu4s ڎ/||D^NAM^7]%R'q[E+mJ:0zGs0FOq6EӕtDULfLmEά7{t[ 1 }`LqB{,_~ޣ bS6о\וa.M1GN}s@9 Q$ ^h<(fZ6ꐔ0$^kYI;`Yf5İ#C#3 ֛%_-;TȒdp,|K }#3.Nc`IdJ 9rs5;ɖZ[0 u29%:#;{w%bS< *H˔"%狊sȓW[6qv|_"VUJ  _Ֆ&7&7_ޤbyܮ+6oQb؟eo£J][C^&&QSOdHf֥KrY:V1ygsސvè^hz 4;r@^v+8R||[—Rc"E?o](NyQ 4zFgg rRa&qbfKUfDhfłZ4'04GG߂P΀^}۰'`izZl- W xY+keG*<}P[8Rͥܜ˝J'en2FʹX21[&t' i 4m  f$U\z-jy\챾n%]nްTlF*|XBD& =bm)ZhrdJ:XVt F0Xnw/j]\:uW~ݷeߪ&>{31M> Dńj͑0襛#R! BgǺUY6[ӎ=$Wkg]+kO}q-WzZٓv#Z{F~qu/s4٣{փlg$"zdgg#Y ZkMsKʈ"ޟu&F(h?є&D4+UeƼ6fMo4Cc1x!ބ:NWzSœ}X(kGbkvN<56)YɌD-;˂0FήXdq`M0Vi|ַj:n3bD29 F땱ȷ̎"2o0朰$-K޸ P xEYhIKFၝ36?y6e^\Bc@kf{KC̠?·nC1qq6:c2=jݙٞ2ZԬc~]>)D,\gvh«d] .ggs iGdg,VNsP')h΅c7jSwVbd`@"}$ lG?_ʖ>iDKco͘eĮZmOZKK&{,B읥S7g|9dĉżIUU|P%xHc@bzVP0zeP';[ǻ/v pjB=;'yY9k'( 2R7`F ڠj2'l_oϺE28.yT2 zh^MƇyv2j3=jl0U( ĆE2F#{'K[ۮ/BH BR~8Lb? CCsCW}2<+Ou_ge4xhȫ4KC^$HRh*#e2s\DIR#<"I~JGsئ'/;۹n%4+͍&er |H#2f8{D6I5Wi7N#StE<tpnIf ?t^"qN#>%wSpE %[zUt+z٥ CO?Il.IϐFҲg!zid0*vT[UpAsS-/[,vCpRN,P{鹝RQ'5'Qev0ݽOŒ %"옼`HK6(t6*W FZFFL1yk D*V t/EZPy2,2Σaewn_ WdV1@D|Ї9oDiG8xq9P2RL蘉l%Db ag3TRLe$^5:TNxC!*d;3)ndGr G)pͰD#(mVY.) DhaFv\J39BFe=]l'cQ Dh@,%| X(N4f|0g<1*8}M̎K2̘#|Hʑ@ hȦ4z4Vȅc>TJ}D3"B{^5U{gAZ1Qe v>.L>ɁU߬|ac˙3j`wu6zהsl:8VQ9mGP.?Ժ~,L_u农Zִf~^CL`c+%!?B$ ~,l6[ %>![,$iu< )sX"TN#qA\e Sb:pWR $ &$^`[Yj1i8HFp )P,%qrx}ǙH6M65F}dO}/x!Z<&\Q?ٕ|Y7hn/-fa686:ͭEM/b)pgA4+CpXx(aai^ F:F9U HW_Ut`ȣ*MCɏ_=C -RH-}}7067=wGWu@V/c9#s@P'qj4">/Khw)'bճW]r6,ֈp0;#PI"6hV]Uc/r$Qh2mڮ9GvAL† T~C6 ? A}ƜnN3191h[( {qa֤ӎwb~MjH?밉{d,'L>⤐E?=Dl!4~3zGOD.D*U]ߡqFrGD[GDUZGpS |D4 `)%fr 4$jXP邏"B~meOOVH+ `NݛL.Ź\ܓTbYQεkRMvлtOm72]y ϶7mk=?ytSZG "ljdMzH_ǩ0ޫaTK~~y wd}^pyfjd9R}ҵ+m6^a8 RQĤ9:߂7cWrt0Qt&ӋDda5cSC|vK, E<Ȩ9 'i=S٘}Q Z^wV^[b}jD@Opf*} Xv =${6qN=wZ1NdEW<1 fRRfnwXus?qHFDGUڷ^֭ 7 EY~+e̞2p<|ztL\RLJG{1j߄6vw4.bشٙ =:"ԃae3gţ4f1.BDjh@"n+րZfg) O2pe#p y8 h& ovĆrSXy$QY :f:Z[۵Et&r.{Eܞ!Գ5T'3T͌,”(f$YqIӡ:Y׮ xb"y;[ݝ;6R]=slOJYQuG_9C}ͦ]@rՔrfaq= vZ氽k7jbK-K)޷3鎄hf g~wz/oըRC]VbB?Eb }ヲk=Rj{ G!lC9PӳO.p -:ʱCdi 3WV}[/>ox&wۜIPXTJ>{>cHͽ*  ?O䇄z gj;[F="]2FtIzAܣCi$ֱ!czjiz<3^,OXkx {02 N4f\ klc9I̧&xD 5T#OP;@tyRZNճ] ^pv8!]o5 y p:3 ? p ǾAԏDNEudYhJ,bCu. 1-nhOoko_;in A'ؾMW{L7VZBJD//?eYoOi\?0 MO}ع5~Nq<ݺš{ {0M:47|e5|e/|7|i4RUcK5Ihsa>V͆\" PANTY]ZKI ҫNhg(VR}t>UeLzԣNܓ3BBcLfL;h;ؾwOii20g,-<''DzsβdTgm!ɓ.]aTv~*'1\fc`DX+v91n`Ph! RK|7McZedoSҞgr"6 ǒPm#8xSq>Xb`w;BY^C;<>8 6wT= MͧPAuy6²W9T\uIY (Hj. _#n뼞%1r@PTG3N:Ԗ2D(.fC 0gCs D5dHz(q ( L2V卵>TI) `݄:.ٸ܀ҝAϋ _8/6`6.᠑sidaplP~JWDDY c q"|)#Y%jp倿L NI]/ox"Hʊe|. 'ȑyH=#%C[i5Np$wL_9Mcd,.Xۈ'$Td_`Cg&@3!"Ue\F5.T.)i"͸RW0--<7v/g";w]ݸt-F=3T-M$. VTIZkąÃ!ynr?KgtQIFeϤG2](!'7Fԥ;,wP4~P6ةb9~6E4vI C⷟UCb hQ]b<'q(F؎B_ (U%Q ]RpKĕy90a=QjarȏVqXC@ױ<,r!N $BH0"{ /"wo궩^:"-g 瑾_"2\x:вĚV/ N7 )@X(S@h4a(%@Tx(@K@N q0r )QS<[dڴjW{cəAvxJx9f @a/F5 '+36ވݓ غέ`]A],"Bۘ0=6'1'Ƀ~N ㉄*R`7yrؚ6FXdqLfNYrJDDO\1JM0,p!Ylƚd^Qƍ?b\72M%Ǜݢ g4W=Tt1Cì'm>|ûB]v1v5 Dz\Q1o}֛S 00]B'R$9feF18'(^p!2L0lS G)B^، y깻l5T̻ j`B15 vU1-\tdD5hKpfl*I(Dȉ߇eWfgVqUȓ(~=99KxEG=N~^DArom永:XǓsNϰF/X&AD`O!pj::EeVAv6BIx0Y+%U0I 'JG$ \D=dȋ0e^Zĵ(Q:IPjVI_=EW*|Y@̸RTeO>UJmX1t'Eq+) 47;7`ܸs#}(~<|QͰ2srյ jJ`$Tt"?tלoEsmļ3Tm II-Hq=-: ` NMXA_̗PT{8~Q FP$jHGlrLB· aִ_&J:? ߫ Fa3ԺXz"v%y[=! TR6k6 ˘؜W`ЂŲAFozL"stAih^Ѵ9M$LD_V]`)斋m:D+>0kZ~JsM-b6\zwSH~0ZVf=Bu)\1ý*2 "a}?ib{fX$lFUUt_j8X,$!vH3-I8@c3Ʌd]4HkƜR t( ot`u4$nVvH^ ˂/n Tan%bw`3 H$#joy$LooydU2^gy|;q6@iʨQfOx91On.#+#-RD8-md86kYpJ#*$B`J;Xѳ{=C") pypU"I@b~|F sO%ۦKt>Ӄ %|^H mܥݵwLA[cP$*3Lw؂5dS-# w\pfzd(@cSaC,)!ݾ">ey|kQ"2k&#0f)$"ѸQnAfU&TOcWU]->ič$;Xtjx׫HnzZ$n Oz-;>? iiZSHIf/'ޅ #%@5 gOmֲÕ 6XzA<+f|F$.D=51Vch~-d|9 aP$Ce*- "9E@Cmɣ~)g?h%4H;L\)WzV8[ 9 Dzs2 ~>2:XuA02!*UBnZ8+R>8hF[! qCb b@| #vt+çrFE }F\򔇎}Q7_Rf qLEa.B@C>FA+;EfQ G"Gcg* ch^E2.ISs X8gK_]si|!zS\o$hQt?YUǖS+841tGY}r!UM~Rgel5ic^.'2h+ ӧ;ϏBȃ݃ .<$1佗u+'i&G<ζy!3]]8!/h|rf[xuwByNfy-T}Z>-AˇC!h}>!h}>mAۇ`͇`͇`͇`m ||||||}}}}֧Ї`݇`݇`݇`8Q7ָׯK9I֠+Dv}}k?;}1^J ?}ǭz6{Qp LE_^bXy'}ۊVqHTO<Ċ:U.P󒵼p8 (q<3;g1r@FƊ98qBL _˗XRXjJ ({/B9ayUŃRLAcU|R"Kwpz̼1KbCJllA*c c9$[^eE,ƃ*(Y{cXrJ쯣Eb@7I#X@M++jkƋQp5 Ik`SJЭ;w8%2|Cf~}eȣ'}ZoѓtQ*Tk"T7K,Gpv$/,_C"MdS -1HH"nPY늦<^83P:lM*Vd4[41}O0 NV߯lˉq:ƝLAZw ![ʂWm#۝FF)Ÿ?(]%' xп_]HŸC;F6_?w[߆+l=&ŵMQJDk!ݾ -+gzrlbx"~Қ1vkfbᄐk֦Q%8veC8-xP[+?&dϯENAgwWS諧"&nsUec !ʝ1Eg(PG\'aj/ ]>5VqbN$S1<˙Vഠ0=[%o 5R8/@z5P3UK Iz,y<1`dJ]N}6Z]@8@ĔԲ-/l Ekĵt4];MPӵtM5][MXӵr>ZkZkZkZkڮ7kZkڮkZ[s\kkތ\kk5ښkm͵Z[w]k]k뮵u:v#$oɸhMm}WWWmN5nm7ƛ~M~C!hM݇C!h|Z>-AۇCО~AۇC!h}|||֦0`͇`͇`͇`͇`͇`݇`݇`݇`݇`} }}}}+5ڻ^@Klr`)5meKm[Z_{?m׈kivkjkZky}r\k-Z˵r\k-Z˵v]kmo]kmZ۵v]kmZ۵Z[sּs\kk5ښkmݵZ[w=q]k5"ҹG][^׼o׽???~ͩ~Mxo7o4}Z>|Z>-AˇC!h}SC!h}>mO!D2ByXGRׯ  N~eRf#F+ǃlM³ ImNyİZ5mܨd}}N4ixEN[=w0)q4 bGfάXupޭjj;^>PC5:93([9 T3,oDH\ޜ[MjXZ掉h_.jF2d*Sje݇jkuʂYͰ-*׵V s_m9ζyjstxx9 x>R#Se t.=Gݙh-lJU,^W2xc9t4<} B}y>.\E2N6B/&ӯEߝpkjNxVװ~`p\$S6Vyp|) ]OEu!r9e]ܫy_~! -Άn.u^0UCIҟ3'CY9{dIhFʼn),fjG߿afyP̌A17{us= *۪F9{wU~ɥWٰ"8fU A*jhdئ< h5q>]J~7AzVpos`Ȕ_e,#k+xq)5AsfCouqlGnMXcHGɫ1 }aM\O2q}#?v$mZw[)g"yݯڟ,2 m׷wI]4XroB愇d'l@Q+}T\~,ώ<"Ex= fII{\|*bPsoSlzbR6Iϐf=$5ͽͰMZh2Bj^^', HԲo|E³ư[4IC2_Rs݈v>BTˁ_S/7|2/p>`Eq1J΄@SgHD-{qxz}xQ? QG4n~d~.ġSDeҽ8зd_yIxH<|+y%9!3xdGxau9}$KqUI̡B0m/W4CUxwq 10kPMe'Tr f2`">VfbMsjsJ{ͳ92J r ,3%w/fas `5ÄzI-t&voO=q8]Vi":0,JTE8S"~Aжo'RhVM.].01EAU~U"=eݵ6ӆ)VݫvU)Ik/%?t'\K,,}, ٠FWZ-djGŽrݽ~Ղdk ӈT!Ȅ) Mْ S Ԉm[^Y*0H¨W@bD= r_~)^pw[=aw$6Etj A̩m/yΞebuK0zΣ-?GI2agh^:5_ o`Kcy`捹Q`QœW ZˑH4<1Ytn";E"bBOT޿w!8ԼEB%kdh}uS'vάOMH`eyZ\tqȄ[ᏧI̩iϸ3bj`wY'ioe#<(y|3usFa^HO=_*]N Rc~2D{/喥kd`n͝'9#3YXhrQ缹"{ށDQE18s*؝#xS8#mK?_X`}c= &LW,>s8WPu[x]U{PT߹ 7"A!+_(+ jD n\X][;h'_t8tL$14MLZ0i֤Ao:|=?vG=O -+GkH)2|&g0h g׶(%E}oX&RCЈ8t3+4+`V7P>19<,J 0$f0V _t5=in4&zv";:j:>qc^Mt=SuZ\6Po\t+$߅a/ p\,?W"ʐWbsUBQ& YQ3VgAo(0m|[|(Ŏڈ6ѣC$5fY2['2Gs,اu+M6l4s<{ltkvy[ί^ߋa^ >YXa8vF/q!LK՝@kSc7쒯xQM(և#$x ê?d >'5HpdKIoq$U!;~B1Hk7N^=Z-,iG>GdyLr(lGp w:j߃roXa$W.aB~3_腼|}*\>{zc'xOaȹ&? yhF2,RC5$BGY &rXQefB?fA&IjD칓NZ |O)Q2;qP.k*USAul-9E~&<_O qi@Ú\(IQ&4D폑.J<MY_21H3T`,` +jӖ~TOThiap,؍u ¸5ի\V~T*s@B)Ag4W{8']Km fj*>_j'Jo4s5րxPKj@ )] ) @nzdTƒ }IOz)T7,(ڵ!I2Md]4MhC &)dӍ35!gIqX4fx08E^bYݿ=)DuWYK>BߣcQ>&qH7w"|i:i̗ $6+Wӟ^$^mdRYyu]Q:bp.]lWmݪIڵk.+J>Yf|:|"-_eMȲf6yMimOVI䍯0AuM훦BwI%uK/еPz&qM]aPN\ޕ鯳'uUxY2Y8T)eirr\V :WU"3X%g)Q}tltmrږodL^dWX  T0v[iYo@ah)e lUg۞%ϒl{|A[goR{,evPcO+cdF|Ɨj`ޅƚKb2 .Ie&J=;Z)\Vh(k>`!N[b(Rn\vLO¶)8 wϟQFE륵`+骩(|ˉܸI~MIuWT]S%(Ư̈́7.X'L8[dyiQ",0ڋ,˕ʓwr}`?92ocvGwfU^d ِݩl*N=n9๓뀣.ർ~,gOמX%˱ yٸQSTR$#$gRÑٻ띎ei=hQ3 :A4l>dm=(r︻F_^\NsY?޸B-gpB1y!OЗR[w6 厔ZZz%\RY]]|PWzr.LG Vz RVJ6hRVRR3sr53&&IA˩m-Cr amRT987IƓuE.6a#O 4&B,m FZN_ɭT2 D]_M@Z L(ȦI  OvOF>B61 (J\M,z($\wZʷ ǟJuە<1Hzx!MޭyV]bք3AF.Lex,'g/!5d \A~bwfQ%|^4~ ʧls65@U1y\o hIȎ ⵚ rw,eg=_a wBi#`˩SN'h){EX'NN*~(gX~8 @j 9l>t_y9љ"C> #ȳ}(=>dW!`,yPy;Hs %lPW+C rV "yX"b (dVʢS4Si3+g'*g\5<3q)Z1dtI A"$p2#^a^ C7+87Iۇܭai( un :f Di9k$o)*YK6ZBȞˆ *8SY8糥qt6:H3w6gȩ1iW:^$!(.6E^ "ӤU(`pf'Te)+m iT\Cٵ<>^Sِlf4 x~0jӜAm@1 {uX7Q$K+T` AK~&f=x 5zL2Pf x iEriՍkHg^CP x9΃KhZOȓ9S ?3ϱԓ\>?_?}NBz gXE_Ǻ#M%]~8;nFNu3A)\䣰kIB\ӓ@r#Pյ)di:1ƁPhBQxQdePl3)U0Šq D?1W^Ij!FG#P+u~s=4wVTHe=h]1$9\|!R$0s^tX^|P\Zʉb..ȷ˖ZZP-e`*AldՖY]H*4YT(MC|;jV:НzqY({q}$!P(6R&bKH^Bue9;-TӡpdljϗVԲ 0潤*yu)lܠn94f~K?[ɇsA 5_ uwm[)o-5:򝀖OB@)vLy[j5aLzTgP&;A+K15*U8rsK-|5dD83]-y4> %ʠUv魩^ 7*Rގ&Ak}29{C (9lri61܎Fj.OElvOui HKT9*eSa[R[q0dtpWRA'v4h@Lnކ^ҶF'=(X[  xg4pgff~|$t<^\̭)P7bsJjǮF0<~)+-AW8(npBF2`rZZqu͸: Tkr-tsV S5T`ݒlx|Ԅ :O'DmYAf$`A88ݦC_hfI1}ҕ6T ~~5vB,5ơ]ٖJQE>y*;HDɿ$/7h&{^AKmEŎ2O px ԥl4yjA]~y~lvƞNq&?fj [VOwNvTVش(jiOH<cw0}=:PQ ROLkQנ#~IOO𢥡)aҞ*/ә|;kl =9pӜ{//TdunUDyg&uu 6ENh#<{g؉9sa Ui1E3S \AX֋^ =Z뎜Hd"| ~CTh=+*ݛ|LιQZW^cPR># w򆅭Ac{FcDV?8 -J=\0Sblu UTAFrLYQ ɡ:>be^M|χsU1-+בM)Wކ\/rXpnU,UKk^i<2d|mTbXm$ՒLB ngaA,)i #Z{BoJ0U gtdSkNh*yZ #\.E1G/f>7i)Tw/d`r%&?  !s7x1z :{&ow{hw\[L5l-yU:!t*%α}#k/qʆ[0UjUޕvB)geBʫg '99բcpNpkKCX; M)k62pUR#oaJbOڄeڼ j2Ja#G]KJPg.s"Y ˮ5mK:+_`-8mgYGG?\-@(9jxj|-3W XW˜D] [.UMVЫS /vnNmoW;g,O޻Aڳ~|CkiWw„u&賭_f \epsIC[+Z(z)U|_d qRu^6٫b %&O~ pJMmm FOkUP9 9djFVxO zH)ĝܗvhw0|h&iVۀlzz$pCBpl '[*aku YW+2@d2 Ojm65Hԁ09%jT=Źjåփ_%фmJMm n ODnfԫNАr!<.B1MjNsG4~ "-y' [;֝‹CTZj`P):S\cZFAPۺbn|^ p8>BMP4y$d[pUqJ[=*hO (/L¶,j>T:d7#@\5gS}"Uvv c)w>qftG\ Q` nTM-@J=W|I{k0p`Fg+q`f'u Np0Sx69r[@Z_d vS)Y7UJeU)*~?dJT AH/鱋d.#Yt:(>,̄0LjY4d?5 U XpGlb{؊81k£ߵѷߛ r_ A 9-Ǹ}BF^4!04c|} U`U-UpH8j6t]iqvjnllWOMh)}V j G1"&_1UY*签cF<ڝfˬd2K Z$faFЮ!m FvxYyڃd.ohWQYGg=uNHő[4xA⶧,nXap3)CD``r6AJee+&|PZZ!}0K GuB;u!|kklƋq 2T!3cTá7A8l49g%H9T4 +I vj2ӑ3[UR4jV\c+=%Lw}3-c(a' QNVd3舑݊;+8 "s]V9c!j# (by ݀@P8 ZV(BC){ sw#H=bêeT>1zt.FjZ{%)T N&8DK{3(XBwP KmYXAFW˪fIxLRŠ/Ѓ6fLGXh|7.O0F.;烏Wo="= 4Ƅ?*jv%\X6501"ߔ]zX:ZaU ep1Ђrr3gHe~kD!=djn{pgfٲ#pW T >l\a/Dk qP>2֟7j%}7sP^2ꡋ!LѣAx4B3j@47A%cdp._tufBAiy fMM5lF> ]~5M Zt1*y-S[Tуk;h4Š}Dڈڒ C[l>(}KEY+Zh5G^d!4PSi fGQ1uFg&2H]fś:Q놦48UQ-1FP 2U!o\@z}5xF.]c4P.\7CG@{ lƪy~aC:9o{G#)h0PaY-ʍ+ ~aW4 Qg]kGQ KYtˮVdDgX!,zGLYX2?y@i-霤O7CU_5:ˇ~{ a}v$ :nlLSI-ݟlҊ$3k0u7o&'`4@q$IヶAS]56e>7|oiaؘ͗Cvt. =YLZ.u5g7Ɏ~9|Y$!Rwi@{j.FPZٺ%E]'3s3m]^%qgΒKT6Dn-vFo sgw0Rd\=>(B>Lc:+td x}EⳂk,hLjbeE 6(@[-oR.uc>߄aMF埱PCAıeyZÌ:Xm7-cK9٬5 3օF]0^sCCl?ֲ!r@22i)0R k׈`K]S?~ X t'/́Sq.qzǨMWbP舸fU=6wUћf65Z|jPt95UKVk+k AѪԂh'}P}-s9ú-Or޵}PxP j 25s{Su ªxSS!%xwK#0‡YbOV(LԩRx,IlX: {6Մ U2&M97˘Y;Jj;AQQpמnΒ)AbLQi K;LtCN"=?,'B47fHIHKftMKQǙBӂ wf3>s$zrmGڱPךVS!o |-qF`XN^y 6O>\0CiRaIc檱 j*dyj)GI! JY56h..cؘTXjӌG!ca~zkNoݬkN4nUkԁ4G;&'4p`$6 &CO!>[@ŸR8P{ 1/cTW_WC 9Ľ_@WgduzAĽsf%@MeITNLUx4`($_W`ch>Efq31`[^IlU?SM>AxgY$>')Γ6!X M-aT,릛JKOZn0[|xcMf zj)h,c(ȰE `vV*YܔBdR _4TdhbdٗzBPrE ˼#nb4$C;e3oEK-w*@B ujt߽f4FA. +|jSݭ:%%㨻-{f.k\a,8^};DaNfƳ"ڏ̃%OS͸(g"AX u\nM+^hqEf@h_`PZL<Hbf}V3Doఌ0o;zxޭ [1CjPxJ Me6`:͊LdW/hղAHKuYNܒʛrM 5)٪y!rq9{O)v \H)/ŤÄ fPԓ1h[*ӻwmusޏa4WojYea!Sdk+&VecC=?z ,u(]4-"=zv=(@fNkRkգnUƣiX5{Я֓/w7'^t yRW[N4\yUf}NkNG,}J &9ky=Mv1z190#lJY$|XG>ve!Q);_7Z@u=n0Y] }$:R 䶲3\=RD#4+֔YS x HN}t`٤2N BW`}/i~_@PfGz}34(d."!w=bw'g'n?$fUe]5 4'; Ⱥ=h%9&1Z +azrj$`d[0WDz GLLd0SfԪPi8`;t*sO7Kcc+ -dGz0=hbY+N;JMXh @͖at8_fiA6s4c_ CGot?Ԁ>V6a * ~sofg3~ߠyglG]_od)k+9E؊ 'w,cﮍeAA"p$-quA;K =j. RoKkP|K'RS+hpe'g/jAUmx`C] ]p tzgX4e>{Cڥ ɜf9خ~6ks(7z8:lzX] .Փ rmky>2L\!SQ)Ҩ#e7C&7FF%LDV Q3* D/dAMYNWģr5#DKFj3revOCh /Dy M-OtF&Ҍ>XOpQ30 n P9hB%2bɼ>_S 7!Lam4W@NE#Uw1c*< Ja‚SSP `v|-GPYHm|4OM)7|(gղ+vcӰGV(Ht6|Ħk-/pdo@hLFɚ[߽y `p![LZ'M*Ѡ n2=hSۤznw8E R6x̜Y1B=4mwBHUtsDߡKS]8'MzTVs`Ȱj:FF yb4˧!=%òBtc(1X 5+mŦ{'|ǿu}^~Q<`B>@g16rG fؽ:`p&sjBPZlK#hEN#&sh`j !`ěZocc;od7cCZxG%2-uJ=N:JVf+l0M&ㆪ|hWtp x;"+6nfZC#2թ&5>y|_f_}>W 1sj榧ȚDg~9V6]17.d48^:m +9-3APg%T٥uGzɌplw/,/Ca됶a.ԣH-kT9Do U[H״aC՞hM5)!k%Uުooe ]plHK*bB\BsFT\rabŽغh{PV .+!Ԯܫ4;2'ug:7p9W1C< {^9 1h 6dT>c5(g'0:̎Cks꩏ՂS_zvC_ k̹W(ofC? 4$J΅!Wy5jSY#d,fO`와沴Wj8pDIWj 4H  Jw7{0~_aNs?|PL0C'H4}{{[; c_|ԛYNv\/zb!=|lKc\o>, 4tF}K3d4UYWo^/6+|h+&%/ڗ y7$zr,7Ģ D(MEf޾L|Pᕱb]C$&j5 /¶ 8r\󏊟 ^`xBXkXOcd#-|F-f!h!766~^'-sPEc#+6T.È12u5oW-S`07G_2sF{AL4 Cfb)t~+H|}rJ32+8MN;&Ig / -/$xBrc 嗭}-[@^}@}GpR_ȳħ ~d(? &_g1b +0o=WAکiBL|:ry6ɪ>ވ9 ?p*fjs Gm_}uH@&O oK7Ny5M= (Vl+56N=#nߚI[8ft|yy+&|?QUkOV8DS|(3. N3{DN OG.M4 ~D Y-B )`t撀HM= 3ٰm4'Cw|4͐3y{Mb2s|96(?T0'7ũ!.T%1Pa%F.ǛYZF( y=T*kF7Ʃ<({]'ˠ&GQAЎ]Ah >?]MRX|T,jѠ 3n Vjx~o[ýkȲPkFcm^RzR\O&}d>OJ]w`, Ϛ\s=%gYۜ!#(I!3/ FSa ż &qk' x°@WF*ݍV^=a1D jBaF.q_j=NM|9uYkT2˄\ЈFf#4Ǔ7٬zk>L&I#y0{{[! )ծTCrjɧK'~ Ө:3GKSH<#Ձ8Ơ:/B~,f9\k#+^ wQ~fSpjnD茏",u1N4[^}D;*Ta 2/I}M;;DҏGXҿ8ػRzS^X+Ӝi*:.Qf1,l$PPc/e5L ꝎXk ,̻dO _# as hV{F$^_D\SB.”fpQ%_>hz֬Y7a'lP_ {p}{pa>K1tc Ns9 5WJp1\Be {'%"OK4q`)7@ǪϼǢ#`0GA,-yu,7ѩ i3pT2e 7H΋,fɣx`d\SGf kƜ妒q. FȐt<5jw!858Yd͗,i5# MYH#00K⛆a|?W]V5oCOMPֻtmU>[|~lbFO IA Q4JKD`=tIN zCu 3*5>석sg+-# d`l6;|:Q2CI+z He +z2l14cnaqbd)&!5=&z&jdzAǩ6,دW(S OρUN2q]2̲OqP1=QåIitlc,;V}ķ&o۲Z%?5c;ASy}'r܎_auщ ^MVߙS䧢I<7-f6PnqZ( pa]NDkWKcCdq=n } ,rj`Цa{en2YU~qno2$*KI=42wPBl?ر|pIW6Tm@l dKLjAs&f|*#>ZQ FMo'ɳH\_Eזb1FVj,a"iT恺}Fbt FCwFmr7֪9EM&W 'U`mS2鹰!syΙ)֊ܣl}LԦ(e?ԄOk\KC~WK{ Dà˧Ϩ M^2IF eeC6G8) <$2ެ33yO5:Cճ{JKѥׅҩliHk2[7~l[gQbcAHql,34(6 w1,}.3[<4\O̎oGLw&#TM.?ztNOXqH8 Xv¿[66s[o?G 4b=K22>ؽGȓw̉ Y9Ԭ:,i,#6^4[@D-_Lb]sK}>"*TorY?Q2a,^#` [ZlWFִ$_j4O&`W" vâeAYu8Zp}lj$9TxڿᳳtO  RO ϓHlӊ41NjR"|~%e(y,nc.׊&6jm9f =A':JxF#; D!J2kXʍ]iFжp!w[B_l`F% =dR7DXD)5{U_zX(`tBKPN&Ttfi2Tmc9=9qW;'?A_~D Aʓ+3۽ش&R*rU! tg|F˴hګ)Ny`o!]v-3[%ggZA2iM) ߀^CAV>2h|"/#_vוC#0:mil9/gʂX-JTtp66 $ F:; ٘Oj>$M5}]Y0?^d( /pW Bǀ2. !к@UAӖ9f:%}ߪgEHJվoL; q Rȵԝ!ڌ6D;O&kـ%=2uX /l؇-FzAZA>2[愖+i5ǡj/-/4r&Fu0Τ4JV{%GZM7ji~B!z٪L0^tYm1j+! ja&^M^eƌ`Tu!,ZK7ߖ7Ζawey҅Z5: SR` M@; nPmPm؄C;]3cq4ãyWx߆gш\(bVͿǴ Lp6T`S ׶T)`?hМP1% "ACW(Z5,vp؁Zr9f’x#(|5V;vƊ?0W# թn_k?(, UD i)Yس1#=<]3 CuzVqjWзHz[.2D7p[7Bezz3s?(ѳqEͶ*z틮'̩Q b1&ތr7;R X%^1CR6(ԩj>.·2nrX}Pɤ?-(NjkVq`k;WM#@ }㋦]iHݰ 7PۙzE56lǀN6ɓHȴ<6f (SW* fƐ]"|<8XԵL/=.ASjj^P} m@msj`$VmQp2a!;0dS@i|޼Lh}f4cu h4~ç鐐ytP1C۩ ]U7QT79(r-Jve.@4imĄgV&X_$NYܡ)PK$b_ RuhYmfCO9qaUDc~M_TA2voU#}ܖg9`!sM-rά{MMO '<903Fsn_x&Ijt w6n B ]l?cݺM7K1Ϋ C!P SB^Qƴ:>G?BZyG 6dt2-&.RI!ZXj7[Uad0U&D57hW$Dd O¦iOZ"H͉FFh>+V5䰿K/L6hid n̩ѡ>xڧ𵮙lJJw`;13%)"n$y>0|k9KYQ>Y9Sm5sgk(Y$E$!@.ޯZfJjni8}Â\Հ{|7,1␭hg˘4bRA;:$UgB,2 2w OtL'?T> g ÁĶ ncOsMq ]db-'$ݳLqG\x0p˺r͗u"Z@BuR`K5JmY/xdA[/Y!jlAVP>m\\ZXߊ+d nPMXvF`UD8߻K+ZE,):Dۃs LMkTLCf~Yܘ p ž^n]4 ࠲fx*ZT6,^}o疘s0fHW>GW'hW8^{dԶ5 \m@>IOCTU0pf18ΥE $/mV `d2O@O+/0juMU|ЉBHye"x<<\6m} +4HdB3x1o|hRP諨),@YTlMstq0OSeƦL!!x7tH8yg}qӸw&&_5vgOp:x~7h/Q]\{gSfMܼ#G Ck (tU7os ,\3cQϷ@]T7BDFA\rpN_^ G2 KA"x(|~U܊asIŖ$Vx\@KY' 8flfe0).VܴZ76Յ&MEZma7.T*Bボ* tSGUvV5.,iDW@IDQŨ *WGsF٘dB=FՇydF&x~RLxhЦ"=d<īc]X7EC1S\ҍZ҅c(L&f5zYN|X,s{dRߺC~!ԖUKMcx\{` H@ 8Lob5)D/p #`1{~g>H(!te?A=#"7"{46bHh81P'ڳ{K4Do*to!x[nr,L\ЗcПzP_ItyY/ֹg_$Y|xDS:M,~'!:C#4xM>XW9YdG3+s %:x85 7|}}b)X?`b=EYQ%{. jSB&(cHrǟ: 7v =@hƒjKs"}%Ic dLhf~uFC1@"BfX|h\:u`z|Qzח*ipuMEOy UD߂f.5u2[hLpM}C07D BmW+PPSJfAimsG#E% pJ[Y~tOt:;m[L2csMBVj\FU- 3▕ڀ W<\H퉢} )?46_N\ i`[V?Y &ɄRmgJuT&"Q!fN@R8kXO&4*dKʆ.T6vr^Ы_zh&gpމRi4QIW3 T'#ܽoBadZoG7#`ƺbaT3Ae$D-f= G &/>.8'͜v'r,.OqK/"yfI(F\:$(BV{ xǴ\^Qak *=q$rT4yӂM@upܯj#ԫ.&M ¢^ 3vu2l-=2rS8X8Qfdi@0hC a p rzt&:t7O W|/K@l\c`i^!AE1w뮮N9+Fl4Fu[_gaD^ڒT3DބӽH9 y89.:eb,C eolNfhE(?36(]Sri%=n ֮fj:P\bZH$kKK+x/ј+"V?vFQ bૐ?n5)gAB]zyfqcO1li JTP!A%RQF-m_g>ۓlqy?'x=ٽmF}n'JuRUZn =vo>Qg 96^n)V; < t[HFB =z5r^3$¬f0aY-5SO>0`vY5VAĤ bg _hh=,3rubݴ$,ƊV`&lxNW953pO tUk٩;u3XziH힉uUb 94;g~Iab5H" 6c>6E~k#4.Aj@뙊s۹zZT4㛍D7:V"S/2VM)K܇([Q`u1 e0Bhwc`=0$&N* 9a n_}u~Cz{cy)l|X1&V(Q,fDO*.}EXٹ(B+c@UּY킖M+{fHDLS@Nxf?ng\WMÉK&44ͨbe Vh7 8tH  Pe4ɠPl4z *( =ʧoGxoUkEHGw4>mZy_F~=ىTB8xŏ=goY\;iYu~Jͷxm !XH¬ݰd5BRH}b s A2VK{iݦ8Gz4tuyGWvEThIB\w5+sQtLL,U [eRrA j,}_Vv;r_ XG"2*= 0Pi *iҨ W6XhK+/ | gj_t}"ԃfuFeDFꤩK@.rEHCYJCM>Giϟ.#Y|5&Nd \,et]mxʇ_cCGC@)MY5!RP(?:r vdޅ@CXp <^͘'ɏg 6먉-=}i =͍kAG&KvCjxe\>f;֞j{ndP ᴟXZ|S_,\!x e2;e _L *q 緃[pUuͪܗ^g7 / &oud2"mXK%&BZRKwzj:|8%@|,΅]k/nUk:CC'Z9`;On]{ !ccʇ!=%+VY'l/d$]/W5ݫS?c7VCHi"CN^N}38s .%GfLƐXh鳸J"t,`LJ64Uf*=}:^8;1v+#F4,| /Qe:j)N9y5)s"v6]J "@ al5Efr] I߫ee˶'ŤW ?WaYYt\/$+2Dܨf FaF;~V8QUݑvȂk xz/yxKgE_A1c-QW;Gfa?\{ebbI8J_E5?KYEQq9j-3J}FpspTD=M΃mG9,7JWC C31%j}sVyփ:574١Fۭ r88}"l5F46 nۛVUʰdޖf0ERDdYjF&FPaQZ'r=0(d2 gAjͯob wWiӻ~|z]+D;%ݿމ嶽,]+]juCXjEM~ה:R NS)lJU8˼)fpzujR$.lHXL-aCC#х^DId'E8#<1Ld#2M4$Z{ׄ|ta䋐>#9 0ikJ3@=5W>jn jvr|n1 +cy Y{ˏCtIMlI۳,h[B$lLgh&u @CU/a&92J%D]EzB]O 5$f4p1b/fX߳?/f?-Z>Xbo}3|GFGzOq|'ۋo0b?2}p9I0hοrV0[ m?(}>x]/nI+92nw?d[3_1XZܑ_o?/ק5E,^DIKe%DEoC%Q?#Tuc>Yn&;iBI {\[,D6n=h%e[T U~=wևOѯR:Ƕ cPSd}ǚäQ*+o@/N9,A3o +qQ~ybĄ[NJyT//oӊ=*~YV$re6SZ,Y : gr8̙]L)ԾƖM !٧>Z}nAC9}Ӭwo*Kcs Fr-@'./Y<.Z@`G5Z|ip{-yӖg=) Ò_2 0/5xh`fʿDy WNFWRBxP-a%Đ*^H0MҚQƷӛp֚pLSR@Y6[5'fi2!ꅤ}HT_%79?pjB9NXDi/>i7DAdϣ(SD2VVAr\t}EVnþ I{93#THɧE/z&BtGԿ?kN oS5窽a43^eGjR0kœy6=9?pLJTY/a91F΁nvHSO?y&zl?,rqS ss .D4w5#.4U\. YL-."Dx2W`燮/doV7UJ:HXej+toVD͙0O73ゥjkIx· !#y{E ;êGU.$n"ˋeX"ji68Np5hGTQ/U˖+M=xwkϺ@ t&th2oJDCJ.]Fklw #xKav'X(Pio%Ӂ-e%pyu#Mm=Ax/}]"BoTr1RGT1"͎ߏu{>|k;y@~_'ƛz95<6F֞@hOzK?P&N'n/Wi Y9zFѻd5<9@BDx]&7576:]~Y he is bigP?n 'a/6%b9YN $\&mx-_HQ9nm"itlK nFI`BU'gm2BPEBD`%Q4" (zz!jz<qƧ<_#-C~&VLf<wKW;?:Σ 5]TӢ撱uZNoBoU\\zn{PQO-gH?1RuÎ1+JCaLDЉ{ W>ZvAP-ƢǸٍ~I lz7R:Ub؈kh'!`3hv.sy=fgU!!É*) EIZNӶDb$iH1 :qnFGB82 /J~1=~6Pp'o"q2f!GauV!_DzM cT do41:(`P$Av Q&udD6VSSL DdǺ5a"@ D4L P2L`dp#R>0L3ҽb KA(iI U0Pg*5b`7*}5QTL_HJM" ?5K<80Bg@uB5F G(O{|@N sý!-1 e?H0^Z=g:[/{~X2vVI:2љ ?$\jPkq> =q.J07J($&鎐C`^eV55Ʋ# Ո G~@n +a0hJN}%F$,E$CeM'JA pj{k}}:ui󺷻w| }w['ԦyNM'.Ak $||ix wNv֪ ha#<`^#lоzP=9Yݖ[vͯ* L smi=@_x+OA1g4R&mtZܲ.? $6T@ $Ve?SoR6)ݤOUc!QN8q: B&+Vs fĽ Lݩ!, 0 -;i4S +u%̋u u|#4{)ųAW aRS#:;$ t{U) V dUݑdKq Q>֯uFѣC%  "C$c"@[CV1Jmm i*\{d0bӔL!V]D 8alhV}@xyxNM%hE*EXa#@\Gx6K= a0ũCkB0-t 2Ha4'8"P)F5WjjHAcRxy;oK nsrOu~G1Bc;.-W`cAXDٵd_GQ+)\A/ P cbA1CGҘLfcLW)r+ <is"uj> Fk/wb't_UG8ewV1~yS)eBzP RFT8.)W 3܉a**܀2Fp\@ 8+_90e> *V[eŧ*+/7(߉ߙRUx& ({⨏q$c-i )7QʆB'eJu)R Jm@W1`za^^EILqD/I V eE9nL*GIȨm }l17 wWEHaw.H PG1ya8|agr𖰪Cr$ldCCDz9М1BXy!2 ܜ)dj&x+GݐSکRȗV~tcBS233Q/MGO'b!BT3JWŝӻ2:ƮS,&@cSb O8!y&DODSh\WSS{Haal7}7)oBN; 5mډT+bt/o6Wyf礔{~ι(򩋕=9 gJXPڀVD&ZgV8kcZlm[f#EזXݷ%p[T:E}ؚЅȏlбVk١q:bvh,!'$>tDB::{JT*Eg'Nc H^j~Sܴs"Yjmи{XpcRh')u]X`[S*u<شS`y%::klx=~<@ک-fω̇G0v pH>ǹn=@ci=t-tMhT iۂ[mH*Ώ8X/9zLBJn}:VO0.HkrվݣԟbCc9? Y:)E+/>ЄrѤ}ڃ `6K uǻey<0q<r>&5E@Sb'Bv!Տ~`%3E ѲRHL4guy̍}eA>3e3zs0fg0[JI%X= `J0 k l,` RqNx<,,h }-=BEG!^,[b7;<f^<[)w$rK"N_zμ %zѤ؂ f]^`:51B&- +sLiz;@6grrwKY񫜡7'b[ld4ZZ=˥.f}DtMS\8'0HHķoܡJ+=iMt<ݙ\Ox:s'*xEľlk `q E4<#LQ:5{M Lc"6 m6'7 *om~!O۴[m Ff ~_}KĸWb,i(omӭGאVd"R{sH' E\V(N;?Hy4&o7uPs2sRc[m01m ۻ2#`glnkA?n=|q95رGD=#%1htḉoHjdxTx)BgLeM&TL"2ULE9Vږ*]h퉏062Y)ufEfU" BYZKB!c}i )!*!%LV" Ju(e4'^`SdrLJU:S֯WYTZ!,Þ˹r!_ĉ-TӚ'A6K]yDyaBrkFO4*zNoVla$B#i^nqpg7JnJD$jS] oB[NBRJ'`X*)/Ǣ*#><889BɅTK$I`mʥY$tB057UΪRV^bx-tb=DKM:wH>s7]\6/6y=kY(߽>ط"Q2PsHJsUؕmU42H`v`Ņg]TP*t3tv?m|} vw{=f6?u`A -:٩|rv)Baptr1lyU7ش7}:ۼW]$$Rw#b@UI 076axʐzMx!]iY9&& iZ%HLnL)J2$=rED{X} 9 ۭѧ?W o_ ,,\+/2Bf3ca#m:^oO {ߧs<|ƿ'ޯ6i!٨np*)4,C)t*nprqx5Z{$u߼W{pym3d\jr'Xth׈Wi!BUIJW D0ȿ@(.lrA"p 2,p*(dt-*!)д`]H3L5l}<8g:E9;>|\v/㡻eu >F|Ua1ŒgL>mH+gE(~ ߆gd &fX pO_ooKG-9={'pzoǏY $J63`*ʭFjS|,2dt&jucRX릘JY5'@D[LV3ٽ "ʦtǢmTd ʄ&.0Hhn zֱZ{QDހ`B +`p6=L 2r1Чݥ ;pd^V)B'lY?`cسr,&; B]#]&NJWgWGRPK"Ֆ0E.#L/\̂A8%.~G#D:"JuAV/҄n d4m%RTtP`wI-U2fβ\n޻=~& ^rTXA ,&(H% ]exB#x"v!L$Xf mcNOQJ 6AU0(GB3`$)5 -T)@@]xl* QAC0=xU,QhбsRON,B^ކ/ӕ[lY3u&[/|-2ʿ3Sװ2Q허5MжK63хWXo{O >jc|aFPۘۡ rH>R ݷbO ę\I^c u1l.GU=]̗޼~o?[P iĜ[vc=lm%Sk!"IԴHEKӌN€Q8*a ڮ1Qn4ֱ>#?lz9ɀ4pq 5PqV/kfmҝ*&gïpf?-3qf"%; yg62oܾߍ,7[ a5~tթwp赣$Y|<:/$[2@́iOҢChKw'[Iƈ1օ?T80 13p?eLvG{l"vREF2b Ǘ;2\yn\8(K:L!s))ٺ䭟D8%4H A^|b5,@56ϚʌL @o).}I`{D(p~tu\.u aA*4GpYҥ$zojr ~{ϒ:2F6Qq\i. Ej1֙D 3UQ h^tMSo]OjU!:yvjy~/x݄!w 'X4)ԝ䪅D@ OGN8|qOZ[ey;T); ^xKMQ H? \,6:@feGQVK+R7&%ږZ[ c%*Bo §FW?;g#/^lxsR6*O3x{ye 洐T%+%b̼ҔԢT|TĜr%C+c%|$B^inRj^BIFf^:T*9(54G!1)bdDSRӀ&敤%ZO~Ȧʤ0ـEl?f6e.P_'נ`+h]X+{0U'WiMfcW;X!7(u{f^XE&kI iEǩ?j b7'K?O)gx;t*+BHFfB~^BnbIrFjBIFB~Qfzf^bBQiNP_kP~\e,Ӊ՞dj%42511p fHJRZ1]HR߱ftcqF~iNBRBZfEjel.]8D9&G l)4YPDW:XE \? T^~i^Qɟ%¹K2 'XeCt%H,(IX+X7?o8Џ,ͯ,-ˤ7y^N zũ@|uC`AcDL|烌bN vӥ5A*}!r.^H*021U`*K|Kd]8ʑ]fg$&Rl x[ct*fuV1xY˒8WU1]ыZ*g "!%`XodιYR"<˛g1 tE_~~yn^._EC.L.[nn`~ٙ&LS:gٗXGgb:g|{s9Nvsd <;>5plv;\\2~I&]cgN8 f3)MCVZ~n.Ŵ3/gdxwLLqNғ2 bfܲ&>BdtX:2bUЙUvp` żFw@lCl7״k|M:{X S{g 46%6GSlN~v;bk:3Z;ҦjǴ~ .1αw@MJhpOm#f |yJcYr A6j0 ,B0P*p_P(AJgn-/YwC c89ڕYĠcWXk9O;4ZjRĦ%S(yMU&灹CQ!/JhNIg9k]0tKp wrD$GlG˚t"/OM?ӎHA)xKbb@twtx9otN:_<؜mMq}qY zh=4Wb(wPn%?c $|/ݒ}Gԏn(f|vi&5μ|i-ִ<<~}5%&kDz- flt iTb?XD_KZ*݀ nyp>44lLǑ^?gm<b$1x |ʀ:: BZ:+SÄ`QP#)A@pfQ8T`c39;9 v,,5/j0Znn݊cXD{H~=X4c_C < pʾ1MigqCl`|p>w8X^%5՟eY 8aPJ㥍zjm ,FzzwW.gnV"~DT=[i7T W6 ]ߪhm/Т.(>m/ݩ3G GiܴDUk'>[V 괳0=vǣ 11j+'J@=|;$' =HxE@ 9QcxN=(AGKy`1dE"DZ'w.d+>li)j}? ֟GY\g>vV{q/3Gy.ig'BV {҉Db2 _ʇ` X3XKSn:ޔ4h">ٱSEсa;8@%SU>הrٗoBL@ʣP8WGW]fEiSdȻvDk#WFU(üQB7qk+/P qҨ;Y.SA=MxPM۷<HHf^9q,ga»[4E+f*/>~a`z~ZU Њ2P{ Ilj:{L<;W.p Ei<=HZ氆ֶ>YO^$ʁ#Q0{\D)Wy}XSܢ5l[mOYqYj ~w.FTYU 1mI{4~"YY(XeSlun{~J=27oRNa&,@zշo'J$427"}=dHYmUTKB.y60cE= =Q5OQR 1{$Kr_{ G5s?~1ϯ)mN7cw.ʹ[T*!Ne(NyLvo{Y9JsSRuH00Bf-7@R2n T05rݢ :nM,ȎեBhA[kV~gA%r>4 k"ҕE[3W:X܂r2]舏o(BZYp )xD I0R &@\FJ; e(D6JB~x9 HޟX;!5*r8Ҷpò>ӓkޑK(XY;Y3Hdȼ6X>9|̍rkdY~cmHUѵG]6LN{u݂R *~3 (В)4#Vsg+n:zޑq6ů雊٪xVOYwQHEJrޅLut jð}w* ssC23"|*푍ஸ%AȤ,z^o(1fyz 6 .??|{ G_Pgԋ-`췿s0=D$Bv DR2]+f7k06m]kvp%+mh )!UjDA8*O8vUn-Hss{'o,)AxmR'qg"m&6bǺ[#*hUW |;K5^hapWxcFH4;1ԕU$ d4-Zl##уfsjP=kHLw ƞb$Y$Pvr R8Uu:a&L).OU_`_FRrd+\mMP'm]e3X@+ ˺8NZIΓ%1E`X,: sݢ B+ AL 9(3 IПTD2VXk r՚Z#fzmQ3FLJ+('!׈8ҙk(.)h'D;$cDda;ZQ-$()#xdta8E Cذi@bh#YBj? . yUV!r H^g"[|&jXCrwY,Gw#ztY]Եb졖ɰg(h"<>M79AAp<cf(C@zP}6Tg)Q@MsMzb_~p UA/#pi@ssxExj36@ZBb~!–`c*(]U6œMBXzv{#D* 6D0ָg:;ڹ2gAOP( u]CgV0$Ts'¿Jt x=F="G{CC hPGАs)EJ" m"B * 9lPєm*vr(^҈ WM{aMXM ebBO?[`(=`ky|UzRLtF)Z^^ TPT+bC(re_bj8-&OI͊htã 1"Gj>DwhzIzI(үeU>%=uN¥=4+~dNNg%zYAb+ ) d$f6i͠+hz)}7ᎊY^>tXKI|{fK<_xh6$ ->VBe~á}QUCx- sYo:!+7߬( ,Y]P]p@% Nx6eҐ] 8%МἸ)We6L< >NDOoGjW] Q:Qu}SC9exinD!*Taj퓊|}nޓDAtzoonַ 515ti^n&mʌ]֞f|Ҍ_S\f4ffR`d椙jg;31`Ɯ6=o[l=+Ҝ3p"Qh19XZMc”F5MDK@ ,]Hz֧)pb*]Jf/f[g_Sb|A_V/y4/1TpA*xXn8}W Um8vuNžm "`P/QlD33gŻo ӬreEg>#hYMs!+qL呪Vf˲vӰQ<5}55qljl6JwNx N#"YbamY jzdLO))02YJdiyZ#gEd&H#]SQ3!Ά]t|?:j܍f}QCH|+o܋^l{HۗWJdt.0eXxJJhPCeC:!>|^KiFFI5d'ޓ?x&ȗ BCh^߲lLxڈͨ]4i\:[z]{N7*L)Y3bY1ǓlU{` z>5TKd+tKٚB %_:2v!|T:Wtp@^1UNNjjp}_9vqA3!ExtKsz7o.TY l=C(}|(iJNؖǸm:$gh*Ɗ -PJE5 eatyc8/Ż[1oy0K KVf cmbw, \seq}/,'GIm*уy?tPp0à=쒼 kW 4+}}A!@)VB'*Qƶ碱0qF75|+㍽a ֐Du1r/2F'вI/h@GqEux$G9Ynܫr ? z;曫|z-׀F&~:vV) mrF0(VSY5)C\h"S^ GKᤑWDé/e+V8op8{߻b7ߩi_i] i\J 3W+\{9OGKŠ" qb[G'8qSr+K2%fu )A s߸4Y wDM8 Mh脓 ki >C)+ЖHNqzW{ oa(s;v? ;(+Z߬ץ>%ۼ 1eII|d? '%[-=W qG'!Y7:{k#z^[nn丁%P=k*mn)%RPWʭ4G2x_^ cYX("Q,S,}S܏AO#$ᙤ]b oQQxu=o0g !Nc0b*%ҡR䀋G} Uŝq{HٿoOڦ*`&2HI!/B͏RRKy)n2ndXR˱R5WYsm*i4Y0k,=ce={h@o\kׄ!dxµs_#.Ҽ̒b=yz1Ma❬+j TP_RgYq)f/FlSxƹs͟3$"ixWS? ȅ@( ջgg3NH)JpĎQY!O`)[%CPt;u&< YgE> ղθw=?uHY>kۉIz8i 'q'0t AVkOz`!l +*^.s?PREEEolϟ}JAM[' ̰" *I[ *-ó/&pf@b"NKebb'PxY|M?^9stvdzbGm&=9#mL\"zBNtr(_P(Q{MC9pDmE$Eya77m&kOȱaKBWQ<[}pzlO92tK $xT*0`/UW~Q', "zvz{h.`֓6?ŹoI^6e78cI2laXZ}0\g\jUSmt7%~]nb1_@-2i`0RldNŗY`r'"Uq" LIdx( lKW#T>VNYy-yy*K1U2^?>2h1E^yF^"Y`ٺ/Eio3A3n` Ilb"xUQN0 };B;AֹMTN;C\qIq\|fGh ް iu7-l99?a/K%xXcƆ,F1s5qA"Y6JD42K/Kǜ#F\M>[*e]a.z?MH'7mU~;{y+$8cUWOu;Mem\Ƙmpx[yB &x1*麲xMVKv8 9A!i:/y%3Ef(釨2a н8fDk|%NS^bv?Nͽsu()>ʂf!7ȅ i~V>o0(+!Ùip2$)"%_ 1OzQ`*JTq=$~*X((glq)x;ζ bt мIUb0"EF\-{Ŗ3 @WZؙѵH:jN E՞`Pk;K)gvR FpFvb6P} +mP7\#ƐbXPC!>;[ˍFT M &7) ű%: b4c;3#na Y%}ou"5{94ƙ~UJ-GX&FWu5iI\ajY Wܦ-Q孩V>`(VY[BBҐvҚ[6L5e>/f$t,1h9oJfbFD C{ y`G: 7@$WUpyl!8@2&^C*DJ߄'T?4tw,>?1ǚcqqb0b(p"(sGJ*^QI2loz)!BLjK<*ȽCtv)@3&ڇq| q|?QߜHB x[%6Slf3KL9%50x]}bۺ{NĶX:Nh S797Z` 0//n//ύ2;5x·wk'5BZP |LPFF]1+=K*3#U:bxnƶ<spp9OD2IbD৿8/|Oi 3q ػ3 cemrHxD;D;E]3=%RDn©_r9 YZ;Όֈ3& Mkό,e@+R|J J]"(?OvwνD<򦛅\`(/\fwg(Q1/WByu:pU ^̴<Js%<"53A/͉< R vdźtb!B{ӗ|)`A34/Qi ͥa 0*= g‰IRq$uəs&&af:yceUViXPs;U>Fe/]M(#C'~A+TLo~dt]#`05/ [RG9c C.gLN tKŞ8FcTb듈ЄKP}N/_/_J/UsI`Ὗ " Rb^`tKG^*b64mlПӞފsbA} 6^Å:ZPgZ&ATl޺h(XI"0E%45e-{^WF3Yc -kf&Nğ[Qiyd&`h9b601S!S8z(3RςO/=MNl'Pytan1&+94輽M}8]J]ͼ+Jus57, 1ҧȄ,~i^D_@ˋ/˳VB3FI ӗU!I8>Ga t0 6aŽ@h8u~}qL&7:^/l4&=<؟QBS)I Z^P2 OM>"%Wd̴ T=?sF4[BL҄`l&spf%8*z(\ghMLo+wF Knimx:x0Dy#S+ҤҏLZ#ЉM/#L B9Qd&Q:ŷ g1ΤDg#^3b194#Uu:䉓o*Y0ٍ-) F؏$1R *7 W^F>f$VDd{Sa lz%͌$JL=my:h[' F6~LM iZ艣yh9uB:HaF=:[0V|ͅ!M,MSΣ(4cdWB^F`^PwHN͉z^ 60. b f$^(%o՟`F%}i >V^RՌN f󡲦R37PTRܑ)ozD;ܣC-O馹b >APr.f,!r Ɵ7\X%\P4y )~c8I@ͨDZ0I B7 U ;TeVy$]ߋ$dF<=p9E"^$GuЬl zE-VtΈD"j]!TQf"3 ,`_`P|7=Bc;J0u"0707n}㔵,TɉUB!g$vp i佪" |sIp@RҳjFK7Eˣi*3r_Q4T!yӔH(Ւ?p3Y"3P*Z<^BȽ+YEbJ@@bPU׽Dㆋ)Ҕ+ 3DkQoR$ylFÜ s2f<rccy2蕶T5dOhpЙU-.ŠyJ;9u+^wMN#dD5{Rk9̈́R\ʪ&ʺu~+-aL,*MzABҴW/%FAG_Bmӌ,WA% 1G5Ddc3W>0\T&^zl^§rlU}+(hiZJ~e8,~)ߚB/K0 KEML뷼2Kc";-M+47RGZA!0Co]ƅoe}/={B#z`/UHQ>f ٷJ *&}KJG*f+$T:Tvc|VB=ZIhD'EBϤ eœ9̄lbyE*])/74U{Ff<8I="tiX' BEdW]+Tܪft4gL u7ƦPYqa2v+[h=,^m;~^wunөiݏ~;"f!\eMRA![-;8عt S|m&N Sŕy2B Or,`)T,xY`˔ e2S72 :/ qLwbFofi}b {Gc15Ww"H{[>Ao7S_ ߧPec,gMyA^$bVnKmh\ bSLʢbXْBm8ME‘(<%2vn]YA&,:\G0o|Vpo5xLL\(zq8gC[_n)Ē׭e93)-q|7bCo ' bM9rj\ $z bX4 EU"Z=m T@Ӫm|Zj8h'o7oRT|Nt IoTG$ogIT;4we8wwizǓwV3@E;;h=Crɀ<ـ8k\A$=LY #ގ]Gew 3z^Q8Vxu#K]P `մ4 Hl"q&.wCe-ʓ!l;i“H)$CPwLO#Gja#ٛaR- ʬ;-ߩR,`g|a0%ˠ 鿓7b~_3'Ne&YXN8=X,I{o(l cԜNNXIcL0p"&Mg={C(& J ٰ0-<6&jYhJ`:3EHgAS|{nHd2;KggjrR) %XbcxƽAK'K3{GWYl.jܪGzcYT--uamfSRMzG+^a҇E@3{MB=F8LLfB6x LK. 44",Gݻ쌅H=NA#34LfA*ľβVMH [ِaNY00[sֈk$ yymiēCk7N؎[c$n I|\ּ %<>(}"_ħk@s3r !0\h^`! ?)Z9q~ bk[ u=+$Nu}m'ݟYAyƨ3Ve/{B;cTs`_œ3E:7gWp*Y n5{fЪD1\N  [V F , 6 ȉpFƦ)ɺix.pymӼ9sM-J,gb՘-QjZi|:3 6olZiZ($wx>SGTn6GilthZ1.^Cx UPBXf%`ԪQ/ʠY2fh99Ju&/Y3Y~0剢7cS4)1cS^x4{se׆fW+W$≴B*(sU\ŜBNƜHծj4PRHmf0kGg JU9hj~f1g6ܩU$V=bUraF4'ˑA 5fH;XFS5TRG?7ꕐN0_3'Q2[31#ofrK7vucZ3cqfȰ򕉢L& TjZCHlLڣlp?~ 8py`u-LfGu N=Uߑ?S#x^Q-|gAٕA) HZX72sDjjpk:A r38)Izn9S5 ~BG,d.iW&'|>V tsI D7YȒڰF~/d} ,ka,mT3E9uf Z/ n &$#8hdF}# tq74HF%E!0F6vev͍V+7QU*Nj⤆9NĢ3H@& rjN_:T =3f 愲b*2\{#'p.WZՇD%t!gJ?]Pö;7xmsrt!3I e >1-R 2?3xSۦ^g*{Qvnl,o&A:(I&f>'<AmCcyu|B_c iܶSTx<_ LT>&򮲪Йi ʆ ®nL/YpKZ~arٕpvsW՘ [p\qç3̢̪XLKʋM `d*+q7H0bJ d !=j2Q$#6m,ެVZ|-+柯L0`)lwq32D ejp42ԐI,*^)ZO_Lo5of3TpQX%f(1,1Dd+x!,mvp⊂ T>F3`\ote㪜s#䵚/"乖vܙ+-nq7f7t DU$NE _+Deske:p5Ӳ6~L+v J-7:lgw 4gLZ®)MÎߢ3;vu~6)wڤܕ@Jaw>L2Gzv]]3$csl:_%ʤVM诼 ;ߎɎ;(;vT;vT;uT;Ǝ%c^(84ȎKxЛjw0rmxd9 Ls";!8H6rV7*BH( F)EѰSSB; WdӝPk >\/hv G'rw:)"T 7ҎÈ?ӪNKӉxCDҕ M츲ˉEP!#/?d AzЇ?NܴyxNTxWY{@\)g'UHٜ{)hJ>@S{e< s'6 xlB2>&U@֡J*'uk0*c/tFQ_YPNzr>C\œvc\IP&0ã?uĴ+O3v33'%(c #ɬo`: *BQe7D(DĿ]G9z_dVF"#y&1#~]RzhS|Y03,XBɌbԔg$w ;O^<5Z}j^9xjE&>5AWD>+O\~嵧2EHP-ts!)t|bP#$O:x^/X7ҫ=1<^' KF9& ӓ > M˴-Q388(( &NzeSPb5x҉'G%l^ʜ<᳀ m^<.36R'$Qj{גۓoO6==iӗECο $3 S;vI*j^G(wt :i;2ܧ7+!;R!" >U8y UX3EbS1O 悹*jτӵ',f0'\uUGERop5ЪbqLҥ.ܠ IK} 󰦌قOS FLt4 ۞& ZT2ނ9R!2 q =03Έp&m{nU'gw8*{}HdmL(RݥELĴIӐN9/@6ND6)~EJ0¨H枯._l?ϢᄧX!+>Q*+58+wyH j5krjw=W4)="$bBzc#YgLM*D{bԒ7A% ;{ξ\'Sļ0*!TES-E^/z=;Y| ^)l]g⅊2Bwm?{g_/~or_X,tV@eqS0r2VeUM {Nf'aQ GڏJ4(E?j;+}f8 IJZ0I:)w^ČҶkdv%guD1 gg1ߜTd6U"ʑv((%3Z-Fd(IОWxÈLpN͝m:!:k\+sr"lo#3 s.3cJEiJӲTDL!3}gP1OdDhŽ^}JhA@0fzQ^)fE}c ;.B#>қPY"acc g +K{l#P#ͅC[c d?6(d&FD* z ȟ-L{j _R͂/TfQ/3$:穇'|짒XK>zv0a*L 4TNb4XytS?a<őyh?Q5LUg~k{oϩ. Gׇrl̋y<5f>4o8rD] zB ‹D]A#B\r./pԻ#(\,2JyMH'0C3JrBƁõFk]޹mY](ѿS,$?$ѐ`#Dg!3>C|΁+s]:):pBr䠱I"ز̤[vB:GR$]Dz*q"D*=O8=HCplRy`+ NHX6Ɨ ND&n[Pƪ%Ckqo-m}[(I |pCKS)CJ%S\\jAt=^"L';-]#.O̐U9IJ#c!EUgw4\i<3ÍKA0`?9`%Ɂ<89ps`fjҁa3tESk vH>2xLh炪ZPC%t TI{y𙹩}lcK `lr(["jK--%`kAAz|q0[;<{|<aῥLz3gȌ6zȫ }9kRDО Qވb0N RvK\cg@ay}g~zYJWGqӉg"#*Be >BeB<CJW\Ȼ`>ֆя2.tcS?{?X~4<*UM ˏrG3=O^H*h̐?7&# $8TNBeN!]2'\-E;e+PFRL@L*p_TI?1v73lA ~6m#`d $7R7R*KZϒ?K0֏`dtO_#Ӷ , N=DÀ d6Y:o:JK3P5{g@y K+բ+k SbȊ2CਞJ΍o3"] E@8RfA=*HY}Ԉ"Dc 2UuQ0mP_ f[z LQd fp,!wr7I"I#2?Pi05wOf1"gB)$,Pk=<!$]C:&hGCh;S`zb13˥Um* Sb*TuFHy`Re+a28VyS\DQ| Wt ~unsn5LfP&|bR#3:E"[citbOcn9ųfIm]e٫+!(;S%s Մ]=U3ufTl"ł`+P[6D)Y-3J]`t(>GT„cҰŸ3UJe)tcM *],׶n[&Ti>r;^Q ۉ6\4SkhkJUM. )fiь:D*׈nvwҒ->i 'Eva/x\(qBs"u'Dm>"rr-/ m/F.Ny7d%|") IZڂ̂̂Gf <pv %%:{;*~Q{6bifR*!KE-浥O%-QA[m%-H|~~b,NB3I@ZgKȎN}B@ݙ.{p0ECKngg/L95/SlhC|~Qty^ P|YNd]*K-*ۭ+a,(~A/6F12{wJ,/+I/.7(*%v8s~ 8H"s-x`!AGUFVELNgMdFh"AFeA9%Z[D./S`)^2ܗz')VmFB|EK*Z\8zG,=K?ojh~ݲȓ9щiE"AK2@Sւ7b'ؿE>`w8^iqjEO*K1d`E\_s^q4.r2hlAU"&+T'%`|-uhɫMs\^߼?i~BEy>u$Ȃo*!"L$I1(1>ѿt-\1߆7ELo0hEySOP<Éxk>SWK䪜gY٧W._`*9հ>Ϭܕ) GFcyľvL/=8Yyǰ//+;!ӓGbFsMH95DOinf^02 /OLp+Ǯxm%I Dx2\F*[L3Q|$oN怙Xp P+5VU∠V]k5yViW^:ӭv; a9O[BܬkX 3J]:RoߡqV\+sn[VvټY)eoP´I,Nĉ eLV!Hcg&ʼbqqjzd7[t}<ۡcY{>1ͬr]V3AxMm]׺k/|NG]E[JHKֶ '6}@͋'vɢHh`[uǶŵeRVۢ݅Uծ e%e5EXk,k~)Xb  {sw# "0p]{pD΀ TgV/t2{'L/sOO-O)T^R^ӳW L.񍊘gm%\6껨]g< 'zh-oRi pEi}/~~Ъx?~d Ha;}a;F;|yqR$퀆xO&_qΕ' `^т,;o]"!xD+=6euZJ?UUכ&:Z?jC+"8Q1oԩeil?5yȯ됴RIԄSZF51tҕJ44)ğNRGE EѨ8Ƅ5A*,_*TDm9(L9Leq6f娬9Ƹu]kx`/{6'%O11]iv@ #x-Q?x:n4R2sUے ]K(%#*<#AcB `)~.b\m7>X[R zZ2/iuN - O&1*Z4B9˜ ˡnGnd /#N|zmN|j5kP#j3QcQ$7LL7q+v>įNjD:{IlxUW;*<xEVr۸'&M;n; PQNC@wc\;O5\|CzUz!,}Uev .t5M3e<6,>d(+QB/d,+I&ۖ:؆|Sz7VmN7ǫ)$E$sODAl$*Tc7.r.R(CWu S a;.un=P3uц$'Yv¹O%8i|4P}+YIFWY!Jhoh"5՚ٛRz Y9Q.A Sghߤp{|} w(vdD0E8u^rwkj:$$\T`%ɦCB;"9˲v#,m[QֻżfEhmOZhԎh39M#* 9`^*rPM:p\+GpfBQ`mmv[M5*G7Qc6]7=aE}]}鿅}a;]+ ʩwwg|}{-4\yR'Had'»)Jh!$޾% jME MV>cNG ߶OV'[4˅} N^`8 <_Q4MZZN>k 籊7H_U'NvNZl 7i[{*QS$ulϔmfE y-ȧ:S1Nid}T^[++k[ϾU쌂Cg]ug ^?gb|ݲ a^Qhag`R pU-1XiA1LFGȖS?p֕Rol%DS~dؚ/JZLi:~lmS?VG? νP0 #ISxuXK8)]`6Pؐ'lVaKl י,ulz|?讗FLy4' I rc¦0>ۆ6@&볗4UIw)͸IC{*2'BB]ZT^+'Xv NLrZɆwF ßeP$ 9"YVv0kU$ysR#o4al΍TW#)flXY\EL:XJKjĵ }x~( 0r-+ڳ#ud};F JjZ(Pg{h͓})є z?A""SFN>t{]2ŶT͕uw~e:jwfqɓ(E7g։Lpu.;+(a%4  ~GR\@EW !&;iJt2`vAミ3CDUA/aHW%tE*sKm) Se'/ëhfBC' ^ xPw;r/ wa0;Ev w=B{OΈaܑ.']LхI.|踽FS2Ӊ{w{ T f 9@ق]ߣt'x(TV%8ZWh{yjo{p3@eXE^|}a8NY֒g!赱 )UbR_L)HIٯY  bX&t',bLb^i8xG)tqWZa"1C"QbD0 *(΅3v wwF>+bp>x6t$9TυlSq o+ g&fW~g,cs!c t)+sX\ds 9ep{` d{ڂSNHc;gZ.'1Ǥ/d!&s ph`=I|^x*O "p7]Iny ~CFIG9$ N y]mĿo+ŕAG1;Q9dp_,TغbdpjWI̹25o/hl j#0)·~ ;'5@vL}2}DCs:2>ڼ̂T/'G C_ұ,d!əB IOf>?d.gXXxx-N0 E}yZ iji qA{n&7iOMCl1l9_3g.HK.&NSUS7S%L¾\&.j`"z`F/eJQGh@B콊П$N!U 71KStSNkxk_-ʶK` 3բaĘFզ/81α4'vI+cu+eAʼ( $ 7. E%{e#K6ʕ E2Hqq ?S=B|fLT2~ P+_Ą+Tsŝ; D=ދ+R`d+ތ/Pp 3eAF.2 Tk?*ybZ"oz8gb,;fx- G⟟_=#yq9o ON+)-+UI,+S@By%@<55H$e䗂2JKR78df}ނɉ9@D 8>859?/(P gqb0H "Ds{@d.l r^&\{nfrQ>d&9\i%Ŋ0Ē\!$ _t2 kg1x+U+i%@2Lz\9I@VN_&L L $ ҹx;YT7 ^ZQYrN+L/JLIEqde*x܂t0H&'r`!txE 0E"dL*eTh%ý<ԼݳOI.o–G~V̹FBWĕЄ'>ORG4ujw:ťHlІ (~/:Qx+U" R $ʳD1 fe2ܕ x}\[,~s13;!6q%G7 桪ЇE! C{l\kڌUk&BjI&껚Nzl+ZK!q2V3=ne{lzm|^+YFݭJA+X^[ /!t0rx4dz># 񷳆l]7ՙ0ZQ :Kٴ6߅=Y3;[/={*%c4BvC &*v1n> f2̂ 3vɳ([Gِ+daGL摶\* ooe;y39qUـ 6|.W05ʑ&#r (1dqd-]ۻ׾UjOk"Z3 q|Z ,Q֦Z~kfQat0tzS͵hRL耸*dN$='{ﲇZ{+`mo,N/!ɒf+pPFp@=3j@ o#!pXA "1dT-!@2`{hJk] 6YjU%elבa4`-mwEħ~!bCu3oپLk %a-u:R*@=a>³Q ,Tw=Cn:)k@ &br><>IaN7A Noz Qud60h]ŗk'r9@NSۅ60K:sxLVzUvUA襵 p>h^jnQQ`Ko5"uب_J9Z ,PL764^Gp&.mۭ)`țB>"%M3 ZaOʟHpyڡB ͎ ; p0D' ^v2];P|;u!O$Gm:n(i n){tĖ%q1C8JU}*9'(bp4OvA.9Y ] C (4:56X>Ьan-0A2џ'ABF;栂E,0/=ZaC"Wv0_wՒ}Uޙ*ԆBS`(:ew~'#] ٘|{ Tk}n`bX^ E= EMz9"TN z #CIz#dk r};:9;9Ŗs49NjkSc`_c SGťiK`Ӭc{uLl򟑓i~<]+>m``%0+ z,:8U-g0rm{.@-63]4P=>;CM;Nɺ d*i BNidoP`TFtos9_ ̿~#:0w #(?jNmcN _jg/_Zwl|cVsq~+k_7O ? nV_p#c7:kBP'La̯){ Lxs}aDU!TB&OB'IJ0Xzzx сK=(Da "v'Mzٞb[)x@2n;UEJevUtk.;sE󐀤zPuSTpfhF>j h o[7x,ԓPٶda\2ϱ` Oƅf(Q3zNRay hpcB#'{Yc<9K@z4ٵ#LmJ˟) 3 Xػ x*P0~sL#BgK/h@ɝF',+c)=f{TE؀R:cd&!M@DcADˈp/%uꑃzQ֎eS?@QB&"Ww{xo,]- 1lY#Yy:#PDkC>5B1V w'a/+:0B mRژWoČSa_6l60J#x3!j+R)Q+:ؘwޢ!AD W(p7wi*6ȍ 56BR\ADo~|~2N{-@+ӈV *]zqFVY+*nQީd46S n=Ek=#@@t zlr8^|`֙hs͞UTkSڶk6AᙌM3= UtBR!G*o*Ď#a SOٖ"ª$2K5gCE3x ?G >c={9(Nnǝ73nG>K s\D&ͱ 2$xұ'!:N-aro2m$`,Y J:B V/YA F^c[D)E\w)q<! -\ *`1 uBjܳU\BiԣH-CR9nvrcMu(C)JLf >3eP65 SwVhNƠ"6 "Xĭs{8!m{zln>ŴfE)su?TWW9]8vý+caFZd 0Db a57Q6Lçt$L]o|QK;&oXKȕR %UHqML)\T2Zv?F$W7:@T#1ˬ8 ic3d&13u;RD eUI[-J" wcXȑ2_2oѡ?  grhUM=IyV~yutcL0vSߠF#ty 㻞ˊ S:yr`?TZ ;ԩ|?{~ 0ߗ6Q@BF/Av!)-#DN~85 H0@t5RxOȝly{GӰ:)}`g:W;TfA=HfzOD2jCȉOнM5W(̉bM{#̱>/>nG5e pRh0GCvF / >"p:3ٞ>+Eܢ|{w~U)iT@ߣ! dRp2&@ZqD&Fg~?čy';jģeV*BHt2Z.졚98w9C 9C6E%=;C'kDWAycRNh1eG}LT6K&GʇB2 ~8c+< s2Ӵ0̊1D|tW_}we[%y=/>ϫ/BDJ]elB9Y z7$S !l0yUP/fB`!9rLz315}jL) 5_0Ώ~8|Ro|#AYlk,8}ZB`!TgE%;kT5]ͱY^TTv\k@l[6`} 4i1|J&Zd&E|f0Zo E7b+/ǖApa;jF\To-[Mz[Vh5Hw*{yaDJ4b,ή7yM&\nȓMO(]: dO_>,vvpa'Ri 6 óe=H0wHϩ+Qی1VMA;􁅨X3_OTQ;@>֤8*)!I/CB/FOfGce6ydkёpE.N!3&#iqS<{?tϢ/ T@wRr5B9~OEH7Q̡FLlRk<0i%@tz_WLҲˌdղn&ۮx'*/!-AL@sE9t Sɢ Zrp] IICVARs$!H&4H*FTMfx:#|a/ S(hhsyMF1{yH7_oЇw,g}?%oW L{! @u/oFi2Zct~\xǵ_24̿;ey|UfN  (xEM r]3D.8&j>3dblz.'DɨE)=N8A_o(10VjR/_'&Ma~~ O %eVuyBisrG4Xꨵk§[!9j EahU-vo9uaS-ͳZ-p K`뵧\>+j> Bۑ"_!s7usLHi_г"=Iًbxm}Ͳr/Q]?m#vGGwxJ$Ζ]zz?I3)$!OfP}(ߞ4`´]qC)bqL 1igm8%;f:V'?x g|%}x)~-k]rr&9T.g./ÒÞ8MužJ_Sa |~D1#g{s'6G5ŏ sXd^urno%>}q@nHJ.6Ze/8&FJn߬ Jݵ] =8xztujz\Rfַ\t.f2בȯ`dm7h5Q+oAy~,Z+ J>}O6v<:1A~gzQPWNz _=s+׽7ט5\SNUpqN y;4:ɜc9M=O~itOgzg~3,)Q3@$` 2.$4G9uzP ה- |řEЗؠ P `|ؠ :>kHg|c2iHg1来 7ϤIp4e[=w%UC&=d0|}L8"9HTܵkҽ1_hLrj\ޝ8ju\+HR/~' `<I p 2=0eNǛ'H^uD&G:atzf(O9N# # (H=K; .|;M}A,)qI%ܳkNYѻ5=ť$cD .{uZz;1(G.#Ύ2(99ܸy#:8G 09yPEq% Xn '^v`7ݍЛ]b>"~Wyhq5q= H8Hc_=WBaf T7 fqrz {:OIĭ,U^JjZ9z1e}&Q[ LT&Ymb/ U$ѕ/~`DtJ.KWOg187gu%R /};{2*i pgCn?j:I56Ano#£ PS8|k`*'c%2N9VAKj aI"io;Sh(:wksbm3t1u8UR!b L &RP&dgQqJD) NSG i8 ze #eQwU%f;]z'$p^Vpѳ :\bQ%elz"n5zt1})ccw6f Ӣ*٦" à *jGh(L%L}?D=a(Hu$CH2ۖF# $pCT(Pd4i~ B Ep[!45|)R9W.[)qvw;|c$xd }D)2A B' V7:vW )f&QM%x)<G2eށ2qރPzl>A(Ѣg3 )?r[ b Ԋ,ccU?rb~䰻OI|ҥIG$b[!\\ '=06\ER&\']+kG]2,]孕QQ#F9+81EBOw=|"La- [qA-4t" d{{%K:`–Av)?Jxw-K w]hy{jf&ym-"[ɞ $$VO,mYƒɥJ4Zu\j ښ~n]tv9XT/m*$ %_~"v@ 4c%DvM8kvpg4!i/o׺կ֖AUީh Ѫ Rn5yӹ-:siRѦ =qe^xy J.9YSn=qNE&ĥ2nD[JJHS(@Nn2/~6/)SȾLz-m3}ܒ<|6L. 0ڗ^ra )WqiwVA0* ]wv᱕I`W ]7xIŊׄf HIy vq1j&H\+$y-O)} @F[FcnF{O$#ʳ2~LhcŠ1MY_@ƴ~'H A1f=5wKBCn8Fs; ߼N D(`o0g#b%?"$BfbH=ɛ[{ $p.wXV,0L ۗxJRW*i:uDpD)&(0$T`RcֲdŦ)R ~,G\%a>RNYOWLIVt2tZx&r.8"$miMu^2-ӋC f [FMAUһT1NoOo_7Ce$ *0P/Ƹ`b:߂7hϪFWl=H7**q>jcD蒈Ɯ$'n+ z5:ֿ-w([@)Q94שa3[uMaGPX<"odҏb0A ?_=?t6F1Kuɀl<-u4@0m GQU\erx>9y/s$:'y] Ade7J@M/~Uf`"0$`ZN%Hהo-F7oCFCbn7FOKz@ەA bD@6OO^&C:@䳟v7WQF3} *]aK:qKHF/+_b "|LmIDlB(muO0z)5 vy;aMͼ$No7 /$-UFq]mN̗8@֯[]ǿ[Ԗ7n;IQ"lM8?q C( =)srnʥ(C8n0H1?"3E9¹Q hM/8u M>Bsۧ#.uQv;vWQ}iqv7;J$pSGoAFR;vGL^5CFF8]=Ӆͺ)ܖ0(aMbWA}r`6Db(LiCY_hhX(UeJL=CC'UF./J3\E&Ef )zȃAjy:g/2fG1aXfvW;}3yhq0Bj7e"eXq*GwPlR*,[@z*/<]UKc.f;c-,HKlu` a=P_䦨#XGjI將"PrE̖G@jV)s-?otOQw m XYScf I c=4?$17~U9.@N%___zq1+@]h}/_;&_wmh2X\9?.[,mw"еlNAgyܸx5іI9=PQL0Z.D 8xn"E _ 9)vjWWra7+=2Y^Лz0F/0"i*zF{ VU®^#Fr7XY vX@pg5e|ܤ.Ȝ P]yq9D-?.]OW%foAB2S_-S7BD 3+ q0X?")Gtti5J(eaJ4E6[{/6LOm0c|khY鮅]P@%b 2GPobBb {Ӵ#k^FAY`gib0.,~G_F[_}k'Ϋo\.B2W|)^̰L]`*iekws;\JV l_<䣞ۀG݂"l;16,~munRrMx&}"""CUƻ:,UVasWaﮤ$^ExHLBBNr[4emc)f#Au m :,Zn 1)zhdnI Th/ަ}=BiW‘m"TCIX-ёybr0|Fq Cƹ~5Ж #>Cu'`̏r}fi#5^\E;Rrfř@@tdzfZ š'uf#b ,o69ڣA‹|vQHux O/Uڄ^pk?ɞJ*'<DӋZ a]'A\e R%U제#x&`ZA)6a=;x$}P9rH 숈k-r 1f\PPG;G˼E"aBx2 OL(I$w'*q }udղzo|/^i/]k30EG0aee`* I%3<%.@!oFq=h=ZQ! i[njvE|ĻP6 QAN9c^93 $*5a iHrU;?hPQ8kw2;Ke k/S10Tov>]EL ՝19Os' wlindYv'YVF[[Bs\C1 |ړ: Y@&J |L`m ä@J?v{;msȸz؞6Y;v䮔c[7("u7[8rȹ6ɓ$2U3ԅHdl ܰ&wk0[ii >T #."GnMǶh>ݽen$i4Ҵ|߃Uǐ0ZDO%d[#sbB"ǘDC rg H6J&E7+RDV,.l&ɽߺr#'ڢ`,ĭЉ%䗶TW$f;1-DdJL}:9hCƇ|'ï8st#d2A`": 3Km)?( 'Ү4̫`*mAN.]eJP-7h0:QG(DClXHdB=mL;IYfk(nv)s^9YqD8P?> VWq1?H3h<'dl[)hT '!;U6ZVۜͺ*?JHhfHh*İu6}X=[Wg' ;|p4UDmO?I<jl測۟rBrbRb!̳H:98ov.s*^;Ze i(a63SP#7fmc-Mmhq*2 z^)qOQp B=,,2_.\k_h A Pހx yʖܲd#,4<ñTWt( (\-Sg˭`~AOj=sw1L%n._W7Fl!X x#(?j^<@J[),-S><\{;eD¨ 8oJX Q懨4 lB/5m7U'CK#7 FB1dn TAQeûc gDv]O _ c]!5Ax| kro="[}o9ѫ|;<#d9ÃU&pb`C/zri gn2*j| >U>17̾ 4G%\zo* ;-A+PIZd}'ɱk>= $e}6כop\ ^o\&r*FƖ&P|۽:ԶJY1 O xjcJa)mX A|z{U^-*:0qқ=݊ s| +]|uOX痱A} -}ѲC1BLP&rqGNͭ.P9eFiaM>=x27V{v-.W^ }VIp 8g%.}E>5x;B8Z0+Z}_ YD3I(sl 5ٔ/}QV&q~(J]u\̱Ϝ >Y +O~?i 0pQ4;)9W(h Ё]q8rL CX$e t E)Gg'+hBT@W'-e0&5=a A~nq$ Tv9HSjd SGܪ7+HtU87{f,+UmLX|8($PYP||%P)pAd@ S+HDZ@M!n noQr 0|=1)2zqɨ]ʼnohLhDSOV]^+Wu++p%э]&pJUЀt<| o,ݐhKx]wMeeٳhHL#zBX\F@Xw4Dk4hӃZ>#k>RL9C(ᙬP ?ĭ%.R /-݇51`(8G}8y=g助i9[ 6J4iSW[v"oHz!|1XO:.{W~Nt*]1ۗ.Q^["PF fzPRJ[O:V*Uvyp\xs uHWQ"Zv1oc=~UeIROqn8(%J P\EulTg"a~Ϛ̅~~эnn6 ˞eA %Ë]7R;ĝ- hFu8ٛQTCCѹ<Y !l9p:r ߱ezͺ3o|CpsqO}|Ba"kUmʭhQCk̅~uAQqw]2]ivA2: ڲ*7nɔ U~Mz vgDAʓ,viҢP-.˛CZ^(Ɠ1]۬wu7 hVDiB!8 NnEQ)\~4QU}_sՄ(OLPse%H_y\ljʊ]_ 0~1ٵV8MoPnf0C޴ ̲oh ]izdȱ-T,8^(.TC\9v' !/AfCT'Bc *]>xסcLQǯMOue(Gͦ7|*>qǂ@etwN3Ilŏ>>,pȴMЦ4 ~B[Dj*.2tÅGB?hH-[wndӐ{\ g5~#a@ `1ʰ:5ig'A>-y:o3Zo%C S, ;}`5ӇPY4'U\ZIaTdqf~b%" c#2k2%v*LeKjI..#4Um}f6Z~aVQTI8l7.1XF9mlM +aufi,}w222b% w`&ɂ6[Oeowgߒ{ VԵAUlᥞ)8cZK]ϴ4{EةL:/A!hkX[sp#v5+|?%\owSod8:qM4ft~  н o `ʄ];PsG,4MJ>6NS]Oèg mʔoRveU=ixOn^R˼=OkR9Y p:aaQڐdf\BVs2X¢ K!Zl5` nN(O6~s|:\1VB#Zh}ZhQ"w4%}Tä^2g)=EYb_ Ia1HgKd|G{<2Hhir+,Vp,4@32*h^:?A zx{J <)JVBnjѻ!SMPmd&>ćfDЖ3.N~IH9ޥ6_&xMKav%JiP}j#r Ys6s$b)[.6r[iJ0>+Ֆ5(Kq<=Iukd[^xޜ?6e21L0q ؘ0Uz)jBM$=2NԒFl=92)9|BrAUQgBvjla@KAi— -ݺ}IvV,e6IX8Y~H-[kY҇h(Fös݌Z!Fbdawq ; x8.Pva_el I?Ie`6o"#æ+ z/&J }_DЯeye)sBC xozdՌtk{h cf17khC[0fNL8oSyGXJXFo)E¾@) \оf>K4]HA 9V7[{;GCY>k2<4=՜.*LU )kY~ke͸MŹVޕPk ͺzhLOr$ME(iKK2ڛ~6[K5*d*U'RXQEZttmOQN1"N$9sPUυ $ K{PjF L L=۟4 7gH#'a6NOjl'g!tT j[FuH3".^1,&T}9u9H3;rj xMs{^Lܒ!S0M7*=\7*3zYYltQ.Bl:ntjYYbM@\=Q-I7we4IW)IM1:i-R+u+lM?vi:[pl=՝/lUH隤D$2p%XnHW>DoHkOZr'$;_DPc\l^BDt8i+ωzoidٚ 'xAy%14g;ɦK$ ya5lHEYN>_bǃa-U5MmٽH[`,zʜPWYTk܎!?KuqwɌt\Rh¯4MVS"˒6P^޿ NȰźξ m֏saL rn0E9dIN^9atOЌn(Z;ʮC+v*r[]hf).>*ړ0@1*Ѣ,,%dkt'|>]L^4!KH{WB. u#^J v6N4uݝIT'_T YTdQE5ҬSaJBf<$l>0 [qy0 ubmD ԆW־5TM-un\0d)3 ssԳ┝^A3⫩TC no4Hk <{u]Ht-l-t tt>NhJsX3s#,ݤ;D0'ិCcAUuU; Q+}mślZV-=az>MYlz&,lj*ʾ1 L#VIS wh_Tx ݱUђI']|qdM M=4v_K8ަxs#/D&[ĩ˂HxGYl=g}IShDΛʆ v"!g2(>  9UfFn! jL>.*H /R<CgOb_QyjzA}p)ّJ@t_7 o? E?%tO$ 6<z rfQ>3)C%"^Sw{ /i{";(Alc{~ 6L-ҞŶÑ^Hb޴.Mܲ%>cڶua 9fs,lBvqGc{gS$x7a%}]in[)v9e@1*a# UkW~j01-#A^{N'{[q]ڍV#8$Aيhtg^j__* yGdij*sO/]!͟4R: )+MgS<`<&N HJY=&46T$Sޖ3.{M)ʆ9z.&gI@QlUm!0~3HCC"za1׉̕[WZ ;= ko?vTIqtLٯaWizb;7)|YhA V?YYbU}!bp*("Wͣ}Bkf"& 64s3@ik+QgVf# ;ݗ !=T;fy30tPYt#??%I8>V.nnV.n˺27A5}R\=aʺbXu J2MʔaQ%d$E ށj?n1!w'uԫ sNpSLDN@wzJL$ñ;d}Y^$ip5qPBmb&D4& 7-`miZ>dט>}Y5&&f1ȓl(h}x'?裮^\4lpD5q |pgU5Fܝ֘m9E|'w~q 4FRiFBr5j78j~)ZΤHrwuw{5RԪZ#Aw.Poacu3's; F54W+B8jpقl <>|X-2ԙ51VsU~ʺnsϳ[+?;Z͹uq;_{0 A:q}qqg ,z'nVY[BB;@rx5BF?;$Ym#hfn zA 9K p0B tHöI>B&7GKuQzvg^NtԎzǧL$#a_y2 =r3rL5KzDpO$T;"KC%\sfjހgwiiՓFqC*u.ҍljUF"mi 8nqy?Pgª/JT׸$4N+PakLP"V.fn VAj(C@/r ;<ʬYOo'r2HM-/Av9~O2 z'_7 qMt KULjeî|IUjƒzK8}Ř#렙H<K I; Є޴HMi28u?z͞NpY 1ƕ/~5\ޤюA6TpQ2{/8gJ  TgH.I.eږRdqzFwv6Ús4sgm3 戾1I~]mXcHHmsY\oD4"F -Q3Ji;46YP0LJ<]!r2Y}`| f%gSBq{٪]Ei -uv)}, 5H;C +#h0W1w?/PcaXo[n?m^$[uzW/ty'd[#/1ٌudY~XHhEx@Gzs$dCA0h]?"I;.ko -}깭+߃YQQCrŒN ˛0Cqڌk4Zsv^ y;=e a]kt= CF-ndJ5J v٤.uuJgW;Cwcq+N&;udC9*SNB6{zmbyv9/ml],3TΎ\2pӿ" ջ|}Zc{˫I;+c8' ZW< ٱI RߣFEt ] x $ˆFl ۭݮ/9D64Hߝmh Qi rnLU'g5.9dKp <ۖ D֍so3bMȚ˨)iE]M;tTx3ej<ř.-CM<jBw09m%d Iqcs[Xo?Qoz.725QqKF{}?EO+ ۗj,g|sxu}M0HCM͢#{z:&fv7Hp&~07#Id#c?dY6ݽ0dAS ZSqdö) "1OeǴMqv\1GT4C{r!IƜ"4KgTrA$00,iK:m)-{CK{b۞59~W55,Bӻ [w-{9&u1r+i S߫hSzf~X8nne,:u]kރV$P$R 5p2Zk-: ˓4>R|.xۓm ɤW2!ZBiVUp@ 4 TYt7*دTbM-}R! K MUB}&ɤᝤK;k@} #܉V R9tmdAg}nq``4iK ?V.z"RמH(9#0odHeS aHˬj:BLMv"PA4f;&F~k]yY]zAn5rUN>ǽMu'WNBg9˲Y+lX 9CrUѦ:p? _]gqީiH gB >5N,! 0R1h9B̑ZMA: *Uv3&\ak3JI SMTObj8xH0M]+K~7B)+4&dgFR;w=d<ڨ"'zU~J%Uv(RԥLIԊ/_f~{JGŇ(8КT6:~ؿ{ۦA&fdfmpV <8QhVxGjZstuɓcWh=”qicbLWLδ-bl<?jeũ,_XieZ_L*2GMsb./ծ{ (ʬ",L&5Vc)hݛ{twXaV';񂵽͏4%5%f1FsV^49yv:w͐A/;>3Ma-B2e=\SYy` 5 RVPͭD^f+"r|Kr?)ۢ,HkMX4[_6uWSl ;i`'S![I ]qo36㻻c54uTrg`37IItOȡkѰ^ \vOP}"LO'kYsp.$Musjøu2yԲ89 +B5\30Ƙc-af~̌]6tf}î0Rz(Ue6FlW赏Q?C'`~aqq!:nprDHǷKWvHyXD܋"Z= V\ԫeO(wjS6!uVPAߚ^RWm*Cj뭱{nXsc&km',eٍât4!8?D]Kb[F1Ut]1?nƧ/fe㶗Q=^xYcLT溙2<4R1"i6v{Q|xAN80+by1h:ll-Ȕ VYmdW 6p&atd>`w>/ XLt] UbR\^~bcr64}TRGir rօ:wAI3vm =kt{)n: QֆNxMAԧ2Y+$uyq@]g9ZF F"<"M@DqQ;ܡh{U6H0Y e?.@ oiah/'tùwnσ$5mF #r^"D[*,ys)|5—ݻ-a[ɊUf*CC}kHٌLܠ.v {,]^RcXZ+2im$)aypGm='`uGu&+t d?k&%.u}U8f}%_0PhxG#h-̞eu:!w#6ptNғ^ AxlaЉ$3gV%"ný32;Seb}iO}L]z ڪ7s 2LVr1>H͕#*Ѱ['{V12zAd]PԡAG X[|u8} %聬hˤֹٗ֓ϺiCeYO WMp%vC ԉqM̨9/vCYKL2gMLźł4gH}WXY4gfv9ir)-sbKDa@K@vzi S 7OR Af2C$' 'MWOsmByW"zB`Cjx9ǁP. $TЎlztsON==ٱ՚qSEOf3hys 6qηGic7MvF.gdcNIG4uzٹ.ȳVGW 5=wm0ʘQ*N_MQ]J-(_Ni c_;mT4%o 2F{_|5\wŤx/1ݓ 2I~6Lpj]&cʈM4ce;K`5X61 DeG 1(RÿH̃ NoI*"؃>2@V˩2 lpnJQ&[c'𫌧|R+oֺNwf(ڼ=ԮC{^n?X[Ӽ%x){^%%$4Zir+әeknT`>dЛz .F=5zʆkWS_%k [<oFT^r8sje> ? MS‹9K@_]QYEvۻlJD( 2j䅐f0NEY ,9Ж";J2/"  jB M>'+F/4h &~2g"e熊\Vqc7~(WzvUո-{.xh"iۉ 'uF %54 +[<拧Oajr&v_ Jlv0 Æm66 <<["Ⱦ~ؚ#EjUmtU~|R 97%_Wi&Nie, u_ELKw3ㄊwM?YqXds9IJ'B?Exodְi~~\ڴUtgD]b#햫PXL{y0 4&^f KBͿ'p&2j+gB_o,If AJ3.Bh`[ SO/ 0) elNvf0ral0_ׯ^  >G-CI0 w@$~SGRwto2&&2A,TV)F"jTd*IhӼyM=m|[dͳ}5k)26w}7t1a<|x]3Ѣ&z[p!ͦHWJ,QOi-ls#m&e5uTC7*xb0N3Ѹrc~GKC j3u&GPvŠɠeR\{=r(T]%OJU8B٥w&C7[d'fDTUsi MMDՂ yU;fߌHcEZdV |X%jٻf6G;ټ47 `Z|ޝ1UGxr_nwrV%sel݇+?23[U1ҚXxA]-zvJ2Ι*x^m9܆E <섻$MHFeݥSlL$131g@P'l#sÏ/F;'bW~jE'U.mHtڥ(0yj6Z32%@PWV|$N+2y.yD[~٪]J{[ !U핡s. Jɘ^%YĚ˄'s40ZlU!3)딍w3ؼy/At4F\/iqu7H=B^$'N]cQ_/{e}B ؊1!lۤ |ڗjZ" /j0ӇXNv30m e; CĢB%# SC1&=:s 5"J.d:SϿo'@-ҙe½O/8k%"NlvbO<8 ☱;sO"iu лi4wP 'F}!IՓYvЖa*G2 $&DBh3*Ϩ(Lv#R xa/IP#2/Q*Am:efltdF1׆({E/4*^H,̒ۖQy{ ~J4#9t4-X-`9 c8du6e]yN[<ĕ@r a!0gkmlb, ޜ; ECmЭ;R&'԰`眣Z2'on|ud ЖQkr6vTb\$[ȝsruq`'IB#0cUAsNMrDg{NNg_}K:z/%_Wٗքqzr3Gv 3pyCg+[ɮ|ڈdꠀsEm]"ܙi@f’#[?;\x/p1j3ە_vP3@+T޸ov7SG' k++4X/9 FE@7pWRBw@YZi5-wHEz:ͼ=t0TMg+Oܺ`7" N_]WIVl Qauīb57/#o/`+;1R3Jfi;9D6` vj&6H'nq:bg_b7p )]q2RW?*>ʨn 4J F~pV^.(9?1o::DC&D˾6'@~r>zȁ [zWk7vMdm͎[n#vG#\F9(KRF_]ov+> ؋\ӛԎI`M;Ymn[q4;WwDOE!=dfQ P1ٝSeAEaeW~s笝 P܆O5A9߭`ꪲE6J`żZ50]n.eҧ`dڭ^gVWD_D?>wl,{8;508A5hg; ɨn#Rm5CC߉ l6pD㮿C5C}Ɂ-2+:GpG Rf%D𱁃2k[*q<7*v_~*n;贎h4S P<Mh>cHq=]zy/ӷ_͈/kv,w"8j;|b+^Q-nt Uy=@br(m-6 JۯY \2̰h75,ɷ T2=g=#2\ }jj[#rdg(p:$J`ꤏdCy[8_<-A>d}b[W į:;/fio&/`ؤOh-&2ЯEm[6>h쀺jRg@-oݣ[x:L:ШYD *ӆP-a7UlGl&B$U2ty}ƢJ~nͷ-|H_maۈѦ0vƮMcƬ`ci7^ jAhAۄ՛@s\I.|uUs(vg"oiÁ$H:`Mpt_LP)?t͎> |S]h<P0RlgM7=w kmk9L|ϦmPs'(@=R Fm$F۰~|V.L=y+ځ;D% %ѧI(blUi @=;0l'8.l'i@ݩ+wV%/{|W븭1G0z`М\6;f!~:yN#>C6p'8 5hq4&X}ʝRM j![c"(J5>Cл2U 1Fvd:+d(5߬8Ihg}UVs_.0' نr9e,K\]G* pa>Z r/4 zU0IV]V`Y4 7yvZޥ Y2`QW4U'BxpR3Q"|x{EaY* Q;HZޖ4ҕTҍ7'"` 7^Qut2D /y%ɢ81q(gE O.0ԾrqhQdPdwWUv?d ε(Ftx6RfӈL:bdy㗾jPW{"U7;&&ԇ[׶U{]'Ya3v>p4̟ӝHj1s1$L4t{W?AԗQW rq3= Q>tuQIcslΪRl9N:RM͝[Wi_U ^nۣ'o!|( ] O UƑƁ: B/3:/ݹ09wm-tߘPBDIvwt<m~migfCnBJ!/oh)|h[Or"p#!69p bH~qа%tBŰtXݏ$19dž}uUlIt7\G`taMU' JmA2V#XlP~KhzFSYy/T^50^Θ>ee^]_ā_eОZ⹩EQL`\.rT'3&j׸,\OK5 SW|70vhO#˴#_!|D0 h3#`qF/7|U+Y^eb9@rʴXs,hV%^1GM}/#WHR>dX/h'Сqy\e//1{}Y+׀ImsdKG˿o wPC[TGX>Uӌ!3NmZ42 }Ca3/,)`-FOqljP"%G;F9Rz :x%HBut9x`( +L_B/ZS#ziS chpEcR2k\s@Z;u\>RV:ڍ{w m ؀1*~X; 2]2{nqyȴʴ<p ݟ|,MgG)4 L/(9^W8^ݎ-hv׷QnC >'u 'аPaMǮJʝF[Z4٬Vmu's7)̝̿F#Ґ M >"OmSzUZs A[@3߆GJO-VTKG{MےmQMA+A_s(5]Ӫ/KU-_u"')k|jҽi]pI}U&%|wMuV& MaДi .llʡбq7aѦ+~;(LF'M/3&1Hyı(.6$]J+%,VT# B}H#//UF%osn$,38Z%j49u  U\qWRo7:^O/l3{MfΖA˴ue7A'd2+I&Aui@B2Ј( wJq OA,Vi,- ;п^L7i ! d鄬چ6@9߮!B`ה4O,e\IjpV?tlo z5{1E+]J=E˅7#!NyO [3k;C`V&N=HVrY`Qre#`9#I&'Q  /%'ZW. KٌO˜ZKx˞ $JbLdN֚пiGAl=qX(7GǪR  {m;q-XO7IU'7&N]qP\#@Mw#Yt b^h?v}X]E{Vͣ pxu`k02t{KtS]x}N<8qpܤ~9XK?1bL htzV;G@+\f*nmdG!hvL*zŁ:+7nM$A4O[aU]aO?\PNωfj#q6NS8" H${5iTztljICJs;*yNf]ol 6%bZ]D0PcgʕCYpݙ 7,aX}9qu2f?u*C022,IA `SS S=2ҹIp5IEŋEt&NZ4T*K)Ƀ'"u!z =iznb3@KI`7H3KlN\Ucx mM6W #xg[K;O"vחg`kPsƓL{& ,C9j@Ne^ @ kW9fty}<]1'YAcLL=^Xȭ] BBj+iw'^"_B"Ʋ'˃#*L)"VІ҃9jqm u]d-)Y4b1Z!olpF'0[p$ {6,xӘ4L0P#3H~k~JqE/JiLJ_"'4t~ -[HS/uP-uD֍tXM/?N>ϋnLJUj饐l05 )#9Ouay$ۭ4;37cfbUwzQ H Ũ5mZ;)&i] NOa6.yzu'4k|$H e U%j}^TR`v|tݤFTMk;~j_~z+gwqZKKL3f {7pi Iw^zf]%/Ĭ&Dus9:r6iuqRj4j}U'g]W|nX:=^obk'~}czn1tGlgym1r~Ȕ{thG'{߇.nv F!iȒ+tx\w 1'MJnzl9q7;wߩ\{Y|h zjr4 1|="t?!o}M Is隄i Ĥĩ!،J^{?ha Y<)k>ֲ*B:]v)ȣ Ů=((H 3CDã=7YC:=Iixd>8|0sN\cـs?=F'Ƣϋ\*r܁G;V77مP:yi ʤ]ZPOg0 *TdBI8YF Nfn4u%|xG3& ;e{9E7r{pTcTI쬨1JMJHm4>gԽj;;*ǽ?ZA \b4&[`2]c\atK>} 2RcRr@ɂcAVF>ؙ5soZa8.^к H:m@KX(D  duH XﳕyuZRDVz<,$S^2|OlI<:G8{ -P_*,cl ]>GK-a]" p⻍O4 ,-3⟍fL`#t(Z =w}04LX p38 t)R'ID Ա>L+iZeX1#SyS Ĝt7Yq\`T0y5M=Z2&_ k7;X5)JTAxg\kR{ڑ@mKe^'vǒfFhٕ ֊WHm3(b6?=k4%NshChŪXH,1.E^TӰ"L'|Ñ>'\ pg|-naG 4ئ渢08>`ߕk(=?<oޘ-Xd p{|/qsfw.AZQVvYgZ33BeaFխq| V'] k}tֲd7* -y`+~-8ɶ6KKv[$U @٭'$ϻjQDžqy B T:w`ye.241OD &jXjh}pu]$n/yuPaBbݺ'=*AA]6,J~ iQRLّoH^Vld<|6u p  x|о [C7J〗G=cw$X`@1o6EOmSDs04J@Y9$HjPSxE}f.>vTqg |'d rxi\~vᤡgpfᨃ]x37~$|( S! ފB.@_c}1,ߌ,/E9]@[ .9hv kbGT\ $!8Sٱ1+v|q#j3b^q-uu .@l3ܟ- 9/ռPGxuy`C0ꅾyx@}vHH`ԻWtSYs ҫmHE]ɥQ,3H{le;aZC:-|6$h=]p:$o][3&Ӆ?., W 5GTeleȴ)l>~HwTȤQG"g};X!e% GLT-I*T܎-Ɇ?|HÎgـENdi.qJGg@Z`Y]L+-C@zk{Go "1V3_A?ebvÜUǜv 9>=oFd.Bh3Vah ':i&5s.Y-Zdbˆ{ǐw]U&\U,& B363c`b ܂[÷ .?>nB)~ۈsG`3g!{ZpWW6fs0I;(X1&IV97^ =vA%/dkʀ^ĭocӓ`DbCl0GHHNBL+ϝrY/-@A>#)Ϯ:@x8x6dA{D=4 -(A17z8APQkٿ =CmYM+:_ 4{ f~$Xzhv inMjNp q`_n&7(B6 ɭx-Y˴}d|&S\<'}5lwZZ u ~GR|CzNfǎZW=4' ?_e`H>%08 {"E,fMؼ ?8b6$G?`c>8åhs$[mL0d89W0-1 Ove ͙9C݌m!4m8:IU*tҁsexSeԻawm1Tr (N3F^lޛj4j>7 avNO]°y T`[l~hnq̜xo]ͬEuuƞ~EBo?PP7g|?mg2\XȋhbW.Уsм蛰N큤ә{UJ2I{1/6ĭ@C#\a > "$s\ %lrI}ZTQ'iPn";YWFIPUdeA_/Q{-;h WZ)_#)r_S&uO@gcuD?btRdL5^]l!x5r0afLӫ7IѠL*e,[[ڕhcS}JT;VnY҃ӭqm6gs"8bPWl>XRַQ8ZN]ؽEA3AL,L)B+.V!RyzGXcG `y3mh˪.4?lFl5WfK0'ӹp6\`UC^ lsAz5XaSd4[ ! HsglF FZXu{$F{(әʹEQ8!i@WoU_:`8Cv3MZ1w}̼8o2hݳoreybږ>vHx%kF3Dʹgÿv#w}| 爆r!!jTWVt?EcZXT\.)}@ehtP ;B2=(Ȟ4 ( AGt[ogo"vN!V)xI^Ѡ@}SKee{e&7v32yʑ1^JRlh4ZݤNEQ^sV@=At4ժnh$K.AxϷqU]dmȲ ۆgd+S̍z&Plpp&⹑1/=͑J[sB=WkNsf n2:7)ja!s$e벊?@W/]_͓d{S}rC4F iYGp8n|Zg0w++ ~cmSdC@Ǔ߄HvEv=#X/v o+zZ%ch;i|LwS}ޟ>ɫ g{*%qm4'y />R pirVjJ3^ϗlD|> eL"v })P_JnF):mZIKkM"_fme7ij4&ɾeF_3_!Eݳ1vv /YhƱ >uxu}Ͳ0޾_$+;tfL&T,6D]Rk͓|ze| ES@Kw#],حBn MqTA҇R DìOu Y!?,uSQ2X@ 67Cޣߐ| %Z;( Z Csï!.TGKT(u@=˚)~Zjs7~J %Bó~-PVE9iި4cx Od w@;Mѱ3?5ߌ_-x!ti3aL{1sLLok0NS<@=3efxꭤvH| 6kIfߨucOq7Itrl l8wԻ $37&hS};uwĹ,A(Al1JXVlKQ.FZZ/CI;h{^>_erO-~- LN%|cߗǔRz) GTǤd\׸ͶdizgN _x^d8aDJCS"TgڌU[9r(74lܧFX储xj#pDrƦ6XRJˤI2)"R,ojwHP(fK#¯QIi-zdc( V@sH:]CZc8+ rIIN ƗRuR=NF@3gˠoYe/  u2_%4 !hD~Yilm;rbOq O(AYH[%҆5X"-;п^LKi q d鄬؆6@9߮!B` ה4O,e\I pV>tlo ZՑ5{1E+Is= oGBB@zwvf'M{䤳9Gr,F8oM ZO>lo$h%^a\^fd}r.^t x?j[( Wc@&s4M;Jk9`>Y2{c|T{*nۑ<rIdHY~đJM\U| eM5&.8$E0`iӅ H\eV뚰cJNQ3xw:Hky-隭3ԇGxzKO?KY35/om΢Bl/$-*̫$wK1%k0BcP883ʴA;M KAq&Qm)r̷`!Tt"B4DRˌM$Ѓ8\'2j /0H2¦fL$Η< 6?^H}RM!0oj8că4  Df58͖gHѢWE]Uy)\dkL(.'=a@5ڟXɔ[*x  0ѢEKC{mpG5ªְ>P0T U92(_mifѠ#(hJYtǫc}98#dqb83&hJ!}0(K @ukp ʖ%a21NðѝY"當Y%Iw0:TϝXzؽC9[@fӳFI}Hbc]fDY.`fF M)0 Ȍ3u{aVUb `'W@8c@U yr Z_) =m>ݲBANjmˬ6Ia0A 鎤wKA_|+ љ!a: 42x!8-!&^>[:'G~r_-횪LYD iOa[1C&2F 71DJl%9)ت: C+2{%R,' ;g!Yn7X|O1sMG\x< t`]FR08#yɛ%/@mߙ$6GnuGT0EnF-R㉁ W'W:P~iH3=W='VW3\r?L5]*]m=A?ԸI98n?˜EvO46bL htz;G\f*nmIfW!hL|Ł:+7nM$ˬA4O[,aEa:Oɿ\P܉f J#9NS8". H${%iԥztlICu;_yNM{+=1-ؗQ6 T홱rPda KV^N8wx@NfԌNbH!7x>5bjJ7aggP:7? F;x!V ϋF vI"%yD$2D/&6T!5 ~&1d14˪K f뱗!ӀsN ^mA@OW N>F>z ½T,xH>]X|$?1اjړ k·9Guh }ȋ*O쉝ft N ÇWұ [D :֑R.|)t0$2jQE3C.S>&~WdU^ 5' Z\XWo]V\oUi$1A _ |yo,';q9-}'ò1A](b_ZDW&¼dIm|)[^4vWO DҋDče10N(%G&XURD:XM sԮ9 >;Mw[6ߛڷDZG#gFhxc(;0:\ق7$mݳČRR2khB[aL]QI@ƗZ#VE/E>5*~[5䷤n#MC?񨃛tUn|v#nZɍtqxyttSfT0լM/̓QH,gPy;T'%/F3A."]{wi41AkQZOV U'-[܉]6Fm1HYofC8~$n K]j5A *^(#J*cmGVV+cczw.|i|inVwF0͕6kЬ+=C̒B<|1\y+wj`C'M3Wuf8z^^ԣYUfv|#_o,Tٍ9 >/6FrnXdC~p1.ntZ<($Yrnh4f\I -'\~;kskm!\OT桡I!ưG1 qX)Z IN#]P#8UD1@kж7 LW"#e}{J=Al H?j{o7JL݈9I}|!E4{dyrFN9'1]lǞc@cD |gHk| 9~K|cޝC(<7eϤA]ZPwng0 RNq ҹ00{Xi uW;>8ÙK gΌ0|wHcdg.L`΁0_!k)=]ۃW͂sZ6u-; E:8cn yuцw?pe!BpPNF<"d4F@2 u\>*p6&TY񜉖|Q)~u2ZQGA e% }hߋ6YnʊK{d,-۔"kNw1Ш監htZT@9!B#rܲtHLcPm{ }J{ik`#ĵELbcE5qTjRBJa?nP^;3;@UV311,/_wd 㟧\'N *5(% .G ߚ,8V ke$k{Ӂ]=W*5jrJ^N ԩ뻡 T Bt=AVo:_>۳#.YT{2U=!( I+C 7$hW [dp(4ƃbK/Ԗ -0HNS&Pz8oFD' qpw>3⟍fL`#tp\ =؜w}04LX !p38 t#)R'ID Ա>LE +iZyX1%ƒC\yS Ĝ?;o,`jz 6d:5[Mo$ٽwj̍S8D+nC/H2E=:*@Ke^'wFd 3xR#m ct+$6Hi5"f9\ni5bQgJ$XuD{bmg]xQO0r`Q;G®1s*;)LM4]7HsPp8Ԝ_KNfƅ<ڱF͘ `Wbq7Zh4:yKH9DfC]ph0r?bO=Do90Yܛw߬j܁49;~kQ ̗5)%2&BCe)*{큪 ٳ(/D(RFkgZe)M'sf3"`RͬGwx[)ލd::i^F%()^?uI׶K ͓}0#]ͳhuUbZ+Ύ jzP?h*F<%f!,͵,4wO)2\`rwZx9T&GDZ~QS)Ν n_(K *>AUsV+&??ڑ@MMYeBM"^clQus1n_F~+`Qsi )K'Q#B GU0s+dq˼Xm̆uاwi.boϜ0e<{r*6ƞ$WYǧ?0J\\K1w|2܍M®;/[^e >lToaRFT r /smAo1Dlƅ1ƛ97fld)٢c_Kj>YÝo-(+{j@z;k-!neaFխq|V' k}/t ֲd7* -y` P~?x˶KKvW^$U J٭'$~QDžqy B T:w`yeȟC241OD &()Xjj}pu]$/ԋyuPaVbͺ'=*AA]6,J~ iQRLّ=ߐXlzl^  o:83>G}A^Sy,ݞN&WA ۩[3/Eـsy ɟ'έq}_1nt/7rkHb1ޘ]m 8(+aƁqyw=7vR%kgP(*5/|ڔeX| EAKXN/M-/" `Fh2MGZFaRmZ!_mǓgJ.i  Ǥ>e7ÉpގVw8yDstCeisj,na?7~rN eE-\2}IϚ6EMOl cQCe#*F1q g@n!ڝ&f;HjP>=٧B a>9<=b MKDd  cXY`sk5T]t{V( H2+zCpc d1Vl2G6fļAOZ\ 8. N#g? [ڕAs_yͧyM `ԛ}K=u馲,tAmHE]ɥQ,3H{le;aZ<-|6$h=]p<`O< ?!>:$o][3&Ӆ., W }GTeleȴ)l6~HwTȤQG"gB &nUHVvdm!WoY6޸`v f NcyB֛0bmNdwXD$v 6)CZ3d_Y@ [ xN&}R+9Ɋ8''En{MPk2B#a|rzL` 2.+Tg=x2> tgH@V|N11w%P-k :HL.~AL㦱`7EEpkg2:УFkYhNcmdssφi'+a2 "d3bbb0̱LGg2sbXvݥ`_Є);\wTqi}~@)ʌ&C1rRGtc>z!Iyb,Ddrx>,9ȇ%@U%`\0j5 e- +Os8}k6> iOQ-2Gk uBgo7/z8Eɴr&%AǤFiMr1WO5Џ0J*g!@4Z*^Z4&mjwPaGJ1Tjdf/]%#BBqW}\Gm¶P`Y*v!| 0N UjO?IvMLJVꈻق1Cj4a¢U'W;o1TʾY52`ҏ[ e#+n w$=)|dI ~ žbLݶTP A]sxiVc}r.\KYJT{Gy>lj=:vaϿGΤ>wzd=dd(#W J2) a V Օ2J])[L~99+l[t#t  |iG;^ 0a,*K%x1Z@!.N 3+|L!™жeU'F6IV%xۛ8r.|0~Nߊ'C߱^nl( pAwz5Yad4ڼ[ !AHs>gl"F[]Xu$Ƌ(ۙ6δ_Q8!m@o:`8Cv3MZQ wv[)1O˜G6Yj4.ltK#<3DߕRҖWQQBGc֎uPꍷ Lހ,-FυJpz.hB-'VJL"Iɕ11nɠ5fٞԕ9ʲG1m _gl$t OՂH:HPw`)|{5j}!OoByL,:hYAxh,+Ji|} mclư*G9Ϯops.2j0=Gy>B¯,e}m_gK90̧6Pyݨq(_Rlَ vLPC6D>3cEB|hS]Mk˥*_{JaC[A%vZ5XE]˰h pE5G;Q >D&mjC*S >@cVfK7Lo$GiFc3Y[c8U2iVDaPar! HG52qv0٤})Ƃ4~>; 7 YvɷaFx9lw=q] ر >nXE$ Ɏh/&_Mw}*f֡Y/pBxeFW*~o-]m?rB|_Թ[~J`'(o1"na2u˦f-Abj'x;{egVk&xlM켒$6^PUZݦ6+빌I"3qIDwmhQHx;J@~Id ~@ KmM?LlyVũi>K8+ϊ~قR7Iﱕz+mC.{Z4N߫xNYv%z+mNLAEH;|K>홶/i->#ihy<@<=9/BSӒz!̓/NWog$ߜ3gޔ> 93 兀잙s-ɣd(H@rG̖鑋ټL_I5zjIV%ƌZɋjSpɿrA/F[r#,A#IB]s|<_B-2b/*Ay _WzYLv yŊn*Kj)wJo^?z=5Ҵ؊+ϣm 7' &u3& T(뵠GKWa!2nٳ M]aۥf1o% ˨t|<-vXܒ 25D6퓏PF&}@՟֔=:GU?ˈ{UǞ֕]tK,'w鋥j2:MR8fұzHMyZ!X^^ ʼ܅G!3z>n"$6@˄gQﯶ=@C@j}I2;O3!n},_%M#,uNo%UY+Og~nHWg{ʮiDc9ÞYWۼ+Wֳ\B~W !KStx2z<[:p{ &b)A{b#qiW DZ狰9H6ҟj~qf$ R!a bH6X!/bniY!Af`ŬL,D6I [;zd'3< X;ׅ}k]|05PyIz +[obN7d_z]ŮM#K2%Y{(M_&' M| :֮ڠbP`OK~1%Bm$/eUJw{1U)U);y%aSuwE=?5ʋI$5/WY&sˆ"iKY.yǿy1k"h%5Ի;-yN+w~'Y'D #B[$D7G[˷V Ie3[K!ҽJ*caKO~ Ȗ!Ap(1BM)1c ~<϶/,=#-?K4!CYv~SZA0\Lu")}1{Z'TM<9[X25y彝ў| $-R&@HL_Z "BF^2c^eT*@eś$5\)ܐh)b`:&%mN !@.X1O1~g~cƴ#DEbfAY$p`- o[sg(o^_cŔ*tLv{/+/_Pl(Ň"#L>f3Cw>N $̏@v[W[ h-~ᘔybx?saP|B.?bdիŸwGf@;I#JIrxMOPwil̀߶%p|}{~}i0CjXGURH8Nf9p6zA|[0W>]zEJjHD%̗Ù{DYo*wf nUyO ⩫q @f,sn %Y!]UjTgg1yz4_í-s^ ceyN4vM (`\9er ]5I<ۂD}pyf:0u]"!^2NqӧT=Nמ8,xUU-W 罰wdIU-R\lC+95h`3MTC7kEkF5oЀ87췩l`mW$h*ae2%YQ\:+-wk/NӻZHkSzOBeJ)Fr{g/-q*7.eC31 2ӟȻY}~E_ ?qz 0:#DBCzd`B ΊЩpv{ `#\><҆gVڱ.аe}yN{ڷ$-Y-t1< c(SX66t Iۘw<=+hsDT&@c5c*Smߠ n38*ڻݢIzzqS>d!ɏnXV7E4ϩԍǻ(lLfN9{0WtCk'_Ԇ22`eb>1}/W%&ewqtzzkwQ.T}n5 !gnQiT}0? tӒBw}J3?v}.|n LtCL/0# =>f#ogYz{àﶇm}GS 4n{OId)six6/7r+y?qD)k/sBXUkxWE)#Z,5$lzD:Z1{\@Sx+a<< ؞+;n {OO-Q' bt9zQfDZ%Z_|oݓ5O=]=z̀Pm|z2(+|xώm~7,4V_Ӎs4Cf%j.SA3VfhjaEE^ ֟J[FL-kH/3%7'^fޟtl}G@@>͝~ XՅ7LIM}>0wtIsmsM`,G*OU,6&0pHAW Vmv"`L K5TnzmavcrdH|BxwHuJE., 5+/]4qn +C[}%[Y@|\Whڠ]ouqb + Ĉ\vm}^Ż1gc3{8xy7ʰqݽSx,s:`7XU;W%:p~V`_b+."> Yl|}UlvC{l~cZ'l`ңwߒ5\`D #AwTоbIX<Z`8̅i`W+\ ?a%׾DY^a&kOqkȂ)GݽkDqI1!<>G5wU8jp9֩KjBo/&)5zx¾!,I6)v8J!' cįzDA}ҵmzwvc;BMstД%5i>-thؖ(oкy+xqC]eB)`,l=:U.x.H<%a7[_y57_`ke/d#C ~mglrZd\}%}ñ_!+IsuO<#} vI/tW!fxs+sU*S8rrn.is,>bZ+_,=nb5H; O>]!.<6,mnY 'Ȓ/Y[G_*U|ɪa]I#2 @'Vu:@}-s7ENѩyKRG[/f /O6aI)s2B)\nճ^P/bre%=`l{ƒUob$/cæ_(9dg|^y3PIiw(w-];0F| /O,W |]tXu*=t+iV3272: Z^ri~|A~$4IE:䋒[X^ Mz a ;/tw4Iꈖv~_L֜{wV,)^I,nB+7 <|CtIk*mTwVIyfTQ5$Z'~'}Sݨ4ǎ.;<茡63}@>r_h 7}dc}FN_̼|8>UHA. [ᷥ?Ub/m(lizLko!!^OZbn\㝚|i+/Q+G2쑬zB ٗ!t41dq5 } \I7&ϐc'>A~8sK^Ԣ(&i]2Hi3پ&!(`I`!JkiALzGHP"շ`ly>1N=xɑq;v2>;S qR"`M#/eu,eº>SsE6Y =]Ü΃N;xv%{&Nډg:hOR#`' h7҅C͗z"${^Y]o w|K h5S|#&ľ 8h i%C#(]o=O]o {#h9V^($m{́taMOX7 -gF1 Pb\C+TOC*0*6KkC8qM'4ĭuOVSab w^ ch}!+qdC /x7t?Esi_R3 6چA FLSH{ ^dg$rN}>ߙ Sa{ѝ5_ee̸D?f.WFbZ~t߆}鏮+h37V>/uY1U2Be&ccO _cI3IúHͽ.1u[}dN`$/k~DQW fs3ća$MÑ1Êz~.^!]ύ4kȦ{b͇!mu*5S'_ݫ5=jL-UdnAӰ?¾; :]Wf 7G''К}ݱn׋0`V3m_~m|~; a51;oPhRL`>l{'ٚ$Ao6< IryocW—*p,2]1g<isrBI[O2Mb=1Ճlö= F;n vGG+s@ډX>s \mHxx% vBQ4И2Eyf F@Ѳ26N `3m}=ޞS{tˠ{{38ZM6?y\鸷?_:Q"wp!D׬={Pb>"̷*Lp`2N;rչhv4[<7ec btk?DZ׋HW<&Y>|T4M@uA!@Tk7MNzwPsȽc,ՎaVU-~?q@}Ȥ.]E lU-,-K]sIxYUO 0u%QڰcYfy`>e6mʀlH?/x>E|Zᚋƿ$ M ۵t i{X]* ?u⚷٠uW&/A7 JJ@/xƦV.wvQm+^mc JiqUfWV( tD|vOqg4eˀh""p-`XzT:fS ́Uz{ C4u5h>>4&}/ =i4Txw#(ާ} }A9BjsR? - G 0AO ω_b2yCXwdfQ籈QS}yZeH]]{rSǿ爯*\q u1 l;"wRC4hDE/tH6 `k~R SKZXb؂dN'c) Y/>Wc$LlciBvw/ tO'^to{%U . LKW?XG;AҽT4C^mɿcw%'O͖r8cVid{ |-Z{H. 0PWnݤ_2k}+@ Xŗ%iIJc֮XҪMT`= ~X}J3A%O+7#%ȯg@Omlki\q44CL鍞0frW |6>ճ;fO,ogtBVa &]Z&+p]Puρ;y2Puw]pji<_$0))&-BA_{,Jf O,,Gߚ !"_@><`wVfdugb.Ȍ{"HnP)FVC: ij|S{R?l6ՇY8S5WI)帏M|~:!ĉ (ɶu%GHugCB4I}j$6EN`KJwp/X>Fȼ*+)(X"?sHY;c)B'rؑ=<OQ{ 3R5w%)8mVpuy ) ٝd]7X$z3{oCJ E@RQ {ݛy῱ߟj#_&3j0s.fG[Bi gf=[?vcоSsȈ˰ifY&q't(3+AHqPVg`n.P^5m/v &"S}D r0ƸD\cPցV5 ǛFV%v` #<9(zށ5G_C,B/G9IQHwwKY(xȨh]I}xΩ0dQ-q5@wd _*ɍ#86, h"ca~ OTI%@?&Ĝ23ʻ9# pqz͒ʭdc}72cgx$Is0IH۸8Hicjc?q(¤m N["-)jĈm n[sEe(sYBCM$š֊Sϸ JYD[c mufW_Яͪ^MG%{yRU_Խqĸ5N6N4v3<5()taAXz#>UN髏^Q"9lug]0p?t!{w@jߛ9cADSWg]V=<[ ʜQ{q=X Rfh}xAL68'[ xh܎.?^>ޯfGQ=b:I- ظB̎!'X=-OSY1o >}|8 QN܏AWh7˷:86n8AFUz %PO'i= Yr,5$KFﮱV71[K.h 9Tkx;vlC~kc "3[F-|ex`m<4niؠ)b>F{iHf_e|l9eUdZ^o>%ɨD_b;^N=cB<*!Ǯ_Ð^#Š{F!2 π!>]<E{;c3~Ot”VEO ѷ3ꗅv~pIV3~Tv[<տC#}pTUWz%EEteI]&u Z NƞŀZ݊] /X_8Tٽ3x?W5݆S5T=x̗R=Wz30֮?ql09k8)~XٿS3"_ 6c6R)B*S%8gXXO6 ؆ެiׂ>T>ɾ'hz1KiN_jh; d/ߞ;eX ݟ/N[3|J+*pX\q_EU Lȋ{WtկEo)t%~0GwtanAE!G\= :}[훠VuNwe~a=h;>h #0oݙLn&X..`<s6 Ѿ: tCJi8j?r.òRvUٯ}ʁ#'SI h-6fkHtM?ʼ?a?| nAt{={@+'EAeM^;qCۖx9@ۅ;{Yr˕Fv6z@O^R{՞npQ޿ϺrO掏Eٙxe-R,S10VgcIڍ8>YkY<ݖgr[޺H@XK~Iww 6<[ ǟÄdN:Hw㳲8wx]V4D]eR7|s_u ܏:RmzsP! m]w^db6̈Yvx=$K f6$ؒ;`'#h:CSU! 0KK/DF' 89I,qjgz33N|=.ߒnlif]p|xq".9uzVaٽ9g>~&ؠ xӍ\Zx !w{>ݒ ]/YԘf}{u3X-[Ä@XQѯymZ^FL}6=wԳ޷UxShS˾0f^u;w¨,t8S1'18?S8Z(#)?[YJի1rdutбq7NN)X,f.fF ~+~8/e?}>ñ=])4Ю?; Qbb\fg<4ΆB׎\2ݖsok(}'lG1[2Y]۟daն2iT%00LsX<[]dDLgvnnMBh=Ĩ]uӋP90FN{ӑx {MX^/ju 54.nm^\/Jtt0cOS(# sc<}tgf;)E>vpEd*`Ǔ^}ҡJCXpNag.$NNz{)j~dN< Ԑ4@zYZ9Y0meoG;RF5Оu0s",pJQ+3čz"^]~N Uj]w]ܐ&Hvf:׎Bc=H(u[&2> D_ s 0X@ -=xA[MteڋΞZ$a9 ]XzJ{oz%h v !?J zwۘ ǻ3^,dy;}|xLdR|l`{aRoh`)gːG];cej^~6рow Ds]YnPvʏ7^ϯI_!^Ş Gb*Wo%K{=e9"7)/kSFZehZ ch"2u 'qiE S8 4=1?J;/`@ Va^ƀIhb/$T ^CD}8AgC6NrOYr ͽ`,tojphrewܙPc7\eq>~ʄIpS־Q+S9˨X*,HU ;}HX؏YN~rJ ƫ3ke^AϜsd G%xWcb15.N /bЫ˰aB:Xpl| wΈ]pȳI}c!C@[H^-5>KreMhG+u~bC):{B ,/ˠ]W<? {w2Z| .;DPh* K_! !f(󌌍Pb rn8r^};T"#j#b,DQ@ U@2u1?B]@|X(ꕢht(@U2k@7t?'S{s9 nPlT^پXίToQjFk^j`ql/i8\(8@ =$gQ,A&I='{W=eεuf!4v5 RDno'D##aT$FVM$T7=xzL3}b̽8nCٵYm9*/^eKK_eG{#OqmD$|^%:c:zǡ =ETKYxdXRZ!10}QAծNop?%Z!Lu ݿ]@?| \ABb t{D,&, SC;/.Ec:9<5j8๻b9pbBqKG7pث!SU:?m08 ;xi?ޜ Ql+BSR\H{1`gkgQ϶%o18Zn#:x\ ]nii79Ho7>kPf ʯܠz<^Џh~Xz#x&p}|Dl&ȋpsɝ, / vW'I؎ubkP$A=W~3z\1:^^_./_ߪ-xCm!lɀޗ}G4ƞ⤁" v#}IMBXW2z{_9I5lNX6 ;FbX+e`2n ik5J؄ v1g<ǷtBơC'M->`jǣ`!Sk*DLݶH>'vUzay| \v_{^Qn2u|f(=2%_S F}̏Ffߠ!s@ap_c,:4 =ڟy|Ȅ5']ޥJSY)1zza$` <灌y8^^O Qm~qNh  ʐOMـ%\{]0%ʆ X3z+uh78Zhۢ6GJ˓&;˰Ծ-:0ÖۊWיpw@)Fګ;j{r Q#IS}h'sY#qG>XlG,2e_|8J~4uj̖wYGRT7/ي{xumõt*G Mq|ߛ٠5?SXw*xSŦW!f!I֡?h)TAd6־RT] Y"f];$Xob^<}$A!o/;ۍHsd&k;qRjog~qlZKVCqqȏhq"3ya1NJz'|k pmO[O+XwЭ_,#]p 0) =H2-,K&%ah |4%T /K2gkl,ƎPI\ mňT~1{l%}t+I9uJ"tsX,jǧesg'`]35 ؽPakH(J~0:2ݗ0{ h,t'$vf-GK҇ C QJuN8NaH=+jZ_N?8CMu1 ٘``f Y R(GaxHډ7}Po|| ;k0\& c+Dtg% X9q* яA8Ɗ ]4?=ln7ɬ"}܊w ne Vȥr7kX|93U;7GJQgIoWr5,hlK5(鴏S~ ,eRupy@X@+]FjEq5oZ{A_ye2+@s*dY1~s]b'D c1} 'ȭ987\kh?\h`rOk!4bn=l=kjnw6S8WW9an)p/ZB@`&hkŹ#9[9ZiO8g^)xp&ls%`m'>P&{y1Og5O^IJWp nұ0{l,A CCkt=NegaJs!Q=Lu~~֠yiWAۍvmgӳa ,Ptfc0pVj b=b ?iA#]^ƨ`N{NF?|z,dKIşO ~O` 彳i8 tb' qY-uwd\pB>w`5"oƧ`a)ڂ }ux~  Γ(t S@|v_Ը P ¢GapT`buds/<0<-/$ӷXP mf3U(hVJ]XE|<,-0Ӯc֫,.f[KS!ԩԅ6JI${킾xo PSW귯FXJthlz nJz }wM6 Onu-gVmzmI -ƈn~T}Hi|i]+-X牟ҷ 聕PH?W;xFVˏFyj=y )jn?z>K]<4/2x/k]o#3\_jw|ݞ۱I|njյ-qڵXtepEuym==:AkW>+ڱ ˥:cͱkRm 63W=BݍgAƖg:f4{vhi0>oh$DqJVJe~`Swpҍ^RWr= yHӟ̟ &+~qm7'3g3J' _L9n⿤k*W' S%`kTyn$<)+)ϝlӰ\~ŹrRK:*8~ u;/8wIGQUӠG[S asQ@󛀨 ( Ri!4,V{?vD[ճ'ܠFL$un{Ο|9^OP>F/|ft ;G*+i,=igm53>G@C=v,:]V_pWT%0@ JG@s ]V6t l.3?TiܣDف M\Y/4[6jdYus`í7w!90yuҶHaFBu*mq"gGR^*ݦuL~'Mі >APkɓFE<@oG2 }JKY}Sv+*xK?[= 5)8o?O<' [i f)oGTA(B]fUܖPJ]5?cgiMãg ׸|;κP~؄nǼw-͝adPA|հe!kSJt &j}]K/TO*c A#DM:CWnpϤƁhn8@ vk=_׬-6y_2,.>2`O9K8Qz2ˠnQm,7+GD$ې`p]=dr݂6tN۱T Иo\A{ ~}܈{n<~["3FYonlzܿb#(<=r*?ztXzv#+`DOuρET5YH!1AMژ L9"{V {`Lf=ȺG>Ej磶%G'6DnsRK=g=lKq+H_ZSy6!IձTQWv~-Ey(ApHcV|\qj{9644!NH!d߇ڜMy0 ;<ȗEޕ0F|NhyI&J~LkαIϾ.‘7u%@)2d7W-@F۫*|%W88l]|X^`e7ñ{Zq lXō? j(Fۆx_pG-8*Kv>; _G޶mW|Qpr>Nt[psUax0g'1Zs9o!iRm1h膎i<̎aé(Jsz}#`:$st6( ?{ZIGfN;A{[J;w}m4tcV|xK_3>ܺ(=w?Acb.+{L*5d =`(ԑL6c:0tCEMx*[ ʌORoZ'3Dmg#NG>DIL>p΁1 W߽S %o{kWef>;蒾v= 81>K|nM7^h܎.yR}Ꮄ4GTbyA=,_Gu]Z⼈v`@2$ Cy<%("w_+759IU}SU][ <\gI lG}գ[dh1!@j%g{KHs ~(o9\(,}0""F%ٹLQ9\T 5(S%UG{w}fd,d wDem Y0#gdǘm̷m?|K| :Kh].h<:6PO8D+ʞ `RwY^,FUmbnb>˾xo0!i=W쳰UcKG*iz ɿc#eQ@jCt=& Ct|sÙAVF(fS|Z'S6dZ!Y8GQA%Ԩ' wbE2:Gg'3k$nFHt{^qoJ@ ኇRux[21"sqvcҬ#6";?vM;L<:fj޳Sx%H^jcaD=(. }ဇɣ w+xo; )-db>3?52 =U+q@mx{; S,6ki V0x{; w7;Nl x]YY6];i@ڬe8URKhUWoc˽ڬ! @(=/#cbs@cZoc[~)އDˈޝ9w,"T*c9&Q~Udυ{.ϼ4~&dw% ~#ޏAO#ʐ1pX+?x^>XNdFiO8&ui!BfprxW}gGVv)DwYqԞF$Εf⺊k*< ]Jl<"3,e6e@Юmm!fzJxL8f# Gf9S1v;& |/aN®i\Үiδ o)"!U:|&`(/ZceMbm#y3кɀoKTRNgUv0n#MLgyX+7=omfw壵`7)sGeh߭GrCm"c@fG7<)u!^: #R M | 75/ѤJ| 1>pB4Bz0qhtm%/S5FIc8y+ "#<j1*m?y)V9]R[aVeԖny~ G]BGb$ $$iz =or[L?Med N*dO6g$)VาoYؗ \p idjITrvaYq+893e_cm(If5_.TKGw*[ZwVJD!zyF5Pk`8iY 65:$|Rw|mİZTY R e6]s!ոL8p7VN:c%΄/[eY +As5M˚$% $0a5 >P MJFnwGClR51_VMk;aG5c"΃p5Ej#Q0\7f{S)n ޥ˽tyP?toF4r o2jkhwxUPaXҘs xcx+j]M̳Kn͔ `Y+6qz)ɸ y5g5o\Vr0Y>ר$:kk&|KL8!; [ 2`mng)d0a(Y̞垳L\*/T#Tb)ԤW1 v`5JoL EnH^]cL޴ a. فaH|3v\gY^ |ꤔ ۆPa GkĤ5*ӆnee}h\%;횊K7䤝|t?- @ϖqF~)V M0_2M#!_lI~ª@ rv!3glbZǥzӖ?53]u>Fwfy[#Bȗ(:!:,9QN%/7g7P2D;\ջueo\e7҇)Cߍpi,%b|X!K[20vd(L\:]JS8ZsJE2?F/2ݲթ_+-|6?B&jPMrj&743fq{GnS{fNTuN^3@ Cv*F8Ȝ+ަ ?{̀y@8L+^FOcDhH72 lh~6&qciVHI ]TR蓓b$g%HZK3TONlJB_}<+K . 7LLyiB+uB3nM.x'+-vE1E很]Ēd봄 ?t;6'#Y'\ܡP r⫅-d2ogP(vT\A4t eYJ~JUYa5%J Me3d yS9ݛ+pvr7KQAlR.}ZtoF-a*n55cc9e휖rBAnFM/3, k@+ 1šϼq*Y4Ϊ"2BenCm21o̟ >w-1Тn:Kf,0@76W OQd])`1SMA^[qA;q|F#,AhwLwKL6ೌ4Đ%F3$ژ7,5qCVdo Z hRTs옑>Ec %sKd_PNrF Q64'h!M]Q) bcQȊ j$)zn+/q:@u:fdR7.mE6Ukt J?Ov1f4R.+qﻒnS$0 .;_l_? S | iNYn=v6֌kNtNE[ӫu"E@:c^?gFb8ҟ䑦r\ai.NTFb$3H?1$+,/?*_P Q2 JJ~עx[l/)6`=s9߮կSuq!a^A=9] 0+հ#g]T6غb Wo3xeBX?;exe\ۖ}'SQTpdVןW9k*v "7"{z|?Ӄ\`KKԐ:cZtSy Z&jksgtN%EJH_] Xe*o+s.ϴm%TpwyMF[8&O9i#7dž>1ͨoǼȫYd~)dL22\,b*%o~肁X#>OjhbPo^w]9ЊղO<3Z7">Q}DGW"Mۜkc<^`ӓj>0|xgm>('j , W, k-,P/u%y-ږc+n/mGq E~|9xß-O R/E18=-RkA5O#LH$)k,EDy]OP,L &B{ۜ8kʒ|ڠ2\=bo^4WSDf$X/#x'v%9Zj`/#\l^@eiVP`[+8m1=pTyM7_5)Qu%}t2al>J+~^L)ZS͉*Z=Omln١DD4KΣ% WE*_E _M^d#{nz5i2;'LT5 ]OQFNQx_.̵lò.j,:쵕-5dY!X-;ZY jTN.Ah`ULFCxM~:i]Ç~3JfWQN u:y[ˬ;A7}f:aSZJ[Z d-Cg#jv׻N}Fr) v)Em_ ؙU'f&@3c=t>5kLF=#^ĒNPfZ0uA#(}沙 & %F ClciE췓D$D(S*lҗn6 ZACKaО3 ,E@egrM*՝u hEWѣ4\H [^YalUS$De(܆BF?*IJz!*hݸ,kdC;rfM `3|[Nw<@ByF}@v24YP`jjD t`z_YkSh݂W;8IU!FgV3,;-v߬JD̄_Uω ]@]o8dB]FgڇJ@e_#HzjXD,"]I' BF< ֊N`ls}S0<'TF@fELP"Bxj#Di>c/ T8*]oݣL㱅bǷwF+fh$ (ɱ+Q4 v"B]M zgLFw׌Zs/-]saIr;C"6`d-k6 ͖R#7@)Z5 6T)e_ư7q>j~bEk-u|#"1/vb+ wMG NFi`Y JC@?7BUFE{I%lj7[[(e)_B:D?,i v %BR\J0wh lf ;&E^3c#G8Em)bQ|[&Q# @72'{r"D|OE%&gߡ<|yK9w~ڳh-uoq|ø7.~1<64?e"=s@_0{ں6|;(u0Nm/1e:_y98&_Q+l*BgpGG+A=tIA{r6ȍUp|_[}%b+طџd5 8-!d3r٭dHQQC1D@ٲf=BP^#q¦֡&2`f!y صvaa:f7 b:(J&UanVHfS;>gO.lڎq3[0*eOs]M=`pyzq JGO>JV"ETL xE}o INe;TRHuPWh"uˢ߭\Xl dFE{,gp,ak2I|ܨ˃tsmM(;!4bM!; 7 R$Bߥ(_W#Lq A+[f2p&o"Lz@+,#H}/h/3<{Ű?!̑ "TI0X#/(,ͣj@ 6JAPiuj_oۚ:Ut4Hq1{ERz/DY#ݢ(68K"rbK[܋p,汌LY=5 sAm[-W+Q_2J 5vuҹP"G1"Y ;-s$ɞG.. 0-a~D0@ ,k\r3ėqCTbW m^)#=ܒrBiADd JCτ@N(~K(%cޛcɜ^ѴdeY3צLޙWwաgɂW'4 (d1UUKKZcظ72δ,b-\ւCJLǀ!dҒO@m*P(sgk RVXrq()5wבR mQѠxFj#Gݮ)uj(8FE`C0y?[tvudNɁ Ѧ=|tXaW>[-󇅇~7)T@(-)8o>1/JW~YJ A$ 5t׌=NЉuZ7u*tkTPTp]'S.;Jʦ7a./<*2DZI¬@sk49YDiTXFM Ʊ^DBdP-mrUẗ́uHP3;+uQZ_I2 Ɲ>=Q; jez|ݺ iDy* {~#:"RaxnYkW̧!鷞o}-BȗV78֖gsNDT 0P7npveiKwqI-\Oj_8>5|Y>z*(y(+S{R3O򶔱eaPA$ykh!9n8*ebdhIfu 66IwMro׍)'CLk@N˦*eqJ҇S)K\dy♱tk/C4?Y-(H)RVh |(KL[ u*`ڥrWY{q5eag"޳ڵS!رnV8_b= 8qVS<od*L0[`;#G WwW~/ [jh&GZrIc8rDPn`5]MVi"Jwq pry(+`iᘗn͊ރ̵ Bߒ "H8(_T$ɶ]`wF NC ˛^kPi} <%8+7l(C&$`#7VP%:GA(;e[ޏQB^p\Bֱ`س.(Yj+a*\*.ߘC?ji LAs8'U' ETN߽G=i:-y˘Fտ}HLwyӓ"+ɔ;b.lpw'BͻStnLwܒ ,GO}%̯"aw=N"yO2VJ.el԰yOt ՋƝpO~Ӹ^ @TdxOVOu/W/Gx%~R#*a8ߵ!'.|Hjs~O'ȹ7klw! 3g 7,0xURr {߿$zJLjcz|}ő!Ldf)\:v"\\f47V̀?5p[ٜQ~-3X/\1)KЏW&xԹ`U4I ?+A :,F4lD07\# J2LD|j|50G~$i(7bku=}CAv 8Hl.ba(?D۔GHxeSђ |:\ÌkhzOa4,`ǧ## tԓp53`OY Vp!,CbB5cZc|F[LbtݰDeC߻ķf\ 6LPNR&dt.diEԆ{+C/Yn(  iwXV5F pڪjCO{$' ?B~T gu*(K)zyRe.*7;"ӧ6"48_D|\65%jeb1S~}Wa>F?S+BM Ymc'?ұ$Yf} ϦsMTfT JF%kz@tǿ6_hͮ'x >QUO!1$5>7(3%35w 4 m:xdk,-9yr؄M6.l"9C8kI{ u׊lay#clkx< n>fGy c JAPϖ:x^'|65n[Yt#VRi_+/+|iҳQ8Fͷ]syhPç qa j+sZeLgAyo_̉pK0 N%{4TZWP=^ Q,l5xi0;uaF(PTd" 8 Ӱ\|>X|>4H P3(Pf7|J*5?=eз,֘Ȃ ܞH yGPw`e.`gMoCyiczߞf 4)Ώlޱa@4@eOsAbKh-cb SĬ5&Om\Y:2EeCbg 8lf4XՂ3X#[i( Z!W)Q[xk#wl$MjYL2ѴhƼȠ>i% sJ6MbRs@KH)̜LyF8*3cPa߽c &I*8 Uk?>. FX)!u ^ҾH/4~'rA0A| Nd8s>N^ <~tP1 \9>'< KC 4ō6Ie$u&cc+3-{D2(i](P2Jʿ=o;x_!o}Z^VFBexu!ǍByo2 |CzɁn$8 (uģAFk̀E@gc6δZ dzcoImYXala2_,N@,tӦ3Ag1<[”&LkLA\1*N쓺T"{[o^BT5_>6l[hom9 Sƀ@Vxfa 8QbNä!=)9H:Jf}gS+2=%ķ☤l*.θQePH] {g|ÆV 2X}ɳ:IWhUw)I25=2Ọђ<^{+]8 SCRL^:=jIp"C[k(N!Rbo1,Y^Fxj>P~:{ qڻ+jJ-7R8;#Y^~œ^dEQ$ؘb]OZi6ʚr] o? $kC+2!t@&R8sBpk`J*ȩ%|3 =|~hwJ,_rF0kQڛPNQ!U`CԲu$LhSRFM8Ge! VAV؛.t0*i2-V{`(+&<òr(;V Ye7w3%`Edtv3jr7\)ijF*%{!d%K~!E:/*kր!dA*8;ܤ8\8IdB(?cg-S{,g萙V"Cv!k| x^ #q =6Yz!A {Gz8[G{~%6!jaƺU 2) úF7JX׺dbc8Dř;)2gN s F1:O y!); 7m#,fk?u(.feWa\I~@Rj)ܯvyB>0d֦́ 40E5 ml#x/ ?U%#Ud#h~cHߞ5ò9YV/GnX㎲GJ E¨_Ϻ"q*B8;ll؂ O!B"zX*l}Xv(#7rcϐ'RU$p}DEG5(<<ˀ&ie:n6Nr`N9{`.^4x+a6hKYEtlQxh3& bT7(S= ]v1Lsp$&Y jG?Cϑi#$$B/܇Yk Ɗ²ϑJܔ"xȂK1V }|MI‘{a4;q$F268 7/C mLІO4Mp# Ƹt>T/**%xe 3 eul}iú#_*XŖ_RhcfyzsP(~Jc{_5`*:NZ^enP =!`;{NVQySV&i zq,z`Xˈ`-DS]?D理R*=m>s{G 5J.KJX8 0(8 rw/0[ږR_)p}$ʅyhgc?GfuUryX0Fɠb#┹#xU/e$m\7fx~V*Mt'RGwj_eacImWrG93RDeG2>kiGt?њ}|!foixx\IZtu,SSz~!GW"[U)Ҁ{Ab6G~45Y[a>b46#sT#?}YmwXs0(Xb G3a1cJYY1S/\mTPŌ"Is+WapDF0龂Sb/#g>]*N,vūrwQx)Y#L& gdpnYJdwsd,5!-̒j~`HZa|Nc+^M]0ho?/agyK/?H0 Eo8ף Emjng8o'y#ȅZ;B`NL\Ӓڒq^ U3T7Tr I/6I2 F>L _"Y۾22|Ew}`inU5X&w/𣂧OzEJT]) 9&h.WWߗlsɟai}닟>9ª!EWL#%VU h6A_ݣD.F$U+<΃:{s:DH2_@%NR&4,-ͼN9vWeӥ%\0T6cj R|hlcC*WEv/^@Oi3BwR\aA("(p &C:CClg;@/mB;7M_-8}(yrL>: i]irCW)QZa 7$5FPIiaNuv\Q>;{f 蓌"r55=,i*^h$5) qF]T_k xS s V\ZƑi[\ZbqYU!RudqP.Yێnuruk%oUG!(L_U 2*Vn2N`qXUD7 #F8'j0iږ͟"%PtA>R^AUe;6"u!]7|TU/Id3<mzzJnĔezRG6_ّ AR/?-ُ/JܵCUqL]:a/C\8>6ԅDQ6.Xr\ݟ0IaJ_+ oDÎ5y_;5ٳ⚆7=M1 DCRSp@c6 2Y, _ȌϡH#TF҄ 6A5C'(ׄbџ DdN cUTYʅejma]/‘fvqXXCkvU9PcuaZalV YR[V~n`fjd`,͛G:[qIS[ƽm-3F ,s,_!戟q?)v`Z^탊O䉅ǔqvov#r)?ewꡎC.S ϛEn𔂒Ibu} 6Gy&sxIaqB(^%3~>xflâ̆eJ4@Uϼ犩 9v Le1 >eo$)ej{L{{~}Ft H|(g?x6% "_)J~U3?> AT sYlѧ{@fUh+Ft 'z`/m8}+(ufoLJI)Dž ,Wbxbi{.B?+9۔ᜎVHc=-<)x`Ƙr [4(‘Ʊ78*I(lmE}2qBa++X\ڊZ:Tko= Y27os61jTaD&`>ꐆ I^'(A'_KtS jQc^PҶV!ľofc`3#qvOq=t~y=tpo$]g[VT+u?<Q;R-:۝q :uQvGZw" $vk?`'wO4eZUcA/~E! 3RatEgt.KA5S?Fg~Aml)Φ4hfEc Zx7:Rtb ^܈='=P<{/&QP.I"Kmt.ؘؖmS^/eAWi57e‹{M-\V4UUX R61R瀮fϛBCL?k9ĞNrlH%tIO5 LnD2]XdPw7s t%G:uzHR=}&Uc5J GG9[G.q||Ars/1d~Cɋ_MJzy]) + f!t l c7jPo2U;z6|0.c @ԒQRWݨ $6_,:.Nd?̥\ǐ8L+}Υb0ʊQǫq3#PГXyyπ O\k"N7U1%c\em*"yFpt&aEۦb&  G@EPD.Чig3D:d)WnPa_Ffˬ ͳ4s1N>Do9`eZ9 ,o=Oj}`P!=j/BG goYRݗ ,*c%u{p{ )9E rNq7H҆dKbI~TzRup .[Labv.Em(`CAD3"0ph@ı>E?cHr:^UntFT{9`rgD9ȑ 8eGRF}J>Hqv6gn9%|W.nSȳ!+ zSO2ZCF`9fh1'c\pMO' ) 8H B<֤A#(ScJ ? baVȶu+3 #m(PZ'>(Q-Gمo?]Oh} \}%`uu!BUAxB{4ޢb^D*8/ G_+Wl7u$.YQ&u {FEv\7«_2zmjWPE9睼]{py,bʛz! FQk{N aqܒab~S^{L1tўnmE%NaXR=R[>SȌM:VxrڹI~^?.rAfT^W6eC<m 5;Qθ we;{Xj 88QzK}nFk:>mocmڦg B*z/WkfBOrP9'|-vXwUEo)ELb{b@MnOhq'*q )6?naO TVEz&7cϵSydRkrj[:Hg ޔ=ztft |nj*v;A^SyYRc[Lf&_w YZlj%Qp̀Xڨ)MlݜQ2%priMc!=*2CQ˸׍@x&"ٗϸh(Nkp9#; zDxZiã}ْ}7[hFdz^ uZkm90j3֚^ _m V5Mm+gGO?j [o~f9s8cy5ܾ{;zxnloOv1u O{əB#ӿa%]VڻqЀbT*BQ+v*~Qs@WߛM~]˪$!f,Zo}#\/FɦAӂ[l.)E8󬠋~ ś O?CUed̙7@7Y\z/GBO6Dn2do?; VFzճ /oz͟Id.w ͸q!ꗡ+f_{,ÓqTQa{[F" 0ol>ّ g8h*D7UDQ :*0(B5Xx_Tȼ Lʛsb;F=![9ny(02+ MUfe/d)D3RA잔$lEo%)[EWg_*N㴫5򄚺\aO|CI`O!b&:;٠&ZqX\ i=puKԏ(j T/C?Bp*|F_ړƒ iuc;[UE wR[փ2D d0Y>e"\}7Y.M/ ͮX.;t~ާ^ CQU;`8?`m cA6c,vYs=#zM2FSsU"Sy@)/cwb 匱–a(Nb # ӷj;UROWh9 `0WDR-j;AwŜ:ΫϮr\\\c+ jΆ-x>({[ j-OdU9)P/0Qś5B!o5;LmꕉU75Y$L|kz|жB'/ʐ Ŷ`m"PzVԬΨq ,,5y"b9i#Az=~[4nCVw"LE @r `kMq&e!Ui›M>ro=0=n$,:f6p縺Wҙ*5(F+ nv{Bs8c'YzV= {.r;V1@O=)8v;g>*23RóGHm> {[S .&v]19XgܢEm,mi9-[bj }h uDݽ[6m}:E z,MQ46U`)M 9Jqp#;ƛ| 3ͧͿaM^R)F=ih‰IyԤRSo3FR  PQ4HDTɭNv3&?t!F _1< hT`~MRۺ>7eвC;ìXfb&d~#YZ5WSRYsgRU=ćŹlQDY΅֓PgHOVhVmL.AlW $J!`bʻ߸͋S3/ڷ4&̶v|}o~:Q_Ewy!™Zފw8q*YP.fPpH# x%IA"Uֽv(6'u !n?B;AUJdߠۻQ_RH$L1' Ӗ+lNRvD M'D<$DZqgGp[t{֟BqwhGfM+6aRނ5!6TLժNm0C*z%#8:iDٮo&Go/'{nT65CuR8 eT7v PԞ̜WЬnک"f>~ARgpis]', tuo10Ѵ};8SD#m+w̾Vo7&O 2q"\3UN5QdXcqC kua\ e%']kLFjȊPu 5 cDyʠ,Atb2FuQ&zFBx<B*03!j$pDyRH܀9 pt7a=*V 踤,2ٿUP>t]q \dp!rPph7F5 aNЊv]f]QjV(fwG%*G' P'։}=By$D$?&8ܰ F 2;^7A6%DQϰIV%5r{NȂȆav>?4`4I61eu@CW 8E&B4 X'|rqKU LuNX+Е5 o6j-$%冠h{YxlvTڅO:A+(}Rs` J=h "/hNiG'YZ$,7 i^V<CžE":Vf2yH-U=U C e-+R`R$trlA{+ 1ا,/ gd8sRfۅR 3Y\&BUȷ{O[AlQoK41?ۅhD5 g;-)n=E ^ĵ$߮ѶV`JlK~-:Պk%'KI4ux"3Lz6˧N''>*0=$0T6EO!|Dz kPmjBs *zk3rx5<#iqi鞼.gԼ|W fڐ`=0'^C~}^v F <3 JOR[J~sgސ- '1|gd7kY1 Ph >.(_i[?f-0f~m8 9}v#0"4\gôJ=Y%;ύm:<YR&z=~ XFk\Dknl ȼA=m7F<>P~6FcNvP1vSH8`[O^ fsU„]%#4|f/?a٬>Oe-`\gU25sx|䤒ڭ |_xZ1`(`$4Li0Sq0+.päYsַ7cZ}9<ۛP|&VRlE"q{r5ܧ^"ACݟ~.|>9`IOZZ+uW/BiiH:G[*BĉBl2r[V *Sd b- B%^ݘf ,g\`յ0a 35VȄ>H8:pSEOdU謻4}<{3:yuOgqED׺9gk^];D9 LڳO`dG ; TC l%:HL/ۓcdn3V w+nua41l\ɝVMJ/+wNDP:PK/n=72NJvMJ3j%.˱wehyR0^=K07V"OTCٻq^qp{Lh2 U BqHӓ)Ɠ6m EY KΩbzօRM#;QM94h)w/rYht-p:q]Mt&̓PcnU0U=+a8*R]= $!4M>_#+~`+@FN SdgUҵݸ8߇o%nCiY[̙=CckU!Kk:߈ASl{jdp-q3uHlHϊm6"Be8۪nfLq$ug=2iLgE1'yyȉ X3`FƐe0@ x9_)=`elu *ހgx+Rj)*:o[ٛb3C:+(>s,nkV)scb r?HDugĊkđ1ߴg!\;sR ~; ̦$&ݐρ!=J?W.>8}z%B9 ED.|pfҬfA(|KQ),,ovU{PΡ0cC׽;(dŠmaCih+זz _mg%Q{gH').ٶ447Kl!q d6KI 3Qb?97cx,FeIEu#D 4PMz5<}С("#ufn1 Icb HtE;2nN)Q6zQP)).3T3J>Κ SE1{$^Oכl[vA: :2g_Q6kp`MHPfܱߊ$# yB7`+<1v6CC6wg/O q/O8iQ9 $Qťjkv]jBj&Yzm.GTa`bF@J +gH@49炋YUmulGvz]񱕫Xݯk4mL7,7'UџFxP 3mU2Wf$sy5_RlH`t.@q  5Nw?agS+^pi!q dkòWu9I)1P%xP1WWy΄ ڴK#^.IK=E>"7=.Omu.ѣך2P!2`b*mK/wp.L]VFcv댐y!) *GUml.-ʏ蚮¬3}J {єS_4+~ޯ #ׁ`UĚ&:8ڞs0i;si6 aΚ(Z 5LWe };d%ǒ|e Xg/csT\MUkкqk[b?N"V* &d}E:Uer-k'MZ^β_%' 2M_I‘6:sX3XiE z٘2lřZl:-*FEv8@;ۛBQ,*n1߆AF("?aN?Ĭ (DB7QVIu4qAzSQ d \&+̓Uuw/=١lar5d/wz()NwBDHҭv`7г88tie$|+vS%^5z`]FEŁ~ҶÂط:a(fReXrɔNߟEFOLFԏt{ܸ"jǗ3f_n ׄq$@\ׁ(4 g@6P+aaJQ2p>@;J!~c9)̟< sRE-4d[n6&I!90,$',,?/ *?[ oXk+>!=Z:t6-wȷr+K{.oze74K KC7 #T 2a2/ZȖ[3ڎt^F<` t+H{?L2DuhF`_>eHFS759qQ7*v%Ew #>m}_(CvN3u L2& =nWWN>w^Hb$]:a 8n2Z!'vڋX!#I9nsbTeLqO6Y7^}3EuM#fR)a@|[*,cAI4Dc\,t,u1 k wj˕j'_UGnG+a ݰx{u,ߪ҆gNokx)Y#jvx8M)B=^tP[=NV r z@\SEbݬ})=g2.r0B,f$svճG[;41@u Yc2'T'hO#JV}S"S"VкX+,/ Q#~wDR'-m7؆ ̞#*ُ; Wzצ 8#:L%uR9[BpWӿn1a_&)+FguooկSG?nn\;S hfrvB=-kZ"_Dqav;>nCfUE ll:-N3ɻ4<v5hWP)w3BiU#ݒ%PXڿ*򫇌=W&CҌs-5,ZZdݺ4Q 2}Ũ8:S츽&Ti֏sV8 IصA:k4l\Pܬm.uMѷh; -q˙0 gŝ7Zk~@oLn=_@MG=j lw_|pJT[w'4Ŵձ~\Dq[ɩݷ[w6{ q󣰆v}l7GBDǭ>u v;t"/W-iwZ+yOFwNvm=7颓 Q]Zmt٦؆Qoa' xrbaL$'<:٣}݊+*2/] )  H꟣\@qO׌Ϋwm^Q~}Vbd5+q_XP@7;Ry}wHG^y/K-"oO!(ԝVGl^C׭~~XJvhU76fxL f͉Dg'kж"CUwU.6J?-X%9?mZP95.TG>! !YʏsOؕGXU8OmTEe:a ݀= U8m]aL451فM:ddxVj!7_nEAGl{k|&bF.`sW EVWPBw|)|KT| WA- =Oe0i/S hK|iH7( 6G7Z`(+Ɨe^=`TjO`W}/JT׺6a}en[tAC烇FTY5&^zlख़͢fJl^}I*ޡ㧏{A荍6Q n;@fM_*j0/S1kwx^p핆7_es^K4KJƄvrˎ(_G3l+P$vSz)ǀ2_ZaG?x ƒ xX Z(ƮWl4YulZ͍QcK[ $oyѐa+!>2rTR͟2w'vk# gUuE ݛ-1l_0"u^}t+a/* zQ/ћYxԬzm)4o/ loGYos /?3;K}%܅*@[Kl<8 tvXx墝?3:1 g+Ӏlu.)6%rDp gnjMfFr4W,K&N41~?VdM{ m' 3灏fg&߈+/Z{߶#`߀1%i%UJl7;*,,u?h9wO@mS6D"@Q̱I5`~Z<=%SK/kTrb AxIVƢ*Zz&`=yڄ+.eB5_=>ϫ{kש{`|jN2M?~J '0Ff,,wGoq{B̴$ph@Ksyd|`g<)L %LL A"8J81,iHPlmQ.pUQoȔT#sటuѰLRBGCOHT3*H'.3&OzI0$!ǩD[xM M+Q}mRU20IM p<{0940qK/^`RP1a(WYցLA(8̂Dľ%Ns`$/_?_jbIM{aM+܂r(@d|7!8 ^ O 8O)n2`"h:)kGn')&T O\*dGsT'*p"hޭ7% @6)JIH-A9rÀ)ɳTw &<,G"q+ߚ)=H4`<۫EGkGys_P΄ _5ahu;dY#a"̒("ovQ8slG*5K\Nee]',YĴjΤ rv9ƃI mqt3敌4$BI8>! {aGM{HW$筓_HMXlE~J1ZA^+<a/~LM3J ̣/z6~ |kY3э&qy'wzb >󖷋"Ð;Wɵ 팉ٗ^q2oHnuê!\co,R ɭo]ag|IMFY|&L\oM'#a&l*&EdC #Ln9|i.^T9Ղˁ:gjݏWU7L fnSյJ%>;l(Nv7  p6B-*or ?9Pin\BmUU 0ȏLMiLڸJCCaK LnnT\"Sc nwiikWs?*-8aJSUw p :!tiozLowY=^αSei @^Nw2r R.@|TF ŲUd@C=iVBx!)w 2VA]Dh5_[Q.ԻfyA-܆RM7Cc۸_%V6b-j0A(2y] Ɔ\ʷwcΑ$0g@%B248;t'S52ی/I8SPmQ(OF ^i~^':5Z|jPLBa:PsmHU8}'mcquAytN_eu }eb]z?tjyY/zDcdV4QsqsbI* 5u7<(N%.dZ9je[#۰ǡ16Mq1ժŖXK[klu /DL *liMEٽ{@i|;ש?s66 v^Ɣe:16˳Ng-bYER:C)9{s!4@\LJ/k ÉR2`2m|#|S Dt@ǑCkՒ(nz3; Zð5ŭ)J4 l{y=x#qt{KMw4^DBE@ig@XJ8!o5(A-Jֹ% (S7CrXL΍v< d%Ơ8F #0jMpBDw6 ?^DcF=5-*vm_1XlII #nXUz1E$56}iwD=/u8" R+$P/N›Q3>Svwߐby32죁`I\qy+#5p{Jknw ]]!Td:|^Fpbzy˓#Be1ۄ,~| -GQl.u|_Ÿ݃vǑ|*yj+~#ۼҲ(nhά76Dҗb(( v ^LYwU̦ߝ<Mȗ2"_$>$ŹMz5%mh/5z ]C/h9^9 κFǫ ^mpүVa?-}fծrgOpU1rg_fyөřs3qntang4g8ȹ'z\Q +ek'^Ej\ yOJrg6)]ti0&: tN5@C:@U}`EPkGlqPmx|18rD+^C#Ջ{872r4|5 48i8퀕q@̯ʍtKs_ 8:a )-<+OP$ǟ@&Fe+,Mzۍ-q8gqA(èqxX) Z j/3!"#ju+:NWDZ* p8S 6*yܙ3Ȩ@ )1$e8h.*U~ a̖gS8wWyڨPmo[Eַ5]qK) V)x#{]FNu|  tj$`JEڥ6yy:K08vOJVl76uGm@LRCDkvS"׿zt,?oX&ßHp"-m:ziۃ T=C4vD= =L7+yfՇ1su<<ǧp&5bc˯:r/ե֫;ᶘ|Xm׭G@@:i 6lA?G Q!7qgd`F8-ƀ(fL]m- os׸VB~~7px}gzF{llF̡$.Kcb0þyPBEIqlq>1*\ 9joy\k#ELm -?%m;DmE(]sbm}_!Źh"]v 7n:dh 2 -At41{Y`pR@@s#<. ^>9KR9@" GepSbLw=*̀!?2BY|p1'Mr}̆xBqbԝz J{mW-蘽膛 48N1w/ qPRDӊBwJKؔ6v[@ 0Fr] MEݽ Ff&I: xK6y)5zaDtW"aRl"#dP1aԶƸGc-Aċ$̝=J4\ ^s'Vy>' ̘0W=,r.!#52rq52sj;3~ {I+N/޾RIh6ܴ f p,|wU%Of 9k`W6Бb1ÁOGS!tYN VF 9O7Stip|%h.VrnHNWp&.w 4j0kWUE2ɀ<}'?\:riv=sȇ+5 pJ8'`UMusL#!vˇ7`E2_97 aKo6nhы{Bת6iUk.`$1gqac)ȂX/ګuQOB86R9l0ٳ@Es'&}GfkЈx\d,cBʿ26io ;]$]ukI&>Kq0Һ/n,t7wP`>ƒH ݵ\84 #=STNLAx5XjE".WxȐ-#FP49|?1DSiF3JN_F2@qvy!=,&QUՏl=3|5H inr(G@GlReMq {ZHC1u\`H!4{@SdlnG}hEe˝| ӱϙgO8hvD\ƌ菖>S]_sɧF10}{f:N{#'a$I"UOu^髆M-z!NӰF8jfSz8& xX$;amTg"Һ\-tSu*AΤӗCf/ߠ )$鑈RLn7_S>IWBC IV);F)#I6dkYADH^"v2@Iɤ0{$EҴš5 YO8jt9T]g. o_=A>t bU^|6]Y~ju$pOe%m.⽞8݆Uuj P""&3"ð]us2u3fnҠ=:l/ׇ{lې +4UGĖcT#m,-.M.#-_}AAm2L {Ҧt(_ɳ3QOJky䘁,{<`p-*8|f5^Ĺ|PTYKq0IKlm[#J7b `x mт.l/)f=nAd"òU}PV_"dC6GgFx.Cn >Ʀ;z5Em/1Ri G#Q߃y2%mCYTp~lk#JϠYlVA;}TU`sШ6IC:30喹p @0`<:^<ÌxbF>orpt1xPǐB&K4svP 5?sBM̹DZ$ 10\#^>bm)g$$i'x mtnԍuś7!_+baS%eT#/~>)v<^y=!7ݨz}N 3=t]%Z"3v!RL:öx=SoݯpsY98ʜMcj}a!rݝ: +,}28Rw-7m@uQiiX3;1gs!ց9%CkVPF&M4&5U_s \wt}tNLJ$oTj59 ܢzȊ!eO+ 5z 5t$i׶cs_7_a(vɾNM#I#J,qjV6G`uZ'e5][ tbrj5EǪtƹU݈@S9ߓS>w{xq"|?#|hVoBm^E_(ɚa+.0Zevo~p {0L勃W\ܩdׄgrFH:nGxDx@]AyD\m9}(g6g>hY /͡S_^vOBr@hcF)`̭m8]Ql И=1:aBc|=w58ui!l\tkU]FDl>b߱ ׏L'|XŁo^9 gf.'T@yetn w#XNgd3% :lPLʘx<^ѮƣX bs /&h:7w}p!ۋYo,iX/pQ`2zKr`qlŝ-5T5T:E"s J.UF[~lV/ZKz@e6n-}?ropfFhXFo"X}yqbz@NwbG}U- bJ{^mzF? K/ɋM J7<fHiT;|w<̢L.oYe`}qvq}q0(#E6ug~hynpDϿe@wiW:G@LN;v] bPT:0N*C'h=X.1(:׆M@W \a> )uk¢Ms%Xz+r''Mpճ I9}5mOz/>gh~.@9BZ@zht$,@#cjh1Apk!ࣽY|QB$\@xN9A)V㸑01Na]YC-R"o YS<"mcZ&:`K4l0mJ/Ms|w}S P=fS1O\|8*{8)~Bdwt`74J7Gz|襔j7_`(AY4n~H\I\wK2𯗱hH*^CMU 1laMAޠ[[3d2Y{j{LI NCW8bk%@ M߯c̳ꄣ mhd8dZGS#="E4Sv '40f⛫ :!37 g!w[[Q+Zmlp0N5p1JyENWK6[ 5^V[ЩnPʼ3$KK+l̿W 9N uI0 _|Ԏo%7B1Q!Ի$&89.8G F/ @%~|c j'{TvW}lMԗ< O6~{JxY(2H[A34wu`;ƙZ 9e4n`^Ň&bE^lu nlbЩBDPO\z4}DҒU{9$MbH胧De+}ƏHڎ]oz?L68Gxi/'wp#~crG:>Kr|WB93Gӥ?NR0LN7p&h;yW ؒ3leWs}6Lcl@;j=N\.*kA4ŖP iO%(?>cRJkCG-sB_(I!sz^"i Q5!&*׀9ַim?ׁjY* I%CaF6ȳ# DON)0ŚLKnn~t1h:mY+Dg+VmGC%M.JZ*;K5̜:avj9sVϷ%.y-^u,zRöMiL#!({!s,=Du=so;wvkgtD*RI#mz8uTk…_(]t`4AdDLJjvHYX"1z2edqq >O03ym|\xZv9o0+G +|q.аQ.jql.%i_ LJZ̍Fx7iX#gAbt*Ea}7~%Rޘ{MInRDiz%RNٔ(&:Ĩə626y^L A꿶Bkx>l9c`.Sj:GMv]z@>6wɋ;j$+kͩ:(m7!c8gk].&<Է v$U:ΞmHv&`ࣥHgҸQ _Qe"vst^1#c`s2^U/{6mȅRǭFIaSB_1w-9mVmJjt@H3R"^z|7y'FرY>ih$p?AׁqˌVI]z^ϋDuuiylȬ/} a,J9:D^I%_$ |&6Uzsm{w3Pp+/n azؠ[wxWٸ^U9vcעҁ#VoÉ:w!'0KL|jOt燈(k}YPO !,m"_T{VaV#VW+3(6Uh?nخ%*WUFe;|sS`h@K|b`xU]Yveu~?W?` )j ;^ٙ |)l#v@l Qiq9.S җX+sOrslrU{4g{sqMO׾Do厚V7I,/Kn`e1X8_tQ5jK"O*1n;=BHnMxII$*:x(^n6%2VkG&ȣXP=ĝv1hcz5jeGk?' h5օCx+vp;ؙ9҃ƿ|:q%=έWSR13_n.N ZG t&(}EEݭЁ@*0lb%i3l#ӱyX`kG/  A4k[v:g__scu@B;mNRY\*/ _@ | ﴾ZE\UFP 5:y8D 9/-bW*ؓYET!zژ.~|r)DD]sCq @.m9Q[9mo{8m")"#"s|u/^^uluJ^tŁyOc_j0^d6ޅb`grd"l!/p$\/vX(c:'h*E;e  Q9<i%ˋ,i)Xqs>[[ax#F>yI\[lıY^#;U2z#|F lchm8):.ΆѸXs~Z2ʢ+;Tta󀿗$qR x-K6JFy-!B=G3)=t@#knb&9=Gz_$B`1OLM Edx~NIj ݓ9a^sOOER4I ?ATnc`Ib@csauOHJ'F,RƳ brdi>S#mqtء-(Ctq <2GuܟHs #MypsB8F=xdz p:Rb$UC#SH8A?1=G>!]F[h:c?9%ݲd{a"Rl;?;'lE=g|rBxia~{9ӓ%| \к2R33z嬏o2VTO^&8idi2B^f.,r'ZԁxD*8!SBm %hSJ`GgYu 16{Fs;I "^h%3v5mlUFWpL] ]4jR܇@";2;,!kۊ{|},})"SukD m9A1x3bT֏OP?dz"ĪG7hñ3#^8@ e126zVj2Ѭ >\mװp5 ݵivuv FN& $Lف6a2LeT ='V@j8)p]?LHM8y6F9[hڡ-ϋ GjN }26ޚz_"rd#R֮2aKFe4C`φ٥%~b\HXȈ lfE>hQC$ps8E1Ϝ* q.lL]tMH g[l4m|甡G>\\a&)]t-DL䮮R~La9luUE 40Apۇt덳:x@^ Jߨ.O:⪩Kn#}iô<: u]^ISIv5v0!!㺣"3X ɾgqדKH&]'RR@uWE">;}-]MD0fyeU&3%_ և+0$ka8.t>@My̓Uߔm&jɈ:\*bITqqtq@dЊIP\O㿔z:7@%$;%M@+e<&VFrQNQeۍ1 b6A^щH*e*_÷1\;\>: 8b`3p06zHZ&@hT8wW(^?ۗ])3\(:Gڪw|YMh]͞W[ZDGGd^WNN0&n[#[o. k _xfڢ{"w=jH_5G$p1|wD** ^_|7z EvG(h86Qv=at6vQ28;:&UY^z.2_Ln==@w+Gu$_("б{>hNgOdv>bt 4-8~ɲǖa͍06QUe\&V~q?7|\KǼGz#M1\A\rZgP0X:c7?m|mK8L0R~pɍą?'&9q$gkᆂv.Nzݖ"w4)ƚW}s;<w+ڄP5)-3Z 3bOYc"F#eWFwmwo<$ "Gq9*ԟo+d+ t6ը+wuVCD/6EFd0}]aOK;2DYkl;6V剓 fAg ?\n3l7ޮji!d^cڸ=&"S#xC 97 #ӫ]jA81~`/ )=wy4pl"t  x8Y}a,x+6vgW|cmsj4o]s$44|܆?ӱ1/ri @jkR{qq7l“L8k[ONoff&^wl戍5s .GV O\8>dP%'OoZ鑋>B(" Y~2=PK 86z33lTC3$g7taeLggJZ.qX^E{oG7U:#-P[F=V6r_h͙͑EU[ 4#shbD/[2z[Ҵ?i+ly, n D UUFj{42;cI#@zOPJm?w?H_12Q7z.ZpDCK$hUPM[2S{-fOl>qmMĶNbl[(3 Z͖ЦV) |h+X4MpRry"bOq\:Cut[\5MT~h=q}ksI$W0Dckmby3}rӔQ'f8. h4TdT$<ǼI &= >?7 [{&j`B0@dߚnVze>e|gz/e#MTo*.8(\7gmiQй/Xze4]=:DBf `᧽V9D0%YJ:D#R,'\5w?N+~F=ؽMf!m:8#a7nͥ-  f>hk "/dX8K]S~^"o?sS-Ӄ999Db V ۑۭt59P #={_tmʧφnY]~Ch޽ǽVсS! rzf_e1bo {J/I|z5`6}z"eWx"/[({<J5xaǬmBOٌsC\y$]FF\W tTU;d@VvlF;G=Q)28/&eQ ȶ-{LT4!^.7}zE=ƪjDAT:MTĺZm\QE :#A4NxǕo.|>MKf*Cq=L)vX[tՑ_v۩vJ\ ]ԅǛ2患<.:ԑ`ҋzd Gܙp rY) vkv.nq;oXu8"^"{01Z*ve_%BTՇ߾601oxR*0]!DKx0zUN[ݽjǰ^< V4age4tfUVo FS8G`%`j-nԞJSX ՉvC9T:q)v }٨P7uď;lf{n)20ND'K9R @êVu^߰ ,0(LP/߲ WVxO>2!@ ٳ=ŧ mޑH<ǝ| KG'@>ޗ=ۧb֡ӻ5@L4ZOevSR"^y[ )@Wtg<<B;o?.DeSoN9N-??[Px;}R nLy^r_b ZhDk/K,F7xMRKQW"bT*B:0A"N8QHPUdJROЛDEaڝ4_ù}ga{bclC^-v !/`li3=>ǥFwEE(GEV:ш QWFG]bCU%=`8$``=k9xy'.+a5G@3xBVGpu1Ǖ.)t^꿎oxsm n9?>8O2ЎߎgQXW'{ VE:ACGPlޝp uAE!3U6f1a ͛!\7.MR$j("ET 86U5ҁTܻgfٺt/x?݉dAmd[+L&娪PR,_269˂-.CγSZX8Xyh#k [2m$%UNj!"+ "/,X^ޚH~K|d# YNVI2GGx4CC?Ճ(p1A7hyX*>xEVA& 1Ʋ4F^Ѿ!ABJ RT̿2C Wr73H].[7ĺN os]DX|5;.mA5՝ힾ_+N˙^kR&簮gdk?o61aIꅲnqsP)+t= 7*%^"r`(bbL" j-RNոDv o#P6z2)c"Ev-;Qw9s Gx0YJ54afKI({Ǽ|u!XJD '&o/}u5]S)o]^ i8ɕ^UvʡXv"%ګh=<3TNt%%@KgFʙ0e,v dߊ?[\/v>*[5H?FiHЉ&UE ' P5w P~*PK4)l0D.Ϩۖޢs*6WuB氜Oko~Dxc/>k+(xZ;ɓ^<ƀ;# C|kִUȃZyT\J sj>NS':j2UX 2w07mE$g}DV;tlػR/I1(pw1N^ dDI.Ygjpҋ2ۤl?7¨-,Vp*6k pOxEbq(-~ya?3&?r7q"(&u% i%ovC`6?Q FQ>a*]ו:a` iq|;|8D,j\<<|F aMbpq_v3 (tr]Q*A<3W3oOt1tzOgEp6P7&PQj>p u*\X@4w!׺iF`at9ioݔެ(osMsZ_ӓ?KH[,QPw ;W@xlm,r5?G <]U*ek8$2O!xb7u{ޤ@|@ݼ~77'? a./ onbJþ/1^~Ɇpߝ.%/bݻ|^iE% ;W_<7/'I"qU!y qaG8݄#>ag0\Di,xKC-?t/}$/W\ܸ*?-z㗿nj7 5~>ޟ$ӒOZ}w^ >t۳9 ( 9 uLS`L![ҙi^޾'u K_!".~- ^ӧ⑆i~ͤαeTS c7 A43վƷamRA6w'`=ʮtxBDxc#bxhߺ׋`};عn݇@^찌*((!o9 =?ى,VݳUɈ7E3ﱌ[, j)I[|^UiI=}f^Eؐ&rl `7s ZȨHc `2cVϦ no+|"RR.r2(ˍ-/V ,a[f<"ŬP#%ک '+ -}_~ڤkA(:hPƺŬA"W+ؼUԺ:Lx<[*1t':[uR[6=8 uDUqDkŒ2Q9'S d6sPrFq^yɐԪ;,gХс ^[>!'~,d _!hBG>NP,O4k*bE `҄tL\ᐱa@)?feE8 #+O2J];2K;Zݐp3z& cG%%>>&1oIo]_D=U9t;j@dc6<)(芫m-=g|~Uc1̤ooR3|&Y_¹SP`O`w*=a [z uQ] Gr$D@sS|w;Fă2U!W0žR}wI2gB!ȕpxj{Z ``-%HNʻӂߦł$<s@Z>-)lg{`/ cN])w˫} "XkH} "g/c#v:?A!*gC6J({ۈSpVޜe$M64iNqyuz+kb +٦"+`M[!Fr#d @yMwF>~Awԍ'tuk |:9wD25-G(; #ypeɄ#}mS㍅wd䚯զ(Aߌ^2(@-I]b p`$dfc5"+nKdO=%4|>񕇻Raɻ͑@W gOW׋.]+1Ӫ,veb8TWpSL!8nWUH";~x|q[yGX?`a}1bݲPG +&p"Q\ AH PnMqA_r5/6meV)Dt4`[Bzt\S?tZr& JIj#0dhX,DzssT/[m7J7{ \,( `K漮fVZM8' )H3^1J;!u?v$ֻWPK뚔rJ̡E]VcdTn$Ċlw y4""Rm8he.(ոu=&\z[rT#?ˈfY#v\kA-٫ikY[=e\|ʱLh}肏ۙ㻩A_=ԣYm띢s|ˀ;kÛ(ePTL) c$(3+[Qgu@GppgCs1Ǣ0"j}q)~D9]m.=VM#OFqM|n:0w4Qf2}B(z~~8*UYA-`~CR|X8uM !!E fwSJꂗXފGI/;3?"1N+Ce'B.m XZY{mO b1 ±`Y k%8ʠ/iq֟80+oJ}eMf!k'/7 9yb<i)ScUL1qVt-UyP~lQczP7$/,-\6 L֛ֆ~ů ئ]JuJ1Z2M[ 3JO?Rsu;K5B?q={1gn¾(b:G Ygne2˭š!y:EMў1ӣ2&8OFB[:|"djmtEuw;`PJ+<!`C?P]@:~05{3JUFۧ(5\L#C 9/-t8KBHIKNm|2xM:ڲ l-̧G4 ɯŢC9Ok B" Ԙ'߼DNUX3zīcRK1 -".{# `{=YԱ&[c 7̌=vĸ]!j=J>LZV:8d3[!8 SO8I5@}w҉)𳖣Lk `x ;6=rYfcW?N4lVN IM bzaX-Cdp(?t^(p`^YY;8ۓj? JfI]t[ѱU٥ ɍq FLT|-|gUYees!dLlV&U?%Si٨IժF(Uo?1`8>7ܻ0cC2rlQ5'0&*{ Λ\cn$5ĞУOOXd"g<3o5R2WL;)^/(Wwv)nvhFl*oB8(+5uhAdCFimsN^ij,W ljzlOFEli7 ¢rJ)ybJ3/g.O!I[e75<\Q#cc6'mVLJQ T%645c?Є%*: [:}r@{r)Vov{oL"P,i(R0W_gT3l蕅ޒbmXM\#Ů,[:CΏ=x"@%O.;{Xp<l@gV.yH"H!?ġ %J VJq.2C%}u0 zdi+3O* a>^ik >ӀatX7l B6 u*;|X[9-W keQup *9r\A 4Uq3paBz֚{.ŴA O# oSpw}rA鵚!Ҍv[Mo+-ĸI/73Pf^1JP竔*p_a[gRi2]願&P׼'=~B@Ws1sdP4𝕳Ytee:vpbPqҖa*ÑҚ?kz 4g6Y-,b]EUǮXo7.>^-{S0e#h,]ff4v?p.-|=`3B5 >}zЋan J2wj$& e4m7}ZѭՖٮ&[SJPͿClg,,8ARgSq)(݌_s?2 Jଯཇ>f+ɛVw5UFܶW?Hje{lq4,9b f^»WզgԮ|n KP!] ~ g{;PҒG&GЇ>k]&p'[BejdԪSƏ >uI+f|>n]"*1:@ՆFYŒgO?n[׆&ݛ$TqܻUWM1%8+$}jR古T~E5s5?e63V6d S?o" ~Vzk!)/|(f"sf|/[~}jrYniMֱ]=x5e9rN$ ˻cv ;`4֛ΜݍGlćhTXB|kO(;Oofγ=XD Oistm2roc1DT@E R` X 4 "YqZ}ĺ>X8#Ǜ x8b;m3;0D=dO7U 8il_} ![LL;WҎ͘(V "yP pfeOferLaͽUdLx  Sy q)ʾPǠJ|(<'O] 4'҉M]GD3Ito?[M:=w1(0MwJ]|> yC!cSW5a(覸+>ԛFŕQr6>-P~ŞNijfT͡(X RW^]kt)m ?Cb Fjx8ضȋ2,J-lUJRsקCܟ(4f?:dvXF$VIfMI?+z p@S#.U #A)n*P-kx)獰^+_|P1P`N*!1=Nn8rXB(RuXqJpoǘe t '!M:G;VW&@NԋlvN&%+a RbmV¨VYYZ(c#bML B T+F8 <7t.xŸEdƾ8683# RHgeh _ŀ|Y殣Z,@`4,(62źHr[9Y纷 ̃YH!xR#!]۾|y+؂3 Zz.>hUbĴ!V葬7Du_ꎵ||:N&v[` i  G i^|lzK5J 1[G/ziẕ+#'W)rf׾``µTMfyPDӘi}΂+oVζ]..+Лb>cЍZzcS{/*Cә{o8(Xo>ڒ 9 T@3 c\" ģ`Yq(k]EqL}HRcx14l6ɔ8-#y;S.rnʓ P!OfyY$;rzC;ΗNj2Ba zxixA_x o,64A*d~0l3ui 6 A0j 7&;F2:_,+Nj%lVlfnpH;@J@y470~ޮRo֫*g'dsnh;x6?xFn1~iG|ah$JM6XX֮8#m{e']?9d30F.ЙN#mJZ;PFrfaQunGrsi3 aq;z0uٲX~Myel 7#\N: #Nifd*=ɇ?te\ VC='N)jULVTbaB\ $!7 1tSN w5ԛ-قf^9wgIQbz*4_k5S!MWvօj@1|RT^Xl5x# @jj#ʺ=~'>Loj?|x ~gQxSቺx̺>vw}13L K_UfsNŵA*3wq%`:ɛ|lfuia^<(Jaee¬ uo">JDQaI-C؁ɶ2e^)o[M^k9?BD hԼ8'zWw{{FA*0}`59$wG.}uFmNr3xmyCۭu꩔ ԃ)BVYf.ѩuVK$b@'l~흼6nƸT2%p(3w!_^@6yGX錑SKވUEٵ3uХ.:z}C[jTNGhX}G|a'|u]l3Qob"gL'cT> N/t/S;8r^Խ+eҳӍ)5L3^:p-dS*>?ơC#!5GXΟ8ngl1s1|.UNef Qr`$U!L8UnOzslepq EG5F L>~/+`ߛ8IX6KëV\(tôfъ`2SQ[8lao>T{>Ѫ4 7L{rc0-Ъn3oJ]v@gJQ|2I!2l"f\2҉elzSitV3%Bmnt؞΄0'ö8ʦDt&^jx*Dҳ3Քeb[mBm{ގ46?KSF; af2])@[ܝy_0~8"\8e{a~ZTT-5o>#Љ/ED>lXtg+5ڄCPU︲ũIxSS|\psΓÖj✚⍻!UMXѴ Hfqh>ms`9vKDž#ö$|K*_kqvcY1AudEU"QJW`[K8oS a>`=%ƭqj- 񀡃["2nj.ٺTufЛq_m6JM$Uڅb?:VKpm+s\sx_=(:)x;vcqQꂓaKrenڹBZsQ[t#j=vu5b MGlVP .f{!dB}K<ֹתi8U?:7C)A7#Jj8z/[q5_JR1JmFP}3z)maHtj6+R/[bLND@2bhJR7w;Jl"J"떠]9F TEn%\&b׭tS6*NvŮ᜸! uWH/ZSn(beNWwƠԨY+%Cd,GĶ )tD%^:ߙ8^g*UC:콩»|Vt{kV%\nrۋ=[}ު$HQcWiY>JŠ)bs'-h'넢ܮ+*t >)`+ZoU_;+\l{ "!BlMa}vaV;e@%|$eY$OVo5I8*#~m;}3x ep!Bׇݳԑ4bnz2{2j48:wN}'~{WГS*Q/t5ز1B>#pYr(v:ҕi1]B=R26t5`WAɞ#aBYÅ/g Enw&NCQG:fuwͦDu,]u;anA@)sX ,ݚ_p6ȚZj\vw; 2-4pFU g|3 Q̉9!c#U1n3P@RM/_Y{ &Q)2%1& s ; ]{Gp X0oJJ`D0Lb \_G\v+67rjjRv/Kadmq؛"L8όcj9{"qϭ2&z9$(,*2xE ӴX\G"|I2+(:[!zṷC WmǜH8S_6YB;MϏuz}wPS.0U^N=~s{ӗ{q E%̲  q?q~i&,R%mխf/2a2L.~*kA%b)A,Q{FyZ u7`_%:CyNؽQ%.E\X-ᴷ\R*$8 'ݘ1=MN.,օU![d`4YT罨 >@̻oLUk%Kybx+ ZXio7#H./Yf";ia>rA l.*:.v/9ՙhb&Rp3ˡ 5L ȶK] YVqǹxW϶z][(~yњ "%hN«Kn`0lr]. 2rl:!YE^'ok MNU}ָN:6VVsz!)1GjDD4 A ۅyj 6^ <{dr.KէOSzpH̎n*R;.Yy|-7lp ,ߔXNoMEH~]C?F7#.*:^5xo;g/znPWkTyei7HauwJgH0-,.]+PQLJލ``:( D&| OFZ[tQZ{U- }2UXZJPk^aZTW[@G,̿#^Ʋ8!#W힙Bs3fqHRԥ"¡VWUg27h6 +kMjE5Z)[E`~qCe+kl"qEp9bybNOn egS0j]{pۚP Aod.j EBJÛ0.< JߘO\c=Z?;] 29U*ފ );vk'~#ۚNR}kG%F-M]suE~7ļZ6q\dUQzܛT,;Y5# +,㣽-mm &.䡖i,MGC(N(ބ iwJu릨cߺ}8XtUߝ_ >uwY 61P3k;fG`NfvKY.3*EP#V{~->ϬvV ANߙ/.-z2 e~uPs(o{3{oaxZ*k-.B٧ /9uLKmVESM{Czr!/|i24uԆZ*<+;&Nt[ケeϮp>*O&+ڗ;Oz,'5EE ,PR7oJ̽Z[S n }JJˏ~fmVb\| ()wt~vPQ<~B:u=F]j\E`KuOb:.Usb]V7~ch':*X&W3tZl$aۧ}뗀ZDq8Z*5Hn]vk.WF+!??1Kl`}ᵾ .{C=ԥ=e[G qt]5Eו@g]"laϮg{R(&5Å[ۏ5U8%՜satֱdxZ Y4&P[p6Ϗ,rx 8dscW;׬U{sн),ىQ,nX-$xؔUDO,a@S5>KeG6qNT3Rņ,Z /[Vkw\p6775$2*"+ЯAM@iզPJ(x)e7G>'* Z0>s>D>dsb(?)_wCB5`/Ea[Bx/W/;8trS6/Z}9mWE&{.~!_6|9<.ծa(aQ}/U5ܦUÒWngU} =wݽJ_Wĕȏ͟/S/Xΐ &pe.}Eey eowoGLT]jo:W=T3EC@.~I*j>7gb`RMQD;"~q%{Aca&!E OmL+Vhu 1uӏq# O1z z1^{ÔJGiBZoxF'O~EyRW{xc^WpR޴PP0!V 6maA0X`>VwyxHTl<< D<t{dN0mafcם@T9eņ!=)\ VS7ZD`- @l71a=xkrEn_ꃯ{  & ujR,{~d_:  8ǡ'Cs5!$"eMPY̕YcR< 3Pk*#ze^b84B_kbSMejJ6@cd{iJՊ[zjdz8`0;N| K0?&5U+ae#jL.Ta@-ӺBKFi ٷg}R7 ٺ,_xQ8oӬ6p{}lo5yl[ mSMpYV[{) }@/{ 5` В FDWa b[(vQꜥ ؇ڑYQ l{'fמ3i<@SkWL,J/{Z\-5@i2 າta  Wcok:|!* 1nL߶7t6HhLTڅU"!~z+։ iV0rb+Wـ=F[ i]'dFæUpb) Li+ =_ب Blc Y$PTڠ.B(|YL,#f9Sf}jDa$mxm@6ŷa}ԥkϕYU כtݾ쏇rYX׀,ZL*PVŠڭ(r2:zCĂu-b~H D v]n1ybyZt)u90E!O,IY+c$Nm@Ç41qz>fDn'J8 l~$܌d`[Y|_+9@3/ ~I<0 'Yѻ&7*WT?YD,N,zp*YDn!7c7[ W8H ; MzΌfF9]P5mu Kdmvԙ ޤG[F ﮯ|m;ӜR%muͬxU2vv@ʡd)IWm[ aOd%I-'Bza.ckFTw*)zxi9X;VC@V-mlê *|#Bt:u{oo` osNa73R ~Vd̶Ĵ _[DTp32q"!pFG*CCÅv nMY³j,;4N*ޚlVv4R`6YgW]eY}Py$hXY)|^AQz|'?6x!~[+W*ތxTh}!<ut=QBklIt@*2ݻ&KS-JX9yY{6V^*;ÚE8l)=vvTa\a$7.m#-ȬaR[gpoCWu 7HDt"H wB;Lzm;D+:A6Uߕːtz5󍺕b˧jR:0eUsS aqQL OuB!ϓ:mU' " Z57daA]/ 𻺭c2Ahj>aIIhvCXj @-ĕY98^*7;Y0l&pYVC// *^;j3[$/ėcQh ;F您T}y5V!S];X]F^ѳUU6i[m(Jej )\wS}rtg8!}/):"iB(b@TJ]oilwaGwwkrF̌D ݼM"̘= JSUF;C?4~Hqi B']qhVzm[nJa,laAOgdEpE|4s;#VC+|3mJYi yPv`i#qzm뮣;i˾ʜt=RӬy1Ne5{F:Yc2o(2 OiBBńJ>p@ ùyMI ?2Eow4?RאQZeCvҿUkȣЫAz.WNqJŘMR8ozK&j "Oݴ)c :Q~:yHz/-gx?.긔-fr r#vd{|؂'={f dVW1DiqBlѾ@E evǼxﲬugW2&e_ޮ򧳜:[VRhiщ:&H25ru/6H@+8+p;^xSqin-H5>' sf`$. EG]gFg6XL\gvm I cO:JhE[.w씮 ZLjlrM䵌6+]uT3s~--'^Z{Iǻ R]kJg\ }O:(jSOVmƞ09jȊYh E[g g0&j3G!3@R벹+DUKmȬ8Ohڇh&Bv >Mra-ߝIݳcVU LZ9X`f: H`=Rp3.{Qk(VYBʹwJ?P:2tZpXh'z˜˲S V'@zWY7jfsI V,GLt( 9̟z~_uхCmHRh˿x!71+-k[R]Zηe>,v:` qH?0!q|1M%+"AÒzn>m:6YS/]mOsPQޞ%:9X"~Ɖ)/"eӖBCŅڞʆب^ۅm9 AuSQ&Hp F.ŭ^l[ fg 6-̫ I=RTX X{8yE+ÃCNCwQA }+lF<"C-- ̿L4zpK<#o¢%`dD1/[N>.u]w@'ڲ(%:H14%-;Qh# 3`(ئIٱb(Ѹ"pC48i(B+pU5 x9b'O?X(29 hlnXᶛCp{JN ż搅aЅWAz Ԑ:a~~Lܘ;gFC%{@$n%枯cYmrNi+4S ȸym  }d}I? 򑟘|A ޡ7]̭M6p*</ٺ2@-Mf*.m wHoCr5MClK{ظgԉFS_V`g>8oAjм&~t?,){@gclE綤A x6(aVmH:{"7;"W=ʩCx\c9.1SRmz2XB d-XG:&xceQjW0-in=Mzq.Ùn>LP8%s7QF*tJcZMf'0TS{B*[lR;>ݭeeRjz P웺\, @K;(R4HEC'ߺ3v8v6:y$N,\:aẗ́ |M-3:ħ*<PS-][~UOyhl}y Vjy{Z~G L7PN>^1 ϋ^{TODg:[6oR74M͇ǝO>ۓtm2`tQ ע#c׼l➸#Κ8P !ait8M &H8 \mdI2K9as͞9m@n[ȲQ*'U]=r$t5Bk ECs~+ﰑY$v*o0c#\8T~}/{c7$6:bX-f/)wo !͎]E'\guͬVE2m6EAZ_9A94-]5:;먺/\-ݷ/'le "#IOF^3H:}jT9* Vfۍz dͱ̙F cAZA3.v8#1ʩcLܭ3>iL;L:YtK}G)-Nl];=i }5޸<l63j9 GiwWNx0֗ۏN,b,"T,y$O"+rB  %_'{l=Fag8cx0,K 4"郇~pM\=܀p7Xhҗ X[[݇ؕU'ϼS~f]<,{܃3Zn$SFB }{3Y_ه 2S̤񟤡rKG*6K|r\\\p8Lu;#T7ܿ)g˥CeP, -4:dJت/m*֠9_|YX«{%k˙mapXW.y1:Sw̰M9t{֦qqX,-H]{4,Yy\–oob;"B\xpu\8´ӶHo' /BG;mai@X '/Y4i\3)Ri~\ٔs-<$uLmvSF˼ژ(mhW] HcJ)F+Q\d>_n)HΣ:fS?au!Pdr*qu7j~],<äc=ǧng)xy|0W{D~+uyzuӜdo{GJBjS[.eQ*i ';sV1NhT5))CSN-t=7/É'#[ѫU<6rdg)Rw/זI~ nR20huz?]P2Mx7^`WvJU߻րXQ_g j{+XQXT֖ڬΎeȍ#k~‹:NB=@3_(h^Tw+4 GÊ#P37lT4^Vu[׼9`]LD 8%Ƨ}finFo]U:c'i~|n#^ C^5eS9>6Y4V]3DnjH D0e.0]G9:}yGu[ Ҍ[X:],8<`ذQt`3 HYqpqO-^+VApɀ8p6TzA?ȱxo>*4qhAՏO++54 ǯd~NM(=E%kXG12W\~LJ|}dj%(YlI,0&⟟t/~sg|g5U0m}gZj6z8"U+^ =?_ia&X&2 ;CNxA~Wn[UG&&|-CDO?79뺈.<" 1m`7 VnjRDI%&yRRǦ \e)x {Xī [ζ;H325~"]Ck]4`yHcvкE8QzoEqf򚳥@Ғ2fzg#yUM`hϋEa/ }:n}#Grf* ~,g*GG~Mp.84,ߠTa] yGru2PŴ/Ya/XI3qR M&g87bpKo tR*5u/ǚhQϱ/(OԳ[?s}AmA#ysn ƟR#Z20Ic-Ǘ'OIbxք@߽EHOb+z~f= (En5 ' 1٦Q,Ж`ʃkl8s)slb&[ʾ(g=d 7jWTuѿ_),єU/*ȁ>oHɂ]AZ}:v)̀+6 ,OJYoq9RLD7ݼujo@ҾC!;hUq*ў5%2] ̵O r# ˜lRPΑk]^c7=X.?7 g+|O %{&Mb!4&H_L[V+7}⮅嫵y[nücbUb1UMGIͳfq_#jɁdlfN4D!ĶvA\t|A75oLO]/˖idmṍo PO䦪0Z~E(F;|i`;Tdt"-{pZի8]ĕh1c ju5faV {UN.mn02Zq=0iHd0mX@ KX N܉=76?yMՍ8~Sډ}?PpC94ƦIYIΫc0ӂh,Xn\fO3ľxe>=\&En( A_e5RowrS# ~1#t~, FW}%dx5-*dxn7L|T5ՙudu{8fdb{鮉`Y n{P0К6vM;bkRn^g5EiU@Mp =vt5+W:dwi|+*z /yI>Yu|e9ߘ!-8J2WP* K rїQ5X =jT9Ҁ*ϬPUP#CaDž{+p_>Rt`& aˏK_pV-̚*ǁHݔq#Dd]S@vrڎ#P*zquP]Lu@*W`C{:A h=|uk5n^up}9P <7pصsr=W 70+I$v~*ԃVLMC;[ҖÚaj`ifgΏ>vLvMh&.Pvt#xa3|>gp?㮽C;v v[1,;1Kw)th}˞hjBy*YsNU'W$w^6B} g:I#T =onc 3m۴[vJcM 'WCa2CI~CNx  b_ZxAm)2c _4fy,>. F}wW,8N3\m8x 074UtP]<}9'-oE?߱7l x_SU2vgc0]*ێ["-a ?֙螚>!AGWig!vD[^pLSNs~bD=(vy)[5qϕF:1^;+?bUͺu!Pʆc`Rw 5uʺ.ȯ@[HGe)%s8# Ƶ:preQ*W;zL5PzVةu44vF)MˤTG"Ogqu5zN#tW+Ƽ:{^[?ڔ2@~ 4xic [39r#!1n rh(qh'C!b1_WC<{;ugFjȕ97*Ba`pܪ$cRf 4P1Dhj֧*w8#N0V6|uyR,ߣG:`GZ3 NY^0꠸4Q0äN-fr3vm_{}yYKώW9әej"P3o MbowȺ>X|#-ʆ4ݵ|l:ygbsYu)(0.wFıcKB& ? 6"P sF/wv/,>lB> |Cx.Y~i_dBl d Z1   tiC6Pǯvۗv:Xމ%U6t1pY&j@~Ys|״k+7E,F-JQPyغϧ}Q Wt8lqv{aO~9T2ɷ|tܮ{ah^[FU-N{z\P<%vM/ʺP衴7̑K/ݠ9{e,n: OZ7'J^"#̏S١. UhN46]YM]YC9pʂg[2*әQ{٘l>u06̜q?QՏκNqgh` 0 rv +EV~jMo< 8aOTZ`C@P g>"2q\dDR__#:gdJX3IMϝlNg &HoXpY$eZ{ !}HI=8xx6H;v."CcKF H:w aؽcǻvPO*Y;,Gg+:Sf>Ȝʡ4ݷڐ-`ە_t;-6 Mv[y4A:K؀D;C/@pv+ Lz+ nZIcs  S'F?^sY_`UԎuyV!axB\}b}&`Z6qf@DKj_#.DY uSy nӃw=ܔ"5$;UЏdDIIai;"dy`{ˇeI"WJ S}ƝvT>N~`ظphBFӻjQ:(B`e>8X/+- g0bAyJ K67GzdJ ?<_Qni]zIY]h!`Y; Jgx;}y=aÔ},~Ѭ_?-[t9\qQ&TaJeZ?a߄CR{xP]ҵlptV3ON خ|މ2, ӢO>:۪c #TV(WLm*;?9"yJ@<~ W-lhS\JA_FQբ,D#BsX61\6Hq:n8q S8ʞ8dn[aT0OrkVm0ӏǙjNq r-O7NPBQ:O#!ML7 ٷ ݱ$HJ#C8<ҜQup,$X70)2a0u׼eފ ΚorK*NTTpO Z͢DXJq6sK`cahG;k(j7E ߠuC`8k V)9lxBᘳs>y|f?/r:V8>\zQj 9%ٺb"X1{?:&:Ǚ-pT=ݎx.c}Ϩ|FFV4+!x}Fh39ܽÏ`/Jm-{2 :]Xa&@wҿ0ܳp/&jySb𛊌u4":`B?y!/=7޾I;9UoJ8ܨZ⒆5iC+eYlF|w,d܎Qy ;_'Qrk Ϛ獸9\~J1ykdb̡F'>b󡤡۞AҾ+u ( N0 3F+IJ]cBD Fj;PhaE)6jr:7s tGyatّRL؞px p@,I.^\BkUg>ےx m#ύGӞ+fͥ\6|pOtIT|ݨu?X i:dWvAǦ\֨ԠaSmNaz!rg+~ RntAcH}bd;jlXNYڣFf|Ƿ O[_ۈlMH‡q{C$kYgMY`bM5ﶉRRjw/svW9C?`p{ 68Ϭ7rx|F_"c'3XFƜhOu$f Ω)sNL#02:30m?U0SP |"r?k3p$tu<,=`:/;sir`|(kt3< Tϙr΂Vi/|n#:4Y; e 3(V\hniQdAT3pсO}0`@swW*xk=ʙ|g6Z8lwњ]o jX8bf(B#\~a!__6Ĭ7'L\#i96":%E:F4o CڦF5|hka03XsɻTJq/Bnkw .rs~]WhrZ5/c$ŗ` uw\_1nەlÌHD$m`O.p  4'G]&BL%:݊u!~nHaJZwfza=Ӎ4exXy栣JG1C@/!|[|+l4xvlӀuͮt{i@.,3olKl/+`GhrE} 84Qrjs :}TL95#h6-Cߖϛ ZBGuNMssKW; (Rύӂvs \!`A8;Cz-esW)%NYFdx@S+l1h?#P|:d\)#v%:k> 5뜏jsF͖Rs_|?%ߧ?t8ޓ|x JrjSe o;l3-Fx;Zq!MɞѮdHoD7-C %~g,K9, ; ks1~1UEFclF=u,PgW%!ssPoyXk.-"7 hXPMHv \xmQ3=9,@C҈eMMCn _3ԛ;6<-})7Jl7Gɵ D3EӘM׆mB[e䴪f=O9.69-imV5ػFF Ǟ~3yOH1c`;rۨ&>6렠C3]8PfJ_kx% ] ?ah% XTu2f"o'^~i:$B3Љb#:= LC'Yk&_94$o}s+أ 4lJ*=K6ޝKLw&{ޥ.Dޜ6vs$s+亇M]*,wYʑ>)& cX5Ǖ65Ec0S]}-\5a'sQw>FGůCG qKx*'lgWؾjj!XM9R:Z1}NQ s6KkꝌ<\EUS yą ::g" Wyg݈+orGdi+5sѰf†<8Q~P` @5Kơ_g,mfui/cDt*b%~9O=E^#>Td2̗ɤN|7f:_Sr@4H'.+/~DuLsOWWSԱyDSS7Lg _=M")[[(֑ݙM`A|%(1?axvpSnYۜz> kccPȹa#'+yW!wɹKR;?&TpZC6RP:}~u‹r4ܫ,WX yVk^G/V8O(WtYij>Q# *cktPb{A;bد|E}H7}]Kz0 \ *5gҲi&8ER:b6+ !+:xb%s]n` z.6rKlC۴ ]i<<{C3BZsH?6Cnx`0ka"NG\ C 7 {?.g<t'ci:ae[ԡ4*ȏ ;7 ]Q};il]eX P ڲ%{EDAi<3]N_h] yiDg l ˋ:jZ,l\oSDi|Z kL\Y鬓ORvL׻\ JjOv]H6\+}ʖ,ݮ>29 MI !}aqmhB2Cʇ`ykpb<ۭ3GZ7c$U9A5dCԲtHްj׫4fm70;\ݿ]&cgǼ*̀K> ]cnQnh^nb|0xKi鍭|S0T)2p1v-˄ŁWf:΃Nտ~I\JOePXɦ'{Vw5170*:a׾U"J{a|KػG8i%6dA{effe{1|5HA@vǓ7rLBG±{w)7H[ʰbt ac }` {P }3:f/Yh]Q' 12C8l"1٣a)6U}fWZHAs_~s~7a:}w{NWD"u:o`3 ,kIs} OOtף8'_ida!L6Uūw1Na3yLmat3v)ci3B2~Jt>| NgXrV=G ` 0ߙ-ncoݓ_qSeй=\~wi13xqcqCĢb<G ?ٓ3mܼ>hVft6;$90dM-.ǸxRB۟/fV6nMXl/6x:QQEO,RVvOQ1T=Da4=DZ5x%}Lu~wSI#!OP|(%VOĨ;^h֖_k S:?⧅I2QtԵay-,-&?^?>zhz0B1NTp'"ڗ⶗8.䟾E(I.2NB2T?7ݼ8%4hɂ@@eT8?C [85hƯ,>I;xw *2Mt߷JPW܍`S GAmBm=kPPgRwO1SQCJU}T-17jl;F5ڭ&ZΠK{.7TVOҶ[*-@Kۛ {pAt{񌚫pz럖ZgY`exWW$͘hj *0d%9/ǠI(M䱓 g!CS7'=c*=g&E~;]JrkB%EL6R r*ܑE-b77.DpQ_S6u^[XZ!.ԎjѮjt nRlۃ>#,KG tz8eyЎfK1Eoo3|hN"- E4 LzAauoatY1%*ps[tj2$ tZ!W1e1a)P\+x Km_ox4g x ᛧe7o9}! xK-(+SJ-IP$N,(3rsRR&+2Ad~nfrĜ@QF>*LυV] 0BŁŌ3x]WM(aN2m:Qd>qzgE/@s po/ ϿZ&'SmB_vjl0c̼O} )QPؠ9pwعP:YWM"Ƚ2=Kjnjdvj3~˜!7}k`=.6"剂)4#u8?9+pd+oN[G/*H̻5rfwׯSWs0HA|:[ !;'pfhV@j^ mfRqYt'%qy!h ymTqEj&ƕ6 PlnskZ|H;_^5m;_nȠ"436'k0ûokWI1<(?9ST̠b+hv%7;̩5OawO[,b]CSNOXEk>5V aTߨ=THsR8W 8BV&ru}E;k%e{w_bs/nb6#BvPW9荪t_즧:| {_eڦ9ɍDRXB21?E#s<8CBN4jKlCApD:l4ӏiDlG>d:\H bvIbTl蕗 VZri>HFh f=nzHgʄ?}h*{jEu)u`/4C9pq|#wЏӡ_9ȦӧV&`-HߐF[*?iUCdhgJr!zH葷Z;.?}4Uѓ)g05K<( :`Y@ͯa_zoPڊ)6){+u( GCCYJÈGCO}&5SBne Zh3w=X!dȋz(u/CӑRԦUR/juW}=FχUɍr#=U}jy8ve"f[+. d,J0g[Q6X$4gGll^v&gֵ SތicYӀH{jCxoqb8ЗXQz[.5 Hf4}wجV y9;6%N2+( tj}FT>Nc6 U>Y[NK6T|˶nQA?y y,dUud践z/݄!wh*"==A0 7 |⍃=FaA^~67F=L ˺A=U14ǫu7eܛ ǛOm)llHE[_&4:toNo@֑Vp FCa36kK&zlDx+}UzCi,$Ȱ)xM[r ߻$t06/i'(HWp} ARSũb`)=#r@:BwMӅQgdWKij._%  GX5mRTе֪^q`Q.ig}d^߈qAڑRia(a9igeڝtdԲ!>F 3RKgh }D!CQ8~" F95nߤX^:1-tS*1& 5sJ)in鉪;CF)crF(x;g>L/ (B4g'n3(_O7heCN4)2hNQR+5>~\4c:+q"q,CDJ%}9/rlz_/3L|5G[U\-т0XektiikΑh @DK gKkϋg3c3Uu  ;U(#3!a!A r3-3NF\eLZcOW:=ZfH#Skvŋ{Z2IK&_.1,itK٣f"Pz,)ͧA(:}y9:g}$&rJ}E^[!Ӵ`p%u6sqYoqЋWq%Yp^/sanR'4nu:X~qtSJ<j\^ͬo+U!J2N21 [_jZ|K"p].{[П <>d*<vfȥ2™ (- etjߨh ƣa*GaR8-|lcCfl[]LT,u)0iNb<,R:4 ݖwzFpszw3W LCFc2 HR mHQO*qD ʩH0cbOķppS*Q.L;b1ouuO[zŭF7jLs hZ9k"<ΏύiIXmej7lGEL|3|L<6cD'p0`icB20S/zsMIl~SU t|!MOC%0+tMOb4[5 ;dЖ&"]Qc'Rʽt FG0xv%Vh*cnR9PwS|KC߄k|W>ܒYYVTځ `Db0>Fx527J>!ZixC]A'&%R1ߜSqhr:R$9UOɏV iS}^H#{G7R-Uh7n {煩eYûOy"h֜1IsJoMK* A]?!&eFR~fꦥ//OGf ;9Z[>"P4Wl.CXكc; ֨?s`͉Ed6ImP}bRz-hT)Q h 怅I({ ifɀ dڨ̹w?eDUGe}<)f7 |MU8$;gU-z׼ RMl(t^ F=4ޥY*a6m>$ S-B#^c#fÏ$qx2w5,b'|xG’I$p%BZȺ%&S}t,i B!$5a'ճz_VY3@f>Oji 'Qqߞ6bo*ةTaR{}2cf(~ na?{Cc)8ƍ[v7.)@U?c[z|&OAֿTA"7ЂT Az~RC`bf-V/yCozNChA5HB$УEߗ\O G\,Jn 3? LIG$ 8ۦq:rjBf|h;A( ͕](!Ö2djL&dW ba>0*cNVGGّ>tnNkX;,]$(?,I!3#[[\+XLȶ gaOSCAP% *CyhCe+TwHa*uf/ z}3"M|]N1qmL0 .7 wu2[h^ -(kZ]#PMj XV.,*I5r؅YcqHLvI.Ɲ5-/B$}GILjhP?^)`pR{9mRo^m}|3?7`|^â_LY?fec_=IO|>HxH*ݶܪ6CE{^ޝ %()Rfbȡy-9DldWg_tcZig,i4Mz6[ţӃw0O%i&0E4W,w2$]j{|iՃ`]ܯ7ۅfB I>+bb+(w1jD^XhZ$JV6t䞉NGYԶl>`_8 '?ma鷻[NhW8R5l4F=&'1F«Oj 4K[A?%<>@! X/?Wv7S2&Zh_R}sS4I.?6̵ԩYNCK;ӅiƫA^U_GrǺS(g9|~1.| 0_9@0+9HfGaO\;arr.s;z)&ˇPNm)arhxINLEYGs/OIɀX_}lW%7I+*१ ,}2K_pVu.K.ruC#LyנBԜ$œ Q݈?QS( SiM2j[ASgp+iHE!9ܠ=O xDm+QSU*9qH%, IG \ga]2N,e+D Cs_d8UQ25 }UlS .gbKo%s]9بlb7s't7PZp$.7ލ̧@Ek=<_@Z kDK0&A1)'z;wDI7نd$PWMUʝ=G^B]㦅3ޣ.Y6rrjX^".c71B?x7u32o~`L G飺߲[UQM`h Cd{qѾ>6V5G_r h2E2{BMj.^R3@(˃i$ 9?y$Anmi ar )ݧxoax-G!Z3!1Oq!Nv+Q qqlCP&)/V?,īLD Y:vBMỶT2<^|`I S Bc&#q %q4ep\r@O>wS@5W1b{D:)`ZQ%Ccm<)ݬ< ųHL?j9.FmqˬlL9\. 6/lkS;k;k$NZqJwC{DߖsdP$ڇŏ`:ZqKƶ74Gp6Ϡ3TYc_{Q0M%Ny(Ja6F6o[}т73H2O:!pNnnS%qЫ&`p8 c,gtal6[]53O9RWt\ xUj Jŭ3=F6Cj `8u׮0).+[m*5lo լ@t{; ^-t$9NMW+&ey1EO?hr;Xp408DXđ(Lig؏}TSr=e)m#>V^.4jm8Cx9 {|p 6K]4JÔ\4[Ĭ,n0fQ Y k:Sm\3uRP^rݞ&”ugdlmēd^ұ='TubkN.&UfeS,w4L`l};O]+S40\6?U+Q@$p8S2?)9k5J9-f7~4Pk'4ehAy1D˪g;c8`]ur/ ހZ .)_R#dnД.Ng>6}0'M.b18og GQ ⷘg̻9>,r*m"= '_G}m+ތA7|'"$F玻NIci0/o6<]v 7'Z sK%L*4dI8 P'{NJvQ)L͆4$HiCpF Pl(*=5d DW]VD&ņ(Dch5,~$i} .d$?Q7'?;ud{lg21NzP@rD\GyLMrx!xqu6%xHxwzy}GwJX=~r^pp#j6lڍOS͋:XiKzV"9_+C#k_~/M^H=yf\B}ˠaEf g;+?/qyPta&gp%5#1װ̸YD: w{n;x " _p~p zmy,AZ 깭y[;I:^Mͦ:"U?Yln"ZK߻_yp ҩ"InoG'B>80s[ļ6KD7ȏ-n\DÚEl R}Qo6%0Eqh=rH3 ^$ڱg2B/ "T/МpSzvTv+DK"&GF;J_ovq;/,̉ JA]< w ;K'^}$A9ǁ[-nwӼòƒ9۵y>ZT C\(^ \=ق8ߵ&x~AQ4( h^̈PDHYup kTDX< ןdQu)m9@tT>?!p9pExS\A^ND D @5œ`2ef=}Æ凜%tA++A9И\Ef Pi_#7eX2>/2:9`χω Twb"Z PL{ "`=i5uJNsO pHSzl'nqAe⩏OjyD-pXHY<{ˤY6,=bz$฻ \w0t|J="SHi E-6+NOVYHɆCkTG[P$ɩ>fu%;h}~b;/Iapc홆tigF>2tɉ$|Wi16X$|J;7L`(P_̀iЌd+o,ԃPeJ#9ow?q~_q&݉c'W LW9C&:d'b#]G%9KcvG{ L@>RƗ1 6h%Q$:FwLji?hj%OIU_ X$J+rM9a`mIchLZ -QO f31s_|0p6C'Սɵ\sqItM>]C\@,TDkDҌ L! la]Cmsk4'f~p/"N) QPt?eEbƀуp2@XlEhAtAvH8 7F;#Ks9 +N̥ѧS&_%|Vm_񮀖~y_N.>0+(1&@l81X&_-8ޣ4nW=pV%SYִdnroYKpqs ]mntM`lA=Bhlp%'1mگ'!GB6?d ,@-F7GMgLsDUhW<\>3j%]BXۖ곥y87ArW=Hh7[<*UB,%-:&w4k"]<ꈸ |PҺ vFe@>u/hx.Ӊ/bVLVE'thhy9 PvzEl>Nl]$,OqB`m庬ڰSa(3J =qbǿ!jX?%2$u ;eFy$^8.r>O4_K5k|KzsnEhe?px.yC X _~X_aʮװğZyh^75:_5rbӅ^]!Tg$W/L&WpE[?1sNxtٲp-7* 10N:tbϠ:Bz.4ppݎ?'גT)_aAZ|iw/;?/:H̔}s_Himv/r6ǀ#?KV[?`qLޘG$Ɇ?vGe.i7p}z䎔%2=z~ tx hy"NbUvB.SaeFG:7?}gJnz"\=q{^j=<ỻA[*G"Wh 4)x~`ɣ/ ^$$ nbEQ R}z^6[tf^WO]j[HoQp꠿zHu%oҒVIڳMȋRONp•^\ /S*; =]5~G$?W ;_vFp;'02{ eq)2X(L&-6w߅Ś:Y_b]7)@yEITėE\N ؾL90ɄZZP@8I{/isņ1'4to/>K2^orkI)oc6ӋkNv;[[) yNK ^b'z%ފ|a([ +=rYOL(Z:iP;8p)Uѡw5/3G&ƐDOtX FݾEKE[eA(SGq {U_I]KI1,1j#F߮]H,">FG@6Hf+\Cce@L̪br:X'uDP_RxuNQ9`!)š]0!ɳ|kXA?bݳӪW!"4ɤ,F鎈PXd3Z1&UFϲ$ϏAw4AhXYImJTU`h?#CjCRF) #7=1z"pB tV96Pv-څTa}hvuyOb"W?܎|k5/uFC`SD]&hbi(nqM" yUnIGfw2D8c841)6-F7Gh9"8ߡ 闂KVyޏcN7o1O,tC4tYEhi kp!7Q xȭ@u~$ԶwY\N Ѱ@xrs++ZeˆdM,'(␬ͧT)E]l<xG5G~r+#k=[x 0q,^>:ɑ;q{TF^XdbgC$Bq_4k|ܮrfJp"E$EB&3٧sWMc=b]IKN#+vk}ۧ.EHk$&/)xز8CsEg\J4 F\? ʩeH<e 8Bi zri .Y@EIy ,ApPC=q$-;f2ދ*10L? 0SCnw|a2I? Ԩ r8__lKA9ԲUvK'_B]o>nm<ӭuYbs8mXd">|lE| 襦-C0arUDeK}$0JDBI$63,zcKu3; J#ꇲI^!JHfiYZuI& }Ic >P0tgӐ ) &*:ص2&=o#IHtkN/} K5n3aͦ &30?6-P H yn4_'SR25/silֻNk{^#`蛙w rЯ>I}:J=ҍ.Bc_J8ϫ).18ƟY1= B#jZx.SuraacWdRS{7M[hz]SÑK0I$-??DOMYMI%iH3]OT<s6"hg\]l W$Гhl=;Ny|歽nkNE9&3rω;]a ZQ!2Zz~2؜N.:D1Ӧz}H &$̗ : 9(M`bF?&8&$_h6/n,{zp܀b IDe 0Oa'}d$͖ _ NFofOJD:)BB1 /`+@?osh' kD;i๐&!iU#0+tO" 37Dz8i"uU umHIsPގi_Xjt B9>nOa-B@ ?IE@XX; V?4.t恽,؏r'/.a*3=#v݌8_~C 8I>D;l){{5B V'xFjw ˺ n s΄)95z"^p>QSw}zj;Ep;nJ\3ib4l2j'"6hK)OS$TK(=~)36ٍ.pE; "ls&|Ngb C(sC@5=u ')V_U1Ew8 aϽD/t]42º$/FaH#Jt؆m~ ˚JݜiǁCĨo*uud h$a=1{<'J"y.gd1i.C5/2Oi8΂SvS K%̽0dK$8e+'7\>Xe| ;h̤AXN=̓` }soav6sl_@Ued16恦di,Q-{l.y_bwS;\M 8d 1웶Ə;({vGB$ !vfl{C6rbJMnME>D[pP"׼-.tB/8)d']5;vθZŝ(RO#)uQP#"=QW~6\"$ij~OO.p2gN`%$.d19$n4W5(Stdy ~~#7HJC}0tZ6aȾ(ZEV9!wԣ* RҦGBgl~n?#ZifpzzZ8b<ɼ%JD¶B&LL";VsnuF kaXHh= PDhdt ҉h)pfɴr騅ڭ.wGs^vwMv;jõ`V9۹NyGwLXo96aqE kכ@qmDh\1w`U M0@ۊZe"d=1KoPtbEVnҜƘ|씔*HUt香'ZdCB4֝4NCۤ |YkX#їq 9Bbddnk~FR zov5qaN tbT1ajZ܌Hs7y& р{JvsKud.Yd TtbRqZ|3+nWO9 |Me}ja%\vQ$MK~q ͒I^r pՔDaRAV=IqsjHeb_i1OI~;&^xn!eulAQ~;$+|@?z"Y;f {DIP: E'DP|+>ę?ql\qlD6(mO7GN`d ti' $pZ8y#7+3\jbD=Ì UljoujR7b6ՐRvdQ53s1fQ'HB $>balLĥ0-("Dl>vR݂/Xgdr\kfK?(}qX:BڄsTDnf,v'F^\no90̎!XL[;vIg Bٯe_urV⃲2شǭ%E}uFv`z86@獅S9||)$@ 4|ocpX҂ǹYq,_Ji]5/cɄXi_0% \L.=lhW9z #61 I.BPO~~ɨ9xzLf7?m~:K2&E r{1恟27#x68N n 4wqNh2ycK[#)/1ˮ÷c.{h)tYT݆\H-qZhPkbVcS)~to v1TI$*rX ?D׏ P-zuXonQ~B,—_*^i95r[R{A5;؛LJx񦷉HExM^qbYjL$`"i+ GHTRxIމ3*H"E%'%&ne.kA;ݿ?l?jԥ|N+y .|b7 +>02PYO@,4]Ɓ@RoȤx̳deʿW Ewd7aHJC]Y.9QIV2X))BOGN1QN>zIlP#2< u^DCf5-o4tfa݂@.B!NXuh8Fji56[1x)oa8!p|WCMLO/+R6juX:#ŧ1#/m5HmrMP[gw%qu2X,l7"Ɣ!H5XFFkm'0*kv9I\%Ȫ+UͶ#9 #g 3R6_^렷LT}#| SRKh1,Ŷ\V좘[o<_Z_Vу091xL1\$5-mvI[/L<*-7$Cz)Qڎ|Cҭ o5UZv[#8MV &~A1s5'rr%lCڥ}B}ۭZ6^a4!WIb ?*ƶ-8QxG4G RD0<^!0t>W{'&fnZfgeS,Nx)j >bybļ${vDo.o?l]$Rq{>&[VY7Ŋ/чD)S&gYނ;")QFt% ]ҋb@AleqAͽGK.$ DI/6KOa|q3?u|RsvQR8r6it;% z"cdc J~iD|.pKw3#cۅ#HIsdImق5 M~*v{Ύ"iqVW]_Ӫ1qRp;>-`#M8Òt^$ThR#H侑*x($nyT<4petWX桲uL9ڷ JC6#1+.9F>'0?`Dڡ$wy-jȱ;OҊTi`1mk}2:pj)IM6aJN @F!Nug{VNG'(H9 ވ ,%:iUB!DVV*Y5aY6ݵPrb@!^.×X9JF1֡A!QO!43ʐG =Tu_C' B!r5b^M }~׉w\@3ԆJWB/E9UɃX\ʬ7H s8'dE.=;5D^w*$"?|`ʒV~SLqLL"u@ ɪ=8{#1bGG-n#oP՞1u[s(nуGM2칯Yӆ묟7]X|1e&Z7;qnCWh6. cYNȴd+nzcJ P}Tܢ-]j!l78uRSZR=.݀$˚FB>I]pv]h'vj!LU9nb &R* R#nIЯ9h~/ak.ƣ1ܸ ]cH>tW0\l WaVϻl}[ BJ.Lpj zjQ^Q[.f_pa|07X{pJtz[qO͑︊;(iS 31?Mi,BgpW峍e0%vqR`ѽE<#q0Glߴf4oؤ~X,,#f|. yĮ 6qt&~Sg{copGsa9|e-sDAКgV7 5?[q@L#gxL*biҕ@PT$gU~J48 L,LG$>6А9Yb-H "ًcs[( e| TEb\ݡm'ƴ6Zg%FDp둘@Fᦜ[wn36-<:4aq8i) Mvlŝy*jHz{PC.?LK^Uh2#e٠U*lz~`Nڀ-FO}uk㎇6ں,&EQ'Pbxwݶ@uj]~@fڛڍ[%rv`vxmU̲\o݇a6r i`ODih U>ݴxGR$=%Dur0(m8pZd9fƑ| i5)52fHYhé5֮-1'y_n/55`J9%$l14o tUѦ\߫ʋlp=u9\Y65=f lmN;=rԫa"8ѿ$|yu^::qZlTs>98}a3gE׏Y%vω}^晥ՓA y.Ni~,ͦ4|fM,ZXv. 8$9. @X3SR~u)ze(EcOkm dup>mjSRW%QNڠ].Bk;ƹoSr&xV.hK|Kj39A$Ćd7 I捄ij%8h@!{M1N{&n+v2A37! 7!@w!H|huw12笮u6>ۜ?=+N*Wwgž1,25&^]Izbc6QRɳDŽPnj ̬ƒ;4&FFF]$ۃuؘ}º=xa#ސ l.VM&4aeg4/s#@j}`CXDT[z$>w{ ?+uQcQYMVg&:0+Y&QAqE:Yg[C.E%2ke-Oubyȉʄe྆9Rտ xwl ~ |qEz 75 o? yIv{ k-س|@Aɮkh/nM/\>wB6!lυC߉]˫j/us! i$"]q$(DwU H8Gܵ-=t0s%Аnp ~vnjЁ e .&=sPc,Igp-ѽZn~!3@u܆4zv{BHl<%h ݘu:f\Mk_/=f}/U.ܽh$#T3+'~PqO"6Šy{僬6|E'pgq76<3Hc4&s52{~f`v{H4`Vk{I)?Ѣ_i+_%+ Kd -93nqwXl~&n>?Z;Voҏ b]h'klB7l7LI=NZI(`;XxO]}H4xwr:hP&ޘwX uݛ7v-8w<} "Dyt ~[f}H>7 ǽ:a"p}k6Iv1.U7Ԁoޛݼ;d,[X؛@FXbuXAeޑԑ0~ww77$XPR&BrS[sIl-\8v'ΤRl/ a"w6xRD1F[~Rkƃ6O 0׹~}@zk?Gos6/D3I&"4} d%QxX#2s-/7d8ʦo MY fwN;Z#PAXx{yM 6Z(}ɢn !x5MV)3'YE6Kaެ? X{.xUxMT۱0 OT@PV6:]$1d#uw<8,(@Vۺ_xA|Tt ăBñtЃ*DE4cZ!2Czy YQ¾Rݹ !"5 mh1(֊udUߜb3,s@#O#Η}Y PP6$UH'_BR!|Z>#z:ŤUpyI]j) ]V4J./-0)Oԥfhp\T/.@vsmctwZG*Ic$8آçs:b3ã"2Z*l c .mZD;?Pq| ['7Re_(M󬍂髓B 񺾼T' ʯS^_OJ6b- m vvdh靣1"tm:)W:hc_+XsWGKe3kRwNJ;M-}=զ[zBޮ婗=4⍷ۮK*9;4?TZxir,ӞΓ 䧥(&Meq<(xUZ J[rioIN=US7'4"|;³m4p<0p ņ&h AT;?=%ƸDK?Kr])g6ڳmqmGr%^lpfշ=Mkj5l;jf; 'Gё>&?K?J܏02ƹѹF{Zrb:z|}az#Ru1d->bM%eEKw#߄ԉխơ>cI&.M4L6 HËL֩K88͐A{GŌGĶ\!XGzTr/HI`Et:>řAw78~$9n yKu&@OSFe\9"FX4#wnfxp'jfy&LMw1cU],_Mvÿ(eŜ}j JRm]YpLwBޯ5it43NAhD4E- p-rfHϔ`'hL t% # gq )KR`.&dOr<ųT$\Ҡ|-NL#t$\plj,, ";Wo/HyBf$s&h3zC+εd:!l?{5ҍ=\6"6{\ |]~"!tMi4O9*v(']f]Dg^ZyvF9Lg~+"bhm^̇P 6fZLy{ [#N|z2yAw}ܘ~g˛Z0SA}I:piHT= vd6'u;[hXx4*A?~Cl@wCk_|bRW53ֻC ~w '?}s?%1\=X|hYҾ o[}=mN8SvñL+{X.?}Ս[iIP*jhg_y(E5X1.)Dqw-e1Iͪ]k)Px@`5b-ne5:'AUbOe][Q cķ&.G8H)**M @Ů E=UZIcTksw~W@3N‘ % U]׆|<˯2ڸmunq o RrhY})5w--EݼYb{1Xn/{+B,H,J|S%ʪYvU㖋ka;] ee!ݎ2iΝ ATJP^@ wm}lZuY8[Y-|23ؖJ.ҖC+!9B%e$W`\}ih͚tι8 *2 Cga0zV#3($a,D26Q&爐 liha6őE)zIT_&¼ k)@{ ':JDCnX}{ ]3l-^,6Fݑ*w<Й4o'{Spy1!sÓ#&!Qe ·pȦmqd,8bXLǢU/KXD8 ]KЏ1GyBA} y ZnmޕH/Eb hȆM6^_&YgEѷ!]IOxXNs1x~` xH(e{zR/[Wkav旦7Suos8oXvfdڳ)մ$(ŷyw0 8=ʜ<ط:GR+2O'c6i@<D'dNV0=eFC Ń"ЦSQ!I;R:)mX!d+Pl!,OIh?0>w3P;YD*u(}_s:UG7Dz&(! M>Lj7@lx9`t T0(9xeZ[l nCW~(%8w":)GJv{{!uwa0ŝ4v.l+G.$9bx_(yclf}G-Wz BN1:UNXnR6&P J89|KfKK `l{r6],F?7Qg\R />;'͛a8|aP g?Ba_j>@} )~uaSl眸H2e{*|jW}fs[~qQů ÇKX)y#8} D ߂-NE $_MFJ+A =`刉 WxTIAJJ#)nM~j1օ69V2{l+ͦ-юxمy P0(59@AC@[pƷ k&O; `M간UA J#Ġ)iҠ|hWs[!vR+:LM?S=lV?!6O\T \pFG[NoЧ x~dHw*6L#gZǣMuO~HmSǂoA܈k&/otwWL8{q?oAge9l×uA{%4/d>(=3CjuZ7Ǽ8ސCԐrzFmC1EС$}KxzKňZ"t᷸Z r/!P"N&XX`QFQMo߈D>7*x5 8lVub[@ i//#[mE2&_L o@E=܏1~F6N[cD S "fW@$Lc%Dr }"]'x9L*f$bd:s ў>p@..ehbw Ƭoh@!ܚA0ٻ)/X,Bq3/z@kK؂*#j.n' 6u(gNA Uz |:dѾtj<߶]6D<.)ij=Jw9wGyP 5/׷L?'(~I,ljOesW;uAS+ ?Ȑ%hC@8 !an\gM;^{oq&=Tof:'[dNKkXU"-_/HvIĜ-:xm *&`Z3SyB6K{Ͳ ~Un~`q5c:ealkYXrEiK%Y{KoA1r4ߕՐ%m#݂#C7oJog#z<ꀻ]"ܓZճUR~-m(ꇿzGIª,Hp@JU!=:֪W>g{c"w"oTĝml  4~zd'dɂ~-a^׾>ie. s]'<+Ymn)E- .qVV: 0 YZ| zZ7S6cBrg" K#< o#Clʹ" >+j]P38)ѿi^<by<11ջ;X;շ٠&U kBN qfkp ݶe،f$@P*#cۥݨsU+/ )U}AvRz< FεեҴasl~6/e.J37VLA OkQX6?t MS8{BmԼ r%>JS$0; W z2O\R݅3h6̸6]_N6eBMe&Df̨K%./Ce#,.D[ō;y(3zz]`ԡfDDy (TwQlP{A\qfcw\f}rb}[gt͇MٷJa`y5 *\IS\F.NdsܕiaUXRQB{ lb%<]{ ;E^rS^u4aBP @tq74 u= bvMsw?lceOҚX@4Ahߤ8N}{J)^ƯbIh0ho4 ^=,nb+QҴVm_~_rPEV[v_Wȭ0q5l\YbAvջY[/?,IՉi?UuA&ft@vbV ?2?RНruEz}Ait0|eA% v9j<+6?-UزQѿQ(6X: nd})qpPHFw F[BLin^VZ}=pb<\__J{D%DT*Au#OUה'^4X3tg}]&`7%|I\e\ \l. IBG&ioG0Mjޡz_%9>R¤Bmc1wo(5.9@z_9[**D:6;vol9JҮwTO 3*_JKjVJIJiY j1 H=v7_umEdw2xW!yk/VpKԑ1.ڽI 5]a:}Mn!J4f&ܶSծE%h|-R|jq:SNB]ARzVYϏ[ר +-Gzz7OB;]{a^ ƾHf͸#( '"Ȏ=֜?0fvFBn=kf}ZM"G 撕j\6Ä)je~ej*m`;>\[E|gpkh='><7-,Pwj,l^7Cn4[aAH_ҟw'"h>LO[]M0xvo8$/ ,V;|QwuRʒ\Nݗ @/h{`ylLxy)rͷ4X- ļxm[ے*|?KXBm$ I˕I̲A;1 9o)ɯt O4ÛZ՚|1|~zY=ȯu\@KbZ9}~?茖T_T#ճzpv&{,)o6v&@8Y;̡ rI1, -iҗL;q2=Pe?cDPcM@O_B/v1$ݾ΁cAs kN=J"͆;O)Š_#pF*Zgx u<}Y&CEoayf{K532I~AOɛ㈞6JEM)j T6sr7 {0bF6ɪ ;Apl֭]2R_$| "sg wz _3aտcy{[*}6}Q&8̢|'( \EPE-  HR"]uae[)F+|?0KI,ύ+%|7{77w=8v(yfևwd !UP1^ǶR09l..xZҝ?C­9͌g MI^O cewzzb|":- !%!Id+4|aϛ>>$ AVȣ0gH2wG]NaaFvab@`Nyd``>3ќx澴Җ ?pF=qw7G>F{0~>+;A,*,vsq 'OTBs!6Ⱦ^X,iKWχ`p5\AMO6;"-hi>f"c w,eAUA%^`i''~4ZG.=\j҂vEg%63 ]H~qNc ArnT1"Z-b;~yKq&]%sCkw@O=xfl~Y6Tf`^ ]AW>-gk4-}OhǭA 3!3_"CܝY9Fp{'Xv4~zBد, $b=̷vu1V s$yJ<hMO))~7NT9>X[`H~r3KL ^t1lN쪭sgl[lǚH=c?a+ !l ۷[I#w涏!y,nmX ϰҳzp~{xlLG"86>K-9(^&Lj[}0(^L ž9/ϧ8Y/L}WQ1c1xӽL .i ("{Hi2 sx୚G/7=n#,Kl|!XUŊ×/5_VJc^F5$i%ޢGN3ʦb!tzm Q$Vg1h~ -g0l+J6{3J& =h dlf"'-ox6}Y}uwWob7-,Kʓ䯩NANOabmqTէ_q-:]2uJi r.{'0{чu Ll2>mMh4?edX0 Kb'Ϥzx1\}J{5M,,t xK o!j?l&@ے#laO=d9sdF]28&e'"<ΰHdm %$11_.3|0w΢zA_joZ {>FZ6d͊~<\d-K)0S.$-(uVMruK6I47AQ7Ou - [9Ci9s6⹦Z8X ZS^#nOy@ʥ܏lL3|ݤ/ g]uϤX36]3kE8 +7=_GS}?n~ڒ0)I?29-m.z{7:S2~GKAdE߁AąQ>`V3u.Tu-bKA4S27Ssv>o >J :0IcXV|zӔ4\8E2h5vO&xMsdC؋2);6s+pvyGk\65CA*ǦR&=B\GN}"K`a@0,>!dغ$5*=8f u^ͭ$qz0&ЁVʄ4_}!K) fjYii9ߩӇ>,"BDf*V+o~ HڇI5?otbېeY҉D5K| #:D+΢;A507yL󦵧[z/Z#g^Au$nakݤ+ 5<;ߥMijqw4sovΠC) LŽqqJ}-N˷"\٭aޑD0?}eܸ+٧%i: dXԦo%ghtz5>!_Z8l>/~Yrԡ"0P>{Bbjg]ea[ o,=  Y/Kt‰jZx̙9ZF-)ݓOFzS)U;4 !#ȵGzn ^J_\.Rs R'Ls/F&w6E!R `OfV6Pzg}_.6.!ؕ实.iNl9/W>ٵ8!q/gËYnw-B~Yb43?AꀮslNxۓ!CIFZ)tYxeZْ0| -G 4r=~ڐjjؗ?=RFeL&WL3=^}.xxUfɪ#=of/{s#Ŵp#Qq;CxTj7I՜RC璭&,anm_0q}GN1>Ikl3rw `O %ɰCS^|$gp&h<ݫϊ噈{SS`i3,>{ 'GD(vrMuՁIم>Rd$;I{@y,9qPN[MŤMň(1m[Y^qщz6SvvEqCPUMB[\F^`ݹY @)˚\`>lِHNH0i~mۚږPm8-e]d>K7(.t>'I.M94:6->Ps}=\ %K8 0,]d7Q9@#&@2glCV5r}ة}evRO 7yK бq,N!Ƀ_Ȧ)F5WD,ȵ #lʢU/޸b0N¥ó?"Yy̲pgim,p :cN ̏O=TE{0 GgN+@"1 =vDFM"lOG5K?D_i4K*I@u]\W,Io) |0$y33c1 Erid⏬SOWxf8I]SbS_{~?b4jaha2D#-Ir4]~4RݻBk$S< POJcؼ9x^k\rZτ?cdΉ$bb+Q4|c`$a4`^[~e\賔y6ŧ̉>]?I Z:d؜7=cW?+*0IWwnVd  BjGI6\z(#⧗3tEj^dYM͵1~AJ3EEgVTAJ6tC,՘Xt&g țUoVJ3GACf4~p4 t SziMҋ!Pz$]&Fثp1/Akr_ʿ 3Y+I>1K7X9^t -Uߦ6iZ zu8H@EWVoO`yv!o G˳I5)PO:Q-Kgz?|_k\j!B< F10p0rn?Q:&٥P|׾aS7 3we+\=S1b %f`1>?USZIp}sD7sr{ n/q-aƏOX gXTl@xrsu*O`FZbK,pk-3TAϱVu+W@:Ku NRb ܒ#8AZHEKZoL}s3z6!sV6:m͠m|w Ӥ7Re[R+Z0đИ#vUg GjEww;ޚO.q<6/Cf5lӒ{w{L6xE] ߳YARpJ7?IK`R~vT(|Rpwfp0qzvcݒdSD9`5;~@Ex;q:Ti4F&BZK\}3iU" D{u4q 5qPY9`7잦)2F.7"q&FA`ntcy)wvk9iU_ El-S!y?M^njkNoGCc&.~{d  V4n 8bJ!P$AYa,ͰWA-3{e0梖i zAQ7+yU-DNZwa'{Uz?ωZD|yɿen$I=oEK~ETtltT Ӱy0cv2 iFNrQu]j4 ' sZ{]`*8tACu t.0?|=[ތmF45Qg%HxUQ\!EdOT8SY}=%(\0wrCJ(bp]f09푍&Wy)vˀmnrrM4J rhSCOtx贫$^,;] p2 ~h-gM .$Kh|^/ݢC*;B Mp`y4HCwì^tAK]9q6qҒ01L*C ˍdek8] S,CO<=2Ly`Q;I ^ږ6*m YxWZ$N)} D%^VT vDhiN+fӎ?T ExMQ ߳{rΨδ]} }rߍRƖ )TSyߑrf 4" LKm/(K8d W ɫXZlZCROmߎ"J0`DiE;pƪCX]Y0c^!/7p?_҇g!zw;@wa0ȒKs$NvKi{e"ѢEJtoQz'/0T}ac*9f!Z5 XQ 5L1t~,vtj^|\_q &sml]+[ 6k@)@ŋ3{tv*xmZ[몎P-ñZcNiJ٧>M<^xOqq"PZcHXqLqq-l֖S?aΧF1Ȣg(GC5'{<KjGܼl)aqG)}21FMߞ~p)xǂCZ[Cfcۆz5s ~?ɫ Sz?Ѿ!MbHKƇwߟrG8붰-Vu;T>6}Ua'ոޠFQy 8{ yĬٖnwħ5 󧳹).siw+~QVV fչqݯ7>,3UR!nDp=/9 kpt=8Րۉ+Y7TN&=wL%Be꽕% >a l>8qlCym,[(J:~Bo(J^s\X1N&7H@ђǠjT~6Xf<,;I5 > HǓ dL ѕe54;)/E|WaMLGw!YΟ|̘EOGV2',Kuq̷%\s2f\w98øQյrAe{b1~s@Oulp>2ShLj}71q?yw >t1~@\s]̓<9: 5LnX8797qέԒՄ2¿#t V@M'DԋO=xExd%9?=Bzhp:I+v7y.@cՁh4a_8Sb[-ѵ~p wm>_h*Vpwm'8DPyiu'CpNOW )9ږQbsOQp]Agkឲ)3)7'KO)7 7'D'OP:PwF@p.+m,lͧh2C߽ (;g[ׅVќ%wǭ_+Es[=㳳&ڭ,Q"A92d p]i( 93砑^N<% $@.RJUU~_ixE yf3hwPJ A:מ6o,9cK Uh9P#V?[cHҴ*Mwo+LpH)<y+craHt1py8wfz\A 1x %xҙv> ֝Dw@ AFiy/QlJR/_t, @`i_CX?ME/հ 8l"KąvOآ/aViƽZJ]\5`8Ó lwWR+ pb : HVciX>EdP;0{q KZxSрtTtj1߃BLm..u#9aW] ˗k%_Cӻv> ߲tMcqN9^-xuv!йQERq1"J'c>Q|g. uPK "j9DGۣ!%%dcbE?35I!{5`OY+8"PuO9€n*q/b왬тD/+2cv9ory {r<3j9nW%\\R.<%>rH͍5C aw&~4m矠z'Z@:kv'1E ~,&oMsh@Om^iVLV2&= .4O)G1xmZ <` $#C AcnLCxI^ұdHlng>*9m>,\c3`([oԑf~]V`^F~<[ J$XA%z/0W/#|?'.d+9.A~I?o@ '^Xr^%p[S^s_ݾU7/m̐Ĝ|mfcnWuVW~"صW}^]7d:VrfOUu@x I=Lz-ա   uo 0x; CA0Sc+*)Ÿ>r;ObG'n'ުdC//(5A ׼-}3vYOmeKA_{>0y'|9髵aA]`|Zt>{<:jp?Si4;;l|p%Wk*\X zw(tav"v .j@ݓr]vjg>.N wdK=x.pP$C;@OOhAౘjزG@03=TB0muPG~6#:$ZC$&fz2J dp.qOS'GHNJK͚)$]pMnBoR㹫:ǚAµÞmS6 /tPDI'ƬuDZX^Ltgl]yJ[X׬C]-ft |o}TՒmhUB!>觅z.|H"n)' 60n-Kk ۿWRG [ g#C``(2܌#ڶʕу km_/Y&$"@gw>^4 GNܶrK%8=!0ZjG*ϴܲ@3*5 cӽ!e-# 1.B`=*EzC ׾x5J p=:>8TFńS.cgu7x  8`|}UZ}>gP[C6'`2N>1ama.aўᜠF5{,`ys,K$(.}a\$|>b\bT>|XБvdp5{ Uxmw؈6 PpIW'jg-iXbCO>h8.7[m{X˱m2;;P6sT&QM>NA}b*;}E1Z5^s7O8gg&GI=?)/&Dx~#(el>a擑Sfg{Q_ٳ^y(寁襞5ԍ궿A~=yRGbyN@o^(2z- ^>P?':+I_Slex"c"ͫI/(l}xq.cC#Sz:ͿX-7; ~,SʜWyZZ\xm[Y*FRKD&4v PŎI4Aty*.1i<_d MQQ~gLe5!PYs˥3.~z]}&jq6#|1C+N;'!% S&1S;{N#@yfm?ZG#ox. T(i;ӗ2=}II?.<;A^58ۊb*Ey(>2ԭՂ!'AcStLɅ!E =f!ݙ tڼTbӷ8]q <2\m@Tv@J.jVy!9A:bI}cQdvazJ9` n|*19sd- a/m*ۖx $^\E^%oF60xɋ 4V&mhu~Of'""djR=&uahn.yִ:H}e$mTԍP| <4~ċ6.w1 S`؁gZAPb>rv M%eVr'K2T$Q*"Z1 aZh6 t7; }(q:.3)\zU,g?[oVm~fm\ b íρrOň԰9>lVwϭRb+{x@Y͆)ND=~5 tALOoslКMҦJ:wV6\uJ-nxl? PM WW$d⯁$W|$mH囑aٯxA Ml$q18 %n1WTtd\AC]h{2yc*:G; J8rEp -?)gx:E">yڤB4z&$E,h~皌xR2 #ߺp/N=GMB՝|60h K7>η"{Zy0 =`3D=/nc$fSͨ87®+͠nZ.ǠZe'7M*GєA}ӪoI35MoV7,*_Xriz6/q3c~"hq (sAN>z|xލ;:LŞzJ#&Ddc~ mGk7 =D͍n7W?Vq뺥8s Q!ZPEf"ػA [1.x5#-]#bEomhfAYW[,+! ΞCcxJ l0FsVr6m( rS?d_a 'c9KDR>V-$J}ًT"-D[]%/Q%n=w`Fzcp?LTDf A !<~o2$k A9$~RwS\\ˇ8i+H@H["azq֏t|.]շ=zN{%TCH5AQNHHP?EP$ F}Ť0x}_< 1O[+z՝ lpP?CN62As:R{VU2LPM׏K{giu?$K{@N}%s*Bۃ_+XOKF)]}pDld}iWlQ u"5Ґk5Lo pp@V32Pj_U叀8=F2ia]9lGۇ*q8;@Î/Y NDp.Tub1@pIBRNJ{/a݋ks{EVG:`E0}񫻽v8/z{o(ٷHr=yghoyJF FΜ_.1)$&C1be~ -R,)JiZX8ZAX3}ZR 'nyx2[OD%;hS|;_i=~H> ow%oLz&ǞM8,8~ajk6g \v#!ԲNExx/ z[/T@\XiݯKWէiw!coT'!n* zX*ӺA.MF7Ya╒-F9%|2Yva"ȧ?Չl6g6R" >qej&cZ6^<Œ+鴵Ƕ6\^\rQ|}%00fzʤO}E`ބI!(Q#aBYawj.N䚠feZtO%ipW_7Vد^G=p+ B$4~p~ b)u:"V?zN3;x :f 00#=qܪoXu$k_I|'|J'!|OJQU9wg5GԮdH]cb̈Rg0@6_Q2q{HOG =?iN嫣MT}p5|BBTnO$M} @.VJ>d\t(0~= e+Iv=x]xXU V-zwv-F KG%l9JDN(9ʙJa3]tK-aLifrf!ehBHyJ.@/I" IUCl[ܹ@` X dgiL=d62x.! ړ?_pEY_fa+:ٚd}'gnb=>5ȶ9P4ϞT+ӭpswshCx>#d<1SO˶5G:Lw2M?dLD_vwRvH}#7tb/EmI;<2"xI!B%izzaA,m*,tBA'N*tzC P]ӷe?<35!2A +גgr<-U8#tBhL;_N6Z#@Xxa Ls*f%K[{փcI ]/٭$ 4 T)p,Z(zHeSJBu!l&,h]$@Ѯ/TѦ_(U9',o9hY"fY/,-0N0.Lqb0jS4N_ 0Eӥ~39h9}_2۳:qbt _q R-$nWs1ZSs[[F Me=jGr-5"* 3T=%"_Tg%W1T) :5ĴfyP>.~kxH) Z"P|RؒAܫsk^x=I\Q^nVX15Z~EQoNIC[('o |@;jKwA8rE!d( o;*|#l;{컼)n/ q>z4flx;T|Cy?)5Tx;T>|F3Y7e+\.gsf^s "xm[[ xpWr,a*$ OTQ2R7x8Oq0~3d.dR(|eShik]mnIp%~4dʭ,D;p%HkNSd?W'mq'&!l[̾|Mۆmnb W9FSNq[&v K}K,R/ͷ.(9gH>sN"Jyl݆q6b-y%n=",gqo sBQ;|4!`m\sg#'(xqa҇ARn)r Xj 4;r;ɨ߈p%EL.0?lb:Y91ܳE ."'00ײ٬IlOVӛ7,Ѱ[Ac덈4nN!T/泏b4"nV֨\ nZ`^!fv47T8}A.cТ|#Jep4!}2n(8~HcʑO痓m㫰<@ROo aU6p7}\5 _⹱ixRC6f|V;FҘֿ ;SJQ 3EA = H3 Ӗkec[ TAMVoa @@<7WXJb1v11 .H6fSNVT!!< a5cd!&LgƋ ΜY,MSb!r.xX3;:"{{`Nx/f,/[^X$&w}|4"OJ%Y!c$5y)ϧp)Is><`8X"A906DexK5Sg4:őqR[hm;f{7PnsNmۛtt0p{qm\m9eJ j=9ND kY?_b2OuW ;3־s*:G/XE j]#tksQ?PDvixכ>#nDh2 ;mTAto7֬>5x9OO XDn|ɝÌ`sX?MjAx|YQWT_h:_X[$yODtiNqJoys؀_t,st.ڱN]KUd#bەHPf} ,)QdYWBvid:\ncEEK7V=Nr0T8N$3C1%E˵W$nnv> .UEf/9ԔB0Ԧ\JGtܐ4ca">},,LIhJ b@AUl.-@!>>Ir 9!lY!*sHrq;;~ͽցVg `/&@%Z-0G0Va ƫL<^2| Y t.)J%' F?{!,m"45FpHO308Ar8RH@'kٸccQJK eAx^͏ ΂@sa>ה'FK@I{n9D0EB">Ta;'pr RX^K`W$NJaeH.L]NJ< J%>*h  !NqTZ60I* ;&F'MI1hң#_vQ)ZUd!&F&{ixuigWn\Iu`!J^YvgWHB[ħ`qAd7Hhڃ55D%P m Gɮ-#r@έ;yۙz+Zd|o o Yfho,~[(ݨc1c1XtV*3Ds(۔>^Q;o\[s>$>eGH\6Vt,1ޙǩjˡ͜u7 cpv-:YqԪ%(Oh%v|ee޼Eb(;0U7H wG3h5,0X i<xξ*J\Ǯ*p1xĤ%Onm8#iѾ?4vK PR^g;1fd^:04^BT30aA _%y$6, ڸ7Q, *suݮ& >*|v8ܧo֞˶,qvʗ4V&7,V4K?8L J t>bDgF5 ]q^YU"3̢ǜy@պY.DΞr7Ů3zCfcnOnE֢I2Ep"o ,Nx XDJ"%U6b'5l~wdem-|^W߼Vn4: "#.VWY_}Hlc\v(iOR$1,vސ?޸O]$f 4Dl8g!1ܣ{NVE;F)xK\zT;xLwL2~77Xs\ .NQ!ׁW1K+jWZn讼OR,')& Iq6WDy"aHK_GY9čAjByqbwgÝTqȌcxW RrEN&$Y AC&Kr+m,)jLj~m̟?UV(>ZM0Ck+ )cA /@JE*u*^]XkhS^ tJϹ 6+>YH ϋ/Q`.@vT0+v{D &W+ oe"3M P7'A;~Y>M/血oPHm⿸*]hEtk f@.@{HaDې;]!/Q/.3|fEiy%}I>i1x?' șogld*WNJUE-'#s1?Dxf`Pt]f떀R±t%~I7P 2XUzkơ';%%}5h\ KK'amn졄.NUtuDMBe$|VWj*j5ڭ"CmRGn̉l 6.KAp|C4N#~{sլ2myY).ُ@\A}(Tv3VRǣS5rԑha`Q٥4_(ri!@oW $e~5HJ[Y]0cGBZh-'s%v<@w,ڷ*S@AҖU27Z`|d&U9ȯhbj^3U92Y][ E{R&@vmuZo`0cIq%g+hghn*Y3n/{ ݞ眬BooY%ƞAzXx\v"PZHI"eV؇8|aEt3i"Ӛ9\T;RRpB$#)obԹƑ6'@bYڕv@*'%9<" PWPәU(̓ h {L_0 l> |նYlH =H ,)gR{y -eS:lz-7T~@K9:r> ;`N-x@_+ 2^;jڇU XHZ@M3;£K:LV`n ^429I#g珠^xLqct &d6ʭyJd!2Y~Sm9D_ӟh^r'>|J_xqC sn( T?nV x-gl|/&`intk- 9 xm[Y,|x0Gт-K~"egd*"kna4q1Ίr *BaiJq!oht[[2o]_2F|@+}& %ל؎5*nԀ/fN7Ha=KAk:q?| ]mG^nlܬ+Y#cf{G²D6q ",yǞnZ*| ͙(/u 6ְ$ѕΓqXjCώuڭص95@ r)!"sxW/}ְؕmtoж?ĈeH{ ܆pݍ(-ia xt|1NyYԈ6*^[zc1 H8'I]PM'Vea'\~ Nj J3BVip {3%;Q5,P|vA%kcX⬭ƶc,[rbXfk<%΂ wú1-KhƮ,ql,А$ٵ)m'LUSNIٳ)_AǤ ߡ_Ty%cm3{rгaC\=Wv.h,ƈ@m05pl'[Ϸ&>wO-Ntc~ilw[AyI]W-4yV *T'DZX:eO dFq38&I#m9v8(.=ո]}#Y!M )Fj\Tst'L#ۭpY],:m1~( N˝YC9\bgΥRs OmLbUj0)q2Ja6} ? U$%~EFдs+Rr/裻o3o5Ol+Eg @JT6_T\KL]QEvA2L~.%~,Ҭ0j5 v,5>Y$1|d ;!=ir&I(5s<ʫOﷺ_#ל4@XOdVw'qX=/- -/pPBk -5V\[!4ƩmDڪ)6tc6ib zXɨ6Ye[j]; ng0IRL]abfISM*6': eR"0'ZjsaUPp-Abֈ+k JWNUd mgFbHF'`YtiA6i>mi:@jz3p忞Ne|K5U>zK2_C_w}eU]I:g_TF$}3ze#}',Qi=)g3KT};Q23 &9{8mP3% ߯F8PCqF#Sw0Bpݝ}-)|ڷxD_=]zDx5Vw Po_\1bTkduZfAR`'Vh%2UOKﭪ 2&M7F(d3j̿1 椙LzәF\b"DZ m'L?kASty|(!,Ü7 ʬ'S*GZ WdO8Y-,up^s[ hiI RM٭ ֠!y]r5cNdq Y-9NW:x{D_iU2;[B\f^1 b;lXuun_":dkv `k!t<T< NfΓk{xf];4'ګ):zn0xfs:9"+viMr4OS(utrE"O-%@^]*J Y>mB|^J4M kǝvq2i=Vbf8xDz.Bh)_9؃;ؗFˑy|6{A8);E N5H=K NI9tB$1\f[C{Vdg>{~`͚ϻ=m%L&]*1V[rb٥nV˗lNps{ mVy5{5 cDsۙnڛ$ Y)~v$b_ѡ y +\p;kwQ `ziy͠~Z] !v' Q`B+h5X{_=uoKO#Ž'|sQ Sн!b0}g/#ꮝ΍t6(]|һ ÔΗ i^ o_3WS@P9USNY׈6}2l'$?(n84f^#y0ZJcw7,9zb81-Sv/*.g0w.e5."IjQnc%-~W7I]"ن}ʻ/]r.GwBG@K谛RnZ8T{tk@Mk:Y攙voZ1umWDZBPBnKnhyio.54D;e=*DeB܈z>Xԯ=CѯÞukh"L (IF)c 2pC*!4M J\ Zwjx2݃S{U:N 0mM]ԡZ t^! bh V.G/ҝ r'zX%_Mgo_ %j5tTeH_a\Y.5YwܧnXlPS֜V]jJOBf6WY-P7n=\E Uu#4}_ *[0nmPP@6z:I[ \$qGk]ڱ?db쪍aEl7BObr KLc _}0"kNq=ƙ:0"}[~78dᆦ j@  fc=Jkuw `w~`tI{]~wQh_B[i.)z*Z1zzrϫV?xaKPRzwCUq+t>x$X s 6yfNX8wD|Z؋e7_ UnKxxqCJG2sUdx¸qFG6g/ݜ,zw4;sf^x#\MLyxm[Y,|x0Gт-K~"egd*"kna4q1Ίr *BaiJq!oht[[2o]_2F|@+}& %ל؎5*nԀ/fN7Ha=KAk:q?| ]mG^nlܬ+Y#cf{G²D6q ",yǞnZ*| ͙(/u 6ְ$ѕΓqXjCώuڭص95@ r)!"sxW/}ְؕmtoж?ĈeH{ ܆pݍ(-ia xt|1NyYԈ6*^[zc1 H8'I]PM'Vea'\~ Nj J3BVip {3%;Q5,P|vA%kcX⬭ƶc,[rbXfk<%΂ wú1-KhƮ,ql,А$ٵ)m'LUSNIٳ)_AǤ ߡ_Ty%cm3{rгaC\=Wv.h,ƈ@m05pl'[Ϸ&>wO-Ntc~ilw[AyI]W-4yV *T'DZX:eO dFq38&I#m9v8(.=ո]SG&0dl7/qV3ӝR;BbJl—f%w1h_q:=8Ow"2g}|s9VBSx*mcs˕A8X /hJAW'3U,Tm⃘ǔ{A}~}D_y yb3]9L|t eH9<ْh9D[E2:0(ЌmpKqMlKiRӻC`/}uRD}-lk_bͮ"-["St%+_$}NY%8?4r$ +;JIP?59`*GQ1 gؽ>7Ihҟe(eH\'~8QNgs)Jt;tlsL8J>wՖ%>ir<$/no"< lh~JZD/A52ssX3 s?XDU+qY?vVwG| g 6b fF2hu WXk>Ka!ؔjn:a_ R06KwxU a!uBu4Tz}^P+\PCPX,+v^ePZε\y 큂0;t2> Di4[Z=9Kfʉ,N=_%g,js2_@/Vwh+J'} nD ? Alۭ+:}jzdkv `-rZydfFknlR橠%vClxlUq^Gcj+|me mvCҍ Vִ[6})@2YNhcH֟kϟy /E1⹤׽jּv"6[y\Rpo qu|:m0> NfΓ5{xf]3'ګ):w{zn10_s:y"+vUMrw'OS=(utrE O-%]I Y>m8TXJ4EMivuqy2i=Vbf8x#Ñ.Bhy_4؃;waMK ?z <4 v7OYy"FS'$YQv_$Vv7N s@k'eОؙGlF>saF ! dJCV\1Gvi"[vՒ p 8[B|d>>ã+^Ce^tMѣiv&@Vk΢ݞ Wt(di5B^+E-W\vZ BX^r^]3jRBCh7X-vk Z Aݝ{Sz2Dq rtolߙ(Hf's#] J n0e% @BZ@»8*UdTΔJV2"<_ [!E ?OJn %?bD9a50ˀNLa |T]K #̺pDYtMpK|ZToTMRmz cn rW mE->/,<:즧:'3!%]or#PSjN9e:ݛVfslabhە,6栖63?K賬mM-/MU"zhǙ4@=~]KUSug9B|um- I%Is(%Y BfB.v%aQ?AN UoMrJǩB:T@! 5d]~AuXuEADkx# D8 / =?˥&T; jʚ+UM] 5SlO*%_Ұgtbkݶ(oytsSYV ~ͽ͟ F[G" r$N;V;LCӣp]B]10I ].#rIw Fp)8SFװP˯GB!ДAmcA lGgI'#hoj&*?C*YMv9)0yAS~ xxVűr|H W{Utp+<=x1+? R%򋁤PqD_bn=o-{ k7  88t\3u/N #'$BY9GTd[Н" iaV @`&d?PgXr[hA|f˓FwMi)V0@ٔuqXO>;o#iIş~mrkMXX5>0! [t8e~O* ˈ"qeYm"5wݶŲfMMjk~Lq6m2%ON$/\c19آG=,ev׎2Z$s܅; RTH%WvkBh$ͽM]T2K4\=j==!U+|h%()D=@1,4 J7ɖ9ź*qYQVsy2YZwy%~Ng`oUoByxe[ /لz,lŒыeI(l9X[($ s6.Yؐ/=IiEG3"Mlɺi 4<_Ъ'te9!mñXKt؟XBm[2҆- }bUyq0%_qi<͜*AG?Ƴ62_@Grx|fڹ1rem)"Y2,HMAA˵\ܦԈ>^k=OXSLcŋj vi!PoָႢn@^=e ޲,s#5 JPSM{_C9~L C rOTX0(o~~O.$̤\8̝I @: 2Aݕmnmn IÖ\d_ Sv33D,GXTz˶0lFC~a.LG33zֱ_6re  r5y3=WYhMP@Z x6zkGӂA8UKPM|>-I?H,blum?,^F#[= #EzU)\q #uCx,OΌbFX=f\xƕ[Y[Ggh%׉ r*/âR¶17nu!?Irq]hx };}>|6jk>؇P>G&P2^t!&̜D|5dҮ%'9YٳzD|e_>j(BKF=?ҍbK†3fX$R"vUױhqixx{O\jFi'羗lST*' ym-*,bp+_%ۋ,sL8~u_OQ$dTߩ"'!3Ylq`8[TbCb3 Tċnf z1Hyje! uHx`$a0= 5I&HƂ%RJL8Djǻ$TRtI, OȈJZ ,?q+qc`Fޘף9#K?9c-XV_OYc|c8~2WΝ}B-PQ.?#'QS/QLSA ԳLnj0/>+ܽ--gGz|2+>9)s}Ɯ [~=ZT3 xa[ejcnUx\5gGoek'q?mQy~pT80/y4s&zC3}NA5?GiBK҉Z#)Reگ9rvcCj[95z3[J>x _˻֝}@[^SRŎF/` 8\HOz\1AY"[QݧP4=v"2 ϓX%ʘfɰ_5Ԛ[ /@P6RUD!G"pXҋ8F/Ɉ~e捳W™b2%U(2i}̐y9v!XmҼ~(JcTSgPst?D+,,a8 >Djflo6E1ca< ׅ!ݲ_OWk뫅v[Au LߵW;`0R/z>%zw_2_ !r4z#:)K6)kɻh>Y7/`Z<{OVq# lz L8p:e*s&~xe`a&ɥ@z+ )ezB~ =e~o 9/F \;<)0PXp1ݠ,T 粹1sǝ25i"'QLW`@*ʡAd;nU* <8)h0Z):G.0댕?h ,ZSǐdz*dM) d@Hw A.ss#G u:ֽ9iEc un)iJn`y 6ǑFq3csGjV.'5vLAh儗Q>ygL+ < +v=>x-ќk_icY1W(#H8 ]I50l+5yDROyVѡ!X-Z^wv߻@(J6;~gj̠A=# Έ~pFpmn"Y^S~e?p~OeSz|:Z}gřo.؜{y{*5RF1j91 lht;C'z06B99* SyAHOh""O:UP,(3>aP5E!'Gk8pvQ~,3IkQ٠P>EWȚeQ+%sh)7?ߔh݂lL! ^?QW$yqgOat&Hn$'λg4<3 M ,('G[ 㤚3S0NMl#:Ȇ8ٴI>hʗ b?W.GAW: zOlZr+s) 5 s2[UDq j |bN w,e$Y_1P-$]e"b%yg2 _H/X5xږY'45dVt1jOI"5ܬK \ hRb^ELOѦxMVH+,*E@2\SkQIdžP@1RL'Bx Kkaڱ=j$Հtoܺ(ILQUE/2{%F7+o'CkvHeN0m*TAJnpmzX5GzշLÐƆ`*,ɖ&CGB-L.-[^ }MDL,k p̨c# ȁpan*7[($IԆRTnq7s "L0Oٖn~Cz3msIG*ћl%{z`GɂrW--CN!ppHF-AБ8[.i^>]ᐎb #0h>d(ZXJUrTݒ ToNxs, ^kSH^ Eku++D_1B!u  ("E[˥ |aeO;MJaRݯ ^q1P*iaLG^G'8qkQIo>fWjfuZQLZج]p$nԋxM'HL2k} ^|$G*[$>$1[)h|rC Q?q9|Q#: i64Eقś.UA4PI(]5&c4uo!X46+Ovb p7D!mQ['motKBJT60%0β8s܀R`%΄pƜfRp-?\Qf;r^qXzqxW*r8{i(H>ˇ{dXER <&m =?Gd~0D"?Zekt*}??F$JmA5Yb+ydPІ.ՙݝ=|ٹ@eroW`xs$+>)dt@kBe XaZ+#< 0$Nܬ h 14V #2"S6^[w e y'|CQEaN*xAXČe(b ++ "Y:#DU?QW1 订t+ $2 }UާCaOat5e` ٮ:}^ s@{`菡)ci2L"guˋj<?X$4==rjhs}:8x ᧎(VFIS*/.̇3]AbNaFw[$*{#6px)5g5@g[ 7jt^u~M` :qP¦@Cʼ=<!9C_US\oS FMJ; cA8 գƺSb]+_x9nx9°;dkȷpsHI *JGYe{?evy\wF.nB4q)68b!poYӻޠdQv1ܐו:}bNp[TmhLB(<_0O}zK)nS, b%pEטDKOND\5P{6X͸s'1g ,yu ,@:omg8*>C~6/U{68ZV|%K8k:h ܴe"7]^30nVU1-&ș;3uȳ_ę#rhE, {/yܩ48͂{+c!γtKǠ`:>ߌuzd*խNjfUC/ZܤQɱ}ebKkF\50 Eʗ4w"30ZZ{0=Oxjhaq$ Z}߭yߍ{Rvl9NFaUX"- W%iJKOaq50F@wÐxF vä1d*R^Pd]ф4lvfh) B>.>EM4A/fpC"/[I[ӌS[0ҾFnDOo^ܩ[xeƬA"ao ݁Jy&֬PY JU2 iͩ11@Tcԍfm.&ShF'^7HBS kSɃtHHw]ÜY@YKfL0V9HbaVՁz:<0Fůl_l6j~M#*ᴩ/)lR_3f}AΈ=[B4d̯;Ua6 <*DʱGjx0-?jS#PdY9~45t61UBZ}@=ՍuxƒoNj2PN`N<9=tau<>J|k[|zǝoDڰ|[΀,P{s- xgS'EYo]TK " QnHWD^a?w?Db"FD}Ǐ3bC_#b~5Vv*bУrYT3Dy] c¥PV%(7-IM8!p㊄3?zs-Ò.X^G6 Է~FƸ'-m&D`?D5;-lTJ8\rtsz m _xtr̸!|m{]TvlTچoޞQrsoc\mo$jtȥ7[faCe9V\VNf]Y XC Lf2 *آm_j텮!T5@%}A_5Ww l.d*,5qQ+_Cڹ[I4*GYTkvL_ɟkSۑ~ܿя+E.zAd2jC~BR9dqtΨ[Ph0Hva[Kx 0x8tֻE2<:8t@0J,V2He4F".zw6|?~珺@#ҏڏ)xM>^իzRo?CY'P7CsnWV~I~1 `]OEM}Y_/ ye2}~^0ƾUB ҅-)㋮`ra5y^]"7I#7랶_:Z_c圚+Ư(ݞ1=JZXSjXWwMqr& ?ym\~F̬9lO\"*va޽ų}O.m۟N\\"/k>:[ 򌽮#FЊ0/id?g?xw`!u½s2h邏֦][1[GkakqIw.;#-ןV@<0JDѐsYv"8W9bHɍܷro",N"T%Wi*bR)r%p?#M6?c c@*xeuZu*eY5PtqRh)׫%_<d}DY A¦];Qbx/ x,C!򾑆Z 6t@ߩ'7Wc&­irH>Cvfd~A)R2|#.eu"6u),wX<?,8?rA$RS~4=3ztʇs^ r 0;Gme7QrOU%~;4`}>D ;Æa\vqdiFл1.8dKn/덁OYaOh?k,Wa>.Lv#޶? KcɔȄt8,A p!'-$̋.uv,R8{hITEkښ6aICDj&/Y|݋aWSVQ83P!U0oHDM1=+{[bg<OͧXTnSřX(ՈUEW!:w] ?&BDz.z`QewC\/lNyMa~|#|m/pDɏx:˯/j0seku-1-gF~=Kc+I@#HH!=UY,H.S<̈́b<WTT3~<)2Ғ$i}Fti1g~Cd=Dde @ӄfx _w %UZh=u2Y?7jt~.p.zsTNYͫXni Id N|DJumIVX觢1ͨ/kuH%5!V8(u5Y+3"(&e r]PPM;Јm9 btM/.$Kh[07[D.dGT!xKwT- :ڜ# `ɬg9f>-7e|; CHHlEan,Mgg>ӏjOl ~ajJz=eV'قB_NI0D O ]DSb93ф5|ŜFQ*5Eq * lgT@bq.{t HcܐĊeo"3iu_FY~,d, ˗(:ޟʷuicgeI9QlAJb_us%Tk`~/kfso2-\XOJMD mcYA*Zl7}ӵTՇΩ:WZg3~d@Bs,ֈ/Fz>QI3lTqZCsbzl͓WRZ(̑Q|%s %nLqeO0ΕרۇP3!/`P60 Y I2kO|tX˨$lc(uUk?J4 S|Ui=+g}M?bpR 3س4D-Fl@舗My׉)&i7ؕM6cf@PO6od*Kf:ѷqlbZF cR>/g<[֚DWw)Aũ7*5ɑqK]K^FHo"KWs吓'U0g[.<:sIHi2|%t5A06"|2\jRZ9\8ʩ S6`ύ-eܣPybw_!īA#sMS4r1/,dO]tOlZ5Kh*,Ԏ)RBN@^*\۹8눍nGK?Vu|]SgxAkVe S&.sfg~[/caB0^H` 8c?n oiy~sxԶlZ# s+6ֲIr(r9(!]nS@iJSNHwF;q48>.UvIbɫ\|kSU`e+ <6鞌Q9y*J(ntpL>]g)O%4=5|2) ;hcEsO$j8O wGCz  qdȁQyR7kr c<#=ua-GG(%͛cX E;itE#Jg?}e^7J!D8Um^F_3jH΂TPRgҿ=T&t$Q:x&gTi3]RJױA+vt,=nBzEB#phEC5u1.[/ j"/5*/YcsX/K/}eA[wkm}8w<oeitAMC_l;^3E{ ]t>,0cl+?`S=Iۿ8u:UCw Jx"(x ":>n X=: 4NTAmhTR2;E AfhqA4Bmon&Ty t:,yu-e)|92f@+|${iYS~n]^/Da-5C<@ͥhlf$HF1BְNDYߕ-e1ZAoժQ^AoDerR ROG"\~D8i Z\I+P2n|2S#TԩVm-LP^w֍c/)BU7jnK#>ɋՄ{%م'pZx"CRè!*ZGCQs~Ŏ &^6/ut|Im`*ʾ4>P^JmQs@AEa< GJr?O?YAKE˱?,]Յon?|_9Ce@GBAZ5naP,'hlw5"vНyjnEL~̄kQ9/˚ r2  *+UYv׃+ }nQ!>zD:9MB%@ `C4cW, ';0Q4!74xi>TACE@  )@P<oSdO{m$/H끰']ӳodsܩU=b۠ϥM?ikKȏqhlBXGj'/"Kdi_Sq EN9Ʊ(&cTOuCFIS϶6҉ z>n9:in}3#"`϶4~4tbMhmgFJuGʩ{ڛFUICKceL[G8mVw+OZPw89;8apq\ǒþϩ(!|FacW`&95 ]Y B"ڭpcAP7l]NXg灧hX(o r4 -KR;`zWᓭW\#f]QDA8WTLE~朽pxXҖĸ2c81|d wt\u̝˶'ڜ2<0A G&jO8`S| S_pŦV|2P#t0su'3x[06ߦ/KnWɈ=I e۞HaL@,!%.61^4 iQIv/v72i>(㝷{MXїF?ڱH=B{OղnWڄEy)Ps{ #lvTGp>D :2Q{N89"A *UogyjW(D Ȣ))bpo# [&n -|А-Uu FRCWf:C[#zqm"牺1  [UfBp.D:)/Ɨ{V5If{bNf5XA7d 5'@zCnkW{&v6U;8ZN *K{CU2*˴-,Nmo Y-/>/t6H;j6e9ICҐT%ۨMSyy|dG/4T*q0N/u8$ۿx;vq @hx5Bz !P*~nIʑʟ yJ%9;Ob,vۈqݧ-_.o$CCqRV]{6geSJ XAvqI[Hm?k| ~:07M`}hoQ[Z@Fj_Gw?E}*ؿ4ϓjj$gQn:#F]3;"n%qRu*i7,|*m/><n$ eqyW¶gA-_{4ﲒ/߻BgoBA񪙼ܘ/RbnN&(ePV "+MNTcbgTUSϓ*@B4agEtBTk zdǓv,~\J' V*ԑ {6(Ĵk4F[5e<1>g\$Ո4hm`^ph&D7?MST@dكۍyy:igY}ENDTvmv`%y*wU8@*X[^*h& pm6o25>SŒy.kV\+<'XbgwVne%LKufPt:J% m!Ȏqm r)GʮSO/~*^p%ۤpҘ@YNX"ۖW`V |G D .Q/F&TF4[7 F7j#]<8(BSTWy!uFHS ʛQ8?B']CzS&27Ls1{X&ɷOHRv#&H찂)OP@}zetf=@䌰%I{-'\Gc3pS!nvB2ge}.o6 gG޻սdS;v!3m|s5T43Y&ހf1ܹ^،;^Ȭt<$D~o-$QE뿪;nd8]QݑMz ۱ۯtz1BR:S͖i,h N/E/œkgᶺg;RK.PbS|Rwhb\Ӑ' j̄m0lʤsPڏq B3 S3>J;pUXM4#|wlJb{T5|`eTjbK}*|##mwTփ,4#hdv6a;(ob\38y1`k^;7W &H3" #{Cy;Ǚ;R Ģ ϵFbl[97Yucy^#VY[ P^bx. Dq׿-7A**((BamhT:l*-Xs@Z[[@QnAXt :hA;x#xnW`vsGQS؟^KuI0KQVHHR"kMRG+ &SY&t =r3y+y'pSF'(N`'`WY4ݔ31 FgB&݀~*[b"ݩza Ǭֽ^ ? nL[ ^qex~PE8L~Gp-ɦj+LU'_KTݡO7%g ڃ)Ft] J49CUi&:OBtp|Ĵl6e V'&QXڭ's"1,]_ _)K(Yt۬, /čH̖l5AʌctG,E!L*uNӷ5KsI3Elk0Q3cU{PHj³l(4>;<!Ym !*R:$sj$㟶FŖ EeE r|,a+p6LfAA'R"s<]槦k*]"7OzF\@T~Z :JA1=QՎt4V_) %J<8AlHQo t9x,L0Ć`2Ոz0aj’IЅ&*8DmO.FZȯ%B4J*?$RȄ"gu :BkʄeT}/dwgkZ3A*00 MV#c[_ ` =#h%U(GBxbQ!1؈k% XF#pxVq WadmC\HՊݜTZ2EFD+|rUXq}bBuS0wr#N* Ur_R_ lBʑ'ÀD%Rih Fug&`&y&$ltEFdPzbQsNۨY1x%d0:&Z9=e̟vF\C'pzId @dj< +h84ΞJ rb=2/|HZ4*o};/rAeWwn&̰̘ rНQNe&,@M0U_hJ· F[4LAjQ. Lg$bLq) ;$3R0皒I%s+:a JюNGPJ^JքQakҐ!ӷē4 A%NT;er"%APM]gјBn5RFOPڸ- #MX. \x\4..z_4WdŒ5[hƌB3 o2bV􂽣%5aD_M a#$KC c E&er.b>ܒ<&D~~u_܎{5 ]t =ek3NPO S'ya]&&T3q[/`}: " $ZQXH<:2,>ܲ) A$mX<cUMUwvh:<4*N##Qg-'-L](#bknmge4CR6w0i&Gi')6ˢ4iD¦cc&Cl(+[ >7v'\ pݩGEH8M' 3}YPª%PSJ..xQAenS 渠 H;̿(tS!/Jlc\ *hlRƳ7,ohm&ZML*h m.xF71s5~ZhѐߙL';lAX@3_ݢjO(4Q vp3ί#ӎ!wh>=EkW_p_ߓ/i :sy0qਿШϖ7z69*̃vcHj5씐k֑)T͎SjZ@V nG!d4=8eɴv׉:ETWJ)h [GL?VLӦ{)+oS6RCVMR%P(y>(—~!pBC[k3kȍ/; jd7ia夆/`wC㰭!A2r U0PT lMp8ܸk$'r|@ȯ8*6;yaٝ=畐ȸ!5@q+H%ВJC8U9ifԟF}UJ  (V|5M]˻ƑWj\A!<[4U,fpKAq@c2tMƵL `!/roS3ҕHsE6.Tu6ڳu@G})+??}d]l6e0SCGA ML<3A7)n`oU&:3#_H?٧慨p ߑK% M[Bab85AD̗5 uWrܞVtC9 @]Jq2S/v StNۼFȚif wN}cWZɷ7Q}MkX4iPwga-]*!=Y"vl'{aN:F N lq10ZSZ ʹw5Kc7W(7Y T"VwR;BD0 Hhױ7v ~&xq<17(Zu D6t,/[?LG?*t3jQ`IU8hEB|I@a=hKBD51Q`oB4攢CFClG):BO$6/XhFa"?됒 `>ya qndJR<<@Rs. |<_y,}+sYA!@sD <ԸDfCWo\IP}a\6⛫McTb.ȍIN. )9)r ǰ IKө]@Yՠs| RQ\8tp }Tdۣ/0Y,3WJU*l~E9+T:O9B2 p- J}@$^T|v o~#%8-qoo7%͢|:8S`'B;B&L!NO@0[!Oԗ6>tABj2o$$44 Bp* "JNfѴ1p` [y~K9*-x I8C+oc̦p6x.R=ck =`#"N!`lx)z(drjݥUDrT!G8-d[EeW=38)>ij3[ `?&rT㴚@CyL _YhS!Dxc9h, 5@~I48|!3do@4=Eʏ:hE46 {% {ǿ-t~%QC(vhӅs?GtSdG=E0pKRxF Ҏ!aAyhhPd ,:pP jrWNi c!**v p|N/} I,B*“Oi-"CƭC}* l2Tw:ïP(bAUJZXA;4F~pV,]MsxSY=ˈ/JjCu;g)@7^*%5 i2vQLi֌So@}KPZ+ի}mVE4K-=Ħ7Oz%ÀXMM2ӛÑ7ri ǖ9Yxu=)C[OO:'{|%2 {qZ' /!~Tk*gJ|\q6d t9+joP18L8q<*@Gk+!r ) /+P nj3\$M92  t֝PNYowYO8J4 Ү N=2␹`r41q:+䕂zhwBvz&ML H4T/.U&;~u)B|T@LDn3KmԺp⏳M*0RXuT~ppE/X$E+ө1 WۨyLLFJ{(vܚ.,S; ~N5TPaG7RA,I0!U/1a=xB-#tq[2'e5h Ugd-Y j \|"P!Õ!hWo1iŽO!)Fy9^? m;L+#*-C'2=>Z,BxQ'(_?yЫz~si+8'vHE)HFY?s H\O'|2;;2srROb{\ fxGAFQ;:|EͬQLsRoW~/BXW}۱qQ/O|"ut+t:WC%= "w? ZHl gbiETb-(}_2S6 sv:*#7FQBT3.E`,|E &῀);o/.,$_BR)FK4o!.1,^s*!v 88 ]$tTe@i<*?wzPCCBKtS |J-*Fi ;p%hQn |*1@1(!LD`caظ,{3:E H$d"q]g"") Siݽ V-j:$4*rhBE8=㲗 uSjt .]k&VU_LbH9-쭎uR^Mq//?8)4m 2;_r&C7`kaBlV(*WKr`hEAVt%JLL -RZm:+4dKju/8tA>e4y4N}+/4$2Uk_0' IzT[ 041,:Չ Ahs-ҥ IPPPIET6T9"ɩ>OtXO#qh>.F8q64c*HEAژhwkz8#XA鯧Pu0^J[l ˯+qv=JR>4tG r(jp^$FEtAaUMhXYO)Сh b4ab(Z6Rc>R{d *U;! @bt9@ ԾMN{[n8B߈(7<$.Jz rg{峅r a.QqW#Vw%m?-V=tNBZ3QNU:h MU=BfbEaWFCzQPIaV6tMu6Vh0*:,jӿa+u Z=ToȫD)XiPGD˔ U5!HEq5!%6;HQ|{Ga(5r@wV1ƔFiMxacx~ X!9~^ ,tMKJ9x*U[;PިbsQDh#׫>T4z.zm%z7JZ_ϬrS8+4!bM@RDQ + 'm $.HWt]sC+{mu'1Bz!q+P<^B}AIKh5)ۢ^A,³oǠuNb[q;*MH4t4Q갓lȮIٔ?M4Lgqn< .NvONڎm1ÿ}F_* SIo P Mu.SG4t&5 pup w]l@O2Lr^p\ tO6u]~P.OEO@e'u8J$ڭ)l.4l*P3ڪ7S }{z1 yҶ=ܤ(ڄb~w)fxp;w,Mx#M}m){ MVw oSi熦rqrg_gf銌;#/ ^?ubnux{tif-.x]][,|?{'&6tzD*_f IzMǒx6UCqjF>R fe+_Ts2Ȳę8Viт|7 9tBd$}0®keR I^~(gO2N{H1{`. E>@zjJ!O.oM}R{wS"[L.Wxu}6ҧd Grʫq+?'|<`4yjbg"ELsf(fyR2&u7 0`/)\IznSj$~)&bPyfNqk֦87pP&X.N "Su2'&dkFʑ y,2<'|3\oRE ۴`Ƽ t[ο`b*2Jw'xNL$xPBJ$X1~A-"p&1na ̵UX{[@L|)xJ _H(Ycv u,&0= DarD+*$?K$-Ahƒ][ӂPGY>(}%[o_WXJޒ̞{^(םeK4@w`~[ ;'OpKqݐ?˝D)`i$7ː_KLk~/Y#f?uL7~%'$\H i"-]_3QQf"6" Tu:.e.A&+0Jv/Ȕ=Ej\_7,&J~_:g_(2,Ⱥg^L^dI?ࢀC$)5H=1Kd΢{`64UDNVfBp?Zl , 94jȀH浓:5ca%p#GCU۴bl 'T=av~3 N!& 2GP0YNT!yE< Pu%IZ{>a[%G"{0>x"}#ɩ$ȚC O@T%{cRc@l @S(߬U_Rb\+ݬ2}]*P9٠<1ehCX%)M7b,FhGaWr|_4:<&B˺X}ũ'i"wQ t_sDܓ誨 xʢ#]GJw̰m)9dĐ1uqW0Ku;_.֫L_'Bϕ`Y>U:Mt@7 \%(\9up͠z|$}xw%inͿ 9 :B\+I!_.ZÑX݇3@^az9_}1'Βat 晫 SԻ80(ebdK7//L7/oV'5>q? D:S׮ 7g q_jb{Dw  |9(KdWbcm.bNHW4/uO[uPmT {nVM:g PL`U+2 d"Ez?R LxY_xxI+a7uD>J4$Qlt 7ӿꪖ &:_YM(tWa0\(eMuQ.ź/~$\d Wq! Ƽ.s\ݻ|+Jf"+DU򯘽ߝz\g;]&/3{J{]wEvZ&dغGZ\O|E4Vf%P#kEt>c 4>QT\Ԙk=>[tC~wked\_UNŎ|Gvh̓m<?8;y(2]VZDQO1'kZ%T]Ԡ,uJWT~XTcYgWzN³lzfN2QmT &ksm҅tǔ:K:!`4%<'ؚKa>l SYT3D#tK3'4A'yrcLyqu{'m{٭T$VBab1s4 ~]4:erP-pSD&'W{{ iRׂ{F:$GPe>*.Mo)$=whs7cu6` $⿱AHqV,bn4weu|w5ωALJ& lNr U ex8ykgR>} vA{u ]<ՙJJ޴5e!NJa d%y*ėq^عDQ{Cω|aEtSo W.?qY`tC̔2s5p玐E$SZK\ԍ0Rmp,r9!{M]|XI`1l*fkOu#Mj VSOA"q 8#P>@ GM,{=ؐa0hєwFR 6ZbsX&=I {+ax1Kf*fQ"&O(݅d~xo3`]m ?BP >33NOoP`̔?u!6ޖ% {:/h@q|ޠ M?[IL~e3Gw msژbI͠~ET ~m;e/>LYrg} й/[fu f6kV|uџkX.~YV˻c xL}r눺Ć.?muEyfڙhwƶ,0r7T;FA}bŷ|%yߣ&3tHV|P/u%0pF%D(ʐ ZZ=`OoZ₉-#pnB$‚-w0 /=Yx6a!o*sCݱy+bĒ [nt7ϴ\ߎM,&>(m͚;dEZ+*&b6 |o!ω M_pC@}@uxuΰ!k-*4{ɫz:71 TaBDW׻&t^/)L=)AG:e媈_>I5NLoN$5Zvny/e`z9+/F 4-"tɮEZ[7kclM8n’g5a ٣t&dkp)a~(p(䀑@[ QmN eĩkትcC'n䵣*Si}Yi6dlD1[f֠"6nn:?;UvӍp'فXڶSJ .M>B`٦緡_fK.21 ĠI-.S|ha`27~0jlQ#6CmXvx-4D.p-H^oN@!5<7 O5Hn4@n0U6lZ}s$U{Rw۱:S[/xxG}  9(ˊ)Eu;CIZEvCfkU`ɦ4|O~0KX*N\f챒oJWLFK쾕+!Ɖ ƌq \ItrK:li7}Cě'g~8,rrXї0f(#zR3PxOgŠb֕ /ѨztG\:ߧ^?Gl<ĬqY U\װaߕ'ݵK=ѢXk`_vhDK"+?6ⷁ;z wQ SG-  1 KƺKE+Ҫm(D },o,rv>u|',g2QŠXqxsfW {Ke:wjapؙPz8NwG (XcuL½?|I^]pjsL#k,$kt ]T8~׏w H<NN%NT;cv8ktGۋc(kL*=28}I܏nv_6 a4baѻ;cU'n[,i"b;䓦஁֪d )xs{x2|u/)ȞTņ[C&29.&{A,ہ=ݩgCCĚ~xdv4넃N+WB {`&c(C47'h\4bC ’obAS|7n7ɳO"%۞q3[0ÆTII%1oV>!w=rY\|[.:FȽS+Bߑ.!e3`no)%+Bx@~,b:(HD(caWEXH!%+SQ&-$2 &WSL%m0w[l71Si0iۅ]Κ( ɐu)HªQ*{x4إ >8C?jJ҅w¡Mo FiO_T°W6U|sZF1R2f~sNM>&?$ W}P(n?]]um J(߭^p=srPWeC+sCɭJ53 "4O1WWK-ݷ+yFrAb `Y8^)`‰`D{t8ezqn$t(h+0|`v=[vOOsEorP,'Sgvb=7 yjtPg8 ~=Nj/7ޢ^cqXz Ɣ _;qnpWd} 0{ <)vsLP:Fy˙FtHZS&KI9(h9# C*Yu}?'c1qtk@ȍ0PG1Zǟ,01=-e{J;[&J-|Vobp?aWW\FL(`2 g{w#I+Ի뻻fy  B6MYuCEԟ_włi+DŽn(b6gD"( Oe5AdMƚqqTQqO{MѮ.$*zpty U8.hY,xאָyXa b[S~t .2F5_EW/'sw\N q1D<鸾TK+uҸoEҟzY,{Goc(ׁ J6uJ2 \S$@q0sr1%_`(rKUkTx_O0?64%D\[%.߄,[ˇZ:\guxw1ݷf{u22_f$p;=N5s+w4cTD\48na̝+ڟzi6ȓ"c0Iz>d, =p7kJ .0Qd%}]Džub1 E]uL]N +o|TSD.oh Et4ʈlGwO;"SP\ć68կo6H4gc^-9 Jnaє( !|[H{3|KF؝6J4L9vMY4f,0m/w41:j lܘw(-<tk8kJaҨؽ>]t]vU*]6l)]܀Qy>wG}U6(%exFeaƠb?;o+Bwwvwo‚kY4smcilz)[PhS,#R\<@7tٝOD45)Do&.ʢ QYx3FpvLUӣbG!1 {q=36=nW=u:2B7ҩuwB$A+x UE-6f=wt`SJ8V\iV]b&$h b ݼ?v}=nzhvu~MU끕fauф f/DE(0:&8&PP/C1bֱigTڗ  T '!O\PJFTTtqF4bEZVv ꒃTJS5.t1!QuR͘AyjA|NB8!\e@'A],27T r0̚pNOP+ E.-/Π{:ec! f7ҲDU,NV4\A YOL d-*:BLoѿۂʜDWC_w:*'EJgW&UݔM꯸rq{N5eq1±h7݊+Bޜ&JBobƵIʓMSՅR3vUNC-G7aM.Jej7Sr'p"h ШƝ?D/C]P'a볝{ (E1lX: B%Z7v. ?`0\YSe=sCR mahE\8ȉ.rbqaBMEt'*x5p+0;68-}1v޽' yEڄ#nkvs+b}0D@}QXdb?YZ_zus{dܗLy7Yi͋DuЪY+!FODIF>5FQz A{Ph'lv`(㈓-:ak4e1_ \ۆO lAA7zeچ`="#ZĻqCx5i샨yQ $zMBNx-#n0cZu`TB+HUFZ/ gMavP!7CH5ƕr8??̛v|Snejbܔ_;g4teepVBBbS5"Aa8ğjOzZDGP4LWQ~\og퇏Uf\0G(al/(qPD+)-J.kk7ǖ栗w V.Ѡv ordR?n7LPޔAo7m9.Aձ4zz_?IpWw=l]` pXHr2>0nmu뇏suM\BybBsTt=Ɗ_~!'|Y?' ?70=1:xyFZ| +V ܔ{0OKA )^6o>v5}خχ]D9puG`8& w#R~廏bSټ /P+o+?i&O lE =i /m ?GH3Rƶ- : ՞"Kƙ{AD>нǺ!x鹹"\t=w4dAa3HٰAy 3=OS\qq,XO΄՟<,tv[`&^n6x7 6hBxm]ۚ,w}'&6tW"QTlstj<]gJxĩ] K1S8|Qv| ) y2+Dψ{moQSdњG#gTX_G .X[(`]\=ɣvod=0ZcV)$M/@?Rʳ'}Bw V=Y=?0h_ c mY['7Ê>V=;_{)-&+s<q:z>SVS|m9|fisCi>pS[0< Z|%l>kѹ8Y(YlI]A ~K:h۔guX'G^}Sڱi& $I2 mBH5n6})뺌Gm Yڹr$>±B _y~ כT6-1?0"÷43/رX ]76x-4bbkdkj)Bg4|>'43D̦[Xs+jP _xdJvQcXeAr1J!OK?,BN>d$2 ҟyd'aaX`e \ȩ+P{6B<, UO(6LSI>LLxHdsQ&T]I֞dtVf;g{Ꞩ= (ޠvHr;.Pi žDXx)۪)vCl?aP3 o7GF󗪔Wn7kaa na5@e6(*ρtCY6&gIJǍKZ=;Q07sbYש1=]֍(N=I3to` #&DWE׼XTqm_7S:Pcm;H9H,!#D̬_qOw^f:Ju "9h̬o $>0͇"e싱>89wtET0\Uq)A)+('+XJyе}a"yq}3?Iy`$N' ٟv]9/? gլ@U $NAYN˲F\4_)wnS_b S:$7 ,cƹҩ ݬ:ώE- VeM=DhRdJ)&2 f ,w/!RPx+ DI%ވO.<Q|k5"4_Ur„Ƣps` 7%Fab*p./O/\υ@/ί́_ru kf"Ub=&BwO=sWF`v?s8")!uuka")wkq=>Cp\IH7A].<~a ^ܨmcka}3i'.k B(X*K7T//M swL1T@]¨ϋ^*4 _>~`va)e2 K"ÃJ+IHZaa"Υ9BXrBv0:ޱ2cHT̎9֞ 3 Gl>D7-qF|l1Xz!+BtÆb)y* Ä[q !|%J;ɭB|G#quG 7]d~;>ʹ3Ѷ̍Mu5Y`xn.Q19w;P틿K(,p]G]M$!g`g%,2_]ʷ 0k+B{Xk(};!.k̋4RT* JW`njߡ3_L=|UYw:(牯)K6SÕMP!n-0wD9-V'+֎ $K KKy׎ftLeٜzVOLelZB* ۸'M$VMڊÝd:be&N)/@zl6 f߆~ƛ,8C4h 2w&ݷ`Lf&Q{٢jèٲo ڰ5aEܲtB,׆f>"y%U807;j#9Rٰ-:A8T]KmMm-lsy a)l\KU8.h8_\TS?ĭ5;Q`7De6j$WnJ'  [D%-1`&+Y)tj Ok8Y [b(yHͨwŕD) Ö:D|Bq&c*}[VA')4{f; *-v\)=`@ G ~ĥ}.stCPŕݯ pv])z][S- eFHtD;Bc#~+$\OZ~r9<0=. mum).#Ե0TB z) , NM77u*Uǟ2uS^6`;)gGS~f.U . 79l\~ ɿǹdQsqqlj=-G U|wľnʮ5T$ܛ D564ƢDߜ!0(5H Lwh}ǩă';XRDU ỏ Xqrf1 ptwd7 r\]lɛƤңQ7qtf%lC)*@V;L=/)AǞ J`~Yݩ# lD|.5֚83o܇`W|ιR6U&n6weٳѻ`bדV&EduxW=1^?};~hX3|Uَ`p0yuE[ Eavȑa ?0dC1}&| 4,Pl]AXM!c݄_=q`ՙO;8|M(yP [u?wk f~I6Q[&ʧ3سX!yGH.+kE؈S!7E;%LySk9½.e$xR~@]?Ef ~eVQ:S( 8idse;\AdX ~]T}߰ ·+U&f7 &mY%a?7ҿ.6 S8JEqoТ>a<g`'ZMI0mN@hԠSM(-:[6q[oUkc$FJqc`pbQ~SF oΣ)P䇄1ʞt m٫A͗s9A =-\NarNjdRp<9{h?xn9o|F]) S; `ߺvE18\0OSre=H 3>,kG "eLY8qW- 6A*΍>e3pOG))T1wuP # b N,&Z!ϗꬨEI[ԋc B8#՟QgB1Q2JAeZkqĺ"Ȫ- ø9*nJ;]9T2NyfsRGdSNwzJ;zzÐ\9o_XL7ڢ.r#d!1TWUyO &ѝT% +ѷ7 b V b蟰++i#a&e0g=[$j]3ym J!X,"įbRشcBvRqUVe1M@aJ3pm]GL2gIwB ciw3wʦcovGR88ʨ=(hW$s8ei6@]*ePmZ\ixL,vאָyXn b[hS~t .2F5_E4'sw\N! q1DDy;m$DfUo%r\5\]|a<j%CJR5ucTA Cbk@W+ߔzYĈ3]b+#Rd<KK)s FFKф=|I 7KF&ZC]6!t.oGaCU-VeXeM+}rEPZuqqT1 ^~XyYI>!pU^iVm/m"<У"XB!@JbHwSKȦ%Pi_.w$Pއ+gy jbS\STKR)MKƄ8IR?,םMa4cGg-;`kV@nJ 1˴&[kr脠r cu=VPy%Twh2kd*#6k‘cBu3W4WT⃚YaHv!VK:CZp! 6d=1OC(< bP@n 1 pF9 G *seޣ^5dǃ6u'~A*_lVubBO?hN]&KըŅ Ǣݨv+nLLv ysVSK(y ^')AiWuShćۍ> L?Կ5<(=O떩o>OHȝ08W 2@ w?vAmvDZ0$t(nŰ&Bv c逼BJ:h&\,̲RueM%$J%Aqjc:q 'q5UJlslW~:``/\yK02 eFjr]x @ d!G3bMQQ4gi}Qh1g" 2[p_2nQ51VdafDG>_S' GxI N)teAedY۟SOf\PPMƂnC/ܔ\-pnV?{ҳiBD_ohFCҪ l㤱Es0l4irv97n9x)m*cZE2Z~I=͘Wo/ ;$`毑0.?a޴{Uv+SGɑ?WѦ+,ʹW1 Ʊ'W{":1`~zk?|\2($'>E #W5 p E"I1nWpxSXs\96<DS:8w`}#'o#-qc4 )fꇚ Q}s6i|^?/tA{ЍYꇻ@Ifd.`kGT!e)4l^?|\P?hBW 9Og N?mOс#3g^0^uU>ݍ܃сe_2!rp<&7QLLAGvn?G\& u{DW="1zC4}ded}j6^K]iL3yb`+2mISNxAnK9I 4mxN/GJHIO_ w2N,kh':9\=E ƓJH?! STm@ʆ] sn|ʍ'Ԍ'gz*p&]ς0_h//nFxqw g6?8;^/x5[z0߻)MP3bH!yOr9ViO1qDս9 >95 QY͓Q *-r"zI0X^A/kj:D4/Mտ//t{';p@[Ia RlЎbƒ8jdy{Nи',mz>fA:OXb, v -,?[,¶lQ6 `Xkqͱr' GYz>0f#"oG )Cj+ygOuž75x=R[v b'M9'oʐ5#oƽ]E_?I6AJiXһ=`3ٝH'~Ж fMZN2gF,mCٚ2]/{neL9$̫ij"٫x{ClєZ1}+&Cg2Gn 9J(ah I-^Y *i^KkA2]>hPkrD}@WHI9JO=—G1)SnX[%&& fm3f=sF̔QwC8g74JxUMv K'I V %oH-o?wM80N'%=t pe9ւOS!cZaoIͱ,*5PsNv=3˴{Z$jIKPRGqtrdӍUln\{^F7YbCQ8ҭ?@S[qnwWj_8:ЖIJRDS_SZKP^^Ɵ̭dΏ]c9v΂x]0b]8ԷU#RWCIDgyL%-2ٽMt+~a8br΄}|s{CxMAv DHw1ˈJ`uݷ@b!s-R~F;o@RN)-Oa l 2"J'_|Y][KڇaZAGHuyO}}Քe6jWWuɝ}\ .[7ywvv ڥxιђ{Ԍx=VQ*{ywDo48]`FD(0n~\ÒxO,vƊWwL+ĔXD"cw]rC vf0R>[tfi%ﱜ 0bI蒤k#B[`T:wvB_q6+jgLktF=1b=uDWn???Ky"mN\Gk8d;]~yt? 'rqz9«X*11@ d86 G2{pܷnr ҏxC[XCDOV Ry$e:g׼F"X80X!qڮoIv-03GRhw˳!Ds^3MQՃD3ŁEX0#G'$F $ I5EpHꈐ! y y 4 L a訕Ù*YIp١l>GOS$~2~ݝN(x5+f X;͝>e&Y['9u {[,}ٺnPr#BcbW@X3'4w$?EҌenI-VA]k!Wg:Xr\0paAe&Voi*|&><~(5TT! ]*kWZ=%Cbiӂw(z-_HTa~NuiG>W dRԓ^*Q\kkz Bcbt*[Qe7ֳFQ,7k1%dޝ+BaT ta6DkzTZV*vIk8Qs"xdk^5e!JE{na'M呂Y3]튨3wGxی= X;IlNc?=4_}t}u-Ӆ[w}j ;#z ֹx# _`iȍx&!"jick>W% (!xEWAb /XQKWC;c4Ujo޿BҜ67=Ǜ%M a+,rv^s'.b.s V zc1- |?u|$1,;GI_0'4+,2i uLN'~c`x5>3? 26W% hp~@K:f2/AF:s+*i}ӎˈOȢ29iD|@Oj""F -mt5K)q]s9N; 5JQAU=RHi}guzozx5(p dDjr,'ɛ#RϴΉPr+ksY 0$Gv9b5?A|C[O(=a^[D7Eb&v$zK_h51Fn7F sx!n9G%p45d]mK1K>#gc<$ wMמVb킆+>`/`>3~¥#&O+VkɓvoDuQ ݇?|PgD4O,CMPPifbVLU~S}ˉ%Vd5Rhc4nFB^O"5|bo&#ھX-ꗛTsn7z۠kdTqM+Wݵ+JLg𲨖rrxʠTZl u ݕuwx[2R鳉 3EPVH߀I(ށFRʧJfw tl-ܱynKx䂱/FL[=a)߄7p;x#Jcy|?b 0ߎ4v{5cxCftk{ `3_!ٰPҭ$XE[ ' d}*##h<1|EI 2ZGt!ei ʘgW1&}=0¥FηxljF=TH9]7Qζ']ۿ m(==p3]D>B;;/ҭlyV.q[%8yu4j{1~ ˾A;;E%?R46d[KgFqfL(ęge/B_QUBx'%'4ick' 9m#xU]b .w61¶_9 3K/iP\_<~\R 'ʕѩ#K|xqpip 1oW \Μ` c0r\NN+@X5:n?>'ȱ34~ji1Z3spaxhh7&R EC|]W8a.bt⸽Y =42i' ]~޳Z/elM rq~=I.`s/Jcёfl)W+%o8\2g)j}2o#6lɨbCmV p h#+&蜱Ib9D [Ɠs^d:%v':d5rMTށ(o=0uTSU-؞ #as{=Y@Jx35ŝ0&+#jSe/u(DS6KTs!o//$SxkS%` xM]( g/3{+:@ٷV߹=>@ 3,R{W^[w6Ga_!k.GN1Z}R8Ii"7pw%ٗqE J E͑K;JRp> +㊎An{S9'L^˰1%#< tI a(. Lc('GFS+$(NA (bAB= !Y`0oK7^mX!.$IMi%b>_@za#HGYWJGO£Rt >"H l*oH|LC—\J~0{},mDMn17HJy e)4XB3T T<.=uNo"┞_Vf51_Z!iZxdipa (I2m 3* )0}t5SH͟q tHByTpayf R̦,/(st$K{ΜZZH>AL_ΌkggEb%Kc__SGƛtY] 5-|[OFaRfHg;zq( <氕|}!uLN3;͚~N(̔uO/Yw%B@yL*ʄRMFN)Yk&@[Wx׫9ObnI¶NՁ't_#yw,C=XwIS% dbMo͘LB\tqȦT(@'i!G Ӱ~@ Ց>h}cscii W-elyΟQ۩u l[.P9~CY;2wA5/xV.,n"l@NS|1IS2zYGn}Va*j(iUzC[/5',:2~nVu`믁~%8gTrvZy67"ʍ>Jn5|qN ; w6eLV_vFk #ہ=/8멝]Nu:J@gY$ LIw 3}تVۂ>p7Olq4sķ'{gL}Tw"[ӟt:GxtMqDy&;0oeȜms7g732 عxMт( E_vBTJ4Lr~ҳ BraJ^{me/Fߍl}~xo9Gk^K$uP<T+gЃeR_d g%((%6G6 GE ¾2z'hÂS8;m6|3x!Fd䂝Gy*mFFn|SPNvTȒX!p0*|%ee33 }ZAj w$ytjMC%O,)2z i,@z=ʺ:FZ.%וbgkDZ-܈m'^L`CDTixb8WgFM:{|'74h#zouy ~@RoU5~M`,OdNJgLrcxA!.v 𕒵RdXbi!.F1flq;Fd+aE d-8Q 1edw(*o"C͸4R t"N*V\a )6ʜ3{LN亴]n=`pP}l TWfSM:`Pwn]:0R<̔.2P2ǙxԼw=4OCL'Ne)T'e~T(Jʷ]Ԡ%|D5%tf_}jZQ\CDx@ P]+|[mE\Xʀ5r+"t<K iL">)N*MSҢ[TޏV/Nk4:PCudY#qXSQ0ZOz0&\~nAWPyRC%@Enjðnq;t#TnkqiͲr` ZuDe 5lSduS* $UuC.[/.5'{WXtnڶmVu`ꯁorkyb|O>b3nG .7N{;kM|"L;x{NqDy&;0oeȜms#9z 8x=I E9LI 3q7zg@×NR?/UV$`;IP.n`2؃2خHF~Q\|DQU?LU=<iDG9?K_ҭ ro 6G]li"-Z,44IW\ {LkNy<+2` ֓p pc,Ts .¾c)8[)O>dHZfٚN',TQא"kq,% Gy7"*Flvfn \se"X}aSL&@ns<o!h&[.$4 NH;=w{CMmyc4 _7xcŦX\WƕR dII*X8'?9BLq#+QAxES[ =1j_3ӫ3_U$_4Vǿ7UDRI]FNF{vZB$ɬ~5@G9:yixPOH22P'$io#LUSx* iN~ J<~`8OK7(:Ic0g&ZF _7^/U^hx&3*ӯB:FhMJhQ6vS.@qPXVALoOYy!wCauwf p  !J2y:ʛ(#6˭Ǖ^Q湫}"ukŤ/r 2Cv{!h}\kB~?KUU@4 2LF7Vwۦ[1tx}":ON~rv^WRN~D93n( TxUK0E絗=K(wY}Sᑌ|j nB50Xv87S$xڽ v,[|8D[TYZDR y$MRhVnX 0Ka-kiF \w/e۴]-zSaC`8d,2 j.x6 ѭ8߬b%ZefaӬS.@f > O7X<$O oD'!\0YSLlFQ9ok6q0e,8گgu%y?KRXu)h rPHw]v~imSע:̪7^Jϖ6:I[" #7 ;ں,2\cW+Vf94j5:wP5n)f@v"Ofj*[+9$  U!Eܔ< GوApfD@wmJ@>6m܍KJb< :meQ?+ a)DApqĔIaoG DtdwvM~yM%n xk9Q?'?9;3/]+)'dbĖ71Mc FPxM[ ]SZܾS5B: tZMu[/W dlH \A؈=mFZ$+ G+i]Є<Uov7d=S)JiD=TU)nx 9i ~($b^kdfUVlih^/%gKx Τ-iڑym]]Jt+AX+3cTrBb{v3Sp ;'|d3gNtVB G*"nl 83"m Ȼ6% tl Cp]Q`6l%%1o6C(ZhcA˟`N" 8bʤ A0䷣r":;yBl;\&c?<toʆ xk9Q?'?9;3/]/+)'dbĖ71McQ7xةa@1 DA*RaKdȲm|&M6\3f/E(BP"HE*RT"HE*JQR(E)JQVhE+ZъV(((((*****b(F1QbX*VUbX*))))<`̃y0<`̃y0<`̃y0<`̃y0<`̃y0<`̃y0<`̃y0<`̃y0<`̃y0<`̃y0<`̃y0<`̃y0<`̓y2O<'d̓y2O<'d̓y2O<'d̓y2O<'d̓y2O<'d̓y2O<'d̓y2O<'d̓y2O<'d̓y2O<'d̓y2O<'d̓y2O<'d̓y2O<'d̓y2Ożb^̋y1/żb^̋y1/żb^̋y1/żb^̋y1/żb^̋y1/żb^̋y1/żb^̋y1/żb^̋y1/żb^̋y1/żb^̋y1/żb^̋y1/żb^̋y1/żb̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oͼ7f̛y3oa~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~e~_e~_e~_e~_e~_e~_e~_e~_e~_e~_e~_e~_e~_e~_e~_e~_e~_e~_e~_e~_e~_e~_e~_e~_e~_|a>̇0|a>̇0|a>̇0|a>̇0|a>̇0|a>̇0|a>̇0|a>̇0|a>̇0|a>̇0|a>̇0|a>̇0|a̗2_|/e̗2_|/e̗2_|/e̗2_|/e̗2_|/e̗2_|/e̗2_|/e̗2_|/e̗2_|/e̗2_|/e̗2_|/e̗2_|/e̗2_c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cå.pK?\~å.pK?\~å.pK?\~å.pK?\~å.pK?\~?&"xRTRPRb b+ b{ VbuudmͥPTu xmPn0 t,A!$3t ]t,$b )3 :tn'JHAAw<țQX *;DܲWtwJ1ވ]DYT6+^X=n؏/3z( ʌ'ƈrWW:[ zhOt،R p=ML}lKAbchzw-ҌU}TH Ñ!9sO-uL"fAr>M.W`/nxVoGW"aPTF)cT;$m c<ޏA;"+\_c)s|{oXI,3ko=^}hht&HONrd"E*PTE?6H|Ш|zm TDS3 Uc`cLX)pbcMN]4չo;;*S`#Ms4Q'٧v<ƤI<|rDc=w1XX5]得gF3?97Ό)qQ\EjbS:驉E\bKucUG|glQ|ҍkILW~~=o)wakPvEٟ}B[s̜L~$H&[h[3Ȝ7nR0-SDp]};>}sQ_/V1q1oCJu=eFמ!`B`%! [9`ցϘL%0={-ӳ8IaY3"a3#ϭ?,Xbk9=k^$ļ^FX"Rn_r"r;rx;*_bK!FC)K+q{%qVVT}X3)rάXq+a"K A7pϫp@6k}˨R`˱J|ẵk|1mڮih승A(lc9u4n5b)ٿ'#ùRAyأj]jZr2ج- \n%yrzu_t] A~FHUd$0`F/\l9Á$LL-զfa6tQH:B-ɲ)$Qߝ?`e Z.e*XBUx)|x0+R0!h֤l) \*pmD/[҅|g-*1os`rc+09(3Bۢ i{@q “zYa`<3;ht)ֳJ;K_1 MB C%+: R[Ԑ`!>si)H 8>הb' o;ػJr =E͉xE F YB$Jcx~ _6fBCZK8pճ8e??iga<)9U %!HNki15%Z@[BF}zDNtwfՂEK0JںHT} SAT K D Т0H$xZOa6Yyn֓ 57f &D&܈Ry֝d9JRw|[c7}ydsbӹU iݨA_Gs`'ApJuK߁7aHqyJ Pq=鵲& xrt .N=Ĵ 79?$45D7;/<'5%=&\P Id٪hd$$99%`xG[ \\!A.!+xX]o8}.ݼlNRfv&b-$f+H`~{IW1kHms=`JmH~CCϟ6D[Gj`=Em]Ͽ^PUkŭC)âOQTCvpA:δ-մ te[l;壉zc^L=-W)LQG! \ zko⣲e6!i *c{/&~mGqN-9" )a[$sjtDv6ny0}]nuz1Θ鉞|oX1Tks׼NrL08ڡtu9`EAۀ%A\!>ĹqͪwKC@j^&[$4d4U|g"*unhJvF4`K$fLzЯ) Ņ [zrɅqGǕ+ag1<< p*w3F3/y1)Oq# u}No8CE^rW[nћ4b &?jejnqkuf<'5_^L'aIkkfm2\%xEݱm 8%ұlr^93@R2BSvF7{ougp_?&,ڂ- mfH ޒjzjXkx2W|B=?( ZKh9Zh:s-P%͈;lJQ|Q o<$H”25}y9 Cٻ<}}оC >umsྒl3yvggh~zdMJ?չ(=mPS͍|3@(3auDvS1p@w$0;,OOHNq(ig&S<]*p-IIxb<s5cn-=2u]hD5 WjER?7h-4̦c'`Ɲ9\.)e1V_ _<-*+F¬I\ ks%?$U9eE?3'H/]sQcW' R[}k S.> q 9ְ길ڋ},S.z`y . ÁYE+'=vǼ6Mhes4f̵Yb5*~zz=*=j~.D1]%7GpRl/{߯VԖK+c=kt#<}צbr׫˟QЈDv^`!8ƒcoec`+n0{"hn#vth3_-" |h"P٬KTƎ~aLlZ_f:jt史aqvasU6Ul¶4T2rBt/.+p{!bu˷/?K VrI<\GlJ\&[ ix^?=9=tDR>]}Zw$5fWg۠9qm "ēw8MN:ygd$JI} 5W+qN3U(dByxiEEH`GB)ft |-#wiLd!97i?y{dB[/*] Хaq !ϙ%T> u&zUv3:a\|w7_L,_?iJN|O]_%͍<['Zƙj( OݛO dɝ 3unU~BoAVjb 'Ўd&;%ET<}"`e8]x{5IbWELR\~%V\`ZZP09[V JI,IT((ON-.KW(,IKUSHI-IS,'mg bx%=@@Kes,l0Jod ;{yGεx}1n0 Ew}tT;" $CEm p"yboIԡI3dSE:[PxT-uE g| L}y"Qzql;W=ڥw8,15jkF[4<5Abϝ"zt=xeSn0<_UHjl)FA` MNz2jPf+QI{I=l>ٙ@\)'\(D3riV)rXeT6oEYeT#5vy4VaΟ ( 1W H )$` ")cHXn/jY^ OJ!|4%!%ks3h78f9^g`??*{@!q2&| m7;p TZP(a ĒJ ?`vn _0OuAiiUf-o!{Cp5 %C NZ>MTXqM-9Df3 >NC8(M+_-[cvo91Rr}\w\6 pw8A6OF=>*XJVﵱG(C8'ny9 ݬл^X U]UlGߑ! ׌!7_3#TxmTQk0~- aa)( ۺmՖm Y,Ivvy}}wsv(Ԝ5ne:N &ZעB+f2 -VZ@IY=5ta_w~0ZQ7).N({.\Giʼfl2xp2MI)8B?@F~T)W-{AeuAKǴ%\_gK/='I*4]YB<_%b8Lam4)mtڊR; `,Q>' ٞ=R䊜jĞ+o'Him@q}H}@J d4M?Dn#iH]% =lGaS8: S1hb,QE߈";:7 =x!gxs-wBOԪ)1lPޝn6{$Oi| O3IQGDx;us$[JjNjIDy5AK<(X!(?wbT$YMI8 j䥌Pf#e*%y3+ˤU**[sqrg*hh'LgJf)@%RT@jSY(3DA @ d'Dj7FCdnjNq*u`a [Q$50&dX-W-WrN~1.!\\\|=Zjyx;ukF5MVjGxRn0<_JbzkmnFYk EtvKRr9X} 1 5|)hajYՍtNcCJ4A*עoTleh_W6cej ]kjti`)3> ͼZYAơ}mYGXW %eSo UC FgzWm5k8 <[Ju J &%^]!h9%x;ɺbANs+n$c KnI(<րXC" ]] <3?HPOFvgqcB2 Ľzu {o.'.+q o6Ex{aߓb'ttGEdGy,F򞾧ip.'xUQ=o0_j{Gr3h2eT `Ć: $ehs G~BŐ?[Ήwh)8=Sl#Z)qod=Gc,'b!yp)W/Y&JuDvC#2=#mmaN/nb2{d)$0S?nnG@sru؟zrFBV2BM]TrM4qz?2(} ш.\E9r&]an×Nϐ;a…yAA )^ޟ&p -.:{Jݲ=KQQxQo0ǟOqjA7xCAuu[K4M!s,i}|1RjXōg LHr u7*TX@`bB.[r(dl`XZ0^߼wi)t6 BZxG)W]Eʲ m 8I&u]A&*UאּIUXdyU퓼 \e._?U$ig*S!z'm{V]߫"<6MKPoMBCgcQ s?5_KeEّy!M/|7 h{E4D W[UNgU0=:Og]65UV[dyx9K'NÝFO?\L&jgzvH<} xrcI-Ν?R{{&CTpLόf4輜xV6++"E͡^MI+D$e?}gIɖ(wgf>YklKxiMb:;h~2[ݭcKkj&ӟ\mUgѻz85 v ϺSxХ46néT;`frq0ysH\E\ZXur{,ܧUads\l%ʔNi_+n]pMdDfm`B= ?e@`]=|2G$w#;pJj<ݛ\ N.&[Xji9pG&b;%b-yj٩ rRl]4Z^60xb*l wo_+PXHoL;y.PR qC*Z 稭aW?K!:v+STEJ=yIBmq-;WN<ۆ=ЙqͳrS snKΖzfrpHstl7)wsq&r::;>O9=|or#ܞY8IDlު2Ͳ*0||WΫy𪶟!=F_A h-qy#@V{9.T+V^΀b|?'8`sJEmR%/&DZ&%\LzyA65;^N08yfJBW9kU0ٚ?Q_r~XϟSvQi %`y(fC?>Jd(7b͚Zi n⚯ɒ x8_7y-(RJ (!foD C0~<1x2:3Nh#UI`F1-cQL`9oaOxCkU$[yr9;9Of?":'j C(kwV *Ұ+w$h1kdrTښjo_pc(v` EZ7x d{oƤHM*bts_y/ɔ@+0'o[ʠeKV+mZ5h Hqa|nKHnjw#iU |53*qDžsvbLrx?5PGHP ץ S}i $4CNiBM=۠d'A ad4H7VjTC j_v2`qt9gaMcK"m:gw(X'ol&ƃ݌+ۑ¤4sf'[RNXah/g i*wq(iנ .l}SNdmU]4&(J?AI6(- )1AƖAF- KY" y9{:5qdYt]&Ohܜﶾ<*#L R`v1k5C_%b!KZHT^)fJVl3u\0 ypd_lƊ;2EEnu++1{1%Δ0yt ׫JJZ՛v\|B{"y!s[=/؍`iʂ5/K˿vZn| Xׯ#'4^f۫H{w0ܪfNx̄k ۉ놽nfr%m?EM}nKB~d:gWnd,2w7z쫌&qb&oAD3,Lu-h< iuE/`|n2F+k.Ƹ:e:#c;B2X )*Ijzޡ!{K ǹ)\5gߋ-o*Dz4+OcjT ] ڟ)2vL 7d8 k=3wzc^*qMSi'fF< b{&瓗ߧ;&B[b[Ҥnu#0ǃD9zwȋ٘Znbmڍp'*㦉[ 7JYK(VmI8|BxҐ;VZ$S,wbLwnFi[%Q la <X:kgDڹٰ]ԅ-sG?,u+-th38\޾(rO7 W^Լ3DCݩ(A[ɵ4.SFu4@.rne ^kOu[V/0zN55fb_^g <1An|Η Fb \ 6i+xiqMbkX~i?xiqJo>8riSxi\w%bcMigxiH{tGi{xiqMk2{(Azixi1Scs;#xi1]csGʌYyrN? KxiLuDN92'嚻 2x3zBxWmo6_q ,,9]n2ti!@~$%TTcߑrT;Ͳ 507{yyNlI9(iei&Tzit>Jc_`ڰ*9C=4+c~^JӼL;DzB-irTԤZgJQ `7FTMg)^9n[':| +wowo(YkI! _֝ Z.}OE P#U{iEB֚+MW&K[ӻp%}XHԙ4Ja65Fρ/<ΗϟZePGJD rIr<#[s)-ԋ;!ӰXNƦ~G/W>MܥBF6R>HWɕV~Bg᝖ס~~aZi.H7v'+&Ząs6u٫VO2}M.I.XS*oP-{Yop*%VGCG$03 S $tPW7 a.˓`b)#o@Xn =^5ۄϢb,w!!q9n&I G Lx(qAk,8Tifpv[gpWmd~,Ms)d58Wb ֡NhtC9nfxؖ3TfIM,ui`^y5;<,Fljୱc”]D3Sr&M6SS9eAz0I]Ėڔ>Ry,A!Y6lMj8(/2mmd7}4u5wC{0+[ɮ;C6D|f⍉65`덌72~<2H 3EDDuo+ϸ );+RbNx-shd{hݶ%]pcylfdpx[ipDwF?7fglͨdNcg˪<(I'EǤLmtR?TFJ͍) T$:rZ|s?7_>3]]|}=dc$ܮi_&8N66m*F $SERMFWw6 @%䊒F"^q*E4 7:֦d|DZ6R1k/Iw?,)8.ܡ:a.ę8iюUZƓhj/5)<\O4CTNQTtF*ՋCIW+G^ݪyyNJժ:l~VVj@wf qtu|`:M3L1}kQZInF#O՗шB麩6ȶFGUݾـVB[SCGPiچQ N@ ZeB xhvh-nsԺ|BL[ތ t~VR뼍9R?4 u`.́0'6פ4]jl zShդa`L)Τt[`٢kaXoC)t뤙|g|Cd*Qd*V> 4s]5xߘp2`,*e>FxxAocĪ [cERֈ1?1tqid*ɩWL "tmL\C;'_ mp,[! o眤HY۔9 ,hUwA8v5ʺ>ȜţcVj9ޅIW+7OEб`5RUW6n7{%^|0vd =<)a&;Ѥ3!kϫ9k}:d_H}5b4Wef:sv[q;Ó`8Ã}p=2Fq }n0x;(sE`eLl\(3Ix;(sE`#Sff1F˘tQ0x7x rutuxKIML/-/-.K)MIM/JM,JAUJuruk).NOKL.(gNx˞=O xKIML/-/-.L+JA,H,JJ,KM¸xKIML/-/-.L̼l"|=-.4mx&y<-ef)9EhCVrC4`Q0ݝOmsYEQU?0RP'Cۖ=N??~aG89RKs)Z`W*fц5/QȊyF6QO,7-vo߾|abc^4i2?w'q&Db& y 866N$F0Hawɺ8%~Dh̓1Nad!~ %<;c;Lvj.-둩`1y?YԆdy4^ؼ'&Y;QFP|e$3B(6BEi9;\00#:[|& wLx;l)࿕|vg |w Qm#quUn6ZCʵPS5YObkc` ;,ZRa+ J)|:$(/Q*z爈3&C)T#G`rvt(tPpT2LT%\V$V,CP,CxN9M﷐>3af>B| N}śFgv^ q<5G>|2ڎY |@Z+HR1 L Nv2ΐ%zn'w,w2[Kʒ/ }u'Nu݇C\B{x^Uh6]9SG<}8[_(gg]JxmUt,XѶV!__XcD7}IǨzz>&X]cqE4ժryxDOn EM`6d\8jA4'Ԟ\zuMz'I Jkg∷`{@@@^O|,貞= lؤ'P']O`&=Mzzz l6=z=z=-z[6 |JO`@6Te E^ NfL.A_Jܠrvp…,8%e#Gv,xIJ^ZP\z1ddKEa2#K -4Asν>_)(amKĖQLi}H)B?g?_%Ⱥ)woz&KReS58+ʆ"N,\A\48-Î xkL)o{ߜHyeW Ȉ# %":\[`Ɠ9omJFOUm]rS5pm$!ꛁ |PBCtͳp=aڟ@"-/F,qh>bڳR[K_Gu48oeTD/jk4!2P.O dG{'`"^p(HNU ʰH/o+xF7Zw>z`DYtM]c uuJ&\p 7p.k H" 890iiR+$|>K?8yx?Rޛat{TQE lzg7W9J_ex Fy̷c2m|"c  ٚwliG'I_I[4L7u1݄4iph^YB4L1c5ҼcMeMÚnھMO$˶X9X9|i7dZ Hvecc9MNO嬀MM7шr%xXouNz˰5l{+[͐a٭=#xN_к]J(X)9euz2MN[mlr'[z$lc{ɢvG8::I=Z8ۦnk;E }2f| i! g!+8\Yߦ&Fv@ b퀂#Ѐ'l(A`2Ս^~7d, 8#U-k> {F$DUE+"Ыdn^<-=%x\ʔ2[ZLd"cǃ=hy{,xb/ţL/c\"9̈́U:o%RSL_bI'fam%g .%SŔ򀟤R zCHڙp!d3]Lc≮g_/1^EFZ4J50F$j9[h4-՟eu~Φ>,8% JDL@ۢxu]18S(\4jz*Lf܄$d -*0-8!)Kn况iP}N;R 7 c t*; )r^/OD/$g'\u^>$*TqMҤbr˛NB-wG&(pxmybCn{6dK! l'x;h1b;fAxKIML/-/-./H,JM/JM,Os ۶xKIML/-/-./H,JM/JM,) xKIML/-/-.OG߲x% @ @~EȤ.". ^okǃ.Hx*MY{s2kk)Ym`ᵹw#ޞ<T+BW>bZ ]7 A-aBxR]o0}][UX!)d"{ئIbpvg{u}9\w֊\ AHJ0HY̩$LɩZ[ƺ0S|%[1LBy3e`…c9אqfϪO - +B\&N4S*F?"ZZҔНbJs3#LTLOsEM5!${և<<\&kα_TKE*n[G5XO޽>lFLhAɔgNIFݢl;DcʒզF3Z Ⱥ:̦܏<[Dap;a/RݮN\7h}8#o> ln0eib> o<$;o;ԁvjU~B`Tv5+p,r_k痝UTE)1P!0ux{Ƕm,)I=TX4x33x+K-*ϳ5())///KL,/-JNKO/OL)M/JM,׈6еԋD+I,K&]xU @ DzaKۃ ZZFt]EU=Mfc 7zJ 'n ZKVUmeƚC c4ھVH̾hi H-#,X{`` xU\n+tcüZ02P}Iq>2X gxTmoHbRcHOUrΧZ Jda=.]⤑U/cp@ЂAI- H1pu'b9;B< a WTSV4eJ3+   dLBGcK6oIРY[ %JVmXSqǕJQř&>yGRQtMc%wGg{t4L2cʡm6׊FڍeqٳG}bzu J#KUkذF|'sy 3vn ַ^i87GU8`:̧_ >BAXo@:8em~ho/t.XӦ{2A\Dy#cjbCl@7%Ol)Ld>G?2>Ϥ)(]?3 ǕnO'Ϳxr rw QUP((JM.+H1 x]oF+Q?UCaQ{kX%$/1ȘkҪ6ea.vX̳3^qG 7EoNswVX}NޞLN5F^tf7Zv'wk>yQv22Fd4:I蒱u36'v011zք{cwcs[{{6o./dt{m}`\;cߛtvKTcO{؟t/+d==y>p=X7oX>zA$N$m bشZDr.'|p~^U&uylȣ&Du%k1/.ڍkfbպaJ?6nk~_(hk,]nx"b(3˓\RtG ./Y~8p.}z*GnxE;N^m6VjV٬θеi&> vux-f_Tu^jUk]0[auԸ9in81ҝt_C cΡy&?pCO^OrlL3fы@kZC:6PTC&PEum&2PFQԿmԿmԿmԿmԿmԿmԿmԿmԿmԿmԿl4GrP~QfT&uylȣ)sE26ϷG fkq~Λ^kXdž< 0UUoC<ы~JX*T?흉ݽx0e ZAl`њ$+r4 HuD8I)@cya1vHSHFA|ʔd ].'_ܛNUh\BDq\ޓ͝ cYI(-E  P_YU&~n/HhLK:Dgȟ-;iYd{'W$pɴ0v!]YibcH˳2b ]H XV_">R0(;iYe8USG>gSB4eՖ-ٙPvY u,OD$**q9BPgmPHE뾴^xm '$E!E/Hz E %^ !E3yE/1HzѼZ b>I/*zA&EOE/$hfq r$h&39I/](zLNҋ{E/Izs_Dқ;µɐ掿p7wf WHzs_X掿&aLқ;š7wu"Io +7^]v#yhOt6(j(CQ Em`(h E(@Q E(B EP2Կ /CP2Կ Bk+ϝyKз[yH[6>bi;q;@03*30 ?[EzCo;3SX`(ʗKiWx-stQ"/ V(!3EEu{ 63% "gQ|S;1PH0+iO鹉bzBɔF%ʷ2\ȇ[?n9DkXdž*ٚ-o9_vE~ WPjE~ UVP_E~ UP~TEnTPԿ>IE 9TPԿ=E SPԿ2`O*]Fzt4;5/[QPJ/.I^ ^U ^ ^N ^ϡ% ^u GAQW((_E _ŢkM/|EHHũwut_ Cyi4;I*kX]ǜ;uƷp{\[Zf8{4T.'M.=4IJ͛Kw9^xO Ѩ? Ӂ~7.B?Or@Wakvb9>}:﯌܆n&WjǛ3[Ùl?ہ=JK 9ԉkU (?)ivcN g+۰88g>?OF1dW+*?42,9=ݮ:rD.mMo6u3tccxiR wu=GwݓUq]Q [zW=F7o^8U9[Ocm%㬱?Is:]߽h&^w"Ӄr ŻLFp^hs1eRTΊI$OwaL n'W#\LY\D^(I PڕO>{_=w{2w`{; I8VD U]\)X'# &"OQe2{*`Sԭ Eg)8^FA?;ҤEyԺ$Hп'3OVGܯ뮰(:\= .4ȿW?fձu}b]ξTciiE3=3  "D~8%%_28ځw̮"kpdU2 2A4'{x:y H~"Wb SSl.1T W"V{ғhYcĩ:%kL]pGĭ9&:M=PAQvӨ09C. gaUi׻)U2ʘLVAPfP`zD62-0$) > f6`\sj0@f[jEUa*Z3[UI(]P=b1ZF"A ׺PS$02Øc?(\y'<1#jcM9n1F"xOvz=d˫L-)L#Frţ}pV˙fPÙFK^ yUjëvi)3}}k{͘{Mƶ{{ ^P^shϽ:5xlǫ6{Z̆{-kq{`ڽl ]tۀI.o?jN< 3G͑?? vSB1fxvm?V:o$a Rw 4)/3׾պA\lVr}O'VP^h1Nj5ΆPN95ofpNF~y7u~X=7'&v{o2cR5Ӧ>:'vM4'<]7na±6?fpbh.ʽObu̾Dn}zNw M!̽GhV/`x[d|hTYۙ7r Di~x[d|hL5%NN$cʕ_XTZ⢠mYK\y)i\\ -&;H&eUcx`2,k.   %+ I =B_-hun N,!w endif _6nxӠAeF>,"6W,a:x=isF_ZLQVmMyʱw95hYД`E)/8S;cׯ_LJzQUzyըqYen8.ʲbSe5DM^iuD*TrQukƂu)^TonԪHeG8GU dq')ֳc?n]=GB%Qb-Z-yLӮ'ŵ 5&H&ʋ.5EvƊvAߔO@ @k}W8؍F 1 ^:WJTT:&V_g vl$::H)tOx9‿jq_EFt£ eV'C@5PUusTVEk: XTQq*׍pG!5NRW ̱w~|oKӽ_F8JO?Bl5|X?|É` wлTve\o2gŕwuekQ:OdV[\BO=(۟v7DثE`b8D?}٫_}|M,#lÂhH/,T,EU; Ht\- Q4gF!4._RxcL@NX& 0 e! 4WqqP!tC4?+uuM|6~Br )AeGޑN8:mtS\Q?fuZֿ]x-j)]D7nѓ#UUtK߼~gu_|v0R!bgiY|4|$h[ƀ9T [_YRC OPK6ͱQf^RKF6TQN~8 Ŕi -.:.Ơ KvX<^W2\hNɚg-s`gs.*E{;( fp]a^raWpsIZ͒aAu Av,6{s@=Y7?5 BA g] *DGuXOb,geHeN޼2˷])rqzz2W"_'Ev c%hN@fU,QdHFÄAU7Fky*f˔f;Q7Kj,Jx$pc7Euh{-:t)zez`po`l5cP}E:X~ˌbA4X? ']܍!CH\xSnħ}LlGHKZވLTIS⿵JYVohSu@YҲǝཀBϲm:>  ,lĞщ='wh1WEsG0:!0 =GsD5 =G9=@xFE+(̍˙ug4oUL~;đ4OjUreJ묁c|*D?GeeB -Xsi]j(TIŒJ]$98UXu:WĀt#yAu]kZp#F׬sP2nsJc*9}ƕH / x4}|^ (P =כs;(`ZgAȘuEև(6ѩf5^WaҠNAi9WQFA ͼ9/rBv ULU qWyZ6mMvCclj[pL 4 'iIdľ@xoim,7fiClVS%j1*3沖3=Y`^XBVZ| k6,v&+G۷0{HwqȐUNsH]iGT*2iH$ZZ(4jDcJK!q6f(Y!,1!oƩ>&GpaE.diyd~b]M9ѭر"+K_ p:Ϗ;4g )H55pYd.֗W0ׁv0e!WQx"'XA]F 2;Eר߭/Ki!| }7S >%;[`ضԡyg'c0dpg݁?==T4w}(A!ggwOĶ15hqvx3o2;XOCoCQv%(QV,Ky7Ght0Eorߨ+8 9X5 S_9誶`GC."6`bA\4bLqcIG/>s@l)3`۵SN-|R7ST 8 ufwqQ-HP2#L &bQ0 \>J#sqܦ"hZc%l Xil=y &-#q̠28GsGYr bg(cV`lxldRwA~Yt2gGxl88e@&yͿ3uv耍uɑolDK\ެm܆Մ;T8()(tl ~Y M/ٜ/ b͠Ged,YЂ8z5 sjf4ݘ:u9Wy%44Bs+0ucAȏCxZL滟hrؾ>$$_4N ^k~4PB)*@B; m1G׸m`Pڲzl Y^?@~1 ̔2g%ɃFS^ϢfEv\3'+*饢aciZs ֐6,#;.l342|ͯsg> {4`k8~F6*ا?>FsEwq tpLSЋut9zT|E1<ۧNHe /ѣN´7pʚmk]O**uqhI 泺UP.t͠O"gD5e 5zߴlmm'sP|FG!SLǯ*)C!G qe.q{P5EX/\Q\XpJ%'AvqA?'5F;FKxB+=í|֘C"SJG@9° #BQ JHL X?उ1!L)Ml')vsW>5[@\93 Vg!2AǘqL>Pg,hZEvgo \!f]DKw5&)3CMqM"]r+EËn&R9ң6 ٌpUK:Z/vwӕ; )TQ]p rf̭$@"zeT҆lR뿯R\/95˞ Is3{pN003 AL!wu|m(Gx4mCSJ-"haJ{xI 5x= 't eTN[ũ+'x~.b/g#o w!њQ/aZOv3G-v2!7y6֊D{ĦK*8S5HǺ)Й`M;܈qtfv|V#-l7 ,aH}` h.@xxCmA0].ǔsa͠#sIujχ}Y$Vc(/&봝$o e hpϔm"/=DvDֆd.:+`u1sڐ].1bgmq!X놯5F<$ 2ǟ0p Lo>I\u6*Щ1Ŧ}#I^X;_o֪:i˝]^ :]*I֏NvrFyzH!EcwdR!361M?n1ji|%k (eHoƞ7Bq|7t)ˋ66jQ5 Է!`4D$ ZM  $nCkHzMS.*~!KxfHQfQT@Hu2^UKߔ|43IG䫥j֗:$%H5gPÞ=7UtF*Il`LLJc5&m_T^ (j]6r b^$Li$%=+ͮok@`oꢨfD 6c?㮐ڡfA点DŒXGOi@gg۹r?}0w<=R=;JyױvhlJ|6 qz|̀ !wOtAXXs^aXk2qz9Gc<)"Kry;+%VjƎږIXoƛ) 1Ӎu| J"&{),&fIyQ}Y(Eh2w%VQbR4]KY La ' H{'%%N$y(y'g'@0#zL^sLUD&Z6>go7ɔ}:CO[f<7,%@]m||s3m -;ݫn`(܄Ze),]x׾Rs'P}̓zSZAPqi"Y<GϠ"֕q !HP*tF}"HS - թCqQ48z:;Yr]TIJ~[sl,/TY[Gt B[e=c$7jqsc33c5^ɿ\{~vkU*R+hFiXp;Ĥ-:tC3crpD1#% ]Ǣ(ATxҊ#D'l |gl MfֹLSm(I=>Uo#zqyb*=c2]~d/25dw7U[U.0gHxԳs! 1,ˊ]$ o!u<`K~˜uuLɼ; 7ټLc%xYo{z \ߟg&KT),8ʭSRTM SZM>9ElcJj=jd^arX+-O,jo]/ҭ{^'mcL.;|;VnKXi+H66Jz3 b\Lkԧ eyZ4n6xJgNiB!񘆲wҩoz63qKﮞ;y\]a+)6&}R-4M?K$m?֟O<kwL{9A-3ppG߲@ j ,1#m4?on֨L5-ffQ) k"2[f )7[UA vHt]|]8N7Y |G_yBl3ZW߷÷)wi|dr>F?VC7f Ѵ5) aoc 0ΊM6}7RG:#SK,K ZqsŚ9k~>痧Ƒ;~Ln?\ co%|uaNPwȰRq&ldj]eQ0ph'0Q,򣛬JF~;2̗?-_^~ R\Vp,DjKNB%;"kԕ_JM{'Q·SMǁ8ϳs'»$_@HUXyus[y=pw9,e m p&:UsEN/RŞ+z܅s૙(Z5Mdnc7h4Q/G(6~#0U66l9^ƏƫlxϹV}t3fV)2?h5v C h$cvnR 6f{[?ܭ}w0 ȗ絃%k]1Eu3+#\HN0 cNLazfVP9}h>MJWi\ib_bXz Z]W5wuiN"[* Ho \L鉦ru "cPjx%NE>&C;]*XJq]7z-æ ރuYB h`եytC&~E ~>T R1۪a{JꙚ)!Zu~laϠa>䖸!R-  ]OTB(x1BTM[[ ̗R 5sy>b&@/4``t/ͿCƬ;ݺ;P>F쌰>|׭` J%-+KfaŬzn(A:pav/r^ĥd.490/@<o&PH%Y6wQo>)= Rf㠰B\:o,xi40!8bE`s̤fv[sa.x&x( t˅ sUzG˗lXUEaZPə+PlaliO\TrfQ͌xV֬%'p\aEWaٚxP\3%wixVGf^m7!e_<Fq*q҃CȪJt!RУ/ xQ|2?|Qz N͆ޑ] pJ@ DjFwy"xwZ\AD9Gmfao=M dvٲo} >Y `1yJl_WZWN) CEtp4 qWP37y=5ZPeZ! 8dӉQHa83ЍG ̝sSAkm_t` NM2Pm|@vNMu);xN0ՠR@h9EM(>ly, PO~rriws_|W9i0Al?xQd'1GaA@sfܿ 9!9SRGUhqI^BRE б?]Ґ5dRq\%~_hy=z1KV5+횛AKJjJԫ|HG5en11 ۴0)ࠂU3HܹsR?'o4xu;0DE:B XAP4tVaّwͧ!WB!Qn4y3:`LjKJ-C0ٴԷe! tou̝Ԙ9'+8Hb (),2gy1b1Y μKޠOlk%rIx{>!ABGR'3/X!,$xbƇFEm3Srs JKRS2JKK2ҋ5SJRSu@d'g+hiZs#sxuJ@EGҖ1 E!N޴ɋLEݹ:r/k3xۤpEu^\f#RΥT27CjY]Eث-?6-{aL[[@ } rNO5?IH@2vu㈜MqA"j<ٰUk+Zq(veP/KCY pZܟw8DYJ\Y 1_^ dx{}c0fZĢ̼|83>/\#3D!<(XӚ,?3E!(55J\A!43'8D#85$5/9UQ)J/ z'b6QH()JL..[ZLu٘G vx{}c0f:F̼̒ĒԢ ,sYړx/gM x;9sD^ 'NAd]F0Uæ0rA Z A‘L˙&192eԟ|Y)3o'f#ԼԼTԼF,.h$?SxϹsfv}-'_g6"<%lr) h#xyc+̼Ԣ̔\ ĢJ SG$i͕WW_ZX).QHH,B,__Ll,JixDZc[fĜĜҼ̲T;/5$X#85$5/9Uд(1xykD\w#.F̼ԼԼ̼b#4/$3?O#* Vi(%x{uk f^ `PPTWP dhZse(@AA~yjQ<e: U)7@U'IĒ pJf1Ps~^^jrI~BNjHQfzȹe)PcR+ R3YTYU\ԞXRZ fA5Tkg+x;5k+ .D=x;ŵcf̼ԂĢĒԼԼT"-b`H5HWRifNʓcXĵ!@Tgŧd&d%UjkM,lix1c2fԼԼTĢxɇP&3kZsj:xϱk0faZ8̼̒ļĜʪTԼԼTMkdZQj*6I,V%&ėddde'N, ВXӡʊKWPC% 8,Ev /24@T-RKiÙ Z ()xn'x;ȵs@̬W`j#^30iOveg..k3G>(ҹ9Q]>K̛tLyz31QyfiYln|nx\)*-ߧ'H[V)fL<˯E-QiQYen:]24M]p:-*mͳ8ͩ*ͬ(K/^}af9UjsY>\~\Nj~Ceޠ;h>/֕iJ;dU]f:+rsUa4U<ˣƶEZT{QbUEd,$\""O2}phwA1tOa/ZVy\ͫ.cwP_uZ+]*̣"bH0iiIpѢ&i4-a^PK<]cX,X>Z+(peD<2m|yI㩥%`S}L0f0#SQ&N&iNA$.IJKbt9G@-scM{q*T#޺4\^a5XGAր JYJu=+0k%]g jg[kZIy!]F.fZsL9/hSᄠgu0 _yuHkK*AǴ$mTi"G|Ofӳm~R: E*l) -y |K~d\vi"lmC~1V1I*Hp霾DߧYHs<>?'DvW27DC(: 1G_ HvA#U( I?`2DQE<( z9wͰPh UJY3@n[[_YvN,, wwwPV#sEA&vAĉң鯞=gtd~%$rbwW*=|9&/?&F ۢwjCFSbgQwSe Ғئ UvfLl< 鹐1ްXQI"pD#bR Ie%b`4JǴb#dB0 OvE|ZCBRAc&,S/{|*m缉'D`7ͻqθf|nck7z߰TSeDٜbzFBb2Lhg~3*앒DU"}+cQQBK 4,=*mRĜym{ߡ&!TY_EhILa3UͿ-[/S!̘U@"!4U\-. HEaR YL4\G&r t-, #򦙭$ Rg"Qi p*c^>KT+ @bȨ2*M 4JCTD9FpZADJ̸#$a"جgV$Q_,FVzHaNHV*/!|8 ,vrUZPXJͳHq-sJ 4 vSH^_LN.kc^0qXEzE> }`Q/o |h&ɪKG%ql]gEX,鴆[,WS* ݉^P *eEJ+:sY3H IJUr6(bWFnsI a0XJ]*bY`񼨀mCb8JjGk[ Ā+ W)$ bKdHxJp,.e]R?@`1L4yy,8xj70{L h 3~[DdǨneT6q_e)Xz0sWQIl}ɫܜh*$-+О_qj(|ųԽuy껗eIӚ3yu2b /nI0:YmjqL8I_2 K@ W$_N:v /BX  xT&v"Ās%#!BYg:& 89sU9o2FfIOsf$4v ŪXU 04 G%CjFtOKj4xJmEXcuƤ͌ [LC:yjy3Gi0d`<ɘH)Hs\?N+][/WN]ϗI s,^(Cȴ ,p*Z.`Ԛ`u: }g ע9fCf ր9H F ̄'wڢTq8`\8Ur\i~'zW p,de)V *$bT0q8J̬3x>L87 ҽź4cz)-PƳw{\.Zh)hISnjĴ+jU! _A 4eg [jK"Wl5'5uW\O² :5XX&\UZV15HbYHd͂,coϦ'ʢhF5+_Wlt\DK+ `J⥰%!SvcSS'|KuA Md=|u0^ !|b)=K9㽽':iwÏ/04mFiV*Zά,/6ŖR4 cyItjAw@:Hq%3 U]H0dS3eJ|_T0yw]p4 tTT=ٱ=1 9R$~@wq4gږ<mbxe _PooΝ%W)w!rU9!N4WHT9#QezXXꫲβ4sE"6'oŤ =Q1<ƹW݆*]aFw>7WX ʴW8ÍE2EE*~% Cl{FbBfm)rŶ QU+neJ[2y-=*V5;"M1٣IT,Z~-$oS|նEB*w3eh %C(<|1!]uRLuۘ o>}${gܤu@e`l5<떽F֌F`oDAQHDAr ^wdFJ*Kv?j- tJ Xc.PiUfyjn:j[eX2ByZ9HXyJ ߯j|iN*'( :HQqǓ^RDV'FE`oh r7 /坡hn& 8Wr˔(Mb́3;R5`,a ^Ub,iYu![䪱I-TZU iiV'alu]`x=9 ~ nTI'ZBhU}xIa'! r֨`ff-mhNE`Y0MP& I4jiIbZ"K0Ao-CyH+B|AL wVyǟ5} Owo=wRdO&ލwZ'W<8[f^G;{:'~N^{m￴~O1K݀y ycT ; {7U=~XOCa^<{+ʚ?:*-ǙHqEb+.vݷy_Gڡ}hd%]ռq(Ic]5P =lT~H#=>`͆ў-}]u^k}vSӎ5\x72D*n{7W!PUhI@#4iDg ĺ:. y_d0gśʠHv'4)_bwb^WSz21';;VGk<ؠbTw?4qQ S҆c:Ꝩ]񆗣G v!5Nm[Vv& >3NM7ӳ>x02TTԈ-}gwNc3&d۸%sO'hZ7$OcUjuk6Ǒ0f&pxk[]N14eFa3@ O41G󢸪j[:VTT#z|@0'6;FL(]xWTlNa\sST>s3x¥2YZVY >gf۱wD6\ah.3vgxl' x `,n'=6xx }A5Iu<>~L;fVo]ipʼ/8 -q`d?k;]gf39eafzMuCexlX`)hVM6)xp0 =ޥ [3Unk ׉X:Zc_'|8QrpLbIe`M|Dv=>{NH<樆2[G?pg_ĄCF?Aq47lt$Z{2k9Du{>?9^&<#!K!8G2sU}ʃJ[ހ}^fxrv Ռ%.E8.8"ιqOdG:!A 1x#ۻNn6]J6۔]:x-acCZs$=GmړRqzBN~lNfz(h92iOWH=GT윴+_zv0=r>x=S % f`槰P5j)`^1c{\X#IxNAp$@RJ856\Vagm[ l-ܱp9aH9ppmFtzoF 4'db~V7,E\~\A⟫o7㋗_פtW}q4?Z·g6Si{u.rXMɁؠi"eaځEi 7+Ah-5^$)T84霶G0ah>Af^F=4 ('st3ᣑć/WuGLɴ8IH;hʑ*j|iY0@B T,/9`ey&pEތI ՓCIBdg"_NKV6  [%O󥚤vw%aiV2TdB$3e sظO Mک}N'X}6aݤQv!}r+!!?0Ycj!SAO;cpT4ՙ3'ЄÜ8fP쳞tKi% XNA@`$B<7#JDB@X!<DCsedgy,@q;LSHl М=G\i≕DZ(f.n!^V>Enj}%9)0kER}Sԅ&,a5u`H "aʃ|$[nknCIwۛ=)HGGo[4%48uŒk.<#пT^=2Qwp1BG(2vE09vꪊGS! gR%yRIf)>KY-[!=a׮Ù$GAX.Э0./]dCॐZ$mo/«md.xe 0a:q 4-7 8T_>Zdo]gq ;, CyGSXA6dk[l۞CzQ'ѤRwC#S8idՒ1$"bj,èr2@˓,뒻\3SF>tEbŮ8IDl|6h@edN)2& sJ2E}E#*._7]]ЌO˦tWːv#^djÕMۤ 6y‘suc^"ZS OKf1b+̷y1ُGawm Gbˌ~RnyB}#q|pꕉ!Ag6qOE=lBk6]4nr e] 4֠qUP.QRL.n2F#p Zw]3&B!ޞV<1Ҵ@A1 wg&$ÒQa9^Vx5ы'X5Gh72qYmPVQVsZSR3 V|H12GH,rwlFN$6&iQԬ9}ṤǑ(Ss<^{neuct% pJ(0Pm fp~oQ+8/^z0ġ{܉jCX2TL' ;aa^|ɲ1^kZ}תUHiƅ8sџ<[QCW:[A -\quFZCL:ӳne6Ԡ݅L/O;Rq[8-[SIY`mqzK`)W<&fzX/xL1SVuաHx.G7hO߷hN7|V*(A@zA6~7Na$j|~0*̞$ 8WBQCWj)+;lН涪hSS}=NT2`882%u6Cg3͋S7K [| :~xlP| JBmd^n3VB<9&0؜SYe=a]qI@GoE&E;[WmE\{kbO=b/Y# h B3nA9jC-yhG:؛B{;0: NYG*U |4 IaGP`usAK|nEY@I?0W%fM9$h K °.|B^~ R\]ωկ f9HVk2 kqmXoY/ 6vGNoIW6[xgBX!f~֬1;hHgA os{7iT}k)ZX$uӖO nˣe2t3bz/ݙaߞN#/kP]eWWo%s'w8Hض% =}Kc.fN잀r#3XDA06ƨa Y MQ͉V9{'›l_+$ްy `2h5i(创mw>\؇;QK\);_{d_n@|':CX@s8FXT{5vIbn/! >mvw<iKk[Ëb̥Mc!})qPHP ٸA۬(kBjoK7y֡I[b<&U"?4ӟMNÓ 4j_9G]f) EIl -6ޠ8-ˉܔ`^Qn<M|Y?g @ A0D4*i ><ʃ}$濳dHp\̹Uʋ3T7D\UbGe%Ȩ8w}ذۖ]=F!`+J#Ĵ%ľWz/ |:pKBTy/һ97XWdqQΕN%朞rHKneJ4d~qײxZC-> lZq9{qcfeZr+'B]|_+yH3'b_p͉ Nc)IJJ&揈>(&78+NfqoONKuGmVYj/˺m65.Ȏqd{Sgif(ܶK*7m-7 G6/ Lp̞ c1{B&ʝ6@SJ'ƨ}hhhnbR4h \\Kc=${ 2?|LзA"[[}k&dۜc|/r7 o@  Kf*5S>C(by4@|`h :=@=4^u2s#ƍ*r 1uʗSu4FLB~8זp:bq\&j&B84/#\f/CAywO6@|\n>,ۻYz;`-qg!#.\Xn؈wር ),klpek9hX aA$LpOkWaHޱ. ̪Y۫(W؇F:Tc0+)8a\% FQ[$=*F X. Ө,=C93~K]ۥ]wVRVqQ2muqS4=\JdܺDr'3({Vv d+e~MA6RQOBn{(kKvYbE) ɜYAyNa^|%v*x bXs}Iq*-q`Xa6il; 552 Z 7xiNQc7x:hkat*¡x6UC^l";)qh Mg|2MU6;+sƁ6q6(P}/ _B+>%E!V9qo01vL|9BoH@m9E|d*rr,]:XmHKa㸞(I{t3ZDGB~qcID|~W]x> 03"$V _1-k$4'Agt cȚM/qqYΥ'6I`ذՍc# bΛ-Đ>i׏Zʅm''p4CۡwxZh8 S /q"hK'_\boC?W8*C46BÖc¨}=Pws4F>C74p 6?nwx0O~{pbBH#Qi9zX5SM.Z; ^La#1W 7fctصMK-L;E:)D=ϖU>JV`MU]~̴>mahYFybGKA7}b響xm9sRsj5~ 4ˡ)s:U@dCk>I2 M*w,n7!r6kqՈL[ehD*kؾAW[sm>\ z:pGw]˽<)rD덚q}r`_S:$!蹯O]LBdJ–>r)q,BeѾ`&<'J];Q5\\kTwR+X[Mm]Q'+p0 Op`e[wmCжOo|̐wx=~xUfG5]PU0D5okqQcwbm+N ^VY0:x8H"بǵ:6ՃwdHhrKz9s׹M$lj!?IfO­=#xZei$lތoY -n8Kb\\!kb:%!NXhKe#T2 ȱM@`s\3'TP& y8L eSqU΍OpK'(zd ` 1=^_b{ɛcϲ"KSH~-L]!N+TAl+bPv&+hx_~H-駉8Z YC?x)] /+9KSwD .`D{ IDV5DI(*gߦzr0Qd/O8YUZ,nzKCڮ'֭7XhhU]˃h&`٠ 4A;:g-mS$lS%b9N9d&=uwEfSiK!CԴ;;"4 'g')Xq|%JՀ-J!Vo-n+Ľ=y|BNAĦQk%c Bb]C#Uz,j[c*)TIR$ąBz3tb0㖉 u]^B Y רaTq8ZJʸ>ۉ]h^}W'VeSELb=6=Xgw$ ~zծw ^U6u#2qӔ~ZaoKtOL'.bv# pN~iO.U\H.\_hH v՝$cn0ML.WO С~{e -gxq{< r%dgt}-Bq^M۪Bcd R# M@dK;R&^m&YPC^lo |A/œe>5' 5whʭ*RyYʽ5OTf+|^\˿7mcR'z|Gpoɇu7 r_ȧ+.CI> = RاD.mH_W靹r'~Kls[ ^ qKڢM64h Z-R菿r-YbK7 gHs>9A.T|ZrW/_~E|JK*9N0j{L *J%vݎ2D3KSb3)#OdiQMr KbƲpCL1bKr-әXLa,)ҽ" .F26mTzj)hnHNmRM Pn&ʩEgxޜisjIͤv4¢7{w\DE^3'!jgʣxǸ}7 46ALincMmY)уrr_X.VR=З1>–qA"A n)]8't?ݐqB,d{W?;{7sT»v`sOd]d; T;ѧ"=vb%jr^̘V2=vB &6m'[+ԗm7ٕL~SAԡ ,YuCIO-Ϟ< =+(SHpתq_5 ܗjtZ?mATOλ$ alϽѝQV8w聇:#s͒àJ X)-=M2gvk(V<0Tݰ}Ys#rQћ5kOv_QA.:ZAow ?VR*=&=-4khcg=SF 7>"HTihXcFϥS*g坫ҬNɼpe$E!p;(B=aT7.wT{bB 1+n&9Op[g`&Kr[,;S?VD x>Cvù^Tx/Ax(B򣘬6ܾ1Ն Eɓ \pmZ1l0)ry0 JLh~@&S!\q\.}@@`/ؔr2Y?d)Vf-&.8R%e̗1 *5D%SP49sOIx|EQ ܤ˂K_  RU&#9z}伇kC])yY{ZvBk t+UפCe+,؊nWzEi߭7U{lܛjm29 \`EpƦM/R`e8V%;982eGn;0U4Q=dQkQt^@[lgwGۧg,Cbkik_> 5% g" plJAHZ j.S<~&{*7 ZHX'"m^ o/M6+gFv0J%yL<#g[h)Cʼ%*6#nOŜ0~A7r ~Nyo:l`ecZ.3ժTC;%P#œ!qDP!rϷt=mVI^t`m,X|G~uSύYs-K;hSvk* ڤh6tV{M52Eu~m3T~ 3$dEͦd&49l̎+ C[eT@SS&lVф%wn.&kIZ[_/_{?i=x{k0faZF0((+/̝l(+W\XPiͥP=y>%9@sEEɩ@VjFP4:Qh)<(> (5Js+.,) ML ņ6f3l&{' 3[ڛ<^YAKG=w'W坜KTS,yd>nd`'&hL6u)|ש|B3Ox}N1c\`bʟUA`X;t4̽ꆍk5/{Ň0Uۜ{}0RSAV,_nƕDHՏZReqag|"p~Vޕjg%z.$eQT8R@.FIy~1N^BW0Atz m.ynm- )W0cm+If|kaL0(OI620hy;ZcVk;Sf @25S'= VO!r ӤT:DtFH̬t BFM}ڭʱtN~!"AMxmSJA%!NL Y.#HFl]d $H.jnj8"&G>IU%{9џ?,{[*)>󣳳sv}mo_3RV8͸] e. CP Zp`rIRwCxxV .L3YǗ(8 "RI.Y*n=iZ6>XM" Q:{a (@~k$އr?L>&ܬŀ5cǣoCx0gppmhH p7d8c^Ioy1B#cׁCSNnAFR <k2aOIJ~-쇱pޠ s^zLԛ$Y: 2.!G"Y.),O"MS:t?xjn[x'/λ ( 9|9ͻyx6qMN4l/%]ExQ{0fa:ưԴ̼T_LjǠ`O_xW7P]C.e$ApYC# 0*LQ̼o-$tK35*'?PSG___\JII-ALI&05T CxQ1!R'3/X!,$xbƇ뙄3S Rsr3R' (L~QAǧWj@thZse ˗塒: y% E@R0#f@5hiı HK xȶY'3D!'=> 1/%>%84/$>'D#85$5/9Uд LIxJ@)W~K୧Z"="$4KM^Ak n0PA|3y?॔qI)&EOCE>vi?<^,'3Er$m<' A`>4HhL)[.᤯.0pW(c1օ2Sm 6 йc ETy jLET;`4tn3 A/s2\㟎o&= Gx[{C%G›d0;~\x[ms6l "Fuu2]l%Ѯ"<^궶X$hr~4\c^<F/O7/7zu8}#xZdU!V4 zЙSeBBVVZjiZE!/+eUחyҢuvy7 iZ'J\tCQ4z>~9?״ !~Pb-Nk}5uqq{E,5B/ qǚ+U9UKDKnǭ14LΈR+-fVuڕL:a8TBhbȤM](‘J&509MȑilBDR3%S+'I)vE }&`3= Y"hsX?_ʴ"X#it8UAr_!e+HHw?]~HDͺRz#B7t+MeOyQg׃nc.! [}5[{SMc4 ۇo-0NJXߴ)d9 qAIMIzsl&UnIgC~O{I1zJ'Nj)8ThymVB6~^}.t22C˶k8 c3yJ޽!הOKOGص{D,-!%xRW?uUREAS[&qL.>Ag0ua`SU:{ m)=|4ѫ<{B(CcDc@ͷth[~r rʁ!|V4?7QiFU .WڤPm jAN1$)UPI ")CqC^"E):Iڐ7"J9Ҟ9#rX*@E4#%$njEt7-I"߭j\rdD;VU^ψ 6դ%|G'q;$?AW;0^ i8E+ /Ɗ!V=xA2FH `,-Eˉ#Sr=n6mtY:35[\M$*Z_HCOY՜ŽNk+rˡ~պavKH06)ޞI]R U-'KvBb6;)"MK(H QHdDײ>tkɺ1*Zbޑ[KnY3o%N}fS`wkYePBV4Q"CBԝSWNڣt90Bb~^QF9U$\u#(9XA)4]Keujݾ|$~g[3k-^0 )M z1alP_v;lvChQ G8 X 0U``t&"ӭJ.?b9ih\ID-k "95>% ˟?_VW7/ º)30=J @'ȼ7>cx%3.,hdiW(mQMS,H̆$>ziˀN_Fі4ľ4e^dKl;1֌gbdEp fmQ3ҿ䕲:}17Œ _i7Ôi/*jc:1۽|}"l]Jm)!R7@ȕW+U swJ9ZX/D^ x `v`|.'[,F=n ǢF!B2B\> >'ĂHz;#dAQy[B`*c?&xW3<|6oğ ݪP%`g(Eu2+ɻ-M0{Tخ5~XiꝶoD吭>xرNjI/oIqv.C!GҖA%\3^', w˶pQJtt #kVCQ6NbztB?%7틊 mwڴ,4P{]ܒg#vzl?+U!dTѭ.<4kgE r>!dQN|l}Bt҂dO5B>I;S9v*D<[C~ѧ> !seplg3*GL6hϭ70 {{y#>oxh9; h<%xbJNjxjtCe¼3 z'=}'ז1<0S+s%rCvVT\s<(ᾑ*>OH^ou^(ydxg>芘>T.]Q>+z`Ӈ}19Q!˛˛d-,k#]=~׽[GpT؍ܭ`&B9I$f6,X#%/CXopLٛK7{|3YRKN%iڢ/U+Q>?-3|rzil?Ʃitܙp_>(W7_9BTC{Ie>c2"ZHH![(HBCpi_\䓐w CR;؂,If1*DoSi:vˬ+`b7O $ w Z˥2 /׶3{D|]#w9q>=|u;ѝk+ik4dIY!FY\Ǣ7x-IJ)QwڍKxј>"%9&m>#Wʹ9^Cq:t.A  ,xkL_a.%N0*L~(';|]ĢJTik..N}-PW432KSPmTfRјsr>> yT=*@ZAAd2 XUxV^I9d%x[21y"NO̼Ҽk{9WnǟWRYP\RT\2VO9?//5$(8dV<9ՋMl^x|%i6 )nxVMs6W[U%I.U4ET$=a p)"&ZV}wIɤ  r6~g6an˃ӻ,7OA9s ɏ: %&mf`)]8|6ϡ˃Ce/`SB, 頔k |*@5:+ɴʵBC|օ wjTH:W ׄS4IVނ|:[2w~S姪T3gGY(kgynRHHNoϬ<{HUNaj#Eq~n]U&:J2Ϥ*Em!PYh/7C Swbb->YiGx{zHIU*mTFƩ4'֋f/@Icl-R\& ܼ}3!\uəOp`̕LO]}M\duyԹ𵎙<8O{k).u) %[1^ 9a_MGm7wߜ74>4&QgZޭ>fܥ0!Oofp ^ՖCyvk ^cLbl̉"0%j fwG+D/t'z_E_ WA%x0vcRwmW ++_W'V8p~W[ƣ=oVt҇.QЧ j@x(6}Df&..Ux 0>8+:4^k1ͅ&n}ٷLKh-ߟo(rL#*dj\9L[! D*i( g2K4)cAy]ze *èxBD0 ~Vx j[ܺ^{fVa>?Sqilx([lC,L!+x(vTtC,9c9'pjn^)8y7W6'rj^Jf3 3x;*&C95/%3 /x}msFgWu)Zv^bZrl9ў",{{.H EH ŋie{t'ttt ~?8dL5̇'`2Q#1[*x9_fz>AfW3#)J"qӯlǼ,}T(yãU^KEGU~gMEYpGQb@ 5ȫ(9n{ɂ GO/2W)@v=A T72 Z ?oytq6h|_(UpPv}]%sPu#r`ѿEhT1_w޼~wiK%>R 2B}mt'!hV ϐ=a߇Pi'x| dR ~7&Ab~6KJRɯxʱ 45< ^|(_5m9hO"`/`X6j8D`~%W%1J0(ԿȏUR'4SZ_| /g~w-[4s 5EH{T[%4k`4QWѧ z8&XH&U SUM>M (߾yRcz*_I 9)NtʫݟY vfn@ #VF .,x f{d} 4XI"ﶵrQ j& h&Mq96HZ4Myv  X6Wd뼈t֖g5x ܼ~=x#迕^<it$Ej^&E]Ah Dʠ5:;I#2 nTj^_>_YTϗ4eދyy6]'1?!!A0U `ez=⎎]Sz4Ȱ bqnoo+2FdC|c' eیBCЩQ)* I r1G`PQz*Rao:v3# p0GWj!H6`f(b?٥1` ]RYʨY5Q֏C)R cM F8)9J#I 2q%Snf1pxNjB&%L'0 ū4g>Fep]mAႅB77&^>{;|u75-BGJa[2Q5L+yʣpm9;/@wܬD:جIZ'7Dj2Wh?w0w+'vfnOqDAw UkHhŒFMQN,:DB]qcY bM+@ݜ:D}F/~mCw]б 8i&퍳 k;i i+ػ67ұ\> N F!^PkDԴvi2>{R\ݵpM-Q:F@![[l96V|ND$us)^7MM^2~Ęt6!m7!j2:qu@i imꍴچFmM-FUfz#$!~ЊۂVp9hFJQuUOKjnu:6XSE%@3mo kd-y';ܗ3bn}=c88d?obΫ*ܕz{쯙clL8 y5,nXUߦ|VMZ'Gi__,RˆUkppVF cF6w!W-3- v>"2^lg%%\oCnE/!sN>)X}Iѥ3 j3/ ]tS@=z@ם S>5j/xk0,S|0n C0z-#ts@$îI ڍ:;+ ),ˮ؋dhE)Wĺ,`@`Sɜ ^G,:7X[[<R& #uNNL*Uc)+ȃ/<)Z.iW?1 WqS^;#E!^̗+ݻClv C"1"VE%k t'#v=b7#K6)+w*Q7B lDhD 3,ypVڢ ykM΃MUZw/S ?+WX}=X yT@a;B Z%Wab14 5.ޝcYF"W0{Cy$WT1ʼ@2O44yʃ#Т\m`ѫ8nHpct*hZFPV$ :zdsWˎW YSʋY=?e192fJ' ]@)DL֋00 G X& i6MM)Bm*M,Ck7修B ۷}5_h-A(]T:4Jc]5Vm7ip hۨvOSkfOaVYPH->㞴TY"+;$ZI[Rl %-)I> mwBlv(KC v·~V'V]ZrXuOQg `4 g,j/OuagUR_xPD`0˳#;%/b#N$xM|!3[@SQPW*ag՞,Z&*RY#<1#<SC-F%7e@䉃IVcnQv5b#0Pzͅh>}z B1aer%VȈe  g$p&/۾Vvi:IL?i1d1Ix29A}V[x[v'3/nˢtGlVSAyRa 3*}cPL:8V-Zzg+mbŮ3ǹfT tDG릪4Y@tS&yKeEԋ5'Pha`fss|M5u|v5Iceb7Uk cMiY͡Z6i^qRNQ\P? u oPzLy4C %̡s7w149TQ쩢1AJNs,CP"Om1<"՘١%2TzA13AWSy3:lNwuDż%4oBϧ?zXM\hہ9 4@u^!^d*MIk:YӢ v믥EMvLFx9VY..7?2HjqtWl^yF0ԅ.o pAewb)Żo`<]A\zvgN) W0E;d *d%g/}Wo$CcE&ш8^yo 䎐bfx҈B !V kOvOg(m2:5Fo7 ˕1&ŵo+3!w؄y5@ ֽpx%iS+Lb]UWeWxw?}OhQBIB$OH'y^Uv(ZӲibId'kAzh 4x<ɦKOO16 zOWW\u#utv4CCxTB㺘*[9ZX#:ʯ"'al g{.ߑe._ v%x2::S-ϣT$ZfhNme^\0ŀBܷL[\1+s` j~>ѐ^n)UΛ2ɰOFқl?f/TL#X""uB<3`;@glǃ^pJ \:ܘanȯ>k3 v5▌n$Mx)=; #tx4$Jk"zwSjقi:sD7~7[f:j3;vc;!Rg_99fަC1_k{67j04E?Ɏ#k~D>e4H=a}b2A ?`3t7R)MHDbn[bY %CUKy؊+m\&Ŀ@)j88GF?~")nڶxlL|3X4Dg3I(3,UNX r~SۓXҁ6|"I1)_lQ8*=$@`U;mcRW$/žbPƍ6r/\a6jgSxѕQ)7_G8Ȋ`(ZnG)X.#8u0%c&و,|~y![\y#ԕ|1JX7=%DE#n[NxCg4`*@7 d+C"oό&Icy.৚=u$x8+N,5؃ Gs:A8%|HjpG稄I<.bx80W<YHb n +X}CծQd* ӨFnk5Q+>鋍>+Šh%kHnZnf#ڮjinIa[I#d`?'HI&J=D書% nm2F-S24A6[c"13^5!&-[K4~V\c7ɺj73@vP/ɱȳF-1$b#{aBbq_}#>Ob#O]n ahqAF­ʲg/PC6nI6Ē6j,vpY w@m! GvߡXev^8fZ<: b3R^əPOĪ/Yu1me4۹J 1攗2c5<QO}5=xiC~&꛰>jAq+<E]Q#J+4z,U s05peWeRzv∴ bJb+L^J;nXV *H z,*>&UR7S^X6V4%,-8uPޜ*OFܙKБD#&dP5Ye^xCâqW6oĮmʼnQ?b*/}Ҍϐb⢋j r7m۬A#hjer- iʆ3DqOT܊;bs#H1+ #rX[oT Ia/LjnoS GHӗgo.N_?~&B}vBvDU66t+_2i;y\] OjoJyv,?4_$nQҸALʕx]>u gK%ꡍ= a"s#4/BNc 9+|NԨSWtk=6 ^>GC,LW"VfF EMO`Ў'lCYIF.p(wQT+g5WX" ;ap/l~$Li@I|,:[kuK(Oa]Xɻaix"̱nG9 b_R?S3({P iJU3Ϣ3%xTb!Aqӷ>a!M>3c`Xuyc@DBX]{b=h-PeqDoHkHH7Lz} 8owҜV,=13MԾ}`IoΪ>YN p<*NŴT;Ұr0adB9aqM_9?-M%җ~2]E(7J*FV:`ap^tPbm 9@dထ uwqXU㵛onܒm&J2p[H/ |m65\%~DTS7 DV1tInQY@OaGj!yԩg^&W.!l)nWةs,#X#XkvtN+0#]$Y1lUFb?W߉;ܹ^)W7|\O5*L[c~$ZmOV:[_ *T*J iCz7k~twjovǵGF={)(cϱ<)@pT_CS%c}No\1/8X\ӑ`2pWtp*3}J0H/qJ R-:8t32Jܩ7V +lS^ ԚOc^.CkKa[h(h r GMJ;֛E.Nu+YEDJԸl)LalݸὉ"@]84q:I띂;Z]%(RSrqڏt$NWHcd`vla܀☂'[inO0hq +{aS@)8h@ro>\$@ T^CoFx=̡w}BMG}iW$+CkdU~n1ټs]'}'.wĒQqMkv3z7b W"w7J#or!K̾[A 8V+(؈UqV;E|Yw8i}J&M l/b!V~ |(44k |,?H|@R JdzL@fqg OT45D_et*6QrmR܏Qi 5 q@5-+Ex+TTu/`]}!]ǡ(IQ`≮Mx5*l%C̗rP/X\L_sXc ~AN@z543SVѭU`*?wđt$Kj$x%}N͊A l :$䫋ȅ:-ty;3<Pu(,KuA]'''T'PZN zlFeocE@1[Nq!S{:1)MS 1MꝌ#Aܟx5Ls&YW"qB7Ӌw?M_W?'U2x\͒,\л;D];8>=]6UFڮ!`jG\ǘt j>/ǚ_& +菧go?=e?c#X.L"^Ѳ.v˞C, )ŗUXi%rFQb2,wءj"`•q/y; Lդ}$[>/%$`X*[&?aUd9Uj,߬#LҮxr;O 2ZU\M^#ʁ`ōZZ([9*wp̧e~JwMxij{ ar?DHy)/j%gQrtN5khstlQvTv3LIx[y;,*;U/AZ3RVkG7JKtŅtӚN:4%'Ӈ)ן1_PUk '~Nm@z/hxZvpd5:U NW]4h7#y0YSj}Zn݌?K?k27a/-DH3BV , 脸cPz%xOBU%99TmcU$ʎwuMř6z!R`5PaZJH+vU3Sl (nm $MPn(հxBe[#@4DKzl.:.bWSL>5QJ?$ y`1<)R<3u%:SuO.Xۆ_"E2"L 5Y:㠨9Y_*X+j)9((hOXSZKR~g| &hO<{2Zd3m Ë0Nlv)r3PaւSDmZu*0"'5{)wMrEm$NP}HiOkrDm)χ6)m-mh m5^$c׈M[?\XL{% IHA=A% E+̡͓#GRװQNlT[\YfEH"l&4{G+mQWvSMLpT}@/Pb+mu-)fZ-˗ky9x%U,ttQxBTIngnuiצ"cԶC 3 /dG, 0QMVE^,LU]3IF7V5-uf>~3) ;j]J*RgNAS'8Є̄H2I ^F/m IQ:OORAkTM"FHf%_?C]Q>'6RvyЍzT2t;X  xɐmo86wQ }64¬Y,(wW|3/=Ez/mo>nDQHR-c!h!/&D4RuEx!h2`u N [be xa*~7hYox ϙ7foǙY_R&g5'BxBv^~BIFba"iy) I: řI9 y%e Z@ O1J(6cdh~“"#9" g#l^Wu*jy' tB] \ή>y _o\j&́ IE\nbx;3 _63ozι@fqɬ›âslOĴ?}9GӊRS SSK4SJ48'n~_~i2w f,8TfeWė$&夂77x+'穗(LV\.̛LBn"x3 ΋7,>iYǃqD^i"E#7;ڼSԛ'*(_85DGaҹL%% y% 9% yɩô'l6,bab3SZ>o('HC^PD$$ȞAP~rbעd[4kue)h%k*)RNˬJQșZ2yu-M&EŔ3 ʩ9ũ3n[( )74M6\ RU=yâ']$8bf%'3/;;`5?PsQ լ/̽<L#xry Y#rm~SzbP 'xriy iʙi)i AS}}%4l l|#]B\]'? c'.`cYDʩy)iJo̺ʵMi{qIbIfp!fR, x[~iY /83J27?O8adf^AiI|qIQf^Bqj^&g5iliE2T8RKJB}|8k'Tl)5/95>%5'$UlP 'Z6..(H9=ap3Ol#(≠ x0E(f⢑,%t*̗=#/FHԄ6s?p~@P.2c -閫ks,}k֚> وK%d{mI2cSػ݇_ي%G@יζ]h9>Wͦ_O)0 I-`8Nҧ3(*e?J_>T}fow<x|W/L x\[o6~vCR>wR;quNB%V&v}yo:<ԅZxF<<<Ǐw..WEz~uKΫԯOCYN߼|c'+5M8MIO +OKMYQW-U/;˪_)qŢ9!쿿uCLݻw?/>g-zrN3DщI>97L aVY0D{̃Eyb~ձ쁄rv's?;E|@O ͞ +I},+2<>cXH?uTA/&JKMkJ?3ׁD|= p\CI XjNVͮ>j;'a?G\keݛl̡ Tps*ddGAqKϨp`D.6iQv;9,s!ǐ`=P.D9r] ?be~&Q&r3$d`*}JrKȉ>(!&?%be&QBTiͱv$cٗuZSC>s6Y \>fA`ځ´fx,U$Rntz\1@'zHY)PoUK?ƤQp’"JFczĂZ(( KEruشG[#FpӉiT)\+vA^@0Y!KU3eWeu}vzL)߳hzp1`:AX nK'NBf[Ӟew܌e &,^RMXPJVLX¤>}:yYH0{+F+=F\:BI&/+I|([Ri`mS"#`9EKcv)<9"SņK cn'g;Z"b13FCzet-ױG:q.9`ۅL7T6~tϬҞyMLCS>1 ;6xH†0/Ǖ01Kiİ5`R- w_3}Y}U\2C.x!N/N/N:(k﫪yb[*@cL$3<[HD{b2$p aR"t?{n 7r, ߙ 7XXB 0~Df(iBvajlNHH둊t*(ׁNQ7[:xNf_&‰}4&%k(UC) 2nC€$}]E|mKp?yY7}E7c))Q{ O!qVe]g;{!3$rY#,+uI$Q`eED5=Uz"Ž}L!!M A=NӎmKֆU-#2h!WHsقW?{g-"Xra]X>#Ąoϙ,]}Fk (!a\g4)6W|Mڰ;lв-)rkf'|[fCJȌviلnKȍ떺?/30^GB=0K:{iF>#&ǖ V~C mٷv!'&8]VD塷̮+sjfwVզ.ո}Ul1x+dU]ЭǑq|Kf;5`-dw=V3v&x1/eu "uK_h6,j|Qϲ:sFn)x -lݑ7fOXx5?ȓ s1͹ٚ;7+ifݘ;tU63$IgP86Jَ&B`/re _(2\Tf1qf!M+1#wc;)uD԰ oaF㭪&daKB6vd6 wEF`Ͻ-z5>뮈8Mp&T x!:)cy h6rs3 Ź? ݰAun#4k9A/=ׇR.$/) C..u<te,@e6(*cYwYѤz>wL켿4r,3G  qCHa13?4) S3W|HjZzvÌ)x #o!i?za U (nA37ԟZγ|0r12# 5Ad6O 1FG O-?^fw2/_AEx{|qA F6"7N"<xio+& lJ|ZEI:@l @C!)3䌎MM{;|X$wJxa_zF <ĵA>|?$\J>""| eQ=u JQR2x} 붔"E5B%ٯ4(<($cYT$( +Q崺EZ K%^)+E5IFӗ./D( c# jZ[*s< 1Ĭ?-!b; aCG}1ΪTn \T(E\H *i]%yFg%bE(iddAh`]i3yAi%qǷYZ0̳(r!D8FREUY4."JB! I4xy_g@~"FݗZmT5hE; 33 Ug=k PG>sE [ Ml^ D%p:  ($R.簱DI1umzHdcdݵ[ZUx~IV4x%Ũ{$*%v k  ^j].T0PvF_ U$R)lül?`B>@xӢNEgo}<ϥ o$ŋ 9db,FD ):`b= v[GLwU\d p O.C9ثdWD 3 XĈ4)"GAEdoD5yk^ >&ڋmXR%m|E> BRߑJas%H%x^_`L*v%a­tC'W2&b'MڨL!a-3W-54^xu{wXAoz g7,2Viykb=jnCE& >õ֘Ũ_Zyl!-c-(;Ra?,Y?rP$3m~?_6٫c, 6Nvrٍˤk¬kilLwrkQDূfMq RapemiMnI&hŪQs6t.0-PN51k ]v687YywYLB9T M{ s\Cb@igtCDFN{ mV{K.W#q6z/rE{!_a7n(Ge&Gme2-#SAC]&Ֆ5<› F9+ }! WlBwc83-00\27k)gu:勡5U)9) W/P'i+ }rO1Mܼ֝Vbr9?hqK8ظ~8'}k3vq0eTlk#|(i ]$ɪ_@.EwѮ_TܱDHbwv9(й\\pw~_Z̍Av>ߴl~ eI &DxN"2R K7#pBSU#0s0|l*$$_i%zjpՁ32rmD_g[:W8Q?ض. ܜJP 7kHLP`0Ƿ<TQRL5'LTQw wsd)-.jHGQ|]Ios8#Opj^Ij^rBqjl@DnE@lpxZsY+`urlI;L\dwh( hSJP>Kkgyv~κg'uږx ~?A?(Oe&n3UE9S:or%Ln""7QȲڑOCg}~.n';'ьH.R&YUn'+$Y0t)rˢS$It/YL-Aβ,+G3 fUZ*eGjZYTŋ), &ر+Mr ?{Xq$SSE=A/iPIk$Y#4lEtkѱ*'UVkr³cTeZa-,`b̓svl5c<ݑ-TWt1Q%D|$>WEoHGCPA߂p~ƚB~ek rZ1wv.*ORɪ*I[ʳN֍̏RA\B_z`oh5o@@iщgC%,(\Ic[8˚Q0]VDjZC9"xȂB,J oZlqyq1 )2&\tڵD&*a}6I3-p:H/A`fvt 6J5Ar9' 6 1}Hcl[=eDJ HL 5G{2+sQqTƶoQl@rXE0F#S8Dīx*)Q!XD2Qߌ|&lk\zlS5M\&Pa":فr9χqu;MVak'59( Kl`4wz]!s9:θI?YX lr.4m$po2vBe@/`4ē8^]~۟onį6'xH@uQy|,9|ǼO2")$JDmʀ3^jF{H }a[j@Xra@q3|혅jD%Gvr ƴ%fbf2Ǜo:eSFhQlRqdC͵j56'HDLF]QTjf$期FX#R9y6s'W%͍[^(m?D:*/~1(ԅh>HDGwMׁƣ2jnЅ2sn==(Qmc!صl`ҜEģ[1/ uᵒzo$J]$ed,GͣԬN ]U|+j0A6&"- յ.")?.)ǧTS>\!~Q]A+d Ѣy9#XiD.zbnLEүil qI⏾PggEPLY]v:L/geUlՐdYj D\^@JQʫ.IfCq + a58!YN/үht!>" Nj]wkSSz9DWp>F8!yzVjUw(qZ.6ˌ]V<>=wǣPPA(z&~x 3ƿf Dzdh@,ؘ]VSM۩ulxN}?V-| Ɛa1`! D UiB nS(i!H\?)r6,u. \ndр" J =ɬ<^muh^ŃRjsbt>Y0|^AG?:k/ńȐo⑋IIVfPiL/'釱 pH"==5H֧ Gu@xAI"^P;th@0`3OMֱh?J#m ܷ@O1_s ~j9KZ٤7Bw#ʾw= {x].RZ.Fʰmmh5_]?WV졄}:A 5b@|f%IQo (7PPZ*?W(vCb#QD M%2t_ErIa(*9ZI$aY^4|HyE[_|u?V⽡E^EvLhvd~x/>ximzy_&dRMyֆ9U א䷢n`x>V|}ήd\iSr''8W} PprdRR۴Ri}FtzHDyUDrZz,˅ .RCAP<7jCݯkvO/kZI6uZ[BBb ]j*R<}Цc쁢WkϯyLZDl+ip+&N.xٰU9ҹ#hj>[1hVhA!L lE(#}1:5fCU֐cKbMŌ'nаW&J7)lm0$I.%}E=[y3ssʻ䎡ypnp^mLP -__%]kʢxG--}y#x TvVvר|pwpu50)ҘUǂ2"[5մ3ۅ2Zyu%*Xs7tx ۠u/[Yt>%hs6ћ9ױABit|fI+z" 8ͧ f.p 2ϽosӡRzJ^B+ZbjhlAE)Z[޽DF{y}iqߑ:3a,#}wHZ$\{j|UoAzF6x-2-u ƾ3@xeOhpl&e_C-+:g]H,kZ$5Z$Ǖw o zxO~66 }nF64s[?yP65a44k0EGlM5$2Q+VԚf}` gPch߳hYϽ"YUmD6ERhcmXnw=Q"Uoz?yyKk!]Zo4HC(UƲ&(1})|_|)U ^* 2C?ޠ )\=J 66LN y0edN9{7.WTa T3@[-LN:; dKC2&ז3M'1ЁWYϑ5:n3<2| bW$.㚸m**6'59J'IfzCގm;x6xU؊wufFw^x=L)aOgs<|Gon'fNSyDHvxx̊nGe`$!29S8a'rKπI€{Nd3mn@Z@A\+(FWZic)60ʌRx8h`3Wϳk= += "z ) M/;039Gx[0%adYLK;rd) f]*ȹyL0 d x}wƱ_f>GM"VZDW@1hZ~O)Yɽ|Hv>yt_>>:|Ӣ _a9/phX[~A%R @`3g N ѡ~}"1=#O@C4 ?ϠD~>aA_3nOxEمq'p\>oDn )5'-,N -"CQm68dՂM'}"V  qe0#Lc^JDx$N.G}9 X k0HA5t]U"R:9Pyx1P^a,doMX0 i ;ƙ P1s3FFH,f=3fhnXh,y{KFcEkz"|\i\`pS)>JzYR`(]8 }D pQLLRgb>Aǁw:r HIj;oGvfp^(:%,Ҝ)V<5R5/e5d&l>rMDR"w[%{0ڝiXXیe4kC)ѹcw@UϱΏ_q-@au1{pGg$OݱfCt֖[zp!Cۯi⏣C[-H&Fy yZPdcuᣐ C|mL}5\Ța:(FA:h`j40c|Ģ+J=;PYrg=o8;y#M[ _ E<ϵd||D W,b-rvhȳVCi('sю侀gcРGCZDjf:^(WNAY$֣aQ>Kq@:ɌOu?2DQ[3l &?N 8yt 7MO+`_9MGFiV25f)tΌ 4cրfqT͢0$2Wi5ݏ!P u[kj+jP K4=:Gze\ՠ7X&)Zàd0ua"[l>\_5QYյ ~4zqgi#ڂ3Op;6;$3ȵhAG[|liw656B&cWlNй~ǫt j5 ޜMOg;aBs%A36Z\Kwi5Y\Kec)B_}49Vy>|=q =ѦE\Ύ۳ᕣ2<5=ܓ@ֲ\ P$U#ſ5kngi쨰L< (U8A52R iy1栁"w :ȩ+6ܮVf˦fˬ`IکҚalQ5p[A E2[WѤfyrE@TF[zSu8!ݔx~0ږ[24!k 6 wsW0[X vfi93t<{7p8_aGzyJݸ{yl"PP8 HzcrU0ribe]ҏR#yE9ckyu!EZtw ;yQ;t=-򂴺&J`SIѷ?ʔo=jYBp瞪M?תAU P@4rH=Hu,%1)yMaA+ZӑAy0&sT- [E:ġh4٨AicGSdǑ@^׍ '>E*] g uG=R%nlznvlqx[l&-P|Cq$ Ah}yhJ_tx@ŇC%ro%߅xyIIRHRe޽ vX/t֠@g"::y² u8߄6T+ ]̞i*AoLطNKoH=MdOd<q1/sإ شqT6X@@,aV‹2$e=00!!Dž-EyCLcw'Ko#ܞ`)2P(o/]*sl;DQ KP֜b->GeaOR~60k1:neBL k%1Wb7RGnҫ%YQf&;c0eҟJfL-4zTV]w mt Dz]h"ޤi> 0!S$]f\IE&@htKq+N"[&ThO( b(rqͲ$ >Q4zR5LC8+!GڹWˆ0klfk%,Yma H4aC N_ʐ ;'ɔtM Zd m ¾e:,ɶuw-2vI; }F{rXB-$` i48}3%2&`5g1QķMP~(U CFsr'V{K@$xٟz+nGF='ڑXIBç ɚ4yDj-c"x^ vj׉tl5& Gq4M Pya7לQouTv$=l^/ݔffnn+(B4Z6Sުh,]K-V"`{᳎'7r?ā'{2(WX,^9&QwtW,E{OGUN NDfԶSiVRnrVfl5hpzHY<&8mHֲį! yW+TTB,2rDu?-=h(*q5KpO$iXzpW[>LjϬ1*s!S_@VT~;Lʋ'AX%UOŜ}v10 K|Z9Oa+@1n {;Db(p#k{) JA(teWS&<}JG$ݮA 1f94ҫwb PGk(Zc53gkˤ x4x&.6!y0vk}':cFz 0Z{"NH5{L!SVVNPD0`:F)1n^&+Ig5\_NJfTZ+ 'ϧ:oloP^VD*owvְrg'@NjErK]V}cIγzίȒjJ%itS =  w}6M!ގB8ٙ(dC8.CV| D"ܠ3\618c7mݙTKȁk!/":m; ђ@ Fnŗw'}bIlIދ, <5A8@[yе,2f$rf|YǷԧdYqQ@>tR!㻘K>=`w&m*syykgVyنKTwsH_"%h.3_GS-NFl0>ೌNœquoV/Pڋm(Ǵ2H\ mG|Ɣr9uVղh.Ͱ-p%"˰E[eNY4M0go.nN*iTRfI`2G_lmL0Ո41]/f!&s8 *gǞ;۷}@O, 3هsXQxAŠS؎۠^M@$R""C PK>s YOL1_ ,>E|T0{?bḘ߮{B!_@xeCF3`Ur T.'k?I5QI}ٚR-So̩:r{bo;.FD4-MT|gLF"C-q $GR}Cä"ܜ4fJ)*۴ml/,)q6GΑH+Njlhld6+WʰVa[YZqqPǦk2 L9,J$E1=) "($Edb{y6t;v7(Zp*u}o3]5gGzPzW2]mtd /iK }DeAlYx2٫7M)pzɮ\$JdT ȯgOź m:XۚIHwb0&FTDuG}N \y{jy Qo$_tYڳfs;@5tENtHʅs)vѩԉ%.t]/F솓1mq~`9*4$t%P4;SX+m ʊ~"jCmDƖsϪu@A*}U5o %N8MJױfߌR୚=>.M!z%kf\oćW("+aRD)+yړP͞u  AoTW8Н(ozLRid[Y8xl@Ҭn(QIERiE̴T B9Q0!!(@T k +8. - >Pw"CiH6/cc5Хlݔ~0թiQ;OЏOߚwμ(joٰ#k{]>A8qL*s@*bCzC]CAsHu>bCްt/ HEj_#뉊ΰ[Cz_Mŷ) pI9hiZB\H]h_ë:ˑ|kvSC_j*ѮD|/3̀,[,#=*u8@?g]eRc*)uK-S A~,2mӾEP"{1{1{{qk,DkDce6Kh|g( U=Dʅ4yj[PNsk1 4k28Ee&X>kT΋W5^BY-Z9햧bϡW*\^NH>#.ȕS$HtrO[4ϙ( Fe+s5pLY-lGhTJPݨXuU |6 S@؇xM[!.[vDT"i)Ie,'l|%_="2: U}YXsZZu/yuw:j9q%SpHms[v ۫R9_< vW0ʋR}b^wC歐Pxl~x;hL sWIYζ\TA't\:U[R=QgMLvZnshk2"F`*vWSo{76` 0V?:e#FT3j'YZ})7t7W" y'`&XLV !+ Qq6*Sh˕g@Ly+{BJjnJWehU'#@ olX&٘=zՓpKnHrJA (ɧjJ-u m\n< 0=U"薛;$nV7XCQh,WNpm?hX`ۆqKn4$ަˑWOcڄ.òM Mw'ْDJ1V yc4seĖ Js1hPy)t3=3yn4b{ӄ$I^!ͶN (vHO]soj9\]7OQ_=_^auDZ=/5@Y$5X:39}DŽ߆rA˽O#hTߧjlg5wXm8ݳ/.Hh+s/Ac[Lf 7n:x;h\Mjn ^V9,Q!ruSĚ{dFQ+;\0[3 J"[8G^|K"9&20_x$h<.} sp'U98SwjwjYV?|kIk*fGHPЗT2]Z:+})22sO9yk:Q@=t5j+=j]x[QƳVbɉZa"V'V\$l[+|;gK*Tm~̫&pUMAը$$ q~[&&P*z`۽ k_`]egṔ=!J$KIp,1e>$Z#ҕd$J*NviDܮ7T-Wt( S:ҟ ίS n*L8MwQYg5>bo K5ɹuH;Jȴ8XKtQy]{Z˟dGKŋ$iPd5'V3PTL*BvX6aR]J`E,8A)==dа>‡5]HvR4(r;cR6mk^9kvD#v,D,FetJTDN⧣ UͿf~H}o]);:ްWRmy{B ~.%y+vYxV0Ga%}meuX*!H("-T(55 ̶\f_bѹ6kMu:]s8^5(z%ZHz|~bI?jf<eh6gk?F VV1@rʀ5x %Bta;KeEOH7P5[zͣRSBڮ,MYq4TL)39W%ۓu 4GKuғ6&E#s\6ǥ="!\K"ThRuyMcYeqݨbCbduBj)P}l0fAFj?tWRxٱD4ŒQM5P(VPߨLX[tm[_Z/ɟ zt7? :Vi[Ɇv=ֵDl"y5F]oLRn-[t[PJxkid R_YOIoYĞ#n&d1.qy! l\,ؚ7|L$%l%GJ n!*.ʚދ ݭӐK>%nvmIV@szy¢ `GF6?M!Ϲ%/6zl0~ezFIlgY7UriX̄y0UX9fP 5鹍@ߥnbV6e5y%*EA"ĽhzEl0F(NMUy4~[h~LMf/t/}16^'ntYai/1*UY&-j>&h{?(/3NN ;ݾ)Nޟϟ碃YrߟwQ=`J4qz,8 !gTxsdU X)?EqP=s+f=x+ix=eN&:h80j/IJLպPNnY=+#]XH=e0C>aj.(_^*SI2IW.&Pڽ;BX¡gD;Bi'dzFjZ#5Oǃk=IAA۪ζt"w1c}\DR2 /CòzJ/VK܁^yO<"F@HtKK㬃/:B%La9V fArˬrt|B,{ndۤRy&Nz~۩bJ!7 kX(1%BϝWT\ *`OOUlr ; fE+w?/RjV. fy}?NsF59F(]^E', '@څht2lg V<dYQFBG/:lѸL| -n-=sk$y_%BZ0BYeive+ؑEO cB^vTasPk4|}eL͓6N;~x<9dx{f@w76Hn j1CZ䎪mf&+G&@ Jf?yDI%)G7U"d>|vt h_7ۯpu\[[Wd\8HƭRJVWߥZj3ƪyD>I بਦR.`9tB?UJ%TqiĔodѽ#IF12&#wsX7чiFW6GXU$ʰc듄U2W>VS#!lfOĶڷ"9#i$Kνca|Klmf>>Ƴ0*07)|-U Amv^Re!/[_OͻyFC(4sStsgڥYP@qg:^o Dr0b,9xKV_^KU uȮ|塺PP1U燉~ N%Hmjjmoa2IP {OUzKKZazKFW y^ـؘ5jO2BT]I(CdT*)\%p8y G39p]j*;RJn/Ib#F6AMjdkc5dJ75" L2mv6â˲ovq .x6\ /L9!@A!47>5'575XP,.)ִ⬝a~rr[5Pd_SKQN-Ԣr+.o:N6smι&D_Yڝa-Ψ`#P%0[jN{Põ䚐 |Ha 3?/&ixf gxy%MI -y{"$z ټh46u[(sL1GY+e_"yYDugqtIR""|L%L"8,q"z}mP!Ԏ@5(Bi`# -f(Y٘A6-kNrsA8pvc\F~ s9BKtLyWw7 V\tvm+!,qi6=cKB?x %ߛœ`+ s3 ՔK?f7 +QwxN"﵈#F4mX(5L[`N+,s춼BA߽T_L)zչ,k&M*`([*]NXsӴ`ZF>>ֆ&'z w`x{t-7>./1a^ВW#4Pˀr9뚳8Ƿ@WԠw Awx;ybСɗ&2Nb+.wr -LK<j:x{yڌ[y.xQn0 )6 v uؚ; IWkG]0DP*j,}qss,b&/#+ΨV-Tamj`RrXv՗k2S |P&)|?x$Lm2lj ,9P.yډJ&"3#[ɣaX"l{&* Z(@G53{Թ3Se3|S\+{7f@lt-'*;қ~{|hEI>\ jgI|ڊRWYEabz@n|ϰc4Ҧ,]uMg 4YD.M SU6)@ x{zy̜܂Ғԉsp%U*%Lva4JJMN,-NU1xXmS7l ŝ4gr!҆BeJ i:7I夃0{wr/~!$li_}vZ1h  P*K__s}w\iښ,KKi2^X&jE^E_5zNmwsNgv΋XUj'BC?|$X/mm\pdc)v݂J{Q6tɎء4pV}6rE{N!pG{?u(5 bBȜBnK-] ,hÃ0:>Ew5$G燇୕LHv lM2/= <0eT\DI '(Sx`= %~Ore\(1\<ʔp @&@;-nYC+C {#p6:8.sIdϮ|1dtj- $3K)a4;e00m\"F%b͑ b\><6 !oUޟ0Jq10FGc]D]&B\?=5zKX^Е]AH6qS.5({Të #45[W+(O -RTLcſŁ,R&^i 㡔P]4MJ (ws]_<^Xa 7%Vh.xZ[Q -`U4 gDN/d _a5z^ b1Ai<4ō$*Ε;@s @FWg6XsI|ydT 8To[RHĸFF{NEo5Is?eM^` c|$$pL4+ގQ(rT]lQpoJ 5jTΪ\&*0F,`]"u;/)ֈR򔋠T5Nٕ +2UV@[TܙyJGp@1e:_OIWYL`~/-7ʓ틓f8pփPS%qYe 6kH.Fj1yPdiVu16BtłrpP[k [֔ tVs K!UUL' Z][|ܙ&3.T0/em!YpJ^S(s~%< +1xn^h!rdOo3|؂OvMǭfo7ye } f,+:u&pEg*S,3H6i1p^gfxhδ-yL6zT5pq@բJb0snx%hC"6ygg  K){d??DV^V[f뻒e /$+fԂj-h鲨5% #zM8RC nՆKV/nHGNiV}1!G* "Sk$Tz=nfed]7M-=ujSN&=6)w 50!ss2Ӂ w8|0N;r8.shW^߻E>J8Ã(z 4!cJ,Isӧk x; ت[~0]l&\-L@H8i[X96:dQxH-w,jU hoPZwJ"Q뀉Dj!& ̗q 1Ga0WrUR֕f$Ƴ ߗ~g)@/jdr-vm[6>u=!{pPu'+mNMJݍqòr'8$v ٘7-bc}c톣v01e&}QP$XxcXʖ8B`)g6 Rmq\z'Ŋ 5þ{yzl}1tAûr%ottfQN)K7 m9ꌠwH0_z/F$ή',)71-|nXֿv&΋#n@`8N-|pZuĞ.;D덜53Žox" 4 ;2е eݽ&4gDkl*^VR=)ʏg<: )~V6/CZ]8 Xm*XmͭH6yD{ 7˗칒/3 btr^E7G9]<|s/V/Qh^3okz*s&|ּRoj4+ :_jPJg6g;)l elTQl-y KvށUifTTsr*OXp^+w70ɖ|6WF_8ۯ@I= /4ٻ{fFi.ؠdY@#nN.dr@a֨5\\/+3]ʤp"Ԯ0 _  ê 7c,F Qv#q' Ii7 SŒwvi|uY[S+i ƍ3nqjOȟr), qEv0p_PS_{-gnHWAX율"SxQZǼ.uWCݥĚK,$^ 41bǭ}N7i3,ś K%vKWª+G;So^(q~B8Y ^-yc0'p^_\wӐ \>2xRMO@WLD f0FDE fjmv*!wgCxμy3޴YI>s68qO`1Q+U. M@ZTyѢHw (CHC(3@@!) i#πRQfff:UDJb]S,J3Zr')DJ X8,3HB!8gr3j%N oo.3xWA1'={<ݻxSm0lB5hQ .[4V4~ɚ4^9k,ksQ;6$ѻTqI[۾$Eq1[(~ji9YG*so’Y (j/)|>_Ғھ/ZTb7w~g xZr}& ,ƍʃQC M&$m+v`.Œ^B,)HY ZG~.oxMԌS{y塟uT@yB4 E-4Sz0r< VQ>WtutMYݪK^F+EVa>ټ:I0;OFdyyN3LG ,^AĠz~T@YI>X cFaRlە~-d~^jqfoןy]BE0K0:hh/I#,_ǶZnQLgZJE60)ZzhOWpK *jx)?WxS{lARL"ENxb[5HH,tXo< #5N*UvD}:|c{>R~-'U̶/~U+xK=KW:;/9:_N.~ggv[;ԏLu *_,}K4ЛyK97ӭK ƈH/ S{ (+&]E_Z؄nV6 ѽ]xQ ;&S3kLk0\ڸڐ3j 1HfXx逽:PF$m0iAjƊN=?~DYf?(d' tzI]Y5DJi@>MºNfڭS]h^sʘM& l:8B9%-#Z0¾50wI>}ؔc!X'Kͻ]}WO<q? ы6r#W2UP"+(d?̨%@S#+_3ZwM1Xv mЇkc=\ZqYFFQN(Y6h1TNaRO5ne]܌/8sD~{YV, dlF$ϖ^(%uÄ۔>P='=οNN.St7n踋PdETVq(1CsEW}:[/*Z5aFW Y;umfK*_.af*MRs`h2A{˺%yloDQ/;')N4+&-罦*mzўϪf힭 >wpULl3ioZVz h83؆`X:gjNL箮OK&%Z^ OrJj@ 4?V{prMj]^zH}NLt27770So]MPLptPj/E<3Cӗ">xC4m $s^h .?M@{R`SXpzI tY.#]Z[N.Hfe`4(a1rnB' \žj][zҖ37\.1FРUgS%7 Rf6TV빉|,]uB>F%W@~D6y'*(/&ieh R7Pr;;jn -"NНDL~p)vskt?dźf+Nkfڋi"T+7VN,ϑ NZ!yfJJ!6Uj: rpS{0Zv  gqb7]n3aܽBڱ6:ٻpX8ֲC3!Y6éY }9IV=K,{ ++7~C¢oaSC-\r:5=pW[ed|UC~hq!+kM^_`wBdA} 7S{o1ӄL%X_ϫϜgX*apŻywrQw͍մ> gܼ{07qUWj,&W$2ݚr,Ѵ>Ҭ/u/7i Bȗբz1m.VQⷪ_ȨD?fW '|y&e|}WBJ>N@g=]M˛})Y& _j yӺ1!9Pd+[7JڭSoۖjd0i56qjd`(vő[~vQYno']XKOz= s MT=v$`y(n.Y*\Ni0\,g%v̷J']w_jF'Vd ]קgs8CSfx;5xC=晌ku8uRlRK R4 sS2JKR6j1Nٓ?Bj k)x)d*(d+(d KMI)ځTDꁕ(hsqrf)h) s i]׮(3/ݚS358jR.u2jHnR$'7j2IUE 9i@sSSs2K&R1ОS$wX؝M x]KAٕiXc쪛t2=D]BHLj : "u)ԱhN]D]M}y7_ҳOvWS)iq[m&ًnPQIxVRd4jay}$f!ށ,(\*8?S4PHDM6=ng\ N8FE ¶ΠEN4 ӲYmW-*{O:' 6&Vl-l~5\ؑ6?),,hY:дpi‰^,.ca-}nc0_˝^xTo0~_q*/рTib6vFs 7\;(NQ}?waЋ\2}2ȕu0Y2Ce0jMi\,ܡ5]"?(Ff`B@Kj3Lo*D[MB̻f8LO,] ]7##pY C0tn^ m1LۻF7oeFu'<x{}k ͊L:̓94x{}CmIeAjJjBqIQirBr~QAiq|3aͅ&_W ֓LɪL:ۙ'2'M^j &i:xua1?_19Y`84H jMB.ߝ;<]\*\ϥ䏤Res:$0)ew^K phtf"`j`_LnE" _)i }'~;i`Icg* TRW=x7 4h3F(Ɂo`K \{4 OS2a֮< ZYwwփx"Υ6JF9q0w6t&vPwԘKP.OPna¿gVpFj2,$2' "xS_ Q̰ ׋ Rt[JWհJ-WJX! ]|@Vr<Wux3:Gx¨Z>/we`N6%2alw߄*Zji/an;piׁfx Evlʝ|8,,"#E%"Hl#gC1an6˨2bɃͪqDkɗ״ɠ Ts_%B~8N} >jas-qh4u4^*Fћ_/j,m8dHG}򗒈 .t_Dk!rK,s\̫,-u08hjb[JX9vׁ.YʄXj 4TSN9ΜI<0y"ll",)p@8]T(FLyފV$()Fy7RةjB P@t@Nzsb DP߾‘9HdQ%Qg{d/̉}oE ]~N~t BAc4i`št;`PHBZe;2DR[+dL|"a tdd"Ǿ)55FH_<'=CqLRWpmP}"f`AnЦ?zL$żwSMy Hr h /䋈No,˼'y2.`#?23@:<@9q⾢H޺@0tKxF c&$u# -Гw\>0g zt5U$pb8`l(4/%z%hn4/z?+ʈ5#D4'i593(7Y$H%ppH c8*$Ƈe:Z~w S;.h0M'Dz(zN&U[jb:-u E/h4wh&abqU:7 әD=-v`A{P`3Koe_[FeLjv b \Տz|ܾL@~ (\SSE:0^+D=n`Xp*ӹdg65yW)| ݈ SY Gj8C'@/%:ybY[Y[y_1˙UI:ƝkvlcEh665zϞ>5w;kYx dPq '9G8jkt^Fvxz ;=0[y:Y-@ mJ~؀%7 fzd|&Bףi?W&>a\kEtV~حy|lU1 |d湐Cf{!0 8p|A]廷JYكfzAo^C J)-O)7j0MF=Ñ϶#Y^)ɝ 0Nwهlv $h>ȕU0s UTa ao틿oŹ.eC16螥ݱ0'ޤDM3!k$y85l}bW!W6*q ߄!j7R8\FREy)ǝ䵣}PpYGId]-2<\^L榝;hF % ٚe)-Pг)Y4lkY4qZD!*xJ0+d2HiXM6a3A;t]ddB4<+WY qp o/No^4T8/ʣ"!2PVjZ$A<29?)7Y0MPD NT|Ȇ=b^ E!o*_@]gc-;F<(2#o%-ÜL@R0?7"J҈tM5[dLGkS& :Gj)Ztty:ͨC "hp>ps'`&ʜ#Gy,t.WJr6(1~.HDEQoEGc~==q$v(|:|41 &-@y$d+oҹS>fl4M{G,bK4*O#n"kΩ $IOY WCBdLhJ+QUI AG]n#B'j8*P1E3 1[Ghb3`*Hh}^6WpwD%>J:@?Ǐ⬯-(܇j-tTA!p&vo& Z0A#hV>v_MIlOE0R`k3IRG*Ubw瓁O4C҆ W{In(>,F܅;dCRźAo>r`8 9uP-Ru JIrh{=5M5b_c &1VJR.Z;erMH"/;0ŌG>/[H׃31 39iZ#2*¾֥w/jsE?t |_6^!Ws '̙$ |gVWC0Ԗ3y57`wj(Vͪ"?PIkJP6iqb-Wn յyd%FLNmWTI7+=x64Mba<=jm)IP];FB(hnp V "*ܕ8tۥK]eT4iݪG7-ǒ[۞ou |myEwWlWHݡ<ў Pu V͹˵o접صRپCi23fn}"yea6OAf7[KՕp/Y|Jmwۙ0 j`ֳW,gs0!gZWJ{1^[׋.g/`,-e3m:M(Kԝ\QKlӹd*K9d҄̍׍ 0ˢrʞ}L*Lwb4]!R'/O\1ڛB偩a^߀Ν!lu#} >q !}ZR!k6{^%8MEhc dʁmeKBcȤM8c/Lz,hH es//;UWK\ K)9Uxhh" 3ݛƍJ2!m j.a=Mkң d=*gAbVO&&BQb(NEtٺRTFyJMˎ8t-5A$ФCPxN2E؉4~kYS1v% x"!snd*x݅n[*7]|AD,G7׽VW#tE؈!祏5y2?Ur%c$BPH*!eOTRgR6h]ͷa+zh>X^]u/s =(,Xsi;g~ cEoBs;nG1kbpw<\ &m.e6W.Z+V hDjk{)rANYg] v` oh9i+l}xBxFxFJP.\&E@]X2PobSM 35kL8Ve||'ގmpd^ye^SQQmr^BAƓ#E[z$>${XAϯ.޽~W(OU}6"z5?R9 )WptQ9 &A\20Ȕ#aE@UriYe;?{~=bca))ˇfr"Hos&1\fV^.Ji,wKIkȔW6tA3Vmwӎ^=(U@a ߅U(GT^ nZ K@ںR-1k,BFңv$0 z+djO2?#KMt AKGϹ~I| G#u#=~pn5J$ Ӱ/UzeԪol>9f8Lm夬T&twr׻s:MkYI`5CQ ݾl~kMmkܫ]fރX &Zۘ>+{ٖT8ߺuʶG]rɼ{aM~n>/7ۄI6;BF3*Kh?l*o` ޕ/9 h46}Pw4(_UAXo Yc-*_v&Eo-kxOZ>txmSOLPOca0@1cckI7 ABpXj)oI _D4QL^<xݓ'=׮l{giϰ0ioU0qs*64ضMh8)X0 3&霷N2CYp ,Or OD|${^8@^@TP,3u`dG Ecو!'5%6[bh \UVi ac Z[UnK61O x=$_q\ Z}T7şg u2x=̛O31NRleʤm8'Z2J4&?Ђ0<ܭRr2KJJlUsrR68Y՘SZ\[[Sark0\rWCW9&e#~0N?|cBA % yIE i E)Ŝ(d[5NS(N+ѵIK/PU04T䜜/, 2Tarp43PaV&f @аZԜT X`[RK򋴴4*sr5&o1AB6\ړCE6wnctL/Rȴ5*®@h!X2:3ZDV/ȲTW_@,?3E24&KLVWRX 8yɳ%/N>(2p|)4!FCcrf9nF Cda7wYM Ri̶K_ :ZxTMo0 W] izPlҝ Yc50$*(9ْv"AE'tԪ~WܼWp l a^+G;`08@8_|Nth ]F {Tu5sv;a0B"!%MlXt<ӷ wJgoG!/7Dg7]6hGm+,@ I8ڂQ 8SsMy;G6P~b=$'BrOxM{lr #{ FABP"8> ԔD ܚմxXnb",˖Ы2&uj޿ZRz8u"po{:z>6WwavvGVG/Q2Hz&8~Ve<1xa7^l_uEviȥۮh i& r/2/*yFƠ4b(}&ei#XW[H2A}Z܄^pu{w$Q!k&$i`^.Ǎ]Z/)xϞn d:=]v)SLBG{:2΋t!ȥHMVQig,DܗipDj}^{ywLmwZ|8@3`_nn (:48He(;`ՈH}e78~Y(8 UQyX,TU젒*W ZhaD>uER+w,q)AzH^Ќ(PA s.Wf\i9:c.5L `}({&WmMa AK˼΅!$CڄIgYb=#Er6X}cT9!"jɂ HTOq0,|)*G #u~T~ 9:({{=8yu2u5(ssruJ>A+hU(ؖ%LÔȵD۵<ڐ +Ҳ2I{]Pk>܋p7P( xi1Δ:ـd ~J<FVVKo^_Rt%c-Ibt3$ȍduv7VK,1y`ڌl.Yvyyq-sXCb3YҜ!.ZW]N0wfyH ɺ=l]aק}lb=zRȨJ=m%S[bT?X/I.m<] \7n3*s bsK-limDHRS.c4q\GN4G"rTk+Q“ ViD9'^llo#˸~j߀}jTK^8j5.|g0#e[=H T2 qݕ@s[w*lngLjq6uAQh-p/i_BFWv<=~"BBV0w P G+#QD^R?x6NھuSvziYR!WM`XGbP )0e, ,2gon+\p۾h)C/L]8߰;X _ d>>z.6E>/%[ vhy7IrFiƚ أ#b\>K A%/bahEpTW9S9)t_֧M}}r`i0hV3BLj-xnnZJvܥ(PII"[(6IA5Jf/DU-BD.5E 'ED+I|:euo:ޗႤ%d H#V)2laB*.0YnC׋/vJ7;f Pb5&]WZ@?| j2oڴٷ*PܽL x䋳rR6]uwG<~~trw׹Y,~> RPpu >]\voxbhAk2wKNf^e$mK2334Ru !<$58k83 +jdhNe O+xWmOGl~;C&%AZknO{\iޙ=NPZ ݙy噙^{}{}x{ ݸ? p aYZ񶎳 ؖ#4w2N[m}t n!!S-̍saƪb:`Rfi'MnUo+S,ОRmTgO.>@2gqV%~P-ȴN]-E"ĝPpp|WvH&<-\m]F2][HXDYgԬrJYY=L,d6-+C6[WrTł 7SKu(ߓmeYtNXf(,`2 GZJU xYGXSF- 4RP՝,rLF *,b9jSx3ph]hqufz#JycҎul[ǫ3kB!girrNN9&!ٍ3 RMYӤ{XKᘇMs6 J&EZ@$=h8i> B$ ӀDbmʒ K֩CJ`!v\iFi %GXnSE" Y26w$fpb&pV@ՕϲL(;gAR1,Wh,ѷt8,Nr tt/4c ȈAj1$34ˊtknt}uU5v?"sC|b݃~Rkn \_M/bz~rqz3lB{1y9\ǒK-S)FLݸbqٲ0 Id1w {jui&(]LpO4Eǚĺ* HKaGGT4 +#Mr 䴡nPFV`:t{=W.7?V@9AO{ڸ0ic'|Hcn'X ⍌ 7DŽ熄go/LS3z?0C=-d'ѭ/ϊM5G @a 21=H`*f)bt^|xJw8F>|  2?C'Gdk&~()Oj _]blxd.  bY *Md oN~t"zRc[cK;f@[[OѢ8oc-H |FB z6 Dll,C*gYb'Kx'Qg+(?Guv;_L%uHs x/OK"3x@~%flIUEr3(L>!Ys;;o cxPn%fvcj[7gxVQo"7~fŔS# W]HQRk%B;˺+ A@ )*|vۇzQ \1ļ?zOu@ ciӡ\pEFLXqXgRBeE3ռXAgr)_03(+ :,@XOMaס5Ytir*l.χCȄDqY A.:s fKˤLH6@ ww"ln^T Uׯ+I us1)Bf$Ra BzĨ2e*35Wa;5wm¯:tTV6?p=Y|.:OwMRL U ?fY܎Oócr, He[h6I2QzhJqNmxP_o`2IK["S)񡤢mixEQpkPb݃6r*" Aw xN ׁ9H*^ m+5e1IO@h8^sAԘ?w PbE A_Lw'>m EhԊA0 e;Z6\hlNݹ@A=8 @|XJT3[JrBOA m/>k0?#'R?FQDI%q_M֛5>)^-״J&ɷ93 pC8ϷG $EG$YlO?m"wf{~w_F_yo/?@SI~K40퀞Z-aP)1d<m# SCm{jՔ]]&pAi$Ln8ߥ {(M[{ =ɋ4U}-ME?&&Rjߎ/ Tާzdԇo l@x(+us.RxTQkH~~\:r[Pr.L8hYuW+J{gVRR(GN $|3}3Z/Z'%\Ty`.%zc5"7T\=ֵG2+NpP %h9QUJ?XFK1@VPѼ{pL3iE&@Y)i)g5J eefOrXv5Jzϭ5tqf{RZ!1S 9h'֧|#CC'ې٘└2ʩeƯFرI+v@kƎphQX'yc~~'%U"<#l}a7<6_` dmvꙇ䁷CbgDI[P^S۔D JjtE! `f659ܰ+/bDE^h?InڭlAl0{Vd~< rTw{$¾czryvw%ia9:b1hPdFfQDc`>~I{D_:cw;~ݰ;gLLJͿ~txftуn%N'N3~jh鞚L]R>Mm7q~Nt)W1G#,  G%QXjxݸ1%x>g3L~¡/#5G \]!}=Q6ygàmnѺaC3i4;,qe&9uH9*$&.ibn)!PʈF|Ўb.,Yj^5xn#P7neз#Cb Ll4AG{T㾣 `G_[8 OU-Û(,gqcEЌf,4ӅfL ۴F{ҒqL'8]ՁĚz-0/І6 иasl5,q3586AlmLۄm%lm"،'[n ěޭ 65狐 bXUz 4|@tQȋ/3lRB\4 ŊUWHA )!(YXvM_nmfB V z`}ԁ _oxigkP,)5ITzU\hޖ k^%2-гy̆ˤjqG]T=^47{zo CH|V[6c+&o^x"fpHt][5Ac„β(iy; c]vxOT%uB>uKBeD @]'Ե=^p@Ńl Qr` о5߀ C))97ߞdV<,,cH%U<&#P70Yd^΄R])X̬%#[T[[@_:s ~X%B UЅ(!{W虺*2?ڂpȶ7.X-^ʂ؉/"0U虼Q ?Ӝ1K6\ |ާXD'o>Y+2k ڣ%m5\dWV1"Q-n6(ڤx B"h?g(%:\!~dRo/ 2XWXAش.qvDik)(p5t\JL31 yEqSn7Ʈ+˻EBqLҴ/UZn!TY ρ( B ]+MD ^#%YYEgEERM˯}>W }q'0ISƎ(׌h˫1x7f)5G lT0$6V~R t$|lzYh'3RCO=ذւKBU}V%p"H!W(8!Zj2 FUd;JU3B3΢MR2EF*p~]iя*4Ov,xu⥆Tr 8GFT}+o(bg Λ9%(y_hO25I>77meZ7ʅlӢ'5saRKk O(djxLknBp4e>~3Ce,ܚ]bCoz9q|;Qvhe1/3\%n/^Oh;K#lۃ h";:/ˋ=+7!n/ T@6K*Mxۙ[n !GPZF)KiG윖:'W@wd3!uD3v{s޽!^RV<^x ůz,Q]z"+3Tr sh E]0Mw(@ ? ,Ti4K@-aU 32SQ'Z!\!Y_1Gynjiru5#I":_ gAҲI?)r)$wؕlUYVUzUF$?zYtZ@,?+O_FR*xeNIMT\iv5YGi NI!CňK&۰~_:o ~2mnM q|'ϐD+8 gh#QnU^o-:oR>@5y #q=1LdOO>m *UWNԸ)GT9Щ۷&ڈ{%׏(l4 5a#[ @[OUhp3\&x yeO.1H5xm z=u!!UzHǝbG&}|eI#[ ?wԊBQj`)N_BdG^ t&ԉtRP+G+?d?Y.&rAl9[zF jI&W$x(Yc@gW=}nЪb>E3E5Z 骮骮i#tYԣԖ Y>c ]]XwuʨPƪ*za~eT=Utצe%'+ҸS~VrN\}3> FYy +9*]ƀR'XK:yTh#@NgSu4RbvU4J?ەwǧ'aocm" sL'%]Q(͍|Ķ?+mN_z W-F![Bh0ԺSA9;-Rr [<\=ifs| 4U9eXaX\;4Xjm<2RePĭHB Bx[9Ï{gT$h 6{A^z_$ٮSa4r>ER VS⭽BdBegCL\$n9CU#wX u"xf5R+u2o`ɫQ_]N}~Os}?1 7kHYlomS65EƠDRM /ە[w},Wk$^h^p xJJgT+}u9xms =jk PKO#4ڵ .[CzLZxG]$X/hͩTbѹlsRFĴi iU{ۖrSTp}Kog9GT`60|{_tڌ^wP ]|.-}̅Xˈj n_qLY{YsiyRFAy`xN^ 7Nw.Z-~ N?MrӔΓoy%v2bFSqSw.]p3WK`.5RӀPԷH펱3;A? )ӛ2hWxպ@jx" Dr|n/ݽNㇸit$779:K RnkwH:Ch&ek(bcI˘B{7nЭ^ẪXft$r-5:ݥ?9rXdGgx'a%{@cuW6"ϣ`#WJV*D;u7hk^6e\o[ӎ{vאݐ5}m`-xxqfU^>Ft&|1<ũ%: EU7dIǗ$&gV**LOǔ+/J)UH)NUTeRYk@F`=PPT\P]Jz' D '$j`bAbfQ|FbqV[t&*l-LR )9~̼b; &+A&ᓝ,b%0y5Vxlv1xeRkA&aFB(wCE;fBYWD07ō@w+oZ9osIO\܎mذꌡ:!UY4t>[{p`"i#jƩ0ŮT ۂ}43v3XfhnAU_0+|lEVǻZ\OfelĨE_R G qw㦓2mILhB'd̻y{® $Ljw/+"6-=yԹ)YMo7 k3L9|4Z:xxmRMhQfPkۢ1&i2A6"DҤT(D+![=Ta) OzIĂ<ѳI7Jv͛off~ns[[ܛ'B:kJVW5^)|HC#`;.+\ ؜Xs@3 &sET.'XbPB)%XOCҸek1 e|[ juUMXוFtJѷ^q!m=i hÐ3PpZ\/7EqODMŨ$<ƪ3 4 `$j2Dl-H=jA`X?^ӫ~h6FuĎΧj(Cv씧pYk E|$|[߅*ϘܰnW^% fT6ebk(z|Idr ˛oizMt"JI~|d?ITͳe"{Κ+{լ0? ozMQkA,-mxa8_ٛ$d]o CV #P1nnɭ`7b=˗=lj쾋xYmo, ^6,'~,AR$AqE@v)/ܥJrR73jعhXp^|۽7cQ_+g/PZ ;" ~x`of#?R$+̝H^o~ s`Jprl=lN@4%e}tkY$1(>aP(BJl-ΧxQ@ pDfDq觰xtr1X$/,ao2=, 'r"X ~X2<=ӉvE^EaL 1V9\V>^naT,>{W__}Z0gMgBf &8tō, H'GY# $Pq)#<)/@{Pq {^D(u( ˋ 2'(أUϽbC&{(-Lm{o[B7KЂ}Ђ+b" zOΖvOF.Y=ϻPV\1aM"tq/sˠ.)-[U51APke\hHnSc~hTpO^8M~&Ki]:]t|I-|A"V$~ގ`߱Xjn]0}5iZ)Afu^lk&z ٬IZgpl[pаrz,s@yeR1?O( Cq`oAq6l/00?-H8CSς!a֫ +o#TEdIpDQo PJo0 Ʒe@ߐ"ģ#q='vFF~ #BHE*!#FPJBymy.VD D%R(=9P|=n(N&6jWxZ K(p߻0z{oHoIaeubF/L زƐm'Th]Vp]@WNmT{ЁTCtLn56jP ;j[~~Է|ˇ\k]6 E~PuOR( l5d018q,0G uKs#p7"`ae9{p l97ħHR'Qa.$7!]zn;8cl;5)[ $"I1Ύ/|ąHaKD^ cFUM#.A"5BGKGQ̂ApcEX^3 ...%%Cg1 +G!~fo⫭қU`[v1C0$i!b d­SG'4mZf 1MGRT|f;N'! Z'ְu|y|?mL`l`lПi=wzF78%`^O"y)$A%T}]FBU2j},IMCSe.7҂X=T@uV2\M rp,x[PeF2 Q!M]4I+p`.,䂿 8jH Kڈ$BXJ2PZY_T{my`Rt8QʨzՄeS Ur57o;|ϰ~w1z33h͠?upn qXЕI8=Jm::*|F?]V, 5CΤUx,ޔdm}X3m# %y¾͑ݭP:潯a _2vBROjɌmg}F]A cTszс548K#`3}+xh ]~t!rTL\iavʵc{ioY9XZLq[U@YsEvGPq0H*8k5]>ofҘL>}k*-ܾ~{{'5X(T:f>-:ҴOR(ui\uO(Yx ;{24 R2 2Y{r>{aop!)xj*<,aV Ӹ\t.ڻ?ГhȠHFrZ(je|_]EhB:N lD(>Z9^qV㋩lv%s!; r!v6vBJz4ȹ ^M'nK2*=.ڱW THɯw妎#uUI qɛi%udHq+.Bq>&*=)E0ܣyLvH05sC7~S(.>Ah@=GF3x[5ɚ6l" 7hi[c =9 \txD8&qZRB%d8M( |sC "@.2 @_"Hk'9̻޳.>["+mk剺RfpL^P Ů_rê`n9iIZ||dbt+RW;)tLp}9`b#ly]ŀX}}}|zYNSz]ESZ|'#MbvذvQ%jNz;#Pu CBVݠ .bL&mHeC4VQĕvTT]i-]GJSx(Ծ9KA`*XYX+>_[35I QjPS!5 }>!yEQ%uF(pPm-gu /i%תsU@{Ѵqᛳd0/|g ^P..o_xN{n#׎;mI!4,TА(>CdM1 &@@CpFBWR1[\,"XdX+gǐJ9$`Īëb^'tʷRU Lۨ=P[7qE'lc޵Q#j!Vl%z L_V~)K"#-t L:7JˑF\t16γ}KօkRkP^%qm#̭h $i(J{;$NnZr~ͫ훫KGXo^wGZA)j9l/D_F(ރî`#C*ƈJ-ǣƄmw EI楴 A-- B~PqRMvݾ Y ?|Joڋ)l}x{uO8E,4xKDx}MN1 90-w@+ɛĉL=bl|vs^+MY-'(~s *h B* -e^y;;$7µA<TX95%U[;BGQv;NԁF#[/'RTr@,?* q|P~d}}G<]G1~w~}PQ{^xk`n`ȔX:Y+%_aDd8xYms_CH4%iHv:DOdGzL<$É8p7H*Lb WG˕"NO'B$d$Fx,J؜ќIV b?#?3pwSA%IdMH$I:xB\/9]JE!K"R.1X Хd@S-HxD,ԆJjU/`5 ϝQؒ2QGտ\QIJxr*RҧkG>Ah8A ?M'FGX~3n qvyws3#fw [~=aI@cXy3Nl">VO?NU5m:V#wV_~qHO' \K^JG.h_i钖J+J?CVWW G''ŷ6ugQԫt:K681K2 RȎ#d٭ZIѺnH5 UDb*'h5V"H'-l4<\L%k.Q:A]~(<@Yp;@r2 {l'ymӲE`Z5 o3Bm%S&i#2}5(sBѨ{s7g8K .8rRyc^v唷ڳaLcMìY+ V+ PT;U!n aR%ٜxUqӱE9 ;VV~xx|_74ܘ 2MÏW@KF_6 ^2=ks,QDYT3 >yO C c'L]kF:C>蔣w4pezyTrV'uà unGKsu:]ҿ=y]6%W"}$<:0 <.WZD˽O#WY~6}zN\9y:ZɌRny4Iȸ#wjHԀĜu=o7h[KVVϼv<}ݪp59FЪ|msG2 \IEQk6,Yi%7Mvrb:r_gƐ]QoAN KyKK/;/^ >6)]}9cYzMy)2Rkp}m\x)^ʕ2R>ꌭ+XtwLG/5xTn@='RaP -* aw,]Z ̬Ǎ[|3ͼ7Y^[Φ 8׀6EZ;xYQ/:IL<阵dyR6A,׃s_腔z}[ӂ^ܸlc 2oST//zc`-p}t} K0V Yֈ#Od3"Sjj5>4%*q`RYRJ4D˘1AG"I7NI1?d{ D+Cd\~G?v]wXnݺN4{B `g}˗Xh,_ˁķC{wFMI`Ek1^÷n.8 k;͏nd=7nH~'._5s~ VA)O5TPՐ* tIo.OںQZ;+Jzɰ$WYԿlAƲ <Βa慩ko6uMA8j),.Z+rpe-C332Đ{,̲_{>PWX6qVI*zOA,\\&q.m4<s9Əè`l;yɺIٟvĸ^тV=wqe{Ɔm0"=q0tw ''O ?`۲Z!"̏. ㋍I?:[$"f~)^(6&9ذ󁄡 uv=/NJcZvIM?]< .^Ŭ˱Iae!&،X oʺb!qKlF$è3"|i*h F-(+dmΫ>CE@w 2:T<@p75z|Lĺ;P-WUJk+J^hʭ@f"^lvB ν:upubE9Cw(k+@fSg0t:{}tcSC$l"ڟܹ햇5r+9-P:XA~0Ui $DƲ4;6+N;ihf`.C,.dR-E%9Aut^Vq=_P9-rPdR}:0ar8/jI"P$, u1 G>ayHs4b5ukxXEF bYRWe2݂9,dž[0eFjE1SB6``j\e `5@M¤cqAhB#: ¹Z-Jo ^QUW`4 I6K5R! rSa {7A\˝mxVX^,iB|BQ$$z\oQ ΍>YV xn^'^ڃ2>/qtx09\i^lOՖᇃmxnwA1C%>[dhYaݛ0GDP#Q>Z H.ÓhQ.`EעiM`W)(XFɞȕ!+17:ykLa`c͸j`wX~ck4[r&:eٺ\iM,KFsaVn7Zo QtѰU$L&Š+uF!$$skRZa׀t#KBX40e)$(`U P킒$^U}VK J1C ›)4F3^Ϟ݆0M/Hq,v(]V !TJ2*͢<n4Izcz@,'@?k(/ϟ Ytf,'5 &2AT !{]V_pD9tkl{=~[,|8"8ަE!aͭ}Y)R5 b\*c((1 09qi",IQJt_E[Mu]'cF -LU7i4DzCX.XCL ը)Cj?BR7$((mC794(I"z1TcIQzT: H3,> T\W.=ODtɻ"`0% O^ f+,FL ^1h1)_e<5,Sb/h$ NA?eX-ѓH* 1Y9L %WhH,4XBfGA1$Thi7(m&Z6vuPbPl`/SJd_ݩ;47HFt3{S}yM_[Bdϧa5+BlAb"p{ԍe#m= *_׺ /5lK7q6kPvҌ:BL6O؀a@֜}g'71tuv>caa i=_%U8!+K J- r25a>c3l5b}znc$'˹Vط\v4VK4!C@?bƤ;A7#)#z4 DZ#e3X"K~Z q OTCt>gyڈ:#8: $=,)iXARƊE? T* -,C2Xo3VUF3v?ܢXMGHO_)-*{\B5ˌ V&GK`]zZJqQGg<$^W! ? rڊ(?\x%%Hh͌ V|Ä'dnjr䬄$P3'FS>,๎nt""SJT(j ̬o[R!B`pPP\5@9(Lx$2<=iM(ʩEY )+$/syY¤_\礉(,2J u~ҳ)i#'(JUNgl2Z[@2n]|Ձ? Hs _drtp;@u:.кiEb˱ w..Cqp/](?f;pzöܱ.Uw`|@S!(uXx#sqI}z^,yM7$Gɔ\HX0.(LF vxwIC-]Ph%Jcy>H$C uc,見enf%3y3p?ʲ`6S,᮲ U($`aQCsE+>ޯ3l#_n~gwN"`otr7E,o;OMDbL`I;!2bc1R,.[1S ./ l c҂<1kAHZɃY "{hA՚x{,`6ѱڇ6W ܌F.T4&ڹ1Fz՞$%Pmk>SNˊ=ګx5MW$/vŶ>B:% dkڌ$B@Qj45(ŷnaG9 G% &;cV$)$WU-p#޸N-dgrg&CS?ݵJh[;jXSfbG32CZo,;MMYX "U=M)R*wO7fU4]8Mk`hf֑hGjzˣY%j,ȺDWOİ"qR].;ZZ&:a TVT(M/K^ZL5ipS};/_|m??<[WUI k[^oKR'Y ni\.Yl Uy؈Ϋ#NۯŐ_V'f=[ 7lE=;ǢB.RbHSЕxwA a3 U*0Rj>(&p"jl-P:* pcP[5]E.,K>5f|լD[Xxbދ^{ZֱnZ{y1qLkh!kܱ2cW˩P/&{KwW EUը, ^$ <#>lu) r90vnE8W'$֪8ϟ>ǽ:,3ȸr(ԸL2pTmuCC:*6 RSyȅrZF4ڕ5pn/S++5%2 ꫷:]r>ef!йӃq^272 Q: "@X}n [ծaQCD xө`N2*Ws?i$^V}+fcLT-As G~:Dxo@UOG>E:'%0[w1rb{ fOr0417s_t[&^Oŕ FInsnz)l-8da { W&nIx45@ M0vX$`L:7zsSGQht5gfJ1Nlquu1DA7輱vNvo ^WՅY+jX\t\4Vը]]2:ȸ y*|?mmCNĂ [98o|N3_ք\^rbwѹoO07ճ|Cn49w(8r/N4[ !G~k}ޖYRjjɦ}s_L@,x1q"zZYFE&tHt3|NF'"zZU`(Bv~: hA=֣hX\^P$vI/Cy>7R4F1e ҁ 1 |zv#=A4rgGf%(5}>Geu`poBiLPx bE4;!5q,-3`U5?}uwJ,h9#;ThWf?$0"1BE@XژdK2LGzC3iHKЄV0NX %ÈEh\]ҀFhMjj6ꕸ9 1n-F)Gl>b>q"(;a Υ(,L*xmYϫq Tò|Dƃ-4VS{Sa?١U*ɵbI(xH?&Fg|1kĨse%{0IJpwz^x (&Q3,RSΙ>#Ly-?C&yT\k+TGWHfۯW{3 0!̍SA̩ Ř-U7r0^\띏\y=1OFRopy/4㾷xUMo0 =7@mQ8?ݰ,-A/ǡAD-H dّc9$6H>2ӛs} ~iFbul\@mw, _TnCX R*.4|~y%lEeK,aY;l4;0tUiX*DPXrmϭR%X` ƪ%炩}Flj}d@-Ks@q*ΫsҸlXV4P40-˨qU6SɻˌT)_/'p3/d_O7FFaH&«l#yjX%HыH2xd:CXJ\H9ڸZCf(X@ZE8R5sj4dy`Z˂3ӊ[l9).&MԞ \,Rw*[nlNEEY NoY^QS^N.6o5vth|WwQ ]7}{0:ϔGn,k,. K+̱x.ܲIb.l/M?֬и5].a6=savKB8_=D kK+ǚuxoAh TCr@7OmVCluhng4s2+KE9 ,P~Dq]J=k8Hi4 *0xd?:ԓ\zǛlv>[K$.2>J\Fxd ɨ18 }n=;'SD݊N_iGqw1N;9CCO K}@;yćXc}7UJ2$?`xVMo8=;@ @"&EdJe]bΐ7R#mǡoZm^OAom9HvPV@Ì{ ,6ӎvL+F|ݗ;qmK8|m [o܁=SCdRꃅ /uFZS%`5+P{0dSۋPQ[.F.;,q  JAQ R7IÊPPSefbnPxa{adv|N^%(/sڤb1dz?=s+o \9ϭtQ :e(t[eu͡:gjLJ |NRVdޱuK^o+(ta~>x6CQd+l,z,0S8bsc2N#Оc8 3T)]_nX.6Rs DxZx| ^&5n:+sz b_ RnJm}6DKF5,+d<0Ar[(`=(~g(I(vix!qUpF ]C7 [O4/L(gnahC-heyᲤ,Czzqp2Lcqʉ 8n.@Qmq]g}'i;_y @#y(pdql ODnꐊپEbgIݽ%]u>c>ύic]oE$+VKX> 4f6If?2F,W:89P.goݘui Zcb19/hob'};IS ]ESj.4]$@$·NO%.DddMXޔLl<8 `TȌHq+~lg;R/ )O=Y/c>}b'Z{xuac r?Q?d2d\caLP1C%)Ac[58OԖ'uSJX ^S29}) . '<%~&X$q "IRƧx`Po)ԣ`2ʸfGqr`4?pͯ_fg!nNt)}6;7T;;UT{ཇ  F3 ^`.-.q0k! i& q9a\pC2|8R j9j2da{9 -vg-_Sj]L;! DǏ|khY*0L[Ú]+qov$"JC걈#ܑM`+p#xw7Ize #A{ȱALt4q iIYHG0(Ps|;l5]Ѕ"5+?t DĘzbQ U,q>H+uzpD}Hn{(.U`1>ll9fZ (< )!k5 _@5C0i]|\nwAV&k_G6 }Qj1l⭖!+_H w I#=zZ2n}95E&ĝ[dX@&8:lLB}_0A).L/jAH^PE QαY d%pq-XQ.E!>V, ¼z2|gB-na 9fhErl&LdTl1<_U|t ](G.5l 4>ӻv5iK-bL(K@I a¬sڭ4 7cf[~J rpŘ-Я$7s!g2!D97i.#7T69 !þa3~kRbb=Q*Nг0 K}l)4 "N s 8c]e|L,_Uz‚uŜ)::ʋq偄,ݦ?hLȀ-%?+Rz,7Hiqt,< D?}(| Lp <"_'HyXS]0|HFNÅ&|Ҹ8d0 5(LyLivӍVR@w$ cYi*@3 U%h^|CnC˹ ]TmC,#AO|ηZMX9$ ȇR06`H1 N j2DL]S+TuI5ƻ<% jY]:ӵoVrK~s> <DsYRw 8י0ɑ]ۚsi9%IPvfwv&q$8ۑ{ȴXkb<ۼMW! ]zDl0QZPLYwc1adOmM-iͱB(sVv7TрEᡯJVke&3shXIE,,NOsdoCI}U~YF~ Iq6آՠ<ݫ?J]f=O@alNq`>eW2iqƽFvv>k4`.z!X <\7:n=ԘT=#HHd05f Tsx0Tpm +ϦS7o纴6x\1&6j>f+ꪎk)Yz+M]M7.Dmsssm5h~UdS%]] >؇ I8Љrڱ|tyqu̩ ,=-ܲ5&cBf[ss>9ֵii"Qͷ.*;Yt$nc^]ۜV?Xkdr೩Yqfrvz-TT6F(6P~IpyClgۭ)h`Y1x?rLǐ^Mk7,PnnI&>l`Ed vd_9S Đ:+LZi ꃊ-"iMU_yד3ҕ,^*n3N*i,c󗢭iU,i f #̢;.n97qUjsC9NۇuOd{KM(ǔ]a6mR SYԫDI^na@\WHA iC sUZ=Ȇ^OiFusyk4iH5VcrX B,Z53A}p}#r0 fCPQWGal̈¢: US=gXfjr2ß~_N#3{%ENla5sP ;ͭc% w^bOk.${3-W\5=L:}HÈN~^S\K,Ŗ+,?x%^甮4Ín<ǛT5DŽJ8k̹ !bq%Vr2֭woW^c{{ӻ=~0 7s푨/W$-K7b*G-n7 ]j]9sϩ_$ 0HFp;*?֫s&`wttr9,ȧ˫Kz,0:C| b>N3w̱rEZli|oW8UdO[^/jmUGؼyOO;H[QWht%ZP̿/Wȗ/ɗt|9=Ż_X 2'UZHW_S?~~i!]7?X 9W4TUtTE<_1OBw>DBNR=FZA"#+$Lu7ow=WEtwy-BK;ZV]Yֳo3 Z7TGD%4Ƿ_ $ iBR[x2K_l"'d1!<,*L '3qL>&8YM|J^ɬ`v8 dGvͫ]6f*1Q|ɒ~ Eũ%ϰ1qrNh&6)t02ZO~2ЪɂjJmULb$T0B윜`&R޼W=l>$3$#Y&iS_K!erd9G 9'+x#o7 y9C^[AF4prdeOV ŦIew$^os} P.1 3&s*ؼʑɾם.yLȎs`TilojIF~PÛ c)pәnhx=q3ͯj0xxe"5rh(O6ެ6N|Ǜ h䏶"u#%&y8l -Rx3ԑ==[d*@*,?&*C'1bAxxqXv-;y[LxQo0ǟOq*/-N*ڭAM{A&>`gC7M(Z8 A;;E"J2a.;pT%LkIQl` ڽ hTpxc`|1ZKXݐ_?$/JA-5 }gz !F$χ4kkFRp.Q,]pn.Ͽoa)=ퟆ!\%Ka7K:1{繱G }M3̹?3 I03ۆ0FFOGQxtB *d{Iq*?u˯q֕K Q"5W*7r=+hnk3Z1T,ʼn߆^MW%jQOޝrFzi-dJ& nIUy.w-˸+/W{Gț{(=lI6Zw)EIVr6w$Tv/:(3_F |Ջ抅V y  C6dO ᆡ;aQ}*|_-C&CaVHʳ(6j0mn][Yk>qLF NR1N&B0,tRAa}&:R݅m'YBHRlI@fh ,й#NL [$[9A\{Ǵ cm .ߧzSmx[T{)kEt6gZ/>$ l x[}Bk b !x[Cs  ܓE671Qpl"xۡyU}y#!7xN0<'$岉oBE)(v˿J|c*X Q=rR`X+K{="bn7R-q%ԏ"^3un U/GR@i^K;|!>ugT`z&|-8}I|mGmb\W ӷ\zw XӜЩ_|â侳A fu9Ѝ2׻Ɜɔi9y>&d0  9 >:jDYef$kkMC/\xAO0 WhX ].Oq)=yy>xLrߕ㶏(V#[-X&N.=Pl/ 1{.'P{EV|<&eN~w_K#4JC8j x؋:Or X9Z.u>L`%![4MV>6 BP0&sQpOH˂Cȭq d_]Sm0 {/X4Cjzx;={ڍw%lx½kr|,mxXɖ( {!ؼba$-@^o*{%l)bRԒ{˭FOg.aST/ xO3*&8_3dsup^OnyvTJGX]ٳMnoCU[vF~*њ3ol_AA~clUXKF`=.~pndQr[rK:e0J@,u]/C6U7N9\02--mjEq0gyUgX&1Z6>/c . SDŽ` z._*|Jt(f F+~ᡭ+1uc(.8*zGJiLq7S'{m{RxkAvczhnEbt.uwП;A l^Fw>lvplN&h*Um6:NeN^/`87+zՁ?nI*ar >gQWPL_6 }47OZ}|鸾=4P l&Ibgx{Xm0 x[6[u!ʬlgc~s(7#T}6 ~j.xOeF4!jBxP%!5@zٓ-{  }object_open do_match u% x8`irtdIW+m33՛1I퉱4;;;;;γ/yƎdi:A= eQ^! i~ߋ1YӐ/{̏4bdl [٩|~Q!#l\?c_꣰]K ˦"c?)KTɥ =2t&P-i6e""ӓՐMDZlISsi-C3CM,Y,}~0xw4 i6 ]l#alr{22K<qD%R TӀӕtcdO N;glD>b, @|@X]o %=`?JLY?" O $CPK`TB< ~(@5-J6 A"@"ΣG]n@ (l">q%8jY0msM`] LxxbA 0=\Y$$) >)JoYƸ=u tin ' >e>ya[T(^`\&&9( KAQ+Eg70(8@#d"S o+">"brSϣqid܇-}ߖVtK S RP`0d<^e[\Krp &&4@4 lȒ;Y F=W?_i^4'REx $\ MB")^>fbB>ܠ t}%&јOeiq˓ *_G`t͝ &8ѯ ˓ f1evmxlg㽺<|{yz 8tZ&lk;Dj[*-<] ;+~[6j)m fwzvϿ_\]⍣ׯg#KtV`CFǹmÝ߀P*VFӣeHvM%jh_I&E p8=Oobރf ΣlFjr;Fr~5^frgQ@0-L4Ws!f!Je kOqCi]tȞ 6_Jƥva *L%YAMy0KHZ?!OOlk$0o6鐲WКL¹J]T4vMyL_B*'QdKa/Bf}1I},cn})YC܄hF QKi~Q.K[4v5h3N\w`o C!+]a*H,>Apܰ9@МG$hڜ+G_0a܀tH HwdKu]2U LJ`܍IX IĂG?aIFڕB*,* DBdbH},6ŬIYuG~ߣe*A7O+Q}_ A sČR(hz?EH3.WzǑ6J5I \CB\V"j!jUBzD:DzZyP9{B1mm/-PJ:C:vwMP>wpO֌NҤ  4VWdb?= :q@vlU enh jhPH)ު<b&\ٴcǞh<R0N[j =EE{ Aׅ`{ &cmY8/>UӢDIJn}7o` 0GYAxA<`4:߄NXAukʘ[r!yT>Ax N2MTZl.5`_5x`9P:?B[dHIMU{W"><Ճjޜ: xrmiV6VgD2͹҆O-/6R^E7S"KW@3ȩ7'":bXNVN dz3R1k]ʯ *39C^A0YE s:gW× `p_gttx_] BC<o"q&Y6c5 c"]Nا٩$ .جFfSȳ6[[2]^M{yUr8Qb݃>}pArV7g䋋 %>* [}PڀS5M%PT#N'S S|ǔ/3M71L~F'.$z]Imnoup` +XMngxkt ~)*CbgMJP+*tIEc6k gŃwt@F5l> ܉YR:nm?Q$e^9$÷~UzQzjͮšLWk`U{`*"ZJOœGڢ7pݏ]V$([pV0B{Ja =blY z0dh`ИOyP~MQH6S̉$ϊ^cQ[ u3HhI@K%>=]bh]\<0pWǪ]%$(0"œ~{3iT -|ghȊbUS{#4@)[-0t ѽH'Rt'-@}<G)_c(@Zgjwxz m{Ǖp&p=:q_GeXmɵtܴfy6iD$^ G$50 $i`vIz}*~*?=C 6P/~L?Owuu"~G?.@]8LRY1jH=8pkdƃ0"/6H?@OGT2pjeh]~y d+箞wzR 2)Hۅ3<دWUWx.橊S,pW;2C <_K񱏥 B<96$]ǞDV9u~* Ct9,Sל Q!!QmrHiېy5^p6~um=!us:n+FZa)jc-5N)V15`dT,VGxE!ԇu~][Zsi00H^7M_{3Ug7ƕ= I{cwm呬~\z^)su4^7Uݎ1ińܶ[$`tfzӞ[6 {HHuR2Sq!>ύ%)mϦ5>ͯxㄤ}1tvT M*JUΆdTWsc4:Iy~քH$VКWE.(юh6 ŚLzӄ1p>Y"]? K4Ob,#Z0ߕ:uǻ?|BweMc괝 ǃԵ (1(q|jy9)g JOCsa1t֯:vܑ=<LV+l] b JS(#k2RV]D5D{g#@.cnAl:pmJ !Tzb6hP(Y)k.Uz=Bo䕙AGVB~Ⱬ ^ǖ> aP>&F-;2N#kV\ѤY€=dc1oCp(S tMj DE7 H4AEF}ٳ m', ,7=Kg,E/wOk|q|Pz ~ePqN| g%w"#;d`ALZkHh'N~.5/ީ7Nv>>D9fRSý/B9B@8TF^Aս (\;NzqfEEU#sB Vه0zy@cA8^6>>\z5t]`&=Wa&õIlm#/uC6zW>9 pv6tڵG@U- O ԓ zWq!Q-ukp{zA@Cjr*ywi:K[C@]LZyD_E;,kϻ[ OzUkjsȵaFxoRS{v՝x<(5ngq>ڭO5PSj,ElĪMZj3@{Ժ7tm:Zݷmz  Օ}0T;eI`eC<8:P:c|  QTDwW47jcvjipPJ!7?(x}S]OPNaP>\(ـ1Ǭ206`iҍFV +1ޛIO?bb73O3}z}{?'^/25s5oZ}ܽxuiv/Pv$)Dhl67biMLZ/'E%)++RP"Std.0(4a'}Y>64EY\%UCA¶R曀 +KrCh"J4qh:15{TDU$&0s#OR+ţ4|vB9WVUM(jY-l^Ƴ\#@X9|c:5`UN5InޅZ=eAK*NCDЬg` t!wkAN7@[V,l#ZKn؏M={|I?Å 7 G1쌎*쏆Κ"UY 9+8g*,+mhxF[flJfF5aM:|N# 3v0tsUkY_7,9T^DI OՕ@uAn&+#F3J2qp'(|]8]Sb %~#-xIУ8 ` E%&4$Y&B" #"%E%&O*/pK N$QvXx/Уա0#ifndef _MSC_VER:1L33 V@ xqq/ㄷMf|?S2 r+SStJsK KS*'M|X@|r+g5(9|򢓭U&'YN)/yc'6@RWɐErJ%RZ%;Mjej՛mg/()Q0h+6Y]tc])%1nV4ŸyIW8^`bT\$ϺGrWKFn1F\7zkNVu_7yW#s|&x+NV-ȤP=yn|6o}r'2^OgG 8wnHx[q4][I.gax[˸qA-̼dk..d׵:6kbܜ#Yġ =xWYoF~āQRA'@P@VPB}<41Kir WB3SAgwo]!L$Zb|&;mV\[ˡR~[e&XRd[ Tފz+mWkn ι+ĊJg\F,ox}~> .5TatAԦ I+`=G8>D^F: Fs}TU>-Tгކ$Y4풫}XXP C;{#PPp_?''3˜I]kůfKzmԊЃ J427-RLO-+T%bA^6 8N"|BUU"Av} Ζ5#L% 18c%ɜp:#fכEw y⺙Z*sGcd!֧k^529BZC2y]_&2T! (dPRUJw$$-BvDW- u62v]"=LtAeظ +/dAG/VLvmWRm4dE{Bך'(ԿD$}jSt'~?M_9q)ǎ[c^!Mi2=$)Y=V7H5mf]0!087|キUMW g$t#^LA/ 6=.x0&}A#UvPݺN~_qCV3HfB"@E޾C_&%+d{Z2jo/Ɩ1jEDZOO|Ѻ=.N5皊2\$›s ,lyW(c):ۇɷFѝ7v_w E80#ʴo  &&yJxZ[o7~~KNpv, f( ) G!939na`KCṟPΖL+K[Zrq+Y2+UTe"vjĹUY-wcst9Q*}1]X?9%XTS%rm>I)Bb&KDT!n>M,ϮTYc:UxNUblj*Wbsgi>pƌjJv\-d.b̝F\PVbZUgbHS7LPe}(N"ohHspb\*IdU+m 9wD!('#mdX8WO-WTNfU L4!LJWA@;b (ľy3~yN,gNX4NO tNNH"HԤ䔩If*2 tb p5^㷈>1e]=N1Hn_Hl8"bYi7}s$ u f;VyMUvzpV SAY= .5]قcN޼8B2ܡsLʵmxuN\S+l-Si(;G}Mm n 8$kѓABq2*l'lXy,i+eՑtw3X|Gt3C)}B*MFûg>)W 5rćΩ Lc'8͕1ocss\O{H$nԸo2V2=kX7v/ڸ]R۴`Jl,<"p {`v<՟vAٛFtpRgvw8ff2E4~40tIH:mK!~JR`O,zWpM팍)f{3\Fp>K|Aޣvd\K\*X'I|~Jft _)_k@ l4n/]bz6w3P[QPADF<*Z+aآ 񢬥 Ko"s=kPlR'U72˜Rd6ڛ*Q:@'imhB'0'͖&w m}p7!7NN/塆n;;j7HCW|NT*e8]ϥ*GηUie m^ܢ9 +9)򾥿B`_Mri>ApٲSȧV:%l/[-CWhF>!]PHgPFoU}̩kF:R)UҪU$QH67ݘ@<3<(\NTŝP>nn}̣@ OV&*'G_i┚_7TUc|wW8[O{=ꃇb~$~zljE0ki.l}&cm&Ҷr$.zSOs[eOEΚŴr'=FyVv۪2|QXxr=x ?̛ 1N.ۼHx" x!pzͧ[E'{Jc!} xOC10P9{I%Xkz9(D֚]DI4s݅tE{{/w?52"L$RIv%y$e&ILL6\MfB@:`g y ~ bH'$Cif>C02~&prXQ4XE9F3;#bHB%@+Y!2Ϣ`4kQːh0hi e" R"DgiM_l-8&,sѬI PN8xf Ef^ xaY@s-"{?KeN"Y.Q ^(& _DMqkAq$k1'`^Ԗ'i*hŮWr#C(^a'#eil.;.Fp5u`3;M7~=v.oap˷߽˳&tu5F0BX}ֻ Nǵ@5^wD.sop_sځp;wpu= ^.χ{ѽ+\ugTk~{?A']s*Tiӻh:jP&U8Q.IJ$zek|#L|1s4q&$nFh?[ĕY%P6g I!AȯwѝHбdb6[PnE4θL?Pb Xx) ?zC)P!E&z\-y0{K܈h:3pzw&Pr"dƞ RUL,3 )]!ZF[.#7*!ܬ*u!=ۈ ZmDCSLJw}ǜrۜ~kUJVۍRk/)%Xfyzz2OgCó)2?v޿)ۀ1C++(-ɿTf>5t6lEH#=IC[cy~,vu.qM,AUˡ;F X 8ɿhւDH!Ma!|2b8M/2+FM>>,ٛBL_k*H٠ztFK!3Xcނf8[bRFS1J$ŹHA@s iZ+dH0g( yn~nR$/Dp 0@qwa^`5J($ңAz4?P&0ߐ|0U1^$xTQ$朂S`D8`0;h8 8-fePiZ0INOQ)`P&UĢIj *at47Iq삔VEU=čBv+(5֋ ZVfRPe^n$ƊFG,76qp/ Ṃh.ƽyrŔ?l!XRnYsmTD\KEaZ>t^dTIAaiTE*%T˲{cq($;Qv G2 dvDYgAYXHe` 8QdCP8>@nD1y% oor`-M+}a8?Z"Vdۅ53Ms."K^P&W~-bt_% :15D) C)zVS')<ϊA"q2{8.~=o'sk phy#A"Cbk WSoI`t)i(V)z$T%KhD'^C0VC.iUM˄ !2h+*rl4'lx `MϠX' >K 2!KH.;4j*̈ӨQlju#L:o&S=T8C 5m*\jIN!Bxrs@r#xnULEF@ G>9pnw{m RA) Hه_IthFX4(,:% 2%Oa@[F RUn<T>%%a 6b-(Q d)i.VWPJ+\̤frB߯$iU&*:jJ6H UC"\x~"{M,BLѨ.B@T혅He$Ũ1\C!^B׍&"|vrA$Җ8ttΠD3MAKF릶5!VkҞmQ]q#6\̚(e=D;GN Ҭ֜(T=QUXpZBBWE(&/R@m#lJM`O_ ]SE] In0F..ɸpcmU #(6VDLѴ1L~lgᔙ1)s[-zX1LQKjMcPTft&-N衐&u:Ql$\$q?iWF"@E@X4I1xĜ]ߙ^M>_x~EF5m<[d[N8H'GsQ;!^)JB3[%̴d#DܛFI-~DܒQm˲/-!]"" n=w+Uxҏvr|a -&mAHS<,|P4FC>jJP_(!sbӴS&1H7nΕ4(mi1s[dZ $d}}BHi tH!DyUqU({FTLqܦFlMj`"7qG'}c sM2"eFN[&=u/-1=|d0<]vЫ ng4;2?u/N?򣫿C IhKeʃ )&TG{ `uM:FΆ&$ԊFyHQW몓^V^I!;<;)2TbC``d=_a҃lcQ|E} 1]spx֠ӿ8-wjVz3=M䬬t\1Hi0r:0du01piUH;)2>_C^.\kI3EYbG`BN"TޑSR"8ӟ=1GyYg4|R)&!|p g~wU7%>Z,eọBdLL|j&wlKV1ыWpz\*RGֳVKTxA>U6zFi!;WRӢ*my)TZӨQx{Zi߿_?oQ"ة=mwA^̤AFR5e7cc(Y`y,fP߭!ԟfN3X WZ_վ" G^bh41[9v&c}to P)jzt{%&<]8'T^ C*MS*مgG?|wm<~Mpw~w~g$5G7W@AZ*n!,] *1%8mMbPIGI噚FQ s4CYV.յ?<,7M@C_EVP{`/^4z,hi%Y@%mr=~M|p׷Gz}#[D+Zd|A=BJ[qBآ|.h)o.B1 GJ&սkT9oQyw; Dv]N:[mO LϏ *?ٴEIJii=znCڡgPo1,i.#jx]2 {G!=͏stv^(- b|i#euC^XPV4ݞedy<1bꆋB0YU$ynQRakaEyr]MLmi@M0>z?rk ] 27nCuw t[8_vlC 赐WRwouVhlgJde_L 4,^E3 e hjȜ$No)>Db5)8D>< )M&Sf;8F)n<,@S358lHbsXT2\K美dAL9$r7-"Uag+2Qy~FQOqg_dL/(-E']qA@-%:LPrcI_S ]q0;}cD} "[붎#E&6Ī~RZO'AYv:APD@Tۧ:W~7|E'.u؞[tjsjߍO0iYԳWm}(Mo]ݳb ISG7oDF$ixJ@@a/e$P6VrVɬn$A/B~~8iQ*^fy3}\{z،h|jn^^׷9^ފ G-"?ohsQUTe3zpjȕ^h &%g&F^SJ:mM3v:gF9y&y&POwz0>^ߡ p@\'r%_A-EIX "@quyp͵uOW"UI7R_VȔxVaoHίReZ$=>uN&1 :aX^0u_~ MS*aw͛;evL¢.)ͩ 8:!+6%Kt#>v~7Y"g%9gHS吒,7pW II4,Ao %:[ wBᥥHD<%AX 1PDCăEE(dfCW:~UZTl-$\4F([ǒC#Hw kHXLKTZzQS \ bh\NF`ǬNL"PrݱS62J!D*cVP%2ǐD %3#M"!gy²="Tf4-pʥ ZQPv^iܗ[ qQްN)7+U4{l^צgs#kv0vg: `:7vFX<&s3Gs@s&4pAl˗`Sռ'vpc8AM^`ӃܛGΥQ= |lN&*9G7tg7}5`NFN^X̼XU(Lj81̩ye)/Qh˳Wts' YB#kNś0|܅{= ]־4*myRmJ[=Ml~GӀ)R2PvQ.;[et 2-ES3'aI\QFxu_N*p .20T0`k~U0K\w L9$^Cu9 #U\PşMbƵd=Ou 1H!ߑM?*k7eY+^+ G$rw ,jRӡTgZ⊹_щlHb9بL ܳ"& urhlyǻ&4ֱلCsȄ#ܶfaP46Ak 6RbR38ȗzc:T6tCR\9S~?h,rkc]>eZ>.!wIDޚYv}Cճ(芄R)f֕|܏k6Jq [Rh{ 4/XmZ^Hx;%:> DJrYdW6 H]l]p4VW:.& FPw;q~ V@-i2%2ey}K SqA[I `Y2BzRq}yJr0Jx{en{uHҥn."gvD9]bGz5q4彄6AN.hA=8#jO=G̓BDN("=? 6J5͌$仞;tk䊏チ*#-HJAtJv(CqS|&'(}aVOl\PGo#N%iRoVAҌzX|ojh:K[I?Fӛ.5^³1GV{HXRL!w5u:uE$ Y XBD:| WLI:J $Gc o0*K+-$3gN0uYӈ|<)Kd\ȷxWko8_q2+1,q(0JELŜʢAɱ=A^qb_$/ϹoRG7>pvo]󌏣mFYv/ǿ0_(eﱐ,sY s\ds1&xQV d D,̅B@m`$1)"T {b'b0HU$ Ob!LE Kxr7cs⍣H,Jg@{-Xb&HDŽZ t s1 ϔY$̅)'ɲ`b~BHHYGvJX¸Hfb޴VR2uf*e. ,.hbE"r(?xdLVjYO[9 yѽQIB*]3ʇ2|p3~ . xqƅOAx5 %F K`p?pM?q-߆`B?B @*vzW8΃~~v2yx0܎nc/v .G_Ya0#N`|ʻEGJ(pհ⹏y}_SQ\օw}թ!ӕ?0Ȍppꢕ<).x`L ]@wZxb@(jhDEh~;+].|Xc:\>~`2Ȳ$ŚMs}Yoq3V_B1>΋i'RV]:::9[b-$PFKh a?~.{Fu7 mXZ ;teXTS~%8gs!7`S-$cY/Ryc!Z ɲGN].F<ɳe6XjqP̠y3mvF˘HwآP9́MM-"jquIal9v ;-,O+҈SILz'b2It=Kܪ*-C4 8eo* )4*5T)I9M:N@+i=34QR* h2y=v8*El ԸZ)=nvnK]ut!@*=ڡ3v/nO:'U6U s? z/#SU$!\֨ɓ]g]V`(eG  YƩ6;Z[l=_5^TfGoDV*h,bp]'S`KhTɚzψv-R&>`843:imN"1"Ru!9Kb ptA2Q;#<$+PͻNӼp?ׯz|&yu<8ҒS * %,%_}^>n;(5u 2)UO$}rqhE۶Kmb2bvԺ:MZQ/~ u}+*DUI%tIK%B^o~.Yrr C6n|}45^gh}WYoY6_Gs#gxmA +|377Ҽ j0Kώ@g~&BGe".|,dw?[h1sTXXܵoLX .0Gx]4E` F98b^1?c[pEP]{Tc,Af{} ^ƂbCȢ8s*ܟ{k|_eN"20Sp~ +Xy fsJ3u0f05'_އ=m= k0%Lml]5\ SS`b1 ilx7Ɵӥ' aQk2'chX*֘lQ igC̈́9tٱ1>7Ec00há.{Sw6^ɰ#񓎞izA 5c*}m}֥R,jKiwf1q6[&UҴ6WLWA3%ܜTt*1FPo'V(հUL}mH(\Q~JCEyK뫫[̤!8q{Z }a󊻧('?B 賅bp=dm/ڗ&BE*pqFpq 28Tx5ѨAڱKp>,˰}%G\j1n[Z{O{L'PNOyB~w589AF/{X#7xP (Q'ĊAK&g8vldHhן'zNLvP*͏AP"MM?F}ys2 w+rQ?}p[F⠕JFs.k%b*Ύ#, r#,VxވɝMMX`}J$ő_mO(%l_.m~[@O脤rWoR՞Ĕ!ǭ؈'(#pR)A^R"|sKP!?Rr汘-Ԝd'L?i0Sc>&(/C`Aش4ǧtR>YK%śdKlc|JʀI/R|G)>k] [lcMQy[-gsXf߇ z=Wz: ڴnK<Ic,/4X"#73~?.q7(;B\blEf[*N7\2Lliɇf;S mD3[M:\`K]tY@vVtgkAУ/jxVmoFίt~/Mlp'Ҩx cחKY xwgg^߽umY/f0dQ V3KaD#=YaDȧdh"$yx*2ė eʠCXρΚ#x2-J&dc05vE14_UMnf@q.V<;SimˌԄ'V2Sc%e1n>:eC,*Kxb} Z-sdgU`L@GK!ȲR|)#qi!E+ST- V!P6G"0%r!/7jSRBb9~S8Olmp޵3б\wLq‰-| o˽O;6cAl>ulst1v܏p5 a̜ACrf?ҺtNxk•y-?tF|ϽF1º{#=ݰz`_5**k*7&tl楍YS¤FS˙ؚYm!n&B> ?\Jc乡KÝ&XPA|ofSCOkW(Tj8zXƶ5E=fk+[\hP:,M_4M&b " Z %pB5M͏L)WkWUUpxRᛁ[/vo)Ya3n MK&qtTw qPЛb"vqƢR_ElVpI  0"K@To;:4मRDHTc8YuIe t*s~_srˆBc* H"}M֔nej}2Eʦo gM֑p7Y-4z'\[F*CߜLR7wR:DZsXt U]& /rۍAW݊ne+CV'k+bʪPy+&P-ݓJ R0kRC{eOѳm5V5 ]M{OEaPiJ~PӅ#]؋ gs2lO7~qj~|}L%f5z*@;M`vikoxR$zh@N (gf,<#i( jK~OTHTH;TP[Py 64:8nGjļ F S x=kWȎ(MI ={g@]t1\NqƱӶc淯Rlݙ93@RTJRUE4 )JSMYt=.D#hw?O-q~.za>M040Dyr1A\g~RÖea(ґ~vD ?y0"*|@ `xlYL;? a l&_x(s(ơX:KMduJE8" "$gCAU$;$Gfx$F#Ҵ8-1լ[^ Nv?ם-?;DtGwvNiwxցQ _ǝj?!v?L|<:A`'I?O;@9fo{TgC |m,Ot9"AO>ӃG$$pVӞesNݸU2|<9$KNYV8%_(mmp%|Ow{n1,mv6L͂"B'lYO{cCn4 @c?'abC4Fi")~͹|Y0|Iol0 kb@^-g)>L'KcHY1EY^4MSTot;8"'|J1LA*Gm}U#f\NXSm8 tA6 %4xOC8V@̫4Bƺ@үJYZWeyPoY2%,פgd( N8ԊiN{H #xp?`,Ue V|Ёhdaj;S3ϝ.i6 *X ɬ'2Cs 1AApJo㢎"mMgW ch?6چ}}()D$&zlhBj\D͹yksDH'O؆tvI,h_$QK-#6Je4$ډ]&`i |P_5M{ 1 G#0~OBLK0@|Ĭ//0,. 0ڸJX&%[0Zs\[X: ^;!2wg:ǸpiXrOQK= QrbY0bf7ʪ"'E#'(&77oAU߹&1Jx0 DXPס*@6U <'4Sks݄D`ag[VZ>pKqb渰?D#[sZڕ#P2w 1lLi-Q )N.% ٕ Ac=ru=y?htAtӛM R|D5ܺ0fRv4R^NktuqQINaf| 1 aT[;+xj"Q\ݚw-%~?ME}<38BfCDyGsZ~< ǃ3T ]3QcnkBL%Ջ\'Z99ҨaE8†G0Rq4zKWn5KdpKBf 2ZxE,9tZ< .xnA]խTiU';;/-m}, uu]xE wՓdYt@OȖ6UK@eJPWS'HI=j϶H|F=V&y"gZVTb^AewcXv­jkE^,P(6i/}^]EŃ* '7lnmYV_s&骑,p\-+) ZO4NRpC,ihN*ח5f[x%m Ӊϩ+Vl\B\,e*I%,³j/ٱ`"ꦗ7l&ZG1& kaEis`Pm7ˢF dM}"Y1D|Č˪CR W.YC X*EQ=D9av|ݗ NG76f\].sE ?Q?LJI3&՝;oZIiыRؿErw+|:Ϻkg⳶<fYI-#,Ŀ~:ZRKgPX kPp$U6r[ʲYŴUb4kx {罨YdnE9~vA]4^ORp)jv{"[RkG@\')VZi- :r 8buKJxlY7i/*#طѨWKU׬6{qjmwj\IMΙ‘\Lj7q^ ,<\ 3ib$urqTB ȅL]9~!0ae& G4lL-լ`C ס-pRYbE!+ Ԣ[!\i r:]’Gt/Ic:\aAzO<*e3݂'"O.jaU3vch(NF͇ a N0QJQKBzBS<+\aŶJi}ф:ty#ه5Qf,@BXh(Bj4p|!-`G8WW%aXұIp70#񷨆98-b R־K1QP ĖBğDUVt4l3N#lM"9V9!QvnAmK-I]1-(UŒs>SĻ՗mK#0`bWOy0(g / Dlo**( zTbϿʱASœyp^S#)Ա@K'%f&-/bSY-!2+=z<݄M6+b⊫B \B(m!.P^"`/̃,$qvx8Aaigb|0P`8¶(X6(Rv6sWDwLY rYFw6,M`1IET$lд@Od>C=zEo9flBݑm@jH8P؎;ӆ!j&ANΉeK*E$Iwx,V} [%I 0INataBf`z6F'JE{Ch{(Zޏd`Jkۻ~&2&:uġs [ɥNuD:0?;p~-}ngsZ x|i^b\ _.ϝ`,7b)2[AB٩Lny^B2ӁE] eIW1r0ei< cL &±~qހ|vlRCqjF=d\K+$R+00X l,SSi':lD[5<]8`ˮx ⽧r9 ^&{1< 04՘"CH:5O*U'/`3O̖Z}ٛC~ϲ+\8,Siu~^۪Z:m >R}gd>/:#§Z~ҧ3"IШS0"VV;ՁOɠnֶzf5Uk9Ns?yyւq7wjQ@7v:nl^7'b]Χ}LFT^^PB17K-!ƛ! mp 3N+~b9}4ϣ+E]:JKQʇkIIJ >/ҌAdH/thr(z39o]UݝI-Ǫ(SE=giRʱȍe88FAUddžE$,y5¯:?jơ]X/eu;¬kQ+7\3j^:'p+IsW0\ȝaGd"0W*(K'k Rm24Pg^oMJ%Ϟa⒅qɯe`@}3#@]đTr/ j=}`eڟ:+Pԥy! E Sa\|suR:ag,\huPq.Gn:ThD-5DZ2+;`0荇y 8h F% (ɿ ENИ/I g>7nHdjvbd,]Uc&ӐZSXU*lb,N&Di%>cEsSE/{5G$y̧6vOU(oWi]㝜F{W+wq'Or\Aҿ+;ӥn/S[)CƹPi:j#tkn[ ʤP^Zd(-H |w,ֽJx+{CM=^(oQr`czĢk&͌0HՊc^-h:@ztM}yɹRrNNvm 93jces4+D@=(O;wJ#(xQ<$U݌&\aiFo˱R "Įp?pr b&!ňpanк';W*||'3`Ztںw1sEi_[#8R  r@7\y*5rB 0ycg -<ҭ7XyfQt}S89)8,ҕGQ 'T|\i_k&>+]ʩ\~ٔ7q:2N8 ZhȲpF'%p0]vGOsYz qJo((V|0 (Ҍ|% rO-#:?慎fr XSqĿ,Kwn_D[2rVC,A-.o:}ٗFr| !}`S\yme,iyAkĺvYO&o?V9r>-ry- SnB[}ujW"TVFq5!57e$oP]O%K]~l+WMݕl"BGFYtwMmGD .|z ɳ g􀦔TSoj"-U֭'b0n8V|iJxshZ;TIdHmhZIm# _׆#Hff1u쮭7;IFG0÷g103Fi!/MP"qQr~beFhda6tŚyիͪOˡFalE(En/Uz:(65U`7Ŋh 6bbn,3{.D#"L=| smVs،q~՗=k8DFr',5T:4PT+Ǟrt)f9[oB_S1Ooi!^=HpNqq暞Qj< 9:?9VAoӹLձb DrT{( +vnl^7ŸʃM'uUl9kj8P{,,bt ?wywySg}$KyCohZ -AUˍ-ƆNrkvͷ"b4hkᭉQ6]14Jϕ-{Or9;;+Xw_}+=Ҧ2:K@xut%f>!_HFW_U-*p zLHy]"(KzJTrR]L /{~ʼn9 %}J@phOON'u=[_ZfRm&1ֆʙI'(#-&L]:bQ­,TP3yu_8웡vihBsV$.>nK]GsJE#f Bq]B4q?)#U"d)#AYKetEqoA1**ostn7xq7qڲxXOLߟbJޓ.S7$( U{;~-]m;Z-Igf6[ "mL/ nFt`2jnw6Qnp)9"2q"4#:,H (Hi*1zIF4NxLM&NYLn@s@QhB.y0ϒ0i0м8(ݷ!VXԒGqW bUtlK`p8Ͱlj<:4 t}n;5u.~;Jjuҟqz}jwGv}Zސ:A v vNi=2 @[tGV/罁ǀ'}XqΜ?hptKz_OC:uǎL!N}V[gO/Ŵw_Ny Zw4lQ;gQFK{ԩo~NӂFO@(*+}1p _VXV. 7У];e Ƒ/T^WS nxv*C PYcvvMwTGDۘ(CF.z " [W&q_/  @hĕMKvP".i 4b;NF,>l'q`Gy 204 nru!jp)uХ-|7- }yv~e@j?] B5sluI2$C}xkl[c[ q19LV3 `=Ӭo.:e2sB)NRPf8 D+Y#y)pLHbwS4[a;E:iQï%ƅ%,@[jG(Tϛc+p n?~ Ÿ1觗ET` |z/<VT6hjyȰ=?7HeW/zA(55``&ŊbE4Os\L"aQ6*Uksu RQhMVEQM"W7bў^[UkB YedES𡪿._fք]͎jUjbym_i=!8NIMLPce{h] 'l-[7\fuG2oKVe%wd! PrYa74lM58^o7ڝTpՊ,1j~ j ",]3- [4q}ޑ[a=,~aS$HIV\j vqfoQ[ Jߴ_ zߤb H|/F]+k)ÝbBU*p]_V5QM@]+y*E=I%Dŭgƻ_ZG;MC8s^¢f_} Z oy%IJ u+)`xjo0=c? 6xV]OH}_qE6.ڮvdXMv`Q*ǙI;LBيgdі>k!<3s\=_R BD#jJfE޽Dˋ漐,j&eABR+>*)48rBiT&URRӜW0r8PRB)赦#ˉK*1K@x4.Ō*Qo"r.2N2$c$ ҲʅKUTcLik\ĊAH @iӬ~s|1ʅl =Z(n3S 㤬H<~X2 U޻G"$,،K&0NyVy^Ҳ X Q2*R(\]o,#pMv©tR40u) :E4K?ʋ0&h_S!ǿϞ߶sQDAH^\y~7l{c14H<7`}7luuν_b_cv c59! \з{~'w^bCQ 3 CS7]95jow.\c%4j+﮺9Vq(xczEMNE:!0ۄt2Xv[T^Ev"m|^nF^I1=v׌Z|nI:qvɧ~fo #d&q*Zd)>^)aB,pI{\8K&Y~03*˜JܿDaQ#(0[Kw:&=90bMqƖӉko)CL #hm@XMS_i$1Տ^>ѻ& Ac}xhh&Br?]bgiP#W ]==a⦹YmW-&%8#!)^}VU뭔+aYR}d[ }ƫvE?s,&ņ>4T$zh'eL k4 _NtgX6@c'ӣ}e03( gѨɷG6ts8kBPVߦ{J! *v~¿ҹռ`ʼ1NïiMvE6,:ކUg{P?]8~2N3ƘxX{oߟl+v0ytu + Nc@N{*l&DgsEB]Uys󞯟D72e$G~ :tbY f`u?6M'xXDI"ø\&Tf"5\~ XPSf~|-lH"FfPG5zLg(&Qt'<`9Qꧤo*Ceo,V2~2:ˏ`%әZ$e@2lCFA8si vIBB Z@8mү`q( ITFB Ў}C"$HͶ蘆,ȡi"ֻ%218By& ]fj])TZi&,J?Vm!TP5 jv|>F0ԋ+dpb%~b=hp}npGp1|rN޴G~cg;\zvShGߵ`0:;ˮ/=?瞻 @ 3Q3"aΰs{z_l8u>[hpvwMxd![g 룆Pи20cӏ뵕y,On]Z-0!jJ<뇙7w;dA V% ݫ0w_ZA#GYWToX776=|r^FCI/)"&ϟ'ٿ,K< 2Ob2"J-#FlG :*F:Uޮ50v!g"ʯWHolXoUԴWE%)gnUBm]XtF3|gZ&(h0f-p.KJ`7)Lh3w/%+B&f( xS!7(?@v"ªs3|DA_ŸE*mёi wQOH p+"S)6ˌ\^o[xfq)((Kqx9乔wd8e#< )$8ZBy+|۪P?)D>a\Vk?W rU_ 9YX0 g1@VQ4 ~ 4O,VGT6)OH+)wϑ &wZ^'6&mq즘8m;vrr_ 7 M6 ^F7 mg+0vT)[L<܅/+y?i* 8[fDë*g?r%I@UtWYw;)ϞcK\g0I*{5ʰрD><2=}c4xK*|Sjխ$߽ wʮl᫚tjJ xlnbLL'7)-8YGY&Tee: [.G#E%[&DykO&f2Yqۋy^vWYѰZF{ʍl4tɳgu/@;8uzW'*T/:Œ遧`ɒ$Bىϲ%cWJ;Kցu}x]}sge2EKnLϸcgbyNQM ?۽;܁e6޾}{tX=wyr3)U{QOOROzSYޥ߷Il(fTcwz6*P.t~φ~I_ *'ZMɣ,<ʋ$Q]QJ U,TeƭK 5MF: ]q߾Tdhi˄ZtenPMLEQ2bTIY=Z.=@l~?2&lZu1,pt- 5ε&JIQpQ&Yc. @H-;$;kVt,٢T,N(B?]U#b:eii5x2t32L68Mb6)0!kH(x C[((Mzfzw=PܣhOugyorH=zZ}gxݳo?4^= cN NRsJw%pD,P*pFz3HM&$ ~G?^wq"\iyX>T⌠0MHIZ4׺JO`$~⡽ itrqIJՃzի <|ءQ6n Jmu;3uûԛӹ8hlF>HnOn <m)UJ7Q$*+=mA]o23 YRGJ7W!+whoMgiB 9.R|~C-:'O- 6fه|PBQ08)Zfj} =7E~'g'g-#|M$'INSgv.v˧Pa:&Qh[ .1!sPT@# ōk=ت%sZM9nVH Y<ʈ0s-.iۈb1ܸ [ o|kDwʏI5ʗ2$7iktu4iu˷o޽~~u_</__ۗ/&O1urKA<.Li#=ظ6B% s "m2I2ל?\(?O 5I(փ VOŅg4hZgRmxtYtE`Vd Z% y#kQkkj v}T72p)Lnyϳ,,#AӴ`/QH"#y#cׄ׼x},lْ쭉*$O|$Zj H^q<4ku=>$R\\C҄c% h׹b dZssΰu```QۚzD&% =rvi(>D5IJ>W4qod =RotCqsp1,a.pwjxcqGn81~y ω⾱k'3=)l^;6T c-o˷w +=-Z8j.9>|qt#5;_tnsX[MGn$wHӐ1*HR,Rܺj,>j\ _՘:&4v0n,*¬iTJ f1!vXnl*>F4mP,ɵU6[e>S=$DԴ`Yмǀb?q6Uo=.0w׹{v[?7+TkY!g:7f.+nN>lY:0XS}6t̆f!w0*NbZ tZ5N^Z33($TU̳8]7YI գM@5u5mC[o!Y:k"M-n%3u`#iܼ({vTX#)qwJF%1{F@w%N,^4/+Ɛ{ʋp%zа{Ԃr3[Kmvv5Qo~r;~^΄e0l쌌r7vL <[@Z : O-%m*\Bfr -%nte5ǍVD,m5"[FdtB[M2H0SEI+c\(#f ؼ}1r![Xqm*˹ vы3+F]-|97n`ʤ18u&D):P.]Zo$$[7BXW?؉I8 ÙF{}3:'͹FԼ߄mފAA`\*!Y+ ]qfA_Mdu!=lϭ/ kCbl1s 8M+浖7-oNXh$L~U1E+ NƜIrz:S塞f r&DZ&]j9oUYs .'Y ixA~,mzx癡%-@ 0$L9n4 {3$4oh>Q.J. ruEcz}, SLbnS娗) 훔/rΙv"MĽDWvj[WBP/ٶ9!"?$T/+?WɳJ^duW-5#0@z FSIgֽXϢܼޖ"oZm51dFr5GWRƒbZʒ-3 ].5E+@."6kcY{.]'3ԚJWG.i5S._Dai]L "㇆̵t.ΥwER?s#_D[_bw!0.*p٨A=0R=`y%`E3B;[k)!p0[cveR4nP'JZ.A2F^CƟ}%UKVr;T\\) L_C'> ¸F8ϑ\e(qY,>$Ŝ 24*~Ga9Lrϩ3z48Q?B$4WSylǷuݖyBޛ6JҦ(5bއv avYOuI@lzbOW1'o?f%ݰ+|=i8XSTfyjaTQCܑY/zEk%\$KIf8*O2#M]ThIhcx5,ׂjM67]/c:FUb8I&cF䠖]OIX͢n9bP"U 榸k_V1 k x2޺'T4DUac<{ogax M/I"IFF&.2Bmr'[ ܉pm /"d{:$dk;?1wfR3l9H/d r O<:# 1q\}}1Δn(3VxulFrf#W:fqmUKMt.oZ#bSR΂Qx;%+ۇ/V\(U:-sܥ~i߾9zW/ }>yƶ<)H mʸ}xڤ^y ƷNή{` N k<қe8E5 q6n&m `s4N9m'Ѩ;laK}Ak]\S͉qR"CdQNz7PSшu$UQI>OAV%@:*8 ny$' ݕ,%V+)TErEեݲ},!mmP QDTu&!긢\ȢR-+e,Vꎭ]ڵ޶vۅ~FpU5P.O3{$KoW0BdX8rZ g*)Vs ԍАO{*~{~ 2k [G/s93PHɂr40cD[Sjڨ43:8k= E0*d|ce©9Hjmohj{:jMf_@>WW~UT%EP{blj"*BO!D҂hEe2#v1APT|Q_ͽ{A b a\eJ| ~s3ॵۘ^YcUg 3Y; eZ6 N30dF .U=ʌl\syHﵣ9rǦ*gp2 k`FhwP뫛pAka CbHeGiNz| (NyeJd4q~jc訪M sUcQKA'C }b)uX<ɷa8h/J:?9韚_Jˉ4K37_LBXܒ.Vʋ pxvO@jG~ڭ%Y5R4EMqpf{ϞkUI"sBL9/[uAVKhuPGq 0B` Վn`||%fSz,RKt/ʥ ٘s3%Bϣ  "rBYhSufmR&Q$?-M&eKD{` Bh#‘Q8ӫeI([ިwzaEݶJvDll!t DSz=Z_P跮Dj3+E~B#kϲe~:kU1 >2!"Fy 'V>E S r˄Nv#+bE7VRͮT zOvNfOaQNfn|yt[k1Ǎ~sQŗW j'Oez Ǝe%^wk6klnzٺ9s7ּ>Br^jT gٲ1]tu'.y:76hy (''Uَ,ǫo7RC7~g?N܉ %1]Wx^uxۄ;m&a9`KfQJ`xJK..&D-u!dSf\k:X0 ˄DKRI]%%u\y'蹺oR? h^uatѦ\k}@0~t;0XTf6OM}9(ߨwxq [M |&]2RL&@UdE߆95a5jݘ8Rsb/=U̪|#Tf]QP;(CY4=\,,&SPBsj eCH8c-憡]CUpny V,$* o? )əJ +IkĒ.#XyФ;c&'g{85/0b>\L_Yt&)o0k EK6|/.WhxgI]هx7W ,6g 9J=6'`S*q]A"U9߅ yq~:06uBl gnbp=fK w\t?^YEPRݕb-XOf O:v3sc5"q9:>254?>j.1]UjY w߽|}V߼RoQ/]$J_u$ǭ4{pLInRQ},]t$ b`WtSw@Ty>XJFoN84NQ}Ԑ?&f[>Z}X6u û%Em,IRɟM,y9AHV*\2 fȭe`8أsS̍}U:;=µ$YH5К-;\X0@4 P襊?sD]Q6t\zlB_iDSQ‚bQ.cy5hKRDϰY#7 " ¢._e';MdfE f$[)-\{"M %jSm.R~%7)kL@dLjE nf̻ZQgEy\K*2m 7D1oMod,L{Ct@B&[o#r}/Vm>թvv\KnBi cD,yט1BoY}i,3[WC=5X ?\dg7\U<^r83+{uy5f,ȸ,38Օܰ؟23c=9yx?W{#!qt6jJ*s@1;<)/~L)w!>(svWOBꨀ>9^"_}`xXrGLK%߂_[>9dlMn<&;pN-KdG%*2`#Gr+ s"9]F|׿S^\|Q?_4̷ҽOWs/*oIJ_4 S o&ňx>wr~MlqHhibq29|]#ەB] >FhoF;!ɶfهżڵབwcUG}elMyw ez;pa r+Iö8e?A7x)#, v4<ћ:Q ֥;zoIu*b8&uy-e.G=3:rM8`|T*Y!}ߛQki\6$Wl 5d;|m%iuYɫ~MzBKಧb-&6O`e|vx{3< 'GmvWgf& xV]o0}^~ŕ, ]uZ԰7īcgځM,_~ƣ3q24[+WGAN Wȼ)Rm L b* ,!FyA~u_!(_`eY]3 NXt7= ֡X_dϠ U+&I'|E1sl8vz.*5Q|5 =F]VǓx(tB0DF o_9T֣ _֓IfM sX<5iKw4(9Ҁv(( ߔ6=;Hc})}juېǰ:ͶfWꌎFpa1ui%{\dž#*"09ƉH@#^Q};MbDelr|x'xkS̼-;> 5O#3D8*UZ,?3EIArN~qh SiEmjbv\ K'((`SW\4LhĒ R4cO*'ҜĒ< O*pqf?#xZ{OH|X`;iu0 LfL!݈C;Ӷ[we4VΠGNxiJ,&wwN^x}8!FX@.{`H0A)I#Id.W|ʁ)DI:%ףӓbH&,Ȁ""h>z u д^("=x,naic},{%OyX=20$'&҄.RqB "|r˸,3^\8J(F̣M!l*~oE[r͘uH3=4}C~d(G@,B*|$DJ$xKgv 2q2xd{|'^ FFn@v҅&i4|x4b֟o4I"ع[z1BP;?t8%_^Ou5tG  ~T^O #ɡG|>Ő`ɂ24jD C(O?shtSyQS^lw~&}%I|wc#|L+`u?y!ؗw-{|{kSd܊[y>`Q!} 'Z{?L{!/uh⢟ 4I ,hfV9IoU)aν8Z`;vaL bE+bʭ6oKe0,v{dd]\ܽwl{ۖ 1e$с^"wGnVphJ(Fl)f}ض{`sCg/5 t66pϊc1!a# DRcF*G[˘J@P}J4zTU[FXDқ0j{*,F"csTw`>Jp~t˯_ϣa l4A<.J4-L^մPaM`˙ʞh( IMr A\6&e<rڙ&/yT'ah=PpD>ޜlw`8P[^EL#< @ ^GźQ/]J8 S6ZԹ4KGvyC:_8leu^1㔨&lw3!h\~6ui9#SJLu4 ^|F4i v)δ8HdS]& *.<4Sht?}>>e$tY]Ӭ|=lvr6/BZR/s(~^ Fv=041:^\\?`u/0ť{|=5%-pl~^8>느N5];~\ůx\h>Z[#uEcRף?-Zh]ٺ"JqUzQ͋*?rpX"O(#&p,= @"(9 ( x=g<Gy% Q`lsȏY e Y;ў:dtml+r=גVtߩZ k5#oIM?Ztˬ iGd, 󦰻Ngej3,Iؽy({ȏ dWن]ZJclAP~YXێzS:.ޭݸدm;j?nltc18$Jge>y*^It(ʏ#:+n< 0"=g,=2P֎͕yѬ$3Z=|[ӝj/ Md)iKwl8l۶NM60h+̚x]+mԄK..93Y(UMOm~i~:LVnx{0mf6Xf/hx}kw9WϙfݙI'$Lw_SI5vWUag0;᰺JڒK[[׿[U2M\FmH}?:p.a'i~2tvT_XISETfa)s?. U2QuQQ]ljY_6Ù2-\ t kea&I_('ǯN/$l4]a7ȯt2o4pC,Q C:lcwGhNjta:M /ݻ`:Mn25Ibey y".B('([ 6:$"WdMQp:.F@%8·~;믿%@0L'6L͢h=KO296ھ~a54M&s`r PN4PO',u @+ytW!_ۓ)ÝL\G#9oC#| .O_ih}_%~Anq&xD4~n ?} U4F9m4 R"'\dM7Kp>sߓ(4 $G:{~4;WS8-َe!.њv=,"_#vv `qJj`ytpq?33Q!BfRnES'PI&Gh%<h3Jaee\p<&\i[y"/@ԣ$xH_ o 99up<=g烿_Sc_o:I+0S`#. ~Մl_@MI޳8DihHnhb*6a^j8g+]vM{wq4x{~vyv`4м2ძ L)O4WAzuvzq Y]xq`ШHPBie[w/ϰA9 i8Ttt]|2Aqpicpd5eU!_>pjqEOZDm&2 ;Eb4ϻDT:OߝtF 魊ëy>ʢ+ aϐ P1dX"HލϨò:4M!T4c2!Q*P JxD*' FA?W˳c4[-z=m5jz`d)1hHF3 "]TiV >OX3Rjg7h`]-(]Lt G3dXN,`""<&=")I=>P=u_- igS-,`.܃=MaT 9)bTGV2S../?BP4t`4osuyx~ dFUzvN)KaƋPB{+ rqmTjk xxtzpfݛ7GPF}y8@, PSWMdߐq,ɣ_oOb1Y'W?BACb k jP-=8?GF2&P+#Ԗ}l`~JSκ5L}ư=PvGg/.s^;"mP|/$XۓËK'._zy +?K."IDDHVR+Q-.EኇJ5Z#ŶtcY8d 3!4ߓ-hod8fVdL!*RXji˲u2JmxͲz}|@_As^i i^4Vؐd1 u LGrXuht0{O̅7.ѵo`B=fV&cfڌ7 47PJ0}܇>C1.xXV7>QI4? μs`j+|+g uXh&~>;?+׀/W:hR\7M<-+A[x:f0Sն^7fD1:I $ ʧ  ni` fBy:)qj:G}X'y^I(UMfb|$kw񥱡ՀHfLjlfBLFkeذ-Eӝd\LKTx2:KU^Ba;a%MH 7tnjYFJ)BhY2)*W$Hַ&X3ikFU9 5i5Ⱥ*;cyOwt!~5 RW)BT &~l]*ze`2~j($99~ sP 7P+Y47T]=V [Ktsjw 5lҚ9 Ѫ$LQ@S<\g$ynYp ӇoWQLJ iI88IJ 1dˡFdUBOkۻ@R! B7|0LI$NgoqbI"dĄ# g@B `2__Ͷ 0$ wszdA:#>hc0,&u>E ad #<` 3iUHb 0QLb C1MyƝ9skE X+#UЅ2' s>zcC͟`)O"=`j͕"\ԡR̀&Xy5 5K֫wGڦ) =kX3 jiqF,d { gAY$OB. uVD&ۻ-O{k6NQ4ЬXf/W`#tЊ;}2dQL+<{q& VM /fM6@]jרAoo3]GuQdFvTK@Xvۖ/;UBDyAtZxJ]vhAyM=K<[(*uxmznw?9Ԫ[`JT ݲrZ1ձEZ rTey6oTxS2rKo}BJ0D3-V`,,B!%Ygˡ"z`q*_%\ EVlQ}&+Tv5ak HtBg!HγBZ _^]mWb?Vp eCaſ@Xi/^\b8&Wٱ(XfEL>oHbZ,Zw83-s㷃~m~@nj*P):^-/w@869hֆZF1?AZdAd;;eN괨yͻSV ; G@߯ =VLeD); A+:LzfL B,i'i>( i`N3|LO>~Z*~zP_"G]{OrVp߭Xia=ޞУa]zKۥJw>u>%s> C= 5}tj|3`=Зx; ? /)\\qqj1. k9C=fˇN*GRѤj؈Ӄ' !\ꪬYСz'xv'{؊X;-\%$1xJ9[*i8?=q>YcTɧes]'2]oOq n:5)~wq-(E4V]O31Oױ~pd_!eW)y/N\EOtn=U7K]`K-VqdSi:Xp}vq7.S}|J(BNᓯ[m2E@Q>$M} ǮC5M&=m_b=RS"8O;1J4#MU'&ރg{%x7SϞ=bGs 3GQgΰ*x3r0::mnocĝs2S:;0e0ר' ޾l=ew 7كPуzBҙNj` a1 QV݁%"5ni L8VG!S O>]9 GtLO q3W@R7A:U: SŇE~h"2tP>xi/e7=Ɲ+>oS@/ǸE`Ж_Fo1ps a( X2'z{j2_S KƟ|sқKMχ''g^4 ?YsU-bƿbob8ЛsB SJ: "WE@iw{^),U$d08ޢ'O;(qPdޙt/2ҡYv.DJ0(g\Te!GMĒB,btx#@ZlOg%n + Ai-[U;X-0ЕiN3¾t,@N7aR/A?h0҆LS_i|SYKʋg(32!N P4сx!3Й¼젷M mˆo[h1R('G!1O6?dn8V07;BzꍭM'w{%X;"~ ׉RFe)Qza FP)n`9Sm:e0M9vqMݴZ$zG&jo)!\u)NF{C!9dEMOp7nĕTCנ8qR8uMmӼ_$nq38SPW,M|.d轛Z ym YlOE>RW'Qw G'%ԍ&u_ݧ~x 1w kKl@י(FNn醃ޚ6{{P£Om7x JTZ}_Ft7Li cJ1G&^mxv;P*Czx`vYypq׽rfۢ+H/E+MkEჵTVܹDIM$ R3OOف@cOBM}F9ZVu)fn FV!yZ]xv 6|Hֆp9]/{}4ux]/KZ]}hW5Դmf c[УГ% )_ FUe\RSY~Dv6] Pw.m5k ڹ-丹i:SorTY{h-R)dݨS=`2 <(cөfcK0%.=Iŝ> U):[oMCI; tzf$%&tIz}Zb˺ H_%1Td=HtFiupcBϪY2`{eуI⍩ I%ߡC@Gzg+ 3D'gێ8~bdf&tn)*UW#1.{a(8壛*l2\c~gXL`4eC#͐sRv:bcS哱tsbl rmffy mfkXa7W5ɜF\{qydf|8lj/N@XB+Cl}wBWw,f'PW"3{l;Bԉ~M/ѱ$x۳N;I0y>*(b.iv[.NYhJ%׹j({Np n 0 ?EyN'mZIɑNaOytBSXoMøn#nJ$MeyঽFEXP5G+ѻBLQi!N QrQμvf34@-ftk'L-Nd>o{x ^Ïa'ZFWT dV^OQS-*-**{!Y-K|w`z@^d5{dKe2Etd%Q]HЯUKxۆP ܋[ lx  j;v5||$2ipU/W(XvI(*CvY)dna$̫ɫ኷稂e >ՔRk8*PzV%DMR>;%,q-΂(F/p ǂ:;SUqkH%+C$|H bdkB [ 0z f bEZ`PU7.җRxdH#ΡeUi]ץ4sn눖 nR%J\[~;)ލR*C,p`FykNSv]n#F^AqW0%b)RO1 [ i8t5'kp Z+[ A9pܰQԗQ\w9h >V}D*=ABnky-('$[4yfg `̖b+aX_~O>bG㱡 /T2)^8ZS6j,iUɲP+y2g342*%㐲rD ɓ5VFՂK, צ1PJyat)[U^Á}UҎOcb 0;*jd2/`t'ԂFB5ɋl|⫄ xow{ƹDoY'DΘhN)S~bKjk$!ʛ{,!~Fyg!CA7xxo;1 -%zB{jqAʕ>{^e0:0oVto$>FhW,.<-7mIUaG[ɺHm2ސw[.5:2^񚘄J_r&2 ޏRcdAyEUĊk$.tPaN#L%Yt ,G\ǘ\f=bUuuBI{٦6]hUtoLc}~:b٘i6tЅN9ߎʖJbe/OU"1LWj8.vlM*NSj91'Y@JҘA|9&hT"cG?\ݸ` &0~<0}{j@@o8t\-4ж4A``6t݃`5} \32bәHkfFL qJ>#_;#JR%ƥ7s9 |Φ]DƜ,|M!@udٱ3-kO1nVx[i 7g޷<4px[i 7ggf*Hľvq x[i 7ggf*H~k;+Yԫ@*js0PgxWQo6~ׯv&;unY0^`$*B IQ-jv $w}wd^kx6|_}aJp ə6[/ o`*u9~i_ˁ[}5Ծ;:_pB]Õee,fPW6W]S^kmڭ/)RПrm}B峷9Br|*W-|AuWdei`LHv{s:VnՈg՘ QKuA1ZpLJr[αpފ BBDTٔ7B1i}a^KjچPL"e'R,:LQGsFiT" D#uouRb%wBXoKo47$)7h|TKpM k^4 (JEHDiPLyI]BzZ)8--9L>Es࡜*4B&m!]rࡺJaMM䥶Qr>nZž3 E]yb~\b~>_,|fsxC9OV Lq.%1Ԡ0n ,|;~L&!yRib8LBa31EMH'Ou80 M%C/dzfu}4_R4?8)My+σA8bM ~0:T EAJ/n6#H-x MFq]snM]]51 k}wu$O)O¥EȘtwH} ˆ˼3>}4|783tXt]Mk%fj}Joz]TDOFLM&DI;E<]8w87F+O΍)"0ȟ7J /ObxN-{҅ݐB𾆱P^ i_ &Nj͠+bQO\.M2Z49.O :濬pO&W>Z${}I~afA1hmP4_S\Nϙv2znGx->r?DNѿg'il#߿e޹xZmoHlmc'KNCizwBP-T ziCΌ,-64pHCi{Ueb_" oS?}8A*Ņ|ET9M"jPL\X̺U> ͮn"\ЃT"#\YʜEK.d*U 屸M=g(r$q?iOg7Cjz~u=>wW/?Ύ,X؀`嫥̈DR, a2r!z 1յ7;}7l AA5o  s=oHho b]sJ` 0,+?II.X0I$Ics@tzbgGAޛ`2viIrLN6w!"#zgW7~o'TAT)@TpQ1o^OO_g$ҁ7E0p$q%,/qhVYJ^d0Zlqs( aRoc̱ >@_kHX},M7b0`sŁ[[UfoTy_ 6=b%늯z2M٫=~ɔG &)G>ps;8;yP02,9yQ&PĊQjZmm,FC_/=}Ѽ;-.ybiks?&k˩bv=:{C6v pB 23 h9%bԒᏐ 29;=|Ǯ1R.z5tB .5FH|3W0QBŲ+IoVVq1O,R !V@EB?C9xkw {LZF!iD|]BwbbQ"2 H\($FAXFe"A~bV,N?wKhn 8K"S%j锱aC-EbUv*tڈl쏕A6L͸nEVq` k(S_#"۫~+:A9"FR> M +CJ$۵q`BuBoAm'/ n!QiɌ 8^778hqv9ƛ!|@ I&Vl 6]ΦfRuc,r҃!+f E955%S[xА:}lJf7 )WW(hTʍ]:=nZiL4)ă[ɋN)scKSt,miW ;P;oFv~z' .,')d} 4% *5*5}SӡzqL39jAu6ν6k}hh}SӐUiSοω iɡN%z?㪭ov/:+ Αf[j<hml$NAUǺopp&3x-=+À6kc%u6X cvTj]to.%#_GQS;9f\`hEN,;2*@+خ*1j8<8ֈH{ xZ&NM# 5HЏ?0εJAtb aP ڂR}τنN}ӞRqXՓC>T# )v Lg|~}W'Edb$#ItY݉g[C̆5rT+BRQW%LGh~ءB:jB>5ok8;^7k֑;=Csf y=_ TO=d#.S5cv'wY賭;!K]^(pf]ilݒeg@Ƿ8D5wؼu͎4-_Q0VO){$x)O@rfl]7NvxhƪmKjVgZTFA="MKU+tBUY!\χ%H 3,Syݎk4Ok3ySkjsXv|mzO}nA Vp݃w=a.k.lc:5ؕjBOVqjDD8e{jP'n:ƓM>: ؼm 2iT]qj}7Tu:"PHw L4 m!#iVm D-Y.S0;YU ?\W$2_r+4p?[rƭwbQyǵlNn>K]z 1g1oA!0_ȶ] \]=&ثmCajD?ڰ~u|/jO7s4onxXQo8~&bD,Z-e+R +jOI miNovBE׭T)ٞ1t#0Ue ~ʙRfbG)vWppY*˔rտ[)6qw,O0f?q,"Pj4b  t3)} 2>_p8![!<|&hEA!O9d?G١3jhZr޶@h Ōxf>)B JBn7QDkZ{vbhpsХ#<Ϛ\HJ lKAЧ;Ia8њpo?[Ϲ0U48/cv.\pGU^M?Ƌtݛ…wq7߻o㉋~*`N,ؓvەۗb:PTR{%"wrgB$(|u_69V7֣3ؖQ6rR..0ׇ%2o ,^hyԖp^[XL;_߹tpdTALkG!*=A˘ =;[C$hsOs~n(1$}hu'0a{wmp[h NS.qu|7n ݟjrjr2TM1c|M6A:ǥAe~0NQ&o2>TRS.Ι̿4DY~BX3)e\5(woH;|e1/%$ڞjlV"A-~WL:DR2N('bjl2eyu1|fl1apq0}*hJ5ܤXdRbs:c+ ţ@!lr Uf~1~>3%iDv:4TCk(wP;VmL<2wԧBקkWENרp-zPYB*5mSj`SJx nǀrţ1% [阃yK=X(V94'3ta)g2N< %:x ү!s(G_S4cSg0Z68xk^8WoFiL7"?xL;A:)':+gT-{amHP]v0fvVK5T'gj u4Ixtt_}“r a8ޟ$J5w; HA$XI`I9:1fSl. ZEع~D{ , 8gaj7x$I* %jHHB/u"&$_<$@[r3}rJG伔kB6iQ=%*0C#өPK&!~X%Lq.$+e:̦dL{%dZRF5]ڼ2) }վ;Dǐw0؄yeS:ެ嬃&%=#1`:6PE,f)|DRl4[?J!xӖM sC@vea8"/ݚmzMVxȫ Y۾S Џj5Gx~A'3XXڀHY4QOp)\x)vkZT'='֫k|ئg_73'Εg+vSVeO_;ءpCg.}rNY2}ֲE q/dE)')k: O+.f>7ʾ:Xf"<FsO)8*)4ײkuĢ{ t]Xª4V|/iҥ֑.NF秙#oPjH5i4\re\sM2*hY#Ij\%JVS S[A;6+Gt S+_:Nk^PcDvg*e{ x=;㜧[uw{GCҵ6kGgQ=B:CbLM';UQ,UR4Tp&+\DH@JαM<*ys|zv`|b|:”J46~ )ڧEd7}{BELЂ#ԜYCtP?m'v:{ܵ 脬~mpҕ IL"sM$܎/zFQ8>':!E-($lɏ-7Ï{[!㼪15`&lUKǸ鯙Qe,J3)B\3C\ޣ)!?큭\RUilGrzI)6#^*i VF./9ςb'28ʅQ~UGZ7ɱ-wVtP6 o \ L`֡N(/O :SMy(m`\ڦL3ESb (qKB~@;MZRce@wپ,4+[GSS,[/I#8֨'7ԷB7B]iq5 2p,6»7 ۢҹ9xS)NZŢ*[Lw]_ 'Ol+2m4ooxwRփnkvJF,lXk8z- JOq1D8Dô ŽwlEo+jBQ޼yCϧ̣Lur[xX,w<g%*X)ؘw2{,+ 1/p+?7֏JAˁEvwz'`}p&_ (?֊*a[p՛?1MіK XJ ϡX_ԍnu THT 6 V(g@TbCC}|f.I:eTG{ёJ"&2鼕KcĨ)6:,tqnlJ\qR L%ۤx7_"JxhDgQ?zpDg iy0+xZimjh7j̤ZI5,=-@3 Sb}a\|@qi!HID3/K3"YSԠ2RS\'o&Ifu~KR)aW-2KHJD5``]O4ro\F$̖|ɭ9 3'Քb _T:44n0&){AeUh#㝑ل80~;^DGK,0|/M[cfe1/mSb8+F 4X!jBDi,Vdk{Q]v]gc߁G? cGtOHtc*-ҿG|m۔jr:jʍ-,Ϗ䥏!Iz{}oZfկZi+ rGZZdى,֑ya 1n9윮ǃqKIk49% U1O`q}2&쉝`ԛzuٽB'C0NNgv9\9 jYѿUv[bx%Bx f^ep1=)豴x=ksF_1VJ6)lvsV6i]SWC hR߯3LBt.ʅq\_.\d~^Dɥ(nR.ETbuq%R)A2_iQ WRӼ\(ׯ^yKī\ t^\/P~\G~)e}^8(r5j EAN4w~Bs)AaTyt*4>W,@ҝ(M ,F|w*2 yHgd*`&aODJEyQ~~9^YPΞ2=?֭ ͳU_V/J,vD2e>NC_ @KfEb/l{$*llwN誘3(BF#KPepg))+_e:8ĞPD1Z>@ TDy!;3H/Јi.nVIr @&\ܔF\-1P󎐏@{`ybp#A RAt(]1B{H7]m,StLDRt5q)4,-"ȣDʛLrX%sOzZ^a2 j_H4PX"}'Y|8$@G qׯNvz>e2J]{@bЃa=>yq oEV̂rSA2H+Wĸ}(>XAݎSu4 ,&_%h se~f8~_L>O!kM"<)S,`B`K#Af |jTMLWS=$#:ݷY)9,YJ9#_Jtgńʳhv@D ≯Aa-JNqZj5GZPC,Abt$6昱6pǼ]!cW30{>i;!"1uvefa-CO,LTé jk;7;sy 4!X Uo]ƴ#O&mڛ07zWR:zW n8R7BR\-p-,;{`%^^`m>ι\-vRJRIrJ=+ Ehe@Š r xN_`,LА0}NJ)"429.shue8߉"c&cA9~T;#,r|Tfv>iN8 c= c3Hp#U6SUm~֤p A8P3N'v?/hj?9׹ȶZjr*r{uR41 :7'(R4*܈ ~RhsP}UCLrGsDDeube,4 N!*(fvxZg^siʽ$Q'S!GϲدA*2Qv2+o|h90phj)P >5w= NYݪOVQ]4iwbצW}Ä Jh!Lh8M(1maȶPh{R/ ^>Fl Pjrej^ZyW/3y2U7 >EfYK_nLwcY{XJO"Ц/t*VB m39>6 2{qԲD,Sf XΠDWrޯ+/lbkA2紆;.0RV:0D ~ua7xZnSpPX s\V$1^P'<@1GxORe3r1د&j'+X1z4;>>>Χj#gt&7TarZXi J4sT+TLSmTA74sLryV9¹>fUlsԧ.UQ)Vb䏩*A\C`~bнr<TYͧ/ UjOY&`u.̎|cT;8< zY0)9U OWqtv8`E J"1ol32ajϊ6^響`j27:SvE|CU+;JTw{Ł)8n͎…9NK4,eiA+(ƃ2J:, 򖶜H`;c46ZSy(`mQkcP x`Hφ"vZqϣx*!T}jx LUcutl\i*X {=ux1Z%*UI0@qG:99b urn֕ x޳JM8k)tcl ,Wg P ڪTm0Q+=/Z\ٱ#U%,aMtţsK]Sbݛ.G-cyha\@ILbDłv j Bҳ& {bWৱ,d*>,KHT [((d`vJ /``;0x S1+>g[>b3G4 KR2fk*~[o>,M`ltjJoE!vVRS3hnҫTWNhQNH/W;7+G~n׏iV emyDrHZp{z-k͆9o#TѸeuzB \aʲ曻S;Q@$jx2PD]4 ŭ p}`{]9W+4O59V(9*d;"5/Se`քSlxtpzMΟREZF0=y*5D᝕|?{lD{cv/ˆ3ʼж[ycPGP۶0^0%V"= `#짨>z ZQIm8ɠyS)2_x̛EVYNwVI>j8,FfEGEDԛ:6pB _w+ (*DB*n?G~pQd~I!MXr 'Q#;ɯ1ojiq½K?_*e 6-4.tqM%򵡢kvD ɸōz; \:Σ>ҿyȌT!gJ0tȱ0xƮFظR6M eR^n3%f˦E7(Ņ,͔ފՅA}b$np Lѩ`LtpmWK?][P\g~ Wn9tWMڔAWFֈ5\?3i! .ɂyD~k2/kQ߷#°$f - * pFKYx?K?q$aP[>D! &0ވIލs"-FL1nB `Du ΏkP4}h3Tl6ߋBZ][3E'y7v< "p"rlP9 N2jGMR-IMSg`4&2_2TW<՟zgVI#DgJDs\ם_rĖ-#K"`rNZ P׼FJU/b1d5Uzظ0ܸ1}hn+\lKAOQP%869%Ï4QInE.3[=?Lߣ5ާ==;i@u<5=zUv\@#fؾMk3fɋtGwiV26RQW!ƾAMؖn7s=;> Z\i h 4œ@Cfڢk׵+.)KTL)Nŧz1yJ: Pe: )Y֛%^%sE x !ԼTbk..N`09MHU(dBd832sR4b\\ O.l0w kMMXe5DsNz|1ȚԊfQ\pԜԒT %@).ԜɊ<"E27nxqCef6+x}sȑ_1VbRhKUr-Gv+,oV6>H@V @SJ?=/z0y>7njqUğfѣߛOH[ϓ2 sRdI[#>Ol"LUyfu{u}[ϊSgMVOחH[6NM{"//YImIi61rc6kM[q6獭*m,+&kiU&/ˣ'/i^dlV,S*9NURg#?.6)$HT1iy.?|Zx֌g8K`| [aEjiei޴u>]yUr#-YOyW-׼ثWi~3 A5#HYU96cJ<Hw!&||^i^fg:mW^+K9AfS뷿J̗rNBL7F^;(Ux @ +sZ/u2;O2[̪eoٖ4y&ɨ͗E(1.9=yhV.~f-灹 xl_Y2t[8P$$.eѤ\X22J,C6l2H6:/" UF@Z/@y|/_8:P?YREj:#E PA ;YΣ>;f8Y0Ӽ!Ec1Fگs١*}̓<:1TN۝N $#jr93Qi퀞cNp,k |t4mD>RjNZghqHlY4'!f %mN gyVR`'3nY0Ţvhňg$Q N |uψUri4HVAX١,&`UI,RFGqȀUѫxD`k \mrS"'@94d:bܗu73gBw@iFVuV5ZICFL؜〘eh!X>Ma6J!Nb ?i6CֱNj-x+)ux@Gf !!͇.JCA?=ک $B:" oS 3@iʦYΕ%At X(q(Զ$ѯm+a]j(b_L~JKF}c4m,W[# FkmJcX?dZz<uWP nڍXPt&9Ċ2 / qrkɒ#AqU>'^UBUqL=[IԽL|NA<4Me0bWY?GMoCoW#!8VT{ a "Ɋ&oc'(mvyDU7ƥ؆6> 9 b4v=2Pa) 3QMx)M8MP.%.3(8RwVCdʀ>;E|ZD6"N/x;O|+]R:%Vmb"jYJMThҝuD$eiB@5;brZ&0KVdp;^YE5N%ᢁ5W:#1+,i!B^l]N%U4e:rIk#I {KoLX95#11_N{5> CSnA.N5 C| 2%$7o];|mJbJ bLG}dM3ú,4L,b 7שp O2l=C_`cB@vYVv5YQFMsg[vx#ZL$Z*4֙GD66Z ?; Ω6O!Ot5VV 2~Fιclڐ:ـ+3\ZHsV4v [fɂkǍd3jZE` Gcqj&I@5xe}I/ {V\dt,Nջ;kU\A]H2mj9B[xƻ|^# Ż9-xnۡA{(c&!S0OάS>bi YG5|TV]zx''ٰ9k&-hӱk`/4S2?Wp:yjTKn++j)\<|6e {v4]A|:%^_*͐R! G x/ʄ{k;k=y 3c9|OqWZ'\z=?:SOϦBtqy T7;q_'<3t7l4G_ԧ Fao7[]a7W~+C[@×|Oށ7A,F𼹥 d4ۄ>%_V~.ѥܱPY~N,O P/bY@X[#Qԝ:$b}L{/hH'i0eNI rȽ8ϒFYSvgFJѰ8eGdkczOu>Uo~2::\9jAKu %;Oylvl1 ˽s{ϐc!sg'1_֙qaCZYY;`MjA`Kڡb/7TE*k(0ǥ4!ѓ8]-7k)\C#mY!Yߠdh^o#;d(Cﴁî>^TvWV" 0S7\gTD?*Tiփv -kO&ػmybx6enLjj)>YS왋uj=Oؙ(e`uc1f?7|J㍄4 QxNP,EbC8+,sMM#$#-ZFL8CVv^\e[IAPnDЁXYɀ]ǿ8n1CbO䔿<ҿ&=uNIk02NQ^94fugY/#9 tSKmv3Թg<OE>~[c] O7@?w?||y~mȶI.>3?Y\ߨd6-1tU_\f v&Û^რ4W/߾z3\Kecò<4.o5f;m" p>4[ي~⋀ĦK3!lT&T]E>"oQxtKƜU qV<\dY\pbh+ܨ3`V?HpHӌ5e { ,7֥͸@]\BxxugcUM6gY.1!Dx16Z5{ 9;{!f=|hU> Zx{}P3KyM 8qQNIOZxobhMΣYi%V|bI'6Ǭ/x<8^a͞rlñ`]ц[u(.+Vȧ!cUњWoyrٟ^ ^{kS((Gξŋ{"hH#vxVI,2}{˯-7]<.:5I/y $s(L|`q2$N 9gUfKnLUS,(n-x_)0d^!HO;8 uhUIn;j*5޳5Epӛn!Y"]y8̊4 ܖhmJmu< ;rg>GwZVb|3pD ]^5<3cij Jᬢ-l ]- { 7=ic ~8#I?c(( }*(.u2$3>؜+g'eul&Քzc NhJO߆=n> l.A"H|zzHwn7[Cn1q⓷/H2l_db\4;턀ŻҔ_b|<4Z)+4Oqjy}& Ufyov^6Wڨ\G?F7vY84}&OYDF2fkWdLM 2VEOcT&vaZ9g_`mZT Az6/"eF:P+'ፂy,Mt:<6񼢝z>3keI/5zڽ80ݿyR[aa]}C=prZ(];aZ%N`yƧL| XQ."'4XGeR'a$W";_@wvT7y= +y~;71:@jj3a1wwq٩b/|A bi}:k۬8{_1{2ዧ$ⓙt-S,I :o/3CV)2Kή bnxkC~`_C@{#3-"K,k Wx>xSVg|YM$f)rvvP6{E 9Ek -V;7(UPm=Nf35QffK̖; 8s Әpʺ?fv́aTOV*jnvXXޮ]+6Tkִ᭥v׹).m9, }T9bP>uκ3@4(L~9m ܨl: Wa}֝w!֠EǻMVrmGA;y+98KS@,r Ds=Pb.H)I$cJ BswhP+璉wez.'+%|Yqvyz;dcoJC(z":SzZh1|gV z0diNPgP =2Z~pmqyK\>XC8983Xsg}.  8!%j:  zAn}]G|1m]QPԊ媓'fB:EQ\8"oQ% 6B:2ͼ{il!(E wL̺C8v*vY~Qsְa]C/z-zI'Pwd֒#ڟ`yƪ)4-jcz57Ty25U4[F88Hre8ڳŚi"NAjzi'Ambvao%uzl6s.1]':(,r>9OȈ鄋Ԭy3F mmpɽDP Eo 51H(-"{ kTqiJAH&ja=/Cqq0? UL`vV/Wńl!s:Xi|62t𱀙=gAÑS}"Y z&N\-ud`+Ƅ *~nܵq/ oK?qφV1o4mdA Oʶxlg c0\|ZܦS DN{]^m.|> xBFsB{mVV,1Bݺת8:N-~|פxykPOzFbg8Yef޹"}JE?S xe%~5Z1k&H(> #Dq-J8pspC&W2Ŋ>.ǯN=y|r(df??\ {) K`NrT)BּKÂ]5LO&hvV܅<󛷢r,[Pww8 17J0^I'Q 6lif`}؍\ʊmnr79j,Y[gn/O9\X.R03cBMNAv1շw@lnKgo'zL3z 0%6l`Ƭm`8cOL|pǐC炝cӤ6|4xKXoDBoG =s :*jH Lp$\dDFoZdAH3Q{wd̉zٺUCi~#~5m/ z61d.9[LzV!dRhꮔ (qru6#\P,]HPL@ c6!]+V eoql%6ƝݱĚt#@J( " _os7S/'!yiDѲЌهXIY)kC;Q-Ag4+4]-Vz$++fl|x{doHnÛ }fM;{|pY,5ԼpQB6p?j{&.#Ѓ\>4˹@n|J[i9ЩB"5.{L G!v*G~5utD+!K<ӭ OmQHYM~W =fpN"; 01ߋMĻ/(g$7_3 U.Umz3*"MOC7Hp.Kȼ;D˫ڢ& OǬX_Jk_9Q.I\b_PjX*v j2n9ܚԕDJC(g$ލ)Sb&vP;t'-`5vBOA:BkuZ03FyS?L3r Li$3u<˒FZa3t4aRe qrd).'-k Ũo12l8=gyVήFHΒ7f(aA6 G9;E!}3oIZ$f&E#CHoUZP 8ܴ@Vg#}Dpt2HIy gah]r1A\i.5bZ\}kNT7߈Lh9KjpS@U5.9z r.o6oK X-7{;>瀻n-\k9 x5];O݈H9_2OBI×Hy#SK醁Tv bŅмO/ZS*AY~?o8S-nsAi|N6v9R7#q`dtgJe;c\ʁ% 2AeHQh'0G^CN!cLsތ(=upD&saYys؟TZB'mrORHnh/0E.cOU==0=PJ/ iXō jI8Wɯ|x>1T#6=(*f.mibefkGL+!Y4B4Ϥ.#YNm2(s}-qm9;i'3Gw;:1FYh x8sL ߍd|a郃k^bK7ch^4uWBjYǶ,Ou&[SQg8kl v%} qiPERDˍ"?Kqo;Nj .$x> 5[h@ąW;鴁^*{ ]az-.q)> WNӑ0GEӹ:=BZ; x}mw۸gWI,ْl۞+IM[?Of}u(H,Y?@dg7˽{N`0|6vԫl~ǗWL7}X'4a=}GL:O]Oi+J՛p:yy$QWr]FG/CU6UVI^<\üKUPb̨uYa>徒xSХfyy^9yuXMDóI`ZWu6-a{\0)2ބqðTWe9?[.v0)bW,:1 padBMsa%(x(,1B-'8 ;kV,EfYOI\TM,BpQoX/CRϓx ѕ^ϖ0?*+ 6iN>E;Y6Epw L4/DVZ0it7FwLad^?w c;ȝkch̫4i_wzA,i'Ok3Fɧ=32ѠKާQAcА^UD36,.)òD/f|f 9!TBǟIp6O<|]%}hmz>}{!ˁi܆rejh]eK.N<ߙ]PVЇ JE׃.Dsg"3T3TX *@Fw _ՉL }s=w5nBy -1ub.8"_`.Y1@izNo, ef'SG*؛fY0i ~:!6l a lβ֌5+ 5N%;&=D +fKAPNKQ 3'Gq6#;oA)XΈ1| + ok@:vA0}1/uɃH94W#yw-r&06Т f*hx49PbP0#n+5d 2C< ϑ?Y<3*[0=-@9Z  r*w2RFꜱ4+~bN (fy$Bk!%~Tpw wUQ"i6b샄Ѭ'N ڤYW *ew[X /+| pJ䒂 ;^_V9R*t] \eJǤ ݀ ټ;,.oB *N` KF7[Ll0M͟v`aZ"f6Ht3း/!!Pm)>eIqKBe4#7J>2`">@\@Ґڙ}[HXKAǣ݋{h]LGDy$!a҄I'+7zi-a]9uym'*1P%#B&D!CdJ(YAԩfQIJq<,iEUg HAe;k$BZŷ☜- Zox^Nzu֨G4f<  $ (v V.H6!QgiL= :y;P *)bqqeId%Bxj@M$ mS2ѳ՛;*3rx5@`7pa@c%l@ʃ&1:h}^?c*WTډ_UwS}PKl-WGAZaAy8HcCtvl$,;<&̄zh\n?=Y' PmV^3j0+.;Oq k]>)iURZ=m 癥 ݧ0♙62b^2=@_~*1Y! Np9DneQo ?dmZ Ů&~;Fzr޾M%JrޖΎcg36&5$ZA@; [mj}(U#Efehlo; Z];^{K`Q@qFÎpXZpBhBˉȳxn;n?$l9t ҇wq KtZ]D -['V3/ իlB.@+Z#wXǯNޠE~χ% M/hg`"j͌f>Lh+XɻmـQq1N;Kh3g>#/ӏ_~KQH,'9KQ',bZs@1Kn-XxnUpE8 }:\}A!nYftL!As2Smu-0AXFY9.ڵ g}:詧VkP/ _H5[Fmގ!l;$]Iε^&rDe_αp#lw^6*XҙCgQ6cߘ[á,1V/|o [vO.2lEW*cgDe$K/HoߠuD+/#my:c2y4% +خ Qd&Th66(/@#q/yYn|~8Mq֓@ A7&_=W8}8yg)s&!0:(G1Edd9]0CΫwOϺ)`Dnـ<ɛ0I0l}O9|BL~X<:U3]nXP#;ȣv sLӎo,Ty| &jwLl28Tw/] +]l 1ib{Ww #Pr<9v)<`K- WЦn(i)Vfϥq,>^Q/Va9yt׫'DDk?*]0jq[ k!pa{uVAm1PT^v:91 1Ldš5j#@ԗO;6:;U:CO,B3?,CŤ\lᇪlq&c%80iqE9['50d>"+,'W= ChB Ƿ0XF.HҹM;J0-zY1Î,:l i W};g2wι 9z.ܳ6>Dg\NC 1z1'@3PEc?y}idN3<@솖çt3Ss:t?7,&qܧŭlx v~u7 1 Te<+x @W 0f<.m y8N+߹&tawމN|H Ixvh A! )|?C&!sFPqCE8R'QB(wT7Fdh<3͘\lQG4v~砰ɻby#P:pM/=݌%'БҪ*V62fIxl(u@6o3h}>, VdQ!:`:!=>ąBL8Puls=ȬA{ 2NNC|BJ '@=DxGء_cIy>]6I m˒~?̉ASBF9/Sui;bUPJ->#G)m |Y*  ! mC1ROB1@T^poq Pz&haA}hH&$OKuu 3q;V-wZSs]kܺvcrS> q!ImF!$w39mi ^>#;HF(A&IR vӀ!] eO6FݣV"ptݳʆA39rG$D #/*}Х1Q51a}:^LI_ecX-c. 4<Ņǥ4)wcm**3Jmjщ ZN&*Ήxy߉ Bh"x;-봰SBADKLjK!\o㊙``GQk q;4Q/᫢_tkgzK<k.3X qjJy ..,$uΡ@UZcç(^M)2_֧Pl,zܴv}-dM;f{(*s΀ht-FM:ٴz4dӠ';@6Ji[l{as{"9(T7 whP1=3TC}`B`وg(u@CIEg!nji4 y|H u#o<.e;.|{jz ͑$P^+DgG-Dcݭ9tNo%玐[*fNacÝXFeX#dsa8GOE%[#4(&B8:fP=Z:2/J͖#evauAL(sF6I$ i%mNek,xͿ/X_VZ6W6p+O[rmGvB"EldR gu"~b#1BCWp5!A۬kξKv"(Fy>|LRH`!6ܛD EӒ&6Xl*<"ڄ!6 6 >(NYgn0"-s1S/>-h n $94V\Zv42ҳ wKNUkeLNzlߵur4MjPȜ-ּ>oK.1U2PS^( (,A;qG:M(ǔR/ [ú&@Up"0. Zo)jq.f̵xʰCI3uIzQ610 @;QKQEpmYᵧd$D6y1 2/vn7ht+)h]RBF^&`VQ(93dql]ׇr="{,yJ⯢OT{,Ktg|ϣfRUC֘Cr ҧ_|;/%a0G` ɍ*'&x:m Rc$*`#̢,#rђ!K t6%iz\hٮk[ 9(,+tRf\Y_a;){<۔hAi]hr#ӆ}-?ԄoFSd1 ^8k==vmcK 5O詫8ڌO([ ȼ!sL-$MˌGtQ[C57+FCN9Uc̒ą]hq!s׏a  ÄݓC!#<?ܪAi6%v*oC(Fmad rǍRGqgyNF4cpӿ*R S/S6]eeV:X؈>b h \~ۻH]bqҽrӋO Vk]H1Q+?^1n UR`Exn|2Ӫ /1*t9 kϪ /@yNpA1=gWg޳wԝfnɇ5z8udEJuI!/ABr=Vil>Әr@LpGPg+m}eblnƵ~EhRXW noV=Za|Sn8~M-*?P94<:ey@{?- m{Cԩ.+ 7!&CvDzei 0 | [j$0;Sm'dJsw4`u%,e3\m%nX~+ƚE C2a'[uWe54ꎪ{ݢ*Ԭ eO9P Z?;#+'LM20 :@z>nHpX!azDw#X4)i B_\'klV|)5ϭjVH)dLh+u&u2iKqM)z0֭i֫f^mﯠ7I *R,p"92*4EJR)_:pFA z2&6x+ cĮ/gy-bBH63cN%7k鄕JxD6+cMɗ|Pgh ފ1D@ G{S[2{tN"rQ*" HOMJ).=-xqyi2@X1_uUכa4j# t.^ 0]=gTĐθ;#?o2Âw Q0+lQ?廡zDS?`FgGA==~ +ǁ?n\&ZSR155P?#ovIFoJsصHm8OSzo$߼?حaLFJ7y7Re{P3=%B+p|A?&Uq[1sQJ-:p̦%D"S2,|4tXfjU OœiJeQڏἢ<P}&@Q,?>RF:vLU  E6.|0Z-Kª{JəQk u^8uC% ĥbh'x`}gyLvv-S(5jAjvr5(NX?T7ŀo-484'z/Fijmd&PTx1Pz㯦$ӕ&۫]2 z;c|@ߩY2w4)~ Ofi 釮:r` ,~So*MIu{j>?*G#5^o2GP` 6jo=b9"&- >udOB;hݖ7Wh&x'0w^L;&m;֚-`wkU b JGn!}վgγuRC\G#u?"k@85Wv]Xjg׹))#8Zjs" X oU]O Vpg~l#v3x%y5/Ձsf2dzfE ௘LpB{`!I5AP,Pz]BJ_:[؏]آBUsFU+I;4*~ ]v&T·;FPLFM!: >3|?P'%($ƚ8\fCz;(Ay$6Lk?25CLTs'hܤڎBɵsoڶ]ܬ"´f.䪚9H(홠1PdX v<:\М^7I rV^YIךO@w"gRߔB! )){^GqpDpl=0vǂ Iüu($R2+#CS7k(KZL+kS丙+"K2\I|K)U51fRI|ŗi7{;[&S-*oRxx-nܫ|,@ B2Kz,mOx,?Ds2q\'e%+7D\d[|!;¨&l6Q ǽfma;1.AzF[%I|ŗ}Jl\dIKo@+EN&nR%N)v@gl*Cxx{ Ǘ %OܱU,8/?Pz>Bm]OFHT Y(49˻+/\UuYi">;GW㽮Fk5yI4WWR\C泇Qga.+&:ٌX -nÞ IWbCGl>@ f]~%]7@5_Rws9kBu+ T"*Ekl|Z\&=Ȏ4nw>'Z-pȁ-ΜWɾ`[̌ıSƪJU^$tI$U.8ͬˎsHO)%F(ѡ#bUь(=ߦ|hOφymڧu5=NM5l sق 'Wb*Pz6 *:)EI|K-t%۵dgdI ݒ,դh]{1g6ש\zlм播dТVWq~%I!#/A 1%z6x]"vamQ)|2Wv<,mU~.Zs*|GCc @f `++UO&C^ JJnRQ *3r3{B? [η3Fl뿷(80靃AaKְ;?i ټzZX,_w 'CҎUĊJr4 ¨#cU̖+!or(S[Ol[X|-UFVRM,#Bm^v4ݒ8QlL|:Rǔ4/'(;<oob6b6\Y2{z^)oCʶQ5+)aC 3̓GS1hol9 ܨu,fE͆fDtqOl^;! sH>1Jj~Ι'*0}d/p|98!UKԌ[!,98KhxAGYbh"cRx/Db3q,g$!Zo+ijk{@ٚDrM' ԩMNE1KY_kukK9Δ|~6UZb 5BpmQ:_t\L{kiE% ($IVlaȐC6TfOE}L[m/Z \}Q+>>m`bFq:Jy*nP ҫ^g*Zuq?j=gRO4ZUW]@i~ߐ(#=$$[. 9Xs7U(:ɍi2b}6C-=0Ơj70_]M5L2@':h|V.n0.m#XiP'"HP#L ?R xt6,Hi\U'6HʬZVAXU#{B*Ne:C|mBJ8|._S5Rx[im Y6 +ORNKL<YE -x[sim ,UXj75Z!xxM ;&'3o]v !xM ݭr'7Zox% exWmo6lkr*qeK;I}hJGRq}Q-I3[";ûx[}.4U3OQ:'Z+,贐Bet&˹\$tF^Y餽Wm>N$Js+RX >'t^jQ h/mVBRCrc'/_;}M*$ҢBg~!kqlE 14~xX,Fl(uF2>nL|Ylg'/IV թ眛aC_Υ͎חsB G:F҅]$%؎;8h&R?aOiO21y"/g^ˆ_a쨄, $5%x/-A TsZ]uj ݟ65Fj%VJU6u/4ωBAҎkkcVy5 iR^nǑ8bv-awfT t%J'TjP)E)"] Ya5*fLV_ԯ*<3 pӸJ^ ZƴzR)RkpV[,fI5†: ŕ_dz}*ԹFb<>NصCzAqoXE?zLv=1~>{VjøۧUJbI1wЩȸ9WsTK2ka:cM&fDkP03°ZlrܗTV\0 (% Qt=Άw/0R:m.Z^mrPl@Vq$CC6"anpYLK.a_-EIM;p2q? ֏<Ov$TAs[i4d9$:Xꦂҩ%# \@!y7Cx瘅 5!à+zpF<]2OһM-e`.TS0IbBquغL!'p8'~٘5F?\ӷV8w7 %|x}AJC1@wuY|7Nt LHm7s䗖˼d^~ {Wϋ{rI4<;!Tyv:`.,zkz4o_MO3!3X )tVboW^M$Kn$1[4,g޽\p<0-&~s# c@5QGrkAK+BmW_2k-aוw]ea;S okqx"Rh=.N- xs}BBpbnAB@eeqbNDՍ70+g%甦*(%d&e(qqe($dVkd&d%UjZs%Ud$)h&$g@T!)zr||2LǒJe 3~J&3a6.S3 .9.ޗ;l6)8qqRTLS_XGs3sY)T9oyr!FTDȹ,̫pm*IUA86U^ `bth>8F?/=c+DJkJjKWcVthD^8&t\ѦQDGZrHQ0b(]WX5KYqЈ6Ué@V kfHiz _ڻ _PmPe1;s0oA-ϩ}J!/=oLJgo;:QGd25Qٜ*Tycn.)*HI2(3_HLaFX$ Ǜ 3)9uXi ik_鮌'1o4ӣ L%6SHψQtn77T/^:釗>}{V&ZG$1QNYvN|.nFfS+E|.dʌ(}s6`{zQ8;# -9k2Ų 3J]GJ, O9-@kQG!洁9vM;K8Z0ݨ3Ԙwi.`_Ԁdo G_>c"%FĐ)bSJ]d7# dzQ֟I6]$Bk _uze!bJl`(( 9ƞS¹ lP?^L$U+݅*~4 ֹ$w6>8PzW]iʱ7V Գ=ʢkk~ Gpթ7na nj~Iq($#sjHn5W ]"<(ʆ[l輸eycp[3ʹjҠNaU,q.s zg-Zl﬷~W0`:NHU~L2/CMIb0:VQ95u~汭Yc.`xq[GYL>z{x;cuoi\/xp;>{x}iUvg[c\v钉N%xygnС^6k5KrdE״[2\r4:4¡ }6 ?Պ/I8[D;4PF?A6R[cF@H*B '++Բ_^VZ߶MJ3{@˳C{Rޟ]Z߉/UzA@ ƈdGV=)zH?_^~IS>$yy#`_ 9XWN"$(!LJD!u"$Au~0-> SP.gmaA> 7Zf^DWg9"\%k|d Sz܊j5fD9 (qo0Ef:06'U+1Tj.Q^NLa3ǢæJƛǠ.*! r'Vf>N'6;yGZ!덓T_bpGq=Z,/_.X Mzn:D҆TV"B= R._/oGE](afdZfTq,؂MP3[.]n]=+"LT %\jD$Qb!33!F71*ma^إ27H"ddS*IJ`h0Y$hUwC'A3AzRDEwvV[5"_Mc *Q,^)`9;kƑOMAg(W2,)'v`ʍ5B)ځ!r |<32Ω 2*FW @$wK%'B5Ma5E]!CGd~UcAO! ENQ!dJiVsm6U:0azq? :1L|H z:(Qʥ@33;ry0eRLaRlH(S_| Yd}ugz4ëAj82Wwk랧?<0>J-;CL: s,1%Fa".`crkR`RRD~:ڄ/?mU%9‚u#!xyWAn,aB. 6Wq ك}th O4̭5m..]> iwuܷ 6UG5M·[ܡ_^z=оM,em^J4l'%B2`´ ?jPquȁpe5^-הgƂuba bIз\;W/G* sK @Zjȴ~j/d5޹!/ۿ)SWKn15:6y D)-Wm)i%m40S)ږOA)ݞNǓ_,Wi¾[G,5'j ۂvOLjJ{3b 󶋬 )!ӆ~ x[yNcC=l[]\C}B&Wr܆6sa H^DbnK;%N8,o [&?-x}͎ FStBm⢣Ր4mB$[ZyCˡ |\ضXXmbTA\xºc%†~ܱ}** YX҅Ƿ6n%f;U@l?9p/)ToH>C~ "oKxºuW\LZ=0<axUj0Eך66($t/Ti "z=)J_ٍ.)23Д@;`{][BK"`%I{ɊQ @#N ~U$!0ELֱ3|mBxPAj0CJ-ŭsVBbK!,CߣSz*23}\{_:Ρ'?`i W/A…2SZ#pnL2 3T]qlt }xݠ$қqfG-dGR'0P@+A 40nD2|G1 c&74H> Pp! }Tkah]'ciPV6l5 -TVKG kr Nc@$ cAւR_I6xxb!sYZaU$VںJYx4%]l&ځQ_='Hz4GX&Vd=:Sd>lB[BF@eVp-ɔgk/*&3ԭ.149o_M{}i9O\o/[]n-{DL$Mh!PU.,hRe~ h6ظ~t%WO_] ul3BaM 8Ҙ*a"n3P;W}iܾ|Srn*Z&VktS)gsO_!$7x8;1RG"ΊoZ\CF \3{B[DSo8 `Q@aYE5)qn+췁;bJ1~մd?O9UAwzZvjxTk0~_qKؐ:w#}@6XG(. !\[.xV$96yYΟB!nݷ~2|~#N&B}JA%_ rKeffd<l̚ȿ2iP=qxӞX{Gp~:>57덝)2~PZy r :RNԱ<ñ RX25r4`HFnSbA={,1b=(A BCqTFj' is2$GM#l 8OMŸE(~?6|MJb\!SަY|_uMC*PHzfNX؅;09[7[B^ReT l;{Ua96X&"m7m-ZP2 v_@STJ=܁wm֎t8gZ! |{j"@]ô홭5DѾ1=rNQ۽.M:۳h8\09҉̉`54X0%/g(y,Q6H\wn{HOf2Yl,3o^ <|r(͆rTa2g<_~=H F1N~KeK'❆=#5L= X< |E: Gevpc;P'6D0 GXz+-zJf r=NB 2=XuH`/zqPNf]]a$u'3۽Y*bFy8 5(f0~R~B",8k&n[e7p6U0adDt6l$0V9gWōV'exKL}^*^.#l8Z]:#q,ΔӤUcQ7joB]7/af`S[h8;/eNB)EWhD2A}vIހ9e&&Atbp,Wo^ /6R?//rt0<`]i)t=-:O2F9fO7ÃDŽ7E*ʥ\` E(~q:-  E]?z'뫷~LlҪ5k9=N>X2kq\3z{<k8rq5*_Pd?te0~jxvz`"p@AuЇwÙYPh.F޶v:: 1l>æj0ʻDF!YF8yv5 p%2gRpWt+DUM]e4Ax,0~jC@?&0P"fuX%4njmfT˼>U=VB垓LM AT5&NeBi;B#i` TV!ss. ԗS桂}P TQ?.\ʵWm4o$#fO5FAXNfgT[slJB+r/gιsZÌCPJY n,"$lm6Lm7ee':X^ޜ>^PI=一txj. ]Li0Y}=!?ax5l'aje"oWA?MQ,<6Z!'i_ݘ" xl%^F[XaNdZU(H4Xg}%ʞ>833su(.9mL0Ts>\1ٱ$kXu_h皒`58="` DeR 1LD3^e44"x F"AQxPגq){T(t,t *RMy9bы6P. M&BQ8`.3,]/^ /ގ~Muk+J,wv=e鏙 EL}& (~!oY=i,/3To,f2ia"KJŵmt!oRi΢ܛ <*jPƦ!4>2MXj#v\MDʩ.CDdp_(%p/ Ń2XN Sup',OAv۫d ˭$  QV,q.»' Z0,Wi 6w9V&>%XgWf/"Tts7ܖꛕJamg)us᯶\ZO>IYoWw4*x}kwGgW5gldŲ=8>^Oْj>4q~PWwz$B @)_f'iGyRsQgY27}4̓3)ΗejLަNqܬOYYZŴ8vd}-4+/V̓"e9=Z'y:ڬiL/݇gI>VRgfW0;xq@D/.d>Oʇ*?0t*Uʗ lk!1I%_ mlK6W l|q,^EƦ0 ݜM36"3]Y'=y®hGX`1M l >·_K{^ѯ?l {̧/9%>~|-IA^^kVa~>ciFx||=e>HӉ(?d1Д8ۼNjjʋ*vdzDKx叫^~r |{A>>4$f&0 $_kP *ObsiȱA[/YCl1A{֨b'^3w!bv5( B5Ttt'+Πl:g&V3 O٧~&;ف~-H4ݎvA)o#@X7D6BmI-(5l )ݥP5uMոoؿ [dsOOR 0՜ؤXΒd(, nɊdUe^23w|4*ER/;âL6/޾yŇWuhs$ kUZkf|R4?SAm!",2YefE+e;zVe_įwI31UoR[Z Vzx^Nм9Y'U[ν'UX=yGǫMu19MޯCrVcZWʱY5Y-+lO$D1vq e㛟_ւӤq?fi-6EѧR^%yrN˂͖9wl]="j5` S$)к |3m=4%̭.nacNk 6.ʬPW)eDX%ER,?>?z/'oRhBCv`ȶy`%-b Y";ߒU!<.lUF+H>(q/\Kn.Z7ZP C= !7d,,g\"6`n w󀆹- ~4L+ŧcT:Ȫ6__YԨp ifق8H'쳺3|T;1%/t ,OK{vyLr!,Է'RDV\pDǧy =yz ͵W7d#5NR7 T{Bܾ53[={`\t莀͐ך}AWq8ILMf%(HsN+Y2  .KK AUK{7B7X<:K u~=#@K~o/{өMk'5>RѬF:ai[. 5nܞq]ՂNQ fP*' S5c@g/Q Q=1L\p,a`UVY4kXd\'AȎ7#~2\?b >+ۀe%nH>ztF?yIM·!Vc;k9,ЎXuh{.GM6tǮ9%*-P;e[DBu*@(#ٯ+jz@bƅ#ɟ3:JXuGsyʱpŠ{OI:#0͇5COsW\Xp}X?HOts6+Oѐ_/LWwIM~+ns%M2KlZ97ih5IM _6,$fF@0VQH?eEȿ9FPYW3n$SudP hDt :O<ӁVT:˿0?e(=];nOҟ~[>6]'vi0r8'IcSwI[sdC(YqOcTa ha'J㪶4 V*xhqH<_˴g3Tj< 7*`5pve-A;f=:Ib=n|PNW[VEAt( )|ÙpQ;/RCNzLB%m?B],$Y8[/)D)O6 [,D>+W Yp /i*g'[Q<͜[ar[&qg`9ËoDmڰ߫Q^^{ِqZ},Ȉ@u3ŠXSte^,6̤-s;kڱEdA6]-Z`m+|A@|xǾUq;Cr 4 /g M\cTNS CM H~waQW8d1u; у~+H{@Da&O:{ba .y5Ē˦ +>iFKAe# ]-7kdžg>$Rrp#[4b37KG# (ZObRX#[9|0Q93` (̞H{cңը쎛 qqmgԬ; "8g>vĹO L^x-8TA@Pz([.B/Gfn!GR ú!xh+WDds%0|3js+g ywͱ!;KDE,d->cf( nڱ8 Db)8o%5xhy6#ypNLAdrr=4cffBT۳ρc#5"Qq+gCUq+rd gO_W``E ත&^ƲPk6M`HqysC",Q4Jѭr]!4;D'K01Yb5$JLTܤ$aq8Q>oK G4v$AHM{{#"eFnu ȁ(lNlGp.0 ɦzPQ9y U(lhX-(Bc8*+dk揔*+?@"#>;/ՅӜ 6K}>20m-T?:11\_dtms`<~b4L08tχAKo0(C0k4yV"ugC5y`m":*B6CPE[s [ANNOt_OtВc^v#n kt&C90s>9Q@z1>kXS'w\e!&¹_Tp#04W*nG^:.3b625&0DL-C$, 9 AeSڧBwbI9_ U!E4,ε*)awCsly66=^ E2.˙"J{Wr 3|Ks eR |H=$^&14o*3|2Y@%AaR@pnMRE~np',޻1ء&^FJǏ_SKPa"Eƌ\|68+IAV`f)Zѐ ״uE[RoT)ZWKiL/"O-4: q UQ_ {^ S4q&CIZ.wh/(l3p4 ՛Ubb|5GDZw+}jǀvP3eD/NhTh%e\nV[U6^SP&JKNwޱW ~H;ې*[Uy\ ao-շQ f^'F{$C'Co#Ŏ=}0YDFF3[R.k7NO(9fjts̏P*kəb;spSw=D@^Feo{f3A~&7_ol\%YRY05C5gi`zu(VY +/9KJ~1ͲUV?O?P22uRuiwN^a;_[i$'07{_ֺ;2ZR1Y;EʾSwy"sw;i|"n{v9xcv1.p^ 94g݉@c&LG5n}Hc!`V88fxmy_y|AN^@nvLޣ9ZWs:õoΨ59Jטt\z29^ E'/l #`Y\;?r/0_匮`q  X93:,w7 GI9,?SNbiwY;-Y e0dAՎ6yJ1il#(sVfTbgzV Ɉ, Cf`Z}G'IJ< 3\MPw 63W)2g-{^¯>x' FNoCߎIkΩ֥vh1LtM^4e-4!7@tXnlz.w\3bL&?{ +&﬚&>)7k2"KUYAh:UW*4Uj)3{˕9>dc._&.I!/w#̰وH4|ۗ, Vc<++`6f"|~utճ[9K0o Y#)4fVr@LfJF둯(TH8Hőh] V^ER]|NQxH>t2>T!!c6tk|eZWgte},K'}p#0ÄE'XL;t6 u(cͫr { `ozQ$<E2[I")w6rȀ<kEkQAwe*) o!NмOΒ5_;=~a0_*qP3a LͅL:\Iey{7y7O=^ M|YP&I9\w ~qv͔w=Et"IAVDSICD0*ޟn_Gq ]RKDY :;B١V\qQ_*/I׊l,kw xfίպآrom E9v#^ <)0"'N`jk|kNߩ'l:!ׯ{Ga a],/VT3ejNa 3mG͞2Obj]&d+8# ]7qu̜I&|5nxca +^@~AΠ'9C6 [P<;]}UC.xlrԭ䬴[{H$obiٽvRkrkd9aʓN֋ 6]MIW{VSYS*E "z",΋7w56=c5#6Y͹ jnH=pd*9q`.}]IЋdvuE5dMtf4a,ىy1DDNĤ(ۺ8koŽrޱ~`߂  5]i^߿z/_~*ҋ:76ZCy8?CMK N>W €GOw#eǶ {~| d`bj S#>c7ܾe9 F=. E.a s=/@sO+z n4 Fl' 6wW7]&-\g&^'.ַ >nDz+6cvL,`ӻcs%/~`|Fw CPA"Ai].V%H7kG1qo-"+YbPq@ Dd;O<ъch9~1n<{^9P$ޭe9if$A~1 0$tP;D㓻fm-R!0lB:81LХxDg޽FIU\@PMY`n !nvй-[II&o|-(}+t8wMs\zz_/^Z{1:G,!k  )lT[XjSBѮ~gd$U^*UO)ׁ$&d0s|cd94mo;z^#{>>.Oݴ2j}ڿְ uUlp Ȓ|f56- SK*(;f$RK V7< $-eO1 0P>! X`~Ɯ#j Π6I A^4y}KԢp׊ZEԡ%mP]oBEGmwE#|wWX9:`Ҿ;!LxE֡NRPTA{^KwZ;5l><ӝQ."X*yGꨵ{Dg/!Y7! L!gi覧Cp"K^_]x߹1K|v<7=KQ4 NL}&\gv։GЈG7zpck2%dL9 ICN(Iu^~39u0S8iTJi>=SuU4ݬ-C 黨Ӊs. BHq}\gXaG2|{S؉?,I!2VEn0D#!k: ?CYzk41H)6TdOzֆ`ϰ@>4!#OՃb2TdƩx >Զns[ߞx u n'k Dԣ xZ:39s&Yt2(>F)`rJPNnnxrh \8CSm3/qP]zk_(cReO?>=y/_Gh՛ (-EgpQ>5#(H ~*՜Ty aOZ`#bnYR1yQw3m0ȗg p ϼO#`4䬘+ӣlO5{+5`@;I݌{ё? cAs0#S"m<%@D2UaW<q9KN q&y? BG (s.-Kj+9}3g"Q_. ?\Pjv a pa fogM֚ڄ2E}㺅ߟc }Uk@{ǤD_X~ۄM3ŧVݔbqD4e7VFcM4VXilkTqxy!R%$'dWyE X2BѦ&\^ŠHJr%V Ne_iWM@JNr2ʊ tUWn˲̚4x𔓬Ux6h/ yҼLCx#eŬaթeFfxWg+/Hq'nl. W2 &A[Zme?2?9Fڌim% ,!u_h4Wt5ҧ` ǙJ_ aMOPaoyʱ7,&Y5^8YNhdcbщb"T/61N>!Br%=()tƪ!f*dҜ 䁠i,~FAsV#ǣnj7t/-YgSƥoDziZ.eVdPnd^/}):ۆS/AH|}jƥOѓ (C77 yLp/>JmJ=fPE61@AE7#"6ۭPbmќ-REz(#9J+ ]rl95:nˮ^Bj܈)0A~0 susz>=V+srDJrtBeʎ-]6N\s4 KfȅQ0W: 3J Jūԟcao^/G͚sh\*^FCЧ@orK_skzC*\@A%ҹ,4MBۻ/S3kr_VrKiv=NqIQ\dފP&`{>tչIE6MXMXM52˼>1ǻsqKw}&i5Ƿ5Fi^CL3DML3Hqv'Z-.zM.|Ζ-1ρt|xsqQ ԀU5<%jKΔr;D׻;G}!LO q:ҲnQnQᶚExX+LO|OMBTFƀδpN,.tǩNfq),-pAJQ< ftWyUR0G#J!v)UbdDr|||cdv|7d+EGcfR$7|܎jEjpdmU+sN—Pn:V.}0:n攍K`Ԫmt-lcK3uBJΏ S# 5BM`b! A>ul#`+JXrO$1qJu<w7fci|e9N.i4#ՙ8DȖzuv3 ذLBWQMG=R$1iQr##w%X~|"3)2`>1gTE? N3"pdmllof;0J'ZbYlHtרGQzk#Ҩ-Z*c"&o]GfјmijY&NimA~ԷԻn8DYmJ!Ô|ħ%ag7: VWvV_4H#vmʼ*oV+e7O4]ڎ4vu]RQr{?eH4&T~aB8;B_)FcqeeM |QS=l :"ߩ٦Y]b cEwN.lrUJaDw[r׍ZSGXwa*dAIHW:(Q (meklc1F0tʰvU &Fzo&- :k=I,! [&C>\}\\:b8EtǽS:,plmE^o&%ʹ{Tn.\zgMRu\F#jV-7sR[DݠaHC!C1HKsV?L-S N9JuxYDX"s36s /B/ ;sP C~mBǠXnf ^%՚ľ\ :9v~w/]yHRHy1_knj}|RS}ܞ®kѷK>3Jdp$ƅQ Ov4{FP.Dl9W8#⒖m?7`{xol@@(zt {ߥ,*RTE!cʄomIjCߑI?Rn#CMxTF>}0"훱~3ܸ[)Ž~mXy{㕴*f!qR̟/5T694%ZT@:IGhf }q!f+пb8mK_t@5Zšgenpb ]G=!Z鴾'z]} 㷿i"/D^/"rddnQP7BwE1ZI?ZgM[XK5_ ' !,& /mYٺZ#XyMg|#~.XqgsB"+_A",N{T`J΅GA=]aԩɴ纋˸oq*۾rsg!)>Rɛ͵r=þBG#њ?t,x۩hI=)*Bv6å.uLpB/1) jMqg%*QS&cSψڱZ`nqu .V^kvN5e=-5C(L-\n-%!&MU1Fg!]e' J,r{Kcx iD8ugrq0ܗFgFܸ#FG-r> 1kAЕqtnzc7y>gfXɶq!Ȃ6X`v-C;NF(vO ݺ+QN]71V8e[7ò5˶8$bH,]$/ץƢo( ].aOuŏs>ff%޵eX?ak.-Hgn"ȹ'Ǯ^7v6?+qg"=̙dke!Ev.ޚEtP8 %` 9l).F(G򪥑uFg[ƬamR#BcvzB()G1% \`WXѮcٖN4i, RqeԱVhѯ0YϘ%F SG%;H! ?"#`hm޼!Bwvi̻$i'3H{Vf1H#'G"-YO'Μ/{;:,>5DkYaK} .)LRi;2Nyq#ńd,dzfo.-$*#+,r,<bSJh&5l@,1SCM*(Vcl[~ ]yW]zFƆ !=ié;~;k=څcD_R8վsiXpk@nW : kTǚHצ8;T]bc/}Â˾d=Q+C3T v7Kq`6q:lPrJ-RFYKuf4SmRj첯CL,>gyHOliD!ᖑ92\kiG=\] DmRsbQ>,W/~)-F4!'hBz>KEjWukYp4Vi)= :FSqD(fSStڷ?l>5VOu <:z|q$ m)K•zb/bEASyխ_05hnŬXzf#Ug\rSK8 lZ 8(C_s6NR1 TB1)G@Ҵ UzDȞv>c:=۬{CwTH(4‚a/$8Qfsx9![&dh>r0\,/%AF'm\}vL%E58# :goO Њ@Ѝ 8"6*'q"-.k&J)}`خ8R,J>6 _nR@T8gx&͝Ve蔾v_`TQ%bC6(r'FO3![Ci^rNQ`e~RYaVսA1# 66k؄Q */5?~8.01t_~a%0,.v\-Y[]Tf0}:!zrͷ\fjt]E_0Zxg\}X. ۨ}ZudMi {Wf+E!8H.GLlaVTqzM^9 H C΍]vv&y ͂?ک` QJSg_.`?<liȌv*1 ٬n^U !- n,"!w=ذ|-`4 W& Úo0dӠO\QO@YrԌw EЌ"D3EG `@D9\˓MkvXnٗl͎EWgX,Z3V$y)-*[Vܥ.hKXZ9h 47@i|yV_%KJ)V|%X@*r]cU@xLu 6% ʦf5I&%чv=o~~ڄX=VL8cZ&a=tYoΆAKqW$;'ţI&:`dśs`"THJY%%씂)z=axx՛q 6rTQ\L-36Uаg cl S?*-3kxU[hUl$ؤn&?3Y71-l.f޲\Tds6:3XcB(>4dU⃂`kYA* ˫J\uwsT(9|ʇ;oB@BVϋXմ ]``S !-ͪ``p _]~ι{0A}I<sL]y 22Yɧ;XV3SwFWaDěQeM_s%WRdjafNPaNT-,XKsgR&“U}/?ҋ9V&ZYNXPHJM@iE+g*6.L0y7(y ürgEyEԤaJM;,NTeL :Ɯ;HmS#DVъF9j ]oϽC;5Ѩ)3swBg(7;Hg=<oiksɵ+n8&nz2\\60i|~ ?$$g*7+ul072:9As7=E8+S#>$f`cn=Hl/GEWޜNƏLCL*BWnQnˑDHa}9ԍDenx+=ARN; s>GhLTAP 1 pr _&#E}t 6NfK0Jx|qBʩy)i\@xZ[oF~~ّMm7M] FH"P[d~̅C4Vb96.Łm.Ҽ͔8uxYZ֏eOV&&խօ4*2Sת0D/3q)F%*ˢLsxorDZ+iTGS~& qS5nc\iӱy-ɪ&GGq$F6Jl(k!\`fulľ,yDǏH5uaVnƪ9`g,RoT!<ҁ<'D`~L$fʯ) `j+^ۯx#k-jͻa  /kUe$ J@P(LDVYBkZ3@Bڴ2X#-cK~EeKauK"6gpDL['?.`L x]*л`1*5*&d;?**BD1qXJlޜǎ7euŚ5dYȔd*7 +MVMB]W5݂[n5vFK-*1ϯ#f"]ɫD%!,Nɏa/߾xGl\ޤh|CG-L^B Mu1WN^- S Q͐Iˋʠkգ6E=IůVD++hekv]`Ld*%l͍Gjt:Bph'ISOLlEbB(^ AbC(-뛠SVW!QxTr{FT̓ ֊!bU[Ov/Dм=7đz9vTKBk+ˆˁ{Bv=`#XFC1JKԢ]wL-+\#/4Zt244AQ k* h 8e"ZWfSnPm4⌣'r+#-SET;}tqOl]v4>'ַn{ya=2"5`{:P/m̑@Y$˱yJ/Jn襚EWONcE֕lZ/WfEϋ@4^KSl̷{龶ԋh]h|Pg^ZIqyoh7D5S~pSf֦")isL4Z []zcf(kMrTd'Q(A i%J)HVR] PQ,`Q|*cQkҏmU (: 8h7,DNfo򣓀% ɖBNkΎzJU[᛺,nX%-8 d-;\q7{XB/`"x7?Ϳ>}>m_bv±,%ߑ/!۲Y[mHse56}DBkXvDEUm2=EQ"I ,&V9Шc* eEr-v6\/YߗS՗8Ck.5}tl 7-6?$oĊnwmV( & uJTf;ؖ|א=o݄EִdYgU[iOao_X%qh0$i!Q},./1 ΪJ蕝X K0@{Wz@GL^wF% /Ӯ¯/*:0XY{wX!V0/`DE^<(`|W`QAǴIJ2o\2U'˓lgU 99"VBcXvjK:INj+|*#\\/:d 梤.5bW bKh#!%"n}6sHg-a]sK9B)) "vSU2WLHM8Š.=\@'qOw<')Uz5^S0!6e({>u '[ÖR~GkzxH 'gcZ@~ '~mn*łx\Ys9Ȯ0(Hx)uۑoxv+`r9kh.VhV:uիfdr§l}T4#'3'3}S}4*\۱n س>R owa%׉^W9D3?_#żw4<9ƒ $AɟsuFx-5{R6\y0 t$#dʛ)JKtd-@ 2G k 9sȍQs0B&lK+6:B 牝~6[(牫Sv pF9oG&@vػ w89yቱ?U}+[ϑ.ae 2 *PctQ$^SR],X@YUӝL*򌌇++FQN 75uE+lr0H,3#& _y'"{y[k|qJ\-@k毢sov6aO[J}mSړrAr|p,POՄ}z[o-|4@hwj~րGicGNh%YIQ}N70S*;Vt+t|DKB`쌊 +g&a_`44 F7 Y>]wكH6\g:D!{C\uT(T@Jtî\~~6\})u㻟';/wtl~l>6݌]vxy@ϧ7 95OTw:n/|iNH58:XnM ^L~eV#b|iVnG OlKZy1^I~6AљP[:*u {GWJ/W[˹t.0G] Q]nca+Gڵ Mq'v} yȏguta7{3puj)1k~v_YoLH&Nќ%S ƥJ%ӆ(U~թH(Mwpe?>ħd] R& /B00ek̖v eu<bsK\zҮK/\z?+o7;cp} ~?x/_ث$K+0G A $7  XUMFyKq/˵V^^^%{]nKL͛i\-2 /g[EF}uUaGkF tR>J[(փԗڟh7dz<իY*h2~썚nIQ ԊKqyj{Ֆnj쭡ԌKm}1kP[/:m [n-{N aIWa"f ݯipnjꩾI suZ葿)}elU,ޔKSAX)W6P-O:[x?0w>Y0H :'Gc FjJ"=F^yZXae$yT 1<:/[ Dzj>XytA0nuA! "x "C$Z(T_魯㾖]E3ZRm5G$YtmS"__k̡BY[8xK 0}N1*>`A]LvR ͦPnS rNreR8$ |x 6UiuM|6o.FSk2v<NaAUv0c0wLNZX!P̀C?a_3 ;ڟ~|NoDBi xSK)MIUP*K,LLI-((PRLKIMSs /.)JMUS ClSSR2Ӹ4 x\ms6l Dƒ,;{wĝ4Mm&ph `S$,Zo])JVڞۉH`,v,v Y23??ճo_}C1Kw%QRFeZ%0;uIVe̒<\,aidSͳoH+2gԥ[Pz},݊YXE yW=7/?-^|J ϸD}>Ml*^,eeNr(vE,"8TKEɭO8C1zqrQK@ޭYƄñ`E *yH^&+e9?OYUǺlO>s}TpRScQW? ղN? EG)(gT"imKj-Q,"Y,6 |,y4`d(8, s,L1[,:uMJDp!z<SX3ղ!"0SU|L; lF^woTT\CYL ZU G9ug[䃄sc`/@/e9W! &UO^@1:=9aPFXm300VU3zΒpB.Y^wpƓeĆHg9 KFVnu{SӒJ*TrQ'pđ>"/iI̳v*)2SrvC9e9I-x=aH_͈은 kJe16%-4f!rIsBvGHLi fy ] 1z!>9!D2"aWlTp Ul2Jf bm;Ygض+6&z#PB$7x 9#OTYy"#OiNV;¦jn;(7NL|0y6I*rgDA:;^7aɛ/y綑Ul6\I\r<,6K+0$bjF0]pG=LdBwQ ZP4*)4 6Yw6*p}雞JtKz&p7O&&|Du\}V! t`& N,1U`VwuwF2Rճ/ *+:*]3K8]qmd&ƥbyLxf|Uh?urFԅXym$ ,3Rb3(Я!`6݀eեkNZ=@$XXV0Z"S489-(s2!rJQt`,ԡE%ucz>ю8jsPv>?Kj(_!mJ XI0C(R.B +9[b5q '3.Q_EW g3tkph+H G1T o;sMnȽ#);^ORH Y|5p*ro؛P :}nC/]yAgZ4=(|i3d-n=1Ѡ5j]\(!CdREP% oY.vF<}P͋4E'-Ql=a"V[Sd+{Fd)I3*ãG M*g 3<5_Ϣ|Z"I@K3G j,/2yP^LgeVPCt r,L<]i H#Mj"k[V(QH2QAO}՜Vw6I)R1FnM{;q6bH/,G u2INKԾZfL~a,GÓ4,8:.9~EVQ |e*2n'lKpGXې` rUCűFqoMPywC+ ۋK9V{ iwеgY.`23dx`RZoG ƑƐnbP:ϝk{)hyL7'HA nl䓞ㆡFLZNKx0>e/&'׏8Lh|-ȩbqH%ţi.)O4m"z$[dKX."<=i1J Z'9]*-UvzqЍ(xcZ]HJ{G6iQPK'?D∜ׄdG=B% zPr~NW:c?z)>rc{; ^Y4$%T|HJ&ryzK9_]_NflbR, A淯č[[;TIA0RI=g!|b gL<7S C "O2Vtqv8X=}0WZk+V6+-jTEZ1?uv:]L)PUC9jn o ޏ<à,0k.}/d{!a-~\8{.SHkZh2y}" rOQ L/PخM-5R)C9 wZiLR׶J'czx<I;`u+͘{Aӝ6WFh3fTGhO\"ن5EXX~t.* ԄO%_믓/d>gԵW-zE.6"3[3N,tz)R<\BFȑGH l0 }D'/oށ}=ہo"f)ʆcNGr'/js(S ^n$ʭ={^|em ?[G%|uh^1ZĶD[U-+2+|+˹մ[eh(a`fK(.,pĶ;sdxcͯ} uBZ5;_NƍeUkoWsk˻qfDLV?N&5d "ggh?U;tãuvfgGz0;"EV mtZ,B(ݍ7@B^ΡGW6S#yoxʇ0{!MW@.k&Ʈ76ZKC4 V8bAB-&7=}8] u v$xۤ^uFr nLo ݵxW[o6~~řr8kCѴk t}(h)M $kw/,{ģsG㾘 ?^q߼={}>J} *9>Vzڑ,YnI- Q prx1M:L v'/z$zUXR*\ivEłi(3?j( czKJYxRƂd ?E79MH%U2(NK|+]k|Ci="wƦ ə\܉j's$gP\¦RrI>CD e^INtܣVNO8b x@ok77:'Z +zoDu_0 RfzUIoXl D-MM F#i+0+܊+;q򃣄>p9Cik C=\ED8Ah`0RsB3t ."ȍ]pҲyЌ6 lUzx:QtA .*ȸXZmhBټcXpkaPaUiz[[==nί&E3Ć7nWk,(\y_.פMόЃ?[}G7ț ةIi<ȫښ+YztF~![k;ޠ3q&kځށ1m` AfhƺUoE5r@~ZTt; c1ϘUddɈ!?0o;oS +؇8ge a3oD..syCؒhI ?=4^uwQaL%%NMAV_:m$!= f&LV'+^&v;,DOz/g;c DB1K?ܵxWmo6,iiI!u b (@R!}w$%Kf@u;>xO3'pUV;)֩? Qls&1@_y4_YƗ<~_O>(e:吉bkrbbRb j4A(P/iХ\12)!)NAfyf8ʢ1@ 2[&t1Ln Tl>n3B;,9=YlwڣDz*H$瘉X(-Ū֢,̞"7\_W{)oYkX$"bgڥ*R3tE,hU;E $ /o~[,$I7JǢoL2CgYOqLi{,wvhӗc2Ҩ ?a">r^aV " 6pyys~άXGx(=JCbO欪0_yc^T;"o )lM'a ~1J~y ,kr㼄 ]E"0y#/ -E 蠏$g `;~~/r*5 Xe$RV# m)ܭ[ٜ\`!ZO$³ @Q^d:c_rEQs!"zL3gN@)JjrE3k8y5DчiGۭOC[th3aEPTǣss"L:{oK启>%׵l]5N %e]3ͣՃ'!}lb, MsH; ZƘ;O{lKe ?9# #^cfJÊ%:µ4ӟYh}*CЩiN; WO{&\;F t`AʺP˶ջPO ƺ,qbIF33t-qi&Q`.5Յ[)cceR]vAƛb,5Ћ\8 ~1;VhW={#b\[`eX, iX:Sv`Saj22ȸx sbz ˁkE҆\7G+GL fL \1\2F%LJ21P1oeW(b3-!| yN`h 58 |~(/}}~jluC:,s b #smKau,DJ12Q ʵW.}@.c($o)"`$EiWE߮:@QK?es)Ӎ.1Ti?meYqsΐ +T#s1HP,h<.+_/?`,SHHs[tb0L ڈw b`ZkUmזB~hy<>Q)['z:ȥGfD>#ޞpz.F:sx ǮAW:X;#ʋ`_2{ץ3\`uqF)xui/؟xP*t*?*ĥopx[:tHhN *ɇWE𙐊UVXv4,*[w(0sL+MqI!|nׇnh)ĭZ"kO <.Ⱥ6\uE D&tkiF@6 ]6 |ǁF۱ lj KBEȂ]R)!49X.] Vq–ZX}U[vڸn;/{ҀzCR=\0VC宑RoH|i x{+_j+l\ Y\՛os3n^ l .x/UrZ6+q<Jx/P`Ϗ1M>ȬƮQ4YEjr[lZ  )E%9 y) %y I%%E %y@"XQAK33MA@V(9@#'1/]GA)5OIS3CV4hnNN|rQ*p %"ĢT\J~JfrI~jnh^bZPB-XJ\\[BXSsS'bTV(J-)-S VB+YE)3MKUjٔrfl&x8/ Y:?>k+-$J_U%Ec]['+Pl;}'sΰMeU\jgig_^<*%e[`+nA̭D#./VրX U):  'jRʢ(d0\b]19QfeaH(uNg2Č&2UZ4 ls7 5jrAq>T9B`BѮ~>~;4.4!FVų5h VkB,*CR\j'[JBmF@j82.'1KoYMz.ɔz bQЊ*cG2Zd LƓHGa6Aa*rIoE%2uk_ L^AʟoC_9sOklVqH*q7~tܳxDbhȵ &$E =wG:QD@QΆx()wWUETwQ30Ѭ]^|"+PbtJc6>b/_ofc8,*b1gW|:odՋPRb00dӾ2> YUե>pSt\ D 6.Hi,cӀd8[ZnEF惿;j`8jl4mG71;?8Gc0ݘ%?S q$>|f՟NVyTY!'߼ ㏥R2^蕸"jBZ/EH#пDOf 9(V֨8-;dB]ok| 3{Гل&hғ“iL`0|?Gc OZ4S8v\)+U 2::M{2Hof5ao4eiA;Y{~v'&]cT7X%"02F)?1@ ,5걩o;UF}p##A4%-{݀6gЉ9Kl9X;=}J"n]]Eܼ[S8UJYsVu^ur „JsWwŜ7[r#1~W6]U bnB? D|q8l:-mvxx)޵8BO@?,oX!_l9F-/D0"SIWƏ#㠎Xs;Cn)Y?.ʷ"^oJvQy˼Oq"݊"Yo26᫕(qZ$aėdxQ`8OS^-/dR,LV˟EX2٥(Ri*ZI IQU^gyr{5l'¤f$/Dq—lS7nB9j ? 6e8Z 0Ǔ$I*MD,xYqўD,{C Εʞ=/ϼ*YG*9 ,8 ,7P/*Ċj8σ3Jo~ 9؜x NNÌBA i !"TqI {EL agw,m`K!2&8E"tHl/S"V20OSBk0N*Mض*r::6 vy7DmFUR }0VE%Od_NrOo3l@;M@; _m ˂eg(fOZmtghq&d[,5>N }hh*co#nhYc]Gq8RxJ;xE8{)MmHV_VԌ±Ts2Įt4y{FGYg({>qy[ekg=8K`[!^ˆh' 72Y`☚5I4';L4-?hl 3 TMXrCQO96IDDBroZ-duRW0 '3=4J3np(ǀ &|/s ԄseT*ěӀE:W(3)؁nzuBthrXJJyZg!b5q(hQ *2O|(D??t`P3E01(@ 1L;Bph0]cM $'>Koh!eIhwMzp&SP*}C* =* Ya~ZX:B@鱓gP:Pp´w[—V*MGW_^Џ͖ ({I3@'m|`B,7ۡ)*)u22m3mRhOuK+bt'2G92&38[\^%dd Vr 92b2-\)hcpu?J\&wh2 oOh8n̯ ?~| 9|x~4?D@ HݮLvY υzHu RjK׀ksJdw[ 4S:!}˜/&(ﰳ7= gS*Cx@wͽ ima ipy]g׬a4mP꒱6fWpL5&ף3k;_/޲v1nYh՗bʮ溜q>fGv:֐vo x;eI޳u /!ڋp2*u*ӟKE ؝'uxfDNR=.Fq?$hY0mO7eeTfO6!H̛A`ּ> &Yܤ&?̚f t#%q#&CCDL܇&)4B]*nFF}%$bPk`BP;G(ݜ~m{h&*LqRqٌtulLsV0@*hPNMŤMJz^-\3fqr]%|];qcYU \TE& |BP$|Bl<2^EQw+SۉVb$P]bzvrYUr'aaB-}x7 GJt&K ˒=~ f "Ed>t1YY)<}6su_ǩL0W/l>WI5 BL0`aׅ9>N&({f!NxβL <ˣޝWCc9/REd2C"Z(uѨ\p\ b=_W]CN MD$J'y⑾=j;}{pl*G `@AnW2BpN6Jꝺ!ve_/Ե_PC?di&ujpXDq-u|xWYsFE=-?OqPz522€d&,?kO7Ui 2#txOƟ 1~}-WDUMo7: --ɼAfb0f8[u!Oqgb ;W[=})?L#/hY_*M@=zn#aӍY5X>еrحcXaAk\yg\_j:wCՂM@Syjbl;>×@q0 |sȪz ;=!vxTP<[PJi^RȞupea>l^j#p;yE H"2\еI3j-r z7/i^A'(u_¾tV]|ok1l_)z&@#]5k|'فG:uJ4?e#g%GY54kERЋqHgѾƻT2_iuNGPh"PLjiZqI>\i=WF9m1$l~:Do/Ok-9|[<4RSE 2K"eQhI<k`28}}TxCU!kZYgp)0>#5+jW74[׃Ѐ[mz07&$PGsnALf&S?4:ܓhu}kP;  _#ϑ{Hs%\j;Mťw#NO%PSF 7t*}烵ZT G>Qzm)oX/Y|-Zaat*HHw)?j&9[̞qj2X; CrJ)jaۓoW*Mћ3zuN+L;RV ,yx=jmoua1:!C ( 7o~YFS* }v-R,VA ?%rB5 2W"]^+5~ @Ez4`bf=s(t/)6+r)YQz6:\|2z? <.rf%5Xs~2TһŦ'^xb}r>KK[lyũ×\:HZOMjy~a.ytDeUڦ$R|.CwP +MOTz#X`EgA}Fzf*UJ`*nz ǦiZp&DlQ/9 2i2o_1Oʿu mmaxU 9x[[;v>GԴ̼T?77C.}-|"̜IJTXqBIFfBFfzf%,K5\s2KKJK (5$U,?3EӚkBUasxbJFr~^qBrFbHO~iQrjK/ߝ IY8=ww7zġi$<ɺ}8gr,ˮdd"|~uxƁ SÿX(4T2{/7/BILD>" s1͂Xg8Y\EBI&%8Ty9?_-M鏲sбk=xӓO?s]8sF|=aB4aM=\E +$I6FFnPHD%|/qb.`*:|EOn,4ɂ\ G9Ou  >oዖ*bBVh֐^,0q~BD+[n? GH.Tr:1[ 8<{f1DA=cExK%eKL`%H"0CY ' 2Gh:\) q+9<g_qڙAS;M;5P cW. 0!l!^o ^C}')}˴:6xK|zD/Cm>bPlk߾ |0G`<X!#"x # R1 F:$j gX}'+,\(#A%Kg xM&(E2$JStҪ⛯4յr= 7 Et D*D˛E㦶SG:~נw魆x : ڊ(K9vy(!"ɉ>9 P%%(:D$4"Y|yȧoϛ]n؁Sdp}Ð׻͆n:.W[OOOOݟ?ן?g$Wvc-n+|>s.۷`] <3A&6|tPey6+nh123>!$zuxb_5AmOiD\pI d]G6<`X5em~ř-+c(3ޕԖk,ހ@鈸yV =D{KD/v[Ȥ/ۻwE+NzP)pV y2P*1XQb~e8y[u*3⩽v;-waΎV4|Hپ5!׃/eQQ<BiY%HDz"ZkHw/]D .PKkuW"ydC,ڪ"IT:aӀEs=26U=>#^ӓӣGG^RuNEJ\3HwM(d5 ~H>-T8EְB7&WLq8Y;yw Ԩ[Q6=y>7Ur#[$qb\ZRmyAH..Ѱ{+Q4@4Zn^ǢݎQvaN"Yu 'DvQZ{DtI#L 3@E|,bB9E*f|>E.aʊψ?O>J/2Y'[y* Edu*?_>=2v &;R/:W : ^嚵ףUUF$F [///?ohYe*٥&Ї]/K2'Q"gݲ hV#IU3ht> ș߅ Jʜ x 8Nڬ 4EQ;%-zƬ4Vf[0P@/5ȪbFY>9RHWqcBoGzYB%ʞBPz8wq@8$Pe *cXX[ļ̺q$ҚqÍPWɱ5L (2_$C Ful9z>A1<šs ɴk1|nuhaC(V$9n1ᱶr!ZK,7F "Ib85C<BAA46ju83Vn<N9%jl#GX^c ^A?=8H9e Ѩqs a5+q:^8YĚi8s JԾ8n_s\#M@ @h'p2$A8 åױ xCpv˜@!T4#IdWzj9K847&M0kkALzD܌pqI6$/@l`;Ro c-`Bh5N''.P||@ [k+C`e_ O_J&L[T!dep5ppT`'_;y`UHxY]vUL_QSeaD2`bDнHuج][^!BOxمH@)%kF0b%kApg蟎\Q#EL;*0bX CH3%;-XRqs# C`lРLOed+FO/\PXF(ں@e)ED\Ƌ'sIO ad("4VEL T؇@Q{Q;Jfp R~Ob\.[Oi':-$<DJ_8.WׂլK1b&Z]7@1)DYp{JX.V_GtxmӡW"λD܋4p8Y<AՒi Rsz!PSyނP9ꋣfߎ"gKT@d`n H~tf@G[xX"[$g7Юc pֳa6=fѴʆV^4kT/ʱ,$?j.RT1#@l%nu{d@MP#+zvcUxZr!6EFE](kVF[Flm51oBhņWkF_aȪ^W|GK!Xh}I}*ISبasg {!>(]?{2|K_1?P.h2jj #ls{O,h¸6Ph N.ЊeȞ3fyXN 1RY}gY@B 1/k [.b'ШItp\6~omŷVikw3 dM-/LN [qv6HHhLY1AEIЊTHLkŐ&߲8S?sI*fը- hN1[DHx_Wdgj]|11 +NGК !@~FRM,1p0Z.**tD1 Q$9oT9;NcgCfP$ʜ A(/*S|T{˛kH;j(+p4tO+3YN P|,# WS{4l4D||2%[D%{Aiά!oSkqʶ)(<$ovȤyYӃ=H!x)VRR!vLjMDUQINc¶#sbgB |`(zqp#fձHT2B:sɀVS1V٨2jac#?\H.$f%UN~5/1TcJQP$@/;{@=@YY25T6XVCڭN~UP[ go&RԉpT !;<:yGΧ2aUe=NڑD8K ͈RlԆKJ"DP&S7R@C֫lniUkY .s:1 9AGm`L#"QXkC*ڷe.B3'l}KG?~0`rc_ ,bǵvIlQPPތ;%fM^fDa'n ACxפ:E]$7\"GO>,h}AJ+\+6gg #bia-3Y<W`(݉h͢>b!NĻ%Wx5۴_s wLxO(Z&W`f>TTW,RcFhױA|=7Ǵ2lAO- 5ʎ$7{]OjWSZ?:igN~≠h\e y(x0K֮(+}^hS7-維$Z<d tιdžJpp*Gۈ+2t~fAun5wŠқR'1flh3rS-j^%5hƭH77-\Tnt.9(w*]yHɓ p'L`Tv]qMa/b+sl֥ y!=jЂ1ow$IvyҪegڳ3jzcc#W@HkߗRQYWH+5<\9+sН!=A8H傦6'~;&$)U1 xw)8`YLf u1/ZX*a@^ObtHH@(-rWfJt@v'pjE0Fpηmj.e`XFMN%,R4!6!Sͩ(]#P'PH)W|Jcԉ`j^ öwtҊp\j_Cr! ]{99V`E ^GM`6 'mV.UNB(|OL^maIp*N$"&4szoUa0tUlT>Pg.S,an`U֕:ϐmE4A},o/Yn.5\RkWi7}Lr$^ ]QeHQ2 5h`k?x=תf3':#iUjWS-jcq}+{?|laF\:`+RFrڶ>6 ? ٻ($gh}UViqR?ӓt NW3#oz-B+j5E#IFֵ}7QKw.uWn]}muQ3]$+(r퓍EjyQI7,Oy"<tBS W  \JA2'R%Aե+5 9hބ>.]CB(8S*GzWzۇx7k~{cO~7uN7t4or3}ʻsA_@U'᩾V^PVf @(Pn-TU [s̈́y:$-i&7ݨjBA9G'Wp93b^F+W0Z9LPFMعL|"bh;!f;jl0Q0:Mƙ\0ffsP \G z]XBZCˇr36A">ͥ4xИK ?[4X\S^Xҕ[AP*/+Q%@4ےO.-6}_Ʃњfy ǦB:+ 0UH=Jc2kk /N~{前[:o0/.ٗ tƼ[wlOP}_񭱂ѩp1g$:kƸbsq Ϙ ۓi.zB{ =ke`}KS*/wQL-=榎}-=9]G|Wn:ƫI ۈ{iONE}"6h&4Mz( tP_2_ 6ۦ _swZ/C8vK5o8fdX*П] G6~2 _a|=DS j%ۍDXZl%甛E[zm4WǕk׼'"l}y:Xs ]~hJTt;GRͥ+vc8+ Vqt[yBRL,mveitV.c&%\_қ?^kKaXwQ;aD e]娈e=y}I+㕬]fb eƟvCdl\a3p{ʪk}]|I>Q=1=Ro (ӨȀ~ɼNjW(-o?K0\S>yͻߵ{vaſz}g?;zvHRw(I e~Fwdխ|p80aEB5 Օ6mտ8ۍiR>Yq Əo4ưrt嘇kLţޔ԰:u [dMte7祼I/AʬfϮ=LMY)6E.3c&zNzNX/q lR⧭r | m6Τ sQUrw[kd;ǩ Kqd~go9әԥTb \zW+W4w~KՁv~%W T׷0@?쵳7>M:| 3-{Miϓߐ`t_ҝ WDHSUmhVg3J$_^t6is\^-mIa߾50[m:4_LP׍0 X>L ſ &9ئ4>Qc}bMLvu[ ךPX`O$ۮђÝߤ"`74Ȫgk<Ś_cz$(O%}[ I rZ #i>nP}4GateDwܾI6MNguWkx-RR㳿BE-czҖ C:a·6ڡ)aȢ'\z<|ǫԿ+ό&{כּRȂQa bث77Ѫco3q3"!ezMkWiVmY~XVv,G D"ɻ]JK@񺅬݈j ub Y}Y+d]ɑ$&RA[h Ʉl#?gAЏ"8]N&KsW4:œ_UmeM-*<d0 2̢\+bcQ_R`Tf EE0/iݷ0sU^p2}$#| =ڿ.AԞ<Ҷ='Rw}?8:a1iszT0F0ZKUw"%֪Flqn`*xM{]TcK^zZf7Xg^V{x֡XoV{y֝Xou6uo9ʐt[$F6 ]Ĵ@ .פ`wSqS+[&jg r3xӪfioֳU?G|8$8Yf &w "_T.N*B?A. Ig+'>dI|sیġuDkzX;ꨑK H\ީyHΥ޽sSn_P?h~M9w^ 8Љ3-A3 sm58ǜ%OSa\|N|fWfL|Ze_U3jjÃځɁ lmmAmikZ4?Sp ׹DM;hCKSWDCt8Y$1/b1 4<$tWzڄB^>Jmb ,}Qs6b7ͷhlL; 0( m[tYml9 PbQ! 0oeHw C aBIvzhMB w`OV;cDaa\B HMàzv}P_د~5~koӳyd /*|!vN=` sE@h5E-|򅈈:˂L=I ^c%˳(rQݸ|Om*0YmZg'?(>($$寕\+|3 cb-ѡPBLzu)&RUK5ۧECK/*(-h /}Yb%L NH]D&r lu@0.a!G n??P?_WCt V{FMa+:buF+0kLT gH}gxgk̐U'eĽ Ceq) 5^Gd7y1xH&%} /5O߾{A=qy r9q%RBLb=[ځ'80)tzOYAm?<I"+3# Y=c=];֩μabySc3Zd@JH~\)hڞ0IVLY-+AoÝ f޼?"[{ГBrfkv1bBãP J^EK[80q.f)B\GBYphƎvmB+v'A!g0,Y8cAжg@U[,HJtJ8$=>e%ZbI{SjI%b* AeP9An]ԡzj_+@=rd@T%@4>k Vh)Mq@]VCS*dnJ% : Ί1IDPY=.xu)V/W ɤ Qeg+mTV]~8kORD!|2Zf07";D6s:hP8c& SoTr4}^4؀^zICyIW&R~#u/-bx6~F{I<>Co4d(خCԺnFM>w 0::|[&= w^LCazsw.fA{#̍?R )l|ׇ q}`W}V!*ߎQO,$յq3lljtR軰G (Ev l[[2d]lIB;˒ٮ2 d]MQYa"ĬC-ߦ DnH~ dg,MH^*wP INDnwL$ (ƺwY OHN7tII2Ċ vQzS}HdN5J= rKBî1@TMV6+o6޽[>8J5^23C%=2KPDnaĂ7cKC;4:ߜ[˙S|nn:K~x ݖ- D("NmT٦`|t{=#3MplE nj`G Gq|޽ieTOR9\nu |ybm܋϶:g'G׷դ˅|L4*2Eҥɗyh~[^j p3Y5?%NL{^_=V=I6a `*A0 %<A͋D >e+ zPĹ<b׌7 J1VY z(|4whOj`^]պ:6!ѸkrH,f?Q*H^!y,P4[R ޿ox] >XR'Oѯ7d,fd:Np$Oxk J\%7)aSgoͬ0y"|ɾE69?D!9#HAKXG!85$5/9UȘ\蒴K V=5R xn}7HRo(^<~qp`ԫ/qX;n"c0Ÿ CC-J`9AG,*H|2?aK l)nkMXE40YNnZCQ5Y'UZ/U B,#К; )I@Q!ByÃy?{4b Ѹ'2(Daց<U#MZ^(jD8O=@4Mjʓ՞0VAKi+X,^E^>~8("x~ܠ =Ɣ:HB{ 9񍏂$o*P?@wA$B"=6Yhx18m4p-j 5L$~z-W)MK͠D# ԭ `&ivr N:5y; 3K[%%-2vFm/ XSL?&ɨ0AI&H: PJd^ٔů4;6E[6p{k/aQfG%2FTIVHToxs3k[8GN 0&Nm5\MF«Oxv`7Bq-p8xw6z}^d1BD)C80x1V/x>wr9q> @',kJG<-qS]b`ЍxϥpX[K W+ vP) !{I%K3'}d .v 6[BB3DHR5yfVnk U7^ObC{utKI-pDl[L L ]3nqqZ оv)LxM*>a o;+js$3Oe$O3RoL~K\.tI)_1 Xªpi_$ø2 B+Ty|l†@9( Jt($xtZ HxåY̗I8IH8rg1HY:|US6&BI9wqK@i4,ֿP2#0Ba6IiAib>xHoN12mE0zÌ֍kqE{I%y)@Vm{IE lq$1zwr*"%MaZ/c@ rѨȂ qqczyFt# plElݠ %ZUZL{Ekbܪ n }=SiT/oum! {ۗWQOTAaUuiNh!1qv;VbW ,; Vs=]z*Sv0R,M9b{uci+.8@FO!֠Z 8Dqp:eQ:ivĻҞؙA݋]⸝[ j/U0fOia`# i|BY8SGJ]<8 8%lJ1 nT oGجYaF;wIovpNӪ4Mz]ۤhx6E#@O`ފ_BMhZjͶ5Z&*&s"N  p.ULZ8$V~ hP4JltuuwP%vCFy/}ufvHtuRP)WLW^gש7 Um'WPKZb~$(7Ymid=^Iocs(ӃiLA&F@'c0'xa0)c/.sdJ.bc6 "]l3XIPXyh19.JLPC)D>W\Ҍx+3un-SzU2Iez?^tNzbZǙhvu`"@BtTp F]o6]N<ͦZWM8A3Tb(R:] ;lzJ<|#C4m2ړ0lr)ݫptxr{?j@JD-3eFf]>%S/4>+8lقJcpDR5;uxeoG=&/06V 6/PAL04 Xd;$k@NdF*Xȑp ;E`NNNuobQ2J @}#vl">Ѥͩ.Y^KUY)eBʣYďv]bŊAF\F#K6:!DFOq4Y*kė hS|ԥR "߲M!ǔlGQ(Z?ׯ]cNhy;gL˰M 2Ņ)JXrK2<&5&&1aЦ p pgu?͇u~+E:>d&`(}l[(!֏H}([ T;q72oMh}A>R|C%AI[xy9Z~k tGl?}:Wbţnÿ}h&Ћ?Nv ;~olC6}vifyuULZk2($ui^SQf.A^kH&u\S ٰQ7HSâݵ}%8t|hxn$`=}KrSܭKa76 =lY<ӦUCv佶ouئ<Փe6d` [W˗/ctKzԮStʙy4)vM#JĊ$"ѝ ŗՋ u\*=SѦ<<4ZsWdj:M@0zFC`ҋxn 5$ 'b%z0"(K 1Mï8Uo7d@֎}fYD~J/fqhhAlZ@4109v֧$1` ؀Ά`Vxbrjin+2b|TQfdckzk)kR L~l7H"_n" FSR[Ztaf̅nKM_L*j+kheFpU|oj3)X݌"HrL> 0a^,YN gG%9=s h7w/TJ~:Lǁ2: QEG[L,S~6-ߏz}l# e~h۩57G͕6ŷnqL`~Vtq[tʩjt[ kBжx`c^ݮ^Ԇ1U 9,* ayӰf%A`XENc#@H_ŨxYM0/_eM=#jU,u cJSLˋ'{?Sq˧̹=ѧL1s /;0.K14uAe*cd{vd9>qK*FJR`!wUךHb]Z $h \&/XR ׈Yn)AX@&qș&VLX( MYϼBj\s7{[zkkGsMGY!B0!!Kp r_.@vX=7ůou&~L2Z\nj]05mB'coNdo_'KR-PѮ䩶Rb8T*Ccke=<+:q ¡V4(%$T -Bh`s Y#5`/A4쯿Oddm$6gQr.vwu+5:TT{C=Alz=*4YdC#J]{PZ6odsn󈀙Gmw6IFPǛ'(]zo߾XTJ ր,` b0 ΋ pq4f.N!Z7'$^5 K<>=6P&ѢHfٖ\p8wY $`!Ty%Vb@ kQfB'~T}QSB@%4IZF3Qt cl@>7ڛΧ8߈С ֑W:([1jg.҉#SOZӖͭ%Tp FvЧqA!)?AOM(٢pz)L*31E hЧ4w_Gؠb f&6`/ R~;G$P OyIrJ=]qGy!aKpA0 ~h^:{lB6;XN3Dy'ǁu¼'`ϸ"~JeBy{V%QDC,փF v3.P6O#@exkWۮvYwѓw(RJXiԴgJ:a4uWd 6J>ֈPF]ʲ;Aj%浞#96% ׊Q<>ƓOZ־ ֔0BvWKuXЦXtanc5ϰ/`.eajrq#mΣ_I'xiUaU(0([~0([@0Ψ L_Czb QϨyQ쟯b!.Unk6'nͨJP4wj9˄1Oofjzi,& %5-dRRL no,tJݶ*tk(Wq#j`fM 5%\Ӣ<%, @7{fexjm';*xb搴m5c>^aYُ,xٖgRi%yWX_" yvIYT5Cԕh?1WKGܯWMƸZ+v>Ż'vsj&K Oop)_5o Oo%i>_ؔkDQi~ܞw%dӨ{H?{qx6{7n?Z[_9S!CeYjZ9`z{K*\S:EX鹟z6[@ [m}*3!!\JBtR~.t+JH )R £Ϫ3Ywp` fhx b+}\ c.bzuT4r +태f-)C"Rࠦ?jtX[3I eBg;$u~3`Wwvilw +WzlVn^4.P;x{aj3.w͇$XB6Xxm;41'T u:( 2/* No langinfo Windows} ; i ... */ #ifdef __CYGWIN__s F#|xidm,7&?`6_kp axH43ؓ7N/* Strangely, though, n)X DxVmo6l&r"˾uui;):` Z,(toI4-D"w=WL^R tTF_=uQ|8H^] lp?vF݄bƅ &`N//QڒlE,HkD(V(}Nkt?[V¾+-{Mid,>(%űO63cŹ@TG:,fR깽*Y;;>(.H&ū>?F砏e&Io]'[,2;[=`^W2tkK$ N?͛B޹Ó m@h7MSS'߀FTunq"?6vЄjWu4Β(V6!·gŭ"Cձ:8u᫅N1LIսB,`T/v0o(OvUEy>}OOnb?,E#+ӝ@\,h׽{c@K=;=`|ano1fLhfڐC.j0' [!Df8Gp>= ./>k6 M_H4xio+&ZR$Euȑń"UiYm)8Ǜw_C=~ggC*f]/W1 e"Y>8ry"#SNyZɼ2ID.oex}?^ID"ӏ&6  Wqz#^r#b%T B.dQf+JPOBX87.*N$IVk]Q6HT& N%l .gvjnʉgLc0Yug$vJr)AQ<^EtfCCI#8 tmԈqrBl(^apF.BPY8& 9~KꉡxP&IʬTؓR!"AAЭ )AxS,M"ɲ ]QnE(*@Qq.BHoiS ȏPm*`U( p=d{)Uh#RFmEǕ+KP#+A߽#.#`uK (G~ރ0‹_KhTxȂx ~՛Tĭ/}╧0[){r;T=`AOLc>rYy*yU 4^71[41`8jf-P `r/$ fo ҽ(n3̓aH+FB' qM)|SyW wXr~*V)ApYmd_Fvu̩&!1ۂWU) !x q_ߝ;xϪ khփ18CUHHgp cDcyKGG&,-'v|GI$tPBf@ؐeΖ3@IcTVd5%׺3Ia%h!MC~:"n^gXθ["J`.Ed, H"Uj3Ub?qQ~徉o!p(wF|Qd{)nhO Z`'Z͎d(RXAxHB4ҔQ>tYp00@0( ]A9)H|]-X  1*\!c\PDBRiXOѨrxU`Peq)g ug<"lΩ~xkAxMÐVԙVq&L48ޅrK%*.DHIW@fޕTUyYGLAɣDHDdXbe,s`4U i0}͌G0`yTc;)lfUw_8{V,:f\& C`(.<o {n?З)roZ.Hv?JJv0cl\u\5#%LwFqJ>tAub 2 W".VtA- ϫ+4Rq$e1~xNzM~ uܪWlt{^=3FtL%¹Ν*]s(tRG aaJ+ ~n%XS&{YgYR]+5 M\.оBj]&.ñ>L';T_ܚf}[hObӦl6G@A'!<)bqF1 VXVu @A߄h i#ꫠm@43F~aSGc3bH@]aiGGALSuÖ'_OYe~`"PP1]yͬ qkItI4P 8ڱsgN]8˱24ɽÊSǤ_alrؼŷ@@iXЋA'%\ٰw)w@*?KMhr!S*MS"Z߫p"R++;9q~ ڥF/Р(H敺ndpe _&{ɹ3EGM8NYY+xyU/z~Ӷ(ڹ̫֡kS҆3m]Nܞ%:^2j6|ocpZ`ṊL-"7Emsꬄ3:%HH%i[b VT68K ˸M9"m#Ws6Ţ3kxZ PWwγf r[P. |K i ji,$mI& c!^ %$GOB:+ 3 ;)l0ϜW2k1B 轣 8ɐr˯:0-=+̹.D/.O~ygVӴWMw"tw$6":Rj`1[p( JU7Yr ~~MO@ 2 >~aw#<خA#Y[m$(DE˰Llx%%.Y6wa-XW ~ŅđL "=Z| ,-٣א [of-f& BNn& \S~c D[78 gu5 1>\NŻ9?;PuxSKkAf62oI&冄}d7n jw0 LOg*A$џ"z ŻY'\=COSU_}U_U?nGoۺMGU l#\C|і]oS>0K聠5n)S^-%|o7d,L\C䧂a= Ċ,h _گharuMOLyu'  upN=LnE{pXWRY&E}ЯkF` EY1[M%5N45+Y 0Te ^-K\ ]m(? ahreqtulľZ)N:553YTԁ4@YY&eXƝa0:"=n*CN>W?6_QRW8~cX[!Wl-]-v|7M* V9Bٹց=ٸ*'Ήhe\-$/YFlHC܍RvÎmk:Madvd 4:lt4\Z#"ʈ!  `:w¬ְd] <\2#Kw,G&r,;{~ޞ⾏z?x8vZo[~ ſovxZ6Q>&ޱW-oܾ.O*λXK908=A=֨{'B f&HeQ >Ʌ.Yt7pXm F#(Ѻ'e\YCgLKQ%4) -븲2M4.? |W hD(xSkAfZVHmgJJDmS(R fj:6Ģxҋwa Z<)^ƭewy{}ouS8Z/C @p2["߆3=K.љ2ܠj=bC&'20j # PGdKߐ kiZD)͂W%y"%LF! JY(ȟ4!^UՐFDErSrϥdF ̹5eu䀢lzCH!lȄ9j;03)B"]؄um䤡4%-4MIaIcn7oE{W{KQ1|EGU%4Jw> ,$-HS eVA{B$s6+ě^|b/fo4'Q3(Cj~]q}v+;ji6|#Y,5.0)ҥ,^];<ْSHm{LD$AU퇢. \ Ei %ʞ2]h$Am R}!N(%*k:%$pd>Yg? oȘ[-18% \&[ϻ\K] _$(V)A MY\c)ՒWZ49]SP! V[F]` ׊ &N9C k.E}:=XW:q`Ӯ\}6 P2Sj2JGٱ=KckeMM,>R1횀 "GBg-r0hQ)|p%"p߄#-0T1N& 71aɊB-LSwZ[oV 4,-CGBia,{ cU<.5 0sR&pk rhl ) &tS|!dP]d8dݎ |4$>9otqN#o[Sv<:9xi4bM#!>4"(\9\bJ}2_:3?盫WGbϯW^S}܊F;WzO[Kz,1ûmr{ھ{{OU|qrsv—vz 90  ji4eH/xBwU=Ag1v^qcb7Д:&e^f8Y/!s5aLƷScЌTJSGyX@{|nM&!0% '3w‰!1“ w$^#bB`,+9QnPx !8t<_:$JW ]FM\oIbۣ- eZ#ü$)_ObB-Օ"q xw=>"; %mT)QGD{yN{~MWgq4\hgjD8>" eT}s*eDQɩ覬>W 9ADkśDށwd$N\X55{8 MVDϔ |d[;gx ur ˎO/JM,OKHJ,K)r rw RU嘓R\%xs rw ˎO/JM,OK).2 ۷xZko6>fΣtƱa{:€@SX"8{IIw;('|\^*S+Cz U5<L̐ s W4m/rD& AL(Ј7O8QCr8t|G.N!?s %ɇё[{9T߾t0<'IVD%$bĎ^ wW ( z|Gocԟ:>EFG*C(Bcn 6\coYZ*τըSTq㤿M6dT \FԊV@k>< d)gbu +`JDo\9pmY I{Fچ80_#|K4gZ0DeXZ_`<#+ sTSsq[ŸЮEj^ \s YQ0'fu׭S.C.fv=/񄚵N&m7}3_֬(!?S|v~-V=cƃEFs8\3&Mx{P МTGDwg4'0J ;C NWpGEZR*R5֧SBZ^xx{O6:Vŏi\~ hԙsk[ 홼+iw󳌧+.ݩ1&EP8 *Z{,fhě\3dW4M ci3mf>$U_RSîZo2UwʂJFJ`s4ȮsL\0h23\rͥ Z+526:"L#0E(T8V.#L,CTSNnbrMiG2|%x)-6b i12&&\)S{0D1(" 晳E,G1_F|>L,2I0|Nc2?+:/ĶR}{Qv=?&`3xFRK  & , r#t&R7 I&er Uxݪ:%+,qa0=q(Q$ab*0xc `T,^aM&|or1fSL`-w8u ZعAl-e=9Sb'~ɲ2us2SJ&3JMT'(+\UJ$xkU]:9"u{s~^q~NcAANfrbIf~Aď Uws倴^nbRNf^v|zQbnnbQYk=oϪnEL6Wڙm.LtGVuDЃжl~Nzd];>Զn+UΚsp/)o=[8HG48f$)Gk[i?;R 'A@0 $& rdP$,  e)f<9DwI3?l\-Jtm!ٍ#3i2%]|7^?BZn;i0@;8ϸ13j-|1?A-nU{dv;MPorxލ:ƻS_njuw(~`%Fɗޡ*7:#cیmSfx[wkC3f &?s'3qL> fpxZ[o6~NÊB{xdٞ1;-L$Q_J-Sg;0ECGy?[b+<N[ˋ,|+'\{p7{SB&~CW ̣b;NYB>$ & +ei~)Yvrdjɨ6mhkmTVkJ>ؿiC!Ƌ#~<}kyX)%tSP]}X*[;>ĺjF} S/܇ulp§d ͗[[ǁq2uYD9\a KdcP L%6ɌjdoWs v}Ù $V"H"~s2pb=r90|.MO{w;mcAF[C;rq~<|qa׹yw˳qX-|#)\c!0yJټs:eϼÖsv=2.GCg00]lx12s0oL YaО+T{ǒiY_xf5!&cѩfr"=LH¼p׹C;Yn}3Y+zT(!@rouyPs+mpGO`V]O;!`9KkSಐO o]DU;ohA+ ћDネr,+F.bؐV5Y7kD$Eq H os.CmcN+BwYWvXY*y^PW, ku% Ht&*Yܜ&}|\s{eNnrtT4KFuqj4ۨk]S+wnv[jYΙ %S ݉I8.98H`"nNJ$T K1Lz0<'H4Ú IIb,(G"RB1,C!dJpbe`uqgh"J`d6r.G8&h#g$xC(>"o$/a$IF)bYe2}24&iK$XV\d~ q~Hm "eJ<@K^,hӟ i^P-}Ū._b5+L78Lϟ-1M9)HhV[o8VݲFY*U4v2>,ZS:\g_}UsYk܃)<̢{s̔@?UvۍJ{hVͨVu*F٪Fl]u d0ϙ0&[c$x -N-jBDS#"k<-@iS $ S@mPt uNQt"SeiII (&+N} 'AC #2"fXK߉Ag ]sЖńlu1 Y'Yw%1Bg/d&?x}Bƾ"7G,83?VP@I!5/9?%3/V)<3/%XhZkE/g@Q~Vjr{R- @ZOfgܪSZ%HSE9?/-3($䗘9 36 +89QC* Rd$%&7e,cdԟ\¬/j FԊX[ 7d3NnGR<`xF~N*0hӋs J2s3:!bT3tKLI+)+Lv+K+U*)*Mllër+@t4de_xWdqVɫnL>*h8&k60px0n%y{k J|ՓgKO'"h]" ҭ&-i3ELux=]iBWbY/g@Q~Vjr{RS+L&zz1z*^a1y9)1yFX&2yy9:L=Y{r˟'f7yfLfʉnbRsRScr2uӋss&­uU+,/V/-q,p'o6ę7B% e&ߗܢj /u&x}uC,BfFnE25bb2sJSRc307O<7Yb)OdYɒB<a3JkF#{xԬY*&+,,&3/94%5<3&99hynLl̚գ [mY"xr rw v/JM,rH+K.(R@J,K.W.P%mHx+ɛ =D4) KZbxeTn6+{hk8E76;ۤqh=#q$KIwHYv X 3o{3O 2X7@iM@e` %UkL4z>$=kT3OJVp(,G2r b`Kg"F r!|+̧ۿo&(2iɄ4@͙0ƉXDdeӴh\)>k_Oǻd>[k3KKL@xbRZ&z>vy/*siwF[~.w9;l_Vϋl9_dO:;ruuwKvBF)i)2}=UQI!?Zd3;뾏W$(xkcocߐ$X&zMН?p2&FS Wxkcocߐ$p` )llDLXfs#p 4xkcocߐ$߬s쫾KN?w2&F 5xkcocߐ$nrc] }K/`Tgs#߶ hdxkcocߐ$b1)j󱟞\?JK2&Fxkcocߐ$ ehϲZٖ6o.c`- /x$Uvb<~uVBXV40000 dataD ˌ~u.xAQSUGU'Aء@,Zo(^1`]Sxkcocߐ$pV`mm~kYeLm".xkcocߐ$ҷW#B7]}s `xw}yLk^{mGAgN]ŁݴAXQ1U3ؕi6ʉNaE40000 dataJ! !|\ZUfaӸj_VÓ(^ ZA"xkcocߐ$b7-&h]'&61 0, FDxkcocߐ$r}Fzƨ9#!Im rxkcocߐ$-+n ҝ{˘N xkcocߐ$]b5;7鿖IЊ .xkcoc ,""l`\zf ,-M`  Zx25X \ ݤF,lI4c\hDd0'GsfD@Q-Tԍ/HO$)\n3eM /6U3+XxI8`ӢX40000 dataZWID Uϒ?IT}Ty|p(J,8VUҚfP;Ր([Plxkcʶ!is#&rxkcocߐ$"h˂_ɯuۓ5˘ xkcocߐ$رySkT]wrpo.c`w NNxkcocߐ$ewI߅~.}ιeLs|xkcocߐ$Tj~Jre&l?ؼI. K*xkcocߐ$IŠQfʧa,|ǥ)I Xxkcocߐ$_9X~cEˣKS\$ ^xkcocߐ$⭯QyI &3IB V4xkcocߐ$C--ω&QزIض Xbxkcocߐ$2Mkssdwu>QøIޯ xkcocߐ$rhyo?1zws2&FQo>xkcocߐ$rOɤ,1ь.U zl.c`r Qlxkcocߐ$ZKVoԷq}cQqͮL/N[xvm!H۲lGZ%,(xͮLD  xvm!ɻR+9'oRj1{a] 7xvm!HaׂN9Jbu?ͼȷٕI9 l.xʶm fW&Fw Dx_5_T _NXLEiLJ#I4 #Kf?d/Hיt8k+qSf _,H$3P53(P1A]40000 dataCr5JA&" |K˓$EL~bUzYyd,^^vE.xvm!S C>2'yia}rR`+# }.xvm;7n$ȇJàf3c0׫ Zx$5.{̏#||=/ǑI4K }xvm!,7~>>*_`+#Q .x!=(s>wf$1/xvm!~󻽊,tkܰfW&FU q-xvmHLjocn?iU !-xvm!ȧgz~nKʉ]{ -x z6Gxn#s/S/.xvm!ȭ "wp.;~#^1] [x!1JCZM(bǟEQ)l xʶm fW&Fwm!xǶQfW&F$QaxkakaP/v̖VUSҖtkR}}B&Dp-xkaka`%fǓ?E%+w/[ٴg?o ;+xkakaId<|oal C Sx4@ ad&,YC\] N<뾡]q-F lBxkaka`%ZԼ%S 跍 +xkaka۰QOr2n||p3g, Xx9'oFC-n6V+*" C3%Gxkaka`%Ҩn-+ڄ ܾʿj_~ۘ>E+xkaka۰QѼ7Xlo; Xxka{:JOL  (|h_ Li/x{uBȪձzkb^ծ|ƍ++x! ԞiLӵi24K/x{u xB  Ib -x{uznezR1rI&;:+x:=/XĔɐaH셯N Xxg:XHa9b/xN1!h)na>6G3"link-parser.1 v9/TBZ0J“-5@%эZQ9ozΐ100644 watch N<뾡]q-FBSx! kdϜZ/q5Rlx{̺u2ͷ9"x{̺uBI&% tI3rdaͷ9$1x[ϺuHG>ˤ/kgcFD&? O+x[ϺuC΍ZoDv윜tOX䔨@8>&Em Wx8l oB*YbB*4W! `x8!h)na>6G3*YbB*4W!xzuJTa{# +S6u1 ,x QB3UB.Vj!hZx8uG{[܀WⱓQB3UB.Vj!^GFxzu\鳉7Lf )z Ps_ qx:E2a(?N-x ᷜU,M}u!.x:M!v<]0N[x7:M!v<]0N1vK֓3tQC റEqExzu[߿ jK px7:l(`o&adN1-VHr{P?:EpEx:3Йqzë 5[PN9rx\:S_ S/ړ`|N19]U,f?KW%BJ100644 copyrightDę3.%7X䱸 I 'jxzuC'͹}sX=~=аPn\FkF x[\7blL(IbO +6q100644 controlcuO1G=͘Ol)ٝmPE5q1q*~;B'jxufԉŹ_4( ϑLW8ٕ f ?xzUD!9#1/=5'?Oqd(F;5g('}kLA o.:ؾC|ɡM @ $9#?҆جu87hBQiP ttg#WۙV8Gx z<!/x[ϺUD!9#1/=5'?Oqd(F;5٨k:x8V$oB(a47}_NUΥ$M8jq_gfoٮftWJ$Cq]fFc3uԑ7 9=.C0 if(#鷕{J1|[4;* 5{:Mϱ=uqM_+ $t(MϜYxfؼ&wg]c\s프kB%[]4Ӧ xgΝe6Ef;YEgپɉ 65&Egeb>r\n:ߧqV״g+1X|Z n <Ǣ|j?3}[XLr7OQ)bϩe@1`NގLϕv ! ,HSOH+1y{MY 4!bLSۣ -AtZk|Fehldsh:_d6tg)a,G?z>1 PACD&TPf()=HNF"P6b̓F4 P&ў=ofߑ0gX>l09Ǎp^8m(pčFa HD(_shHƗS ͵Vnvyu H)^Ӆ#K lL:) P5kAʡT-uh$Ț*ܶ|< J v|)"lõ5ztϵQݕ!䱧#Dt6'Wp=5Kx"o#zHT$cx)$ʪ*z4H y TM"'/ lV±ɠt$Ŀ.f _4z/-Yę'PŜ@%x^Fl$CIu8]+ ١$jo$bA!ózq,^Yz6C_ {$pDt9ף-5xddL$KBҫgS6k@j9QDIk`ғ@CGЕsco.{R8`Yp8($N1h܉wbAI}xNL{$q3ҍ)V1+ROyfIqzM,$C8F+c^:zt$<`3 n<n_Qn9G{a C8#Gtd*򾠁,C trx;6%h,͂=+t$ #:+d-jxtr׵HD+)|I`Z }Z*$;3o*Y>'YS7 hvHEX97\`ψֵ k| h0.߫#d_JXdTURҋF((,*^84vei N$qB{V× NqjdʼAZ2@yʃS}>6Z?J7O'97v6p8#. J7O1i,k_ H"+O@;hu#Q{9\7 ZHjt&d|13!74%T=ނ# ڮF#uI̛4%Al'~҃0Y~+/R|o"N` .K X`8v> q|?>N*6 u4Z#_cwLcqus/ %g%d芇Jo>b8E`ވ=*/?5b[ݠnP oPrI#R(&GT#S7+q7RI|>`^+/-Y~ՍJ7VSQћǤ'?H|BUlj5 jQT'Kf4(ި4z$ww |i9֯ڟ7q*{k)gQwQ cIDQ(G7 fmuU%',+XJf=}(d^-URe5WaOo{%vl}) @Ӫ\VUab[CEhIV?&~@ Iy:\tOIj!R(m"=*G+t;vןZJ%Muw뾚ۘmS]sRS1 {0n|W<ᱯeuވMfU}og߲[z=UJSZ)Nź0~|xF3v,~p޵ `œ@j> ],]+nVne u}kaԯX(.)70v.76,ƞfNoU! '|vo>v6|ܴrWP֏-/¡f=?Cj&bʥ^i e%B6}u0ثәA_Cl[kBw1T˖u u@d)ا>T6V-N=T םeEH[ ݁\ )4DN| V-U8\;ŽKZa_^ a[RxVSXO5.tN,=`)T guuФ7\ R@`{p乪S8x4ߓm8|s*/Ř;B9oBFCCJ]S+V w[+!݊RG⼴Yk|*XƯXNOQ7GVA:ז;R'WSY>${<8ؿu_7w/5yhP`W~Vo{QoHQT5}t{cG8!i {{}\Xj&(U&Jl_]TѴj((%jhF !P)ٽ<ַAvOo}7{w3zvk Cq.pzRBR:r9;[PO;pwuظ js<kMF'OFe[N˱Leׂٵ/~Ծ{ e->/1uFQQp$V Q5‘`٭?K07Ŕ`t^1c OC% q׆"\gqs!~FORݜJ9}>D X5L|܇ |{- <+jYk͍č&jtWJ Onǯ~>ƩXMnm|yfx5'0V:3]>* jk#|}UB8Vq(ڄڄڄ"ۯDUa:t##*i0.a]t "?4mg4{jvֿZĢ HIcft-;s%%l!V= 1,(4 ā w2ːH؛ȏCVFSvvϖhH9V#H*JLGQkP%`#%EL5֠aJ[)=ǔ=1z~Kd\0Fҕ2sZfb H,γna kf٤]&-Y)+6i0HieFi2UhB9\]&%O1rX.I@Ht0s+;IhCYQذ#G0 s6@ 9*Q48PC=ڜYVbPL@ ;t ,bYAΦ\T]d;v@۲*$wz3B]r؍X*2WFxҌ4:Ʃ F4{+bF[ blcy|>%k}"J邊i`{RLEM d6}0%YvwO7vxliZVo@f=9hY`!r@a|p^^ɵaBœS;/>4wMji ;s#~'gZ&>Ǵ͔ sc?&盾+{S .y+`yEoxm~'=ѽ%滮egv?}hϛZX-}Pqg5\פ~7wW.w.yϾpl׷N[LMMwT{qr`w?Niߓk+7?ӎ˗wڳjzpWSj7WR+WsK.廆RsLzC ߡL's]r;Ӷ96m$s-MqTCGapM6 >5J[p?6|Bv,S6ɨg9.GH׶mڴ^wQrߋ#!q/L4^;a LzR\ei)ۃڤ[2y8w<2#\hܵ48>A{ }aBKZXu ;gmU9mɻAVhY_R<.u]H^X]ֲ Mui\:ʀ]RLӶ|R"tؾ,âLq"LH ;6 y2t$* 'x$|9O -W@F dB/MGH53HHpDj<\oy>yKumHIӲ1$ <*J'1=> .-HV":z?PŻE6LC9)s%'`CtH#@$0d 8ѩɫŻ*ĸCEs@ǵ2}qGZ62 ߍtM狴N1C/ơ)i,8l yH4ϥD" 'q]ЦĢ@[?thϞ0s E`4#U)-_9J<KDS~Mz1=V4S$={$=x]nA3~Wo#bZ:ҲIߞ:cIяP]*=9d0DMQ.n JJwBW$F֛ >ϖh8 /Ȝ^.U] `FC呀gDJv{:+:2ds{6uB 'DI[.%HT*1&d#h ^#{@3K6,~C Ho:0g+`oxRWet3jxy]#k;C>#XKDDn2gF;3ӡt& mPc"*xt8@ښk*P u 1Bq2;":Jtqֹx :4`Q2 x,T*M$ut$*g5)A EL2'A[#5){NJBKb\B}8 EH?ȱ AޣgL=/|(f9| A]8ΎjbD,WAá`ȑ'@%!=b9jZXA-s-"&˃mYo'E+h꒽9FC,s:3;f6<*K"DTՋ<.vٟ9i:M9wFk)@ ]=LまKFLC+JW_͐)_l]2(]R fy\K̙{\K APBs%]siϢ-tY%ӤQ)vZqS;B&,`C0*Y,WЇIa\Y#3Yt E&=ob,u"GF뮻7M3+\2lqE: J eqV@)qF>t|R;x+t`Р =HRPS(D C,]2< !.ק/YR'QCg>U* )FLB AOX)ѵ#=o[l~Z"{4ӰKv6qSo>$ 20AȗvRe8j1M d5:Φ-Ð#XXI& JVkX`/- O%#$n(+}޼YSz| HL, ߗϞ4c Yd.jʿVףVOQ554 zA>~ل`g|It#RpzMu4WD x(Q~u) 0GS龌 WVjC@[Z]`'TPG/$-:Rn*ySbO:Hd{n,}CѧMY&=w;=ͱxTZ#TaHl8_He{:e$\XxNz "8{$ p` rʛ y"g:u?…ǠxJ7kC g<X&y}.6G LB؜Rr5Ю<vڋ{R׺ gȕաt"i߿ǭw-{iǨ_|Gx NzW`1vjALM GjH(,BM4ִy/J5}?W41v>Auy`fP7$9\<"S,.ѴWfRx '_TXo̹(\i%$IWNOg&h&(,ωsߓSPCӈ"-ߕ?o};JZEzJ6}ִs$zDԏ\p#UyiUQ:e(?7:sKFҔz)%NNV1 i jyu>(K2?UWdZ<>ӣpM8 .}bz-+Fl1^ f6"ɬn`fA[LݹJ[*To)ӓ2{ɞU8Qŭwݘ)_̭&ܬuV)ޣftߜ˯%O5sܚ*zmS~֦nt(,_>-өL*ӮCi*Yiόu3Njzm3 M*73C3VRk|Ti&K =)J{UY="-J/u4ROO ˁW(\[0i#s;%fD,[|y_]Ε%аeV`bŧa77_+U@m 4gKYL>vzAz2KwRGgbl-0 zJfizt)'}(ryv!KAZ[ ᙺ= I^QGVy>ˁޅyWՃ0\ݛ%̽ߛpyqw~썄;RvTւi:8g,~tl U8X9Pz8f%= `eT,̥Lw)U ?y{EB +8yhhK\P|i_NjXJN࣊]+`3\КݕP $b2oQ"Tv(9M{̐/pdFؽ\\TBu=\R(m{QZs7'wL{_븾WduD<-lPRՙ?:Zom*_Z⃋`ڍ=_׺z(ޙ zj+TSO;U%ZàDmR芘zt}14.:wֱ SR 2 >Ks0\d/*@scp4io{WWB1/7VAXuw#^wlX ZѴm6u7V7!2z/nǭٛqfܺǚa SQ{GD83<*{?kGZ/6J{\ZQ3i٧'Zʿ ?Yup9tMZ?\TJ?,Q!:/?FWcH)%KMfvY"w\hX27vnzәe!1Pim r?hb4@i,1ZGUX9ߛy?vPN77|7wfgߣj:yi(GIu~ k)]&Sr_kPx۷3xI_ ,~p!:C7OsTՃ`tu VpX ^D8MH:ʞ6r*ٱT= xqxtʫ㨮?6Τxg(4FiOSKSOzSĵjB [Gږ{:dӱ''X<||% ؍)s|c<ӕNO_햖ч'h#'172?>?࡙ 0*M/Ҧ^?+g˛[;: ^j^P數`)8Iph󿧿;*E}񚪘`j ~;w@%ԋq/ιu3ŸGb Y]]36lem7߶eg3Se-ӻecցL߆-[HOE݀Rlް;SFQ!hXvAݴQVR{Fe 3Z:h0;ժe`QXUY73*{rd[bbC|?#ּhAbQ8xAC30plh >*n4lwŭ7 t6`#8V\oK2 ,>Vl.[Ujp^4;&;%aIAW 5c$Jb$ m 0Wq$4R)U1uב0y&w->DWeCkބ-*`IB!LǯYr[>\Ax1~ #;69"HBCDE*:'ann*~o^U;tp#F맓맓3]tq#Fʼn Ѥ.(s a/<5lx@NĈEd!'"l#h{.#8 R61%t1V=ˋ1kx/,)4Ā-m+ØHCVAPLj2W=:sa:S]̻c-O~X;Pߛzc#xޙbinܕ/pF~yfwg:ἻsG/.?OY?_NO~2rۊZd^lb $H A $H A $H A $H A_c3rx 0i 8ajW3"%&̶=| xYJ[ tյwAЄ 0*V*KEEy iaf &83\lXB#)buUtW$r%^P3Phgb5}Nz׺Ydco?b^/4X_ɗch:QrFcވǣ ^dӯkfKU5qL瑀/fzCHpvm١"6/?\-6t2UKӉ5tle{HQצvP-+*, c̛ߧ7vsg66Ye85sלiwP bb<:Lcri鬜are;#HOhیj5V/TՎrJY0j*`D L  NRe\(F^U 5gCdn#+%,@jٖ96c׆8]3a8] qv.L̮]VI\Jc,64VQX,TLSNY5RMv:껱U:*5qy8,iKupMc&tȔmKc= 9m]];3i٨f33 YkгB=AOW'Pji] BgM(Egݯeokh;Yg,hj(ʳpL#V骎HpEjtT ͕:*F QXضY3fxGk*3;p=dJ]gHxcm;2H 985-ԉaEF QD%+*5L FXcu8vZٸ2q@cq"[U88PM5S!9*ujcY]sOb`\2H*bوhuQDNQ" 9B8Q6@ g 8 06 g|G8&<+6W議9zMΝp*IE _~W u"'DvHLB6uf&C$uI4+ GXgI&v!`'.s)ÑFeP׫o:Fb3q i9Sx}C8CytT”J˦L4oYS_/0wGk!˫-#%dYc["6uSn_3b 9QC'V>|rH بS7T^S}hq ot]C=/5t&Q!vEŽəbŅoU4vVidёwDbran%UAIbpY,fJ󅊢q]y!ox6&NLŚ$xb@U,9NNNi aIhF,,O3e7Tdk~Lsc2HU&Nb8I("$V'F Djӕ80bMn pƒs@b4'm8i"G?b.N,Q_3\WT M ms?-K`E\ٍ@X 3j 9O9xTc\1eO7f:1VM?4!{`xNoa77:߶ n_QdN d"'+;M:D$lJsMoLN޵ UTx8@Uܦ&'֨L=GOB9 "fE_en/xzPP0TQ POqY{{Ό3e0: ',o.uE%@f QgfB7%ۡy3Z _ C+J&knk+/2%)(IM3EFW$7,eSrP\/$(69[|BjOn!)۬mWB)R/ETR@gɭ|7COto0(W+Ϧg/ -)5~Tv;wu !ݔ`c8 ۙ)cjMS/LMYPє: Fj͔2'R`OM dE.ҁ20S90>\ށLqk+% 5CW?|urr 69óCzvP,*s*Ia2k߰I+ۑQhxdkJ o8#薑[G׮7Sn,PNM6׷6vI-M|'^S?&snqoJ;dV~Xo#>M|;cGW}lL|K&)5zэwhxH|t_46~OsokK}2qͤx&ᇧ;Se,^j1MSe֩+Nhf$Ml2|ٛƲi%r1nMji20|JivSOi(RS=ޮ~LS-^&̔)\/M!aۻ/ 2Kؖ-R3htk32aٮc=$.@8ߝ޼!c0Y,md仜ik&|%# Ng?,5 ?f,?).+جPrt]l.$9fقY&WRruӛ%ldi}V ɉٺxI9y]ҵm,/C$=%0~d+zd _?V.ɜx8d^23gmPQҡa_ Oi޴Bxsa]88HL;n<&Aߢ`ka"4`4YAdn%}Ґ;O{>ș ˾Ƚ XX(9(J7X --ܕ)?2%q||[)ڶ9ܗ8-,WX3.+S;gYՏ ȶf**h{h,[Qt" >zf.ģIO'6i:ɼ 4H;/='r'ALesѝלSOD?'P~'ӤçWfSqR"T H$iЕt+5{ NZd_ oEV1k "G:=VKcܸ~V˳O-GJZE[φO4ƒ*`Po(Ai/[7o[vҩJ{%Vw~nٺ;t~% gKus= KI<'cƜɠU6J[Ig^pqC~8JY÷B(>Y{GtKaǽG}L Kij_.חÇJzwO雝kKgZNzӠ8V5&8|upRXGdW?rqЏۊCaL<>-[l$nKT"eNu^*Mߛȵrx1h7!~U$^ژIqe3x ՙ%7BG UC-';4񵵒Bff ݄B]qHl6X4+owWOŖa5U( )elk59tn]%dPkfSj6q z#YN.@"ϛ FBT^7Vt.}P>NjҸ48kGƓR׏oÚ3iO%?h<kȝ ޓH&{,=OsD3 =oajxQx\X G fX50jkZ,Uxpg6I"RIk NfΎgf7Jk-\$TZ,*bܫq=dv<&bs/x>f}y|gvãށ(ZmSRK?Xbs8 ߖ)S-{NIc2ئ!LK'g`>2?%miJo i~j!s.A dOR` /oǿ˯v4MGo •Jir~F"zyK \8=nhm+=A&0uDB痢 (&%irnF:.<ˮOg\+g@X7?#_Ȫ$M7$~vCɾY)n*Sfmmk'θj%~k{{rZ}%!E7|Clo68v΍[˪Ͷۼ`@nKƭoJmQGPQ+ 䆷]-jrp|zİ\`ښRΩUցxe|ڨ|"h5/+.Z5}Eu<ha|Jbf[%C%3Nǝnj"GJJF=AE JX4YD!g3\oU`e'so211b@MX k#:xc^`&*exgsN 78!r4]sTxm`eìY)RMhcTcA+zέQC1Zu1E|<3cb;W.- [7~P Jˀ^7LZ)BX:LqZJDg/($K?brN(Y5B6Q-<2&aiT);Wϫ|ddLQSeDH՗}v# ]oPL ] nf9IHAYL -ꈉX&ТQU=5H6*@Bdªt1ZjQ`#򨖃 4p-.ʏ2C99E((I:sF96!ȅ4gP%h?m,P_ !<3 ;U3mE"#9&72}u>=bq6[ ؄bH:|s #Sj#_D=%.c)3BO:QC% Xx4檎SjcyR4tg}}Si|G/={^ɡܝ;X}ٓ{V[uw?PaWo.U+O{W>ߺC?hL>pˣO?ޱ>3c'W\qOkw7'~9q|=/0wCKOs}Nvo|i;_6swh_?lő#me;Ο:qXTԉƗ+.:za} $H A $H A $H A $H A^җɠĹxI iXA8?3]$Τ؀HeLa* kxL /?J\ tUJhCTb0#!llҍcwCq4H>x3*JQqd΂"fPTcl?ero{3gҏܺnUݪn?õmlx~3><׳ݐaٶx!0 i?1#'5-45He33E37LJ~hu2NGQHSx">>[bY3H~B<-Ҝz":Po$:)c䜔:3 IϨI t<@BTy sMyZ./PQA:b|Pv-@q"(cmHr\[p0>R2fFPא!OyAZaLP㊎0MHn zC:#'ylAIf=Eh :Ox Ż:}][t&d  QM"Tآ#(thϞ0spY4Q5e4lݻz-&O#6h<+HFGQ)i $qr$6(餵҉izXbec1zLbxRq|&._%"oآt#ޝQv#jDGYZ>^"7؎ !wdmEnA]QU@w$0%1W.œ.4V77l a|-צִd4Z5z☪txj`_A!m0% km[(y4d-H\nTztux |v 2(`O"]/ u1Kp?z0+TT*\W^ EɉdD+p:JǪSՉHTKO)!xWM/8-jGSgFjcu.;iÖNp3#VP9'^hG2 r> ȁ+Z$ɾgwhEPgYg퐧h &/sa`{TTMMk4w<:ߺuA1Dz %-LA;HB֝AgJ4Di%Q(3+vJ[qpm}B⦛Rx^QI4 0s `Ԉ]>>5?趎)yIT<\Xc 2Wl.  AkQ[Բ6ɎCiEK NUgD*dFci^] (OB+J|K=|y룯++|7N&|3iY#jsGMͬvG!& ֆUTC7xmш&o ]XYt2+ tt-Nϼ`_f<?_;:L BBXѲ4(C~PS @aB?%'B?TBv#~C( 0,LC& bC. šЉ _ UnTbXɃM0__l@0ɉP19IGN{ik> |ܘ~ˌ^^,+RX[FK-jmnSƮs%5zK[UXŊTWsq>ý}w(ٓ;$:#G^6QRg+~X`4*XOݑk_OKZJTL#sؗ>4x@ӽY1Vb8Pq9R9:_RRwkReUrb1p@ 4L^'& t!8'QȜ) NW iJ_iQUSXYzv<;) AGw0XssUm˾-%꾪Uk{u2.]E]p{xv%2=ջ+j]T[D+Ħ`G\c{"w+IoaVeј-jNՃaκË'/pT7͙91B+K=uF]^2kbV@/*wW6:CM >^s"[R!+4C(P1fב|w6Ge`_Xy-2kCe7k+2X|_OjOUJB@-^g恢ދ.%n~%f{w|J[eU[n~6@ %My7gy׶D.g޵IAsfv$F8>9s:]=ӁP!akn|aU|{-ܑ?^pWHẈmqa ;-t&_f_k!y͆(|$k9Lp_r=ؼjJ ,\?k &(dJdlbC_w@Xx1k ’YҰ7;8kH>ꋟ1 c~'o٪(ny>Ů%JsW/U>Knm"G3B\<_+/TsUٹWfCɽʤ s<8xlߚF&FЧs1nnY7ͅۯT7LQ>Ct;$LǿHO ^>8c#%мw.Pۿ ݷZ6ę`Sٿ6Xb>bIչpB6*/\3f_PļAls9xx e.:qWU?^"B`;B7Xu͢٪oD{"2 h}u;%|BxNC4OV@X04_u5'jNEo͇ժL7.`jL(tXumNܡTHܯp{C { 80{~&k>jgU/R: &6$A٨6Rb_/}W6^(W8"SnH3>`~ ' ^O:_~\)wYˣudR޻HA /GV9Hd\fŰy<$^E S-} d3Ri?Q{ד>t'^@wSmyp)Ũ]N5K#0xx~`a}p?ۻظ21NbdT@ݴ 4wM 4e4B^|n|]#J+QFյA4Җ4MĿQ$Rluic M[aHR{Ͼ8{ݿׁ^m`qj) (`柅+W]<>:؇m0VhX41(/OW/8斁Sm`9x իxM~̎FKlw3ɍ`lG,W{ޘy~kzBJw<~>5 !A8h:$ ~hakkߡ^1~: d3wM$n's/&>O82S$.1~7hJuh\痃(KlgUQZeMJ(;r{,`~!ꇣ ?8fC`Ivf-; Cygw9^ogu 5=3ө777db"?J;f-sRw|nͺRyڢZg݆TךuI+#pX7R{nI :RT)84\hM)eAS䰤#ӁY؞_~v+eÑ]lY7rr`] > O_j -lYZi8jB:(yLEI0[:6AÔZD_f{c51=W^#T<,{bY0X6>JEXUhiIKVhlURTTIl4Q?*OJlDLJrRQI<\~#犬j1I~* #+8 c&8٨o=񜛣bj萭>~d*^'EwiMh/L$'%)qiI"klDA7u[q|n nQl]uDx[꒍iDQAFB5S"aBW0c Xe+Sϑ}&dZu,t媌eeQ&8 uQWvtU#<8+YfG}II-$[ Oܼ⪸R -XPaujdfQQ4"K%WmR(Ȉ*VFʠB#9vBEC a.4)|M[& r g1*+YWHRaiI(ZhRu!64 5)_f: I·:YS>tu>%Kٽ_Jii#>$B4E?$YrNWt@*<«mTi^'W)1Eh Yquӝwp\p+*{}8 Ý>{^T1%9-2·/?oypW>g]=KFr^;?}k|mȎ3{lyp˧xB %PB %PB %PB %PB %PB %PB %PB oX'¹x ptdt 1+O^ 8 x$ „J\ xTE h (}_fETaIhmcw߬_04 $0Ԩ8>Q%ԸhZQadOu:ʤ*NmݤT:yuH2/_wwca嘦c4 t+J$q]צDbG}ua 97>* iJ0r+'M`E(eCM(p\l:jӲc11_Zݵ،hu {֔TӮ3+8u-cꔟ9Cʇ!S8E^el.㙶f(:q-4H:}shB8: <A Z4Hyڭ M߱qTCG;aq\>o68m=#ǨM2YyOg6s};HcPv-ɸ b.}NťeX&_  gcK8ޣuu>*Do[aik zN>?#K*Mh `):2+곺M"mɐ8%E֓оNXGa+н+ A7&yD4D>/ܟD6 }Ba^0G51D6WOX98ⱊ6Y¡)$GSmM4ǥ&HjE 7FW :5$HFUq5 ""񫺴/|9y;Gu>柯zOR&6z~y!<qlv [nĻ7k!cd+{t Jt,QѸ =whM"BSZ_d8E( 0yk`+P43QPi"~# RN18dVC\l3> t H`<G7`B/+P] &Éd+>+y}m؈.zy,^Y<!h!$A`|L3c7O1J@<㑰;Vz+HV؍Jp!A9Nff |9 mGBHhXPa@|8H)pQFDrFlZ '=pΨ#l5 |L Gbi٫F.bZu\ګJ55oiͻxU eury9,lF>q\V:Q'3ñ1b E,9t+QX;x<8g$FP,L0>tĵ.X3Zd i;7\_ f`AV cxR,_p'Xdf(hzcT'Y6I<*B {zYwia}!!=<+L8YPtZ4 "/|Ec"i .*:=4;g{zM:Ǐju>5'bU>5/ }j8}F8`gbgU!ǃ!h#r`k !%Iw`d4tϏ:4;?@Ut)[X/ d⥛FQEY r WH0-OM4\,Wo~*\KX͙Fb)x!zO4KϠEOd n]lDC'+BSPkh(MogBW)q &L+jՓh##h0@i1ˤ]zwۚt{/XA20#L/2C$p4'Ix"N2EL&0yPÐt--\k⎝ONĘ'vvxjO>i1#Fz|6Knձ I =!G}G+鄙 5V >&sT\9GY)`%n0/-mih$2"1y#-ϒzOM;teF."i#yr VCP#Lمgs V}r&"f#4;?-]gG;eHc_};Y|cܧuiwױy4,M+eŎ7Ѵ>P<5'nsO~1FӜZXni*fb}2'.ghZ?rtZ_%K RAe!Q)KJfOYv__$4$UT~ʹ՝? <a,,h*N^"3z}AS +u9V@E 2G׷R[SAxmR-JjB5׫)+̬vQ|Y%! -K`jNiv:dvuܮ yVw9@)VRET8 ;ҽWW`$dFx/}}TL-U9ZZ!4.aoJ!*^?P1J5 Zi]$պ9GA~}UyY/Sb,gdR ˶'o9_ PȰz@NrY'jUҫCzfJY-~Qjx÷U兙&96G~r3sz3@AG,|{ +Y~xӐLDyIRț6S0Wˆgȏ?n -}#PGpAEi{SV3^Y'nZx:tRIo e ){k{!p? % 0/ן(sKo\.%?|Ư"׆sgn4^7|CNpy4VG.8}pvn Us_9?]!5^)viݱM퍝²Ѳ1}sdOwQ-%k~6/ˇM!Vx꜎w=YdW}/Kcn.%q7je0r_~vMEg0~^|NWsÇϤ>șNl}~H{;-7`}kͽf6m4y_bE|DbAO`,S#A Xڵl+55sꪇUvy=U UʳNF]b6[R!xkK{pr.8g)`ge<dzsve^]x:ݲo>R3^2#b_ <%Z^>vo\yG^c? ;~f —Ϭ1-j907k^mK-'x4A=7ϸ4\ ;R }j Ouσ3iwMy';|cp%zj#D|6\Ϟ۱Ki%J'MRK ; y Նpt_,?{ݽJ异Ë噩ʺHU/7K2i]ɂf/߱fۇ…arxa06\#&+Ί(~`/+IyuM+ BJȵK ߁sՑ `Ow%z΃~7+/nWÅ[ ЁU;&0?^P wWEUybxѷ#aNd #?Y ,! X+MWó3T+@]!wWAnkSW_nx-,\_K0%Fp5p6px lhax掴ٜk = ;cuwhpZPzV)U]$ Ғ54h[gfs]/ M`9ggNvvf́&-G%&"QD-j j*MHFL ikޛٙcvVT|?~Pٿ?tޛAvA۲_ٓYY g/4|}gνt2hڻM  ǻhR>AC}m.#k$<#.o^$>sߒ1v0 ^;=#]N<9#֌P ߢKg$S3™9oe.!,L)=,smvS#B+LO#Ov ۖ߻Ry!/4S[Hx^ȯ_ čB+|BE+ j^"aY^'K*{fZ(3~-ő۴8RSL lu#74F!kRh\Ii78Z[3VTT 8?. KE, [Ç ȉIma\quT$vmJY,QZ Y5"Jౢ_*IJzΠ(2Ԕ0InCt'GN0 @;8y3eT\8e\| w`;9j&X ‹&0ŲViNUAC;;`3V,s#d9'3"M-KQS tA%(tLtcdߘ+4>H%!J@ ,+,ts*zZTDKa5ŚO $JV.*S#\ m8wGU>I Z>UyakwA,PyR+7K,F.)bA F%JTD`J*cE= Ai "ÈFWxr&K[ mSşRPz&@2UBvP cHWAR3+UA . m ,;Ŷ>:[jȲ-.Z_x#SX4ߙk-j-{x湳̟/ٳķ_x37}ϜÃ_xoP_wᩭazEZ&^chM+Ş~t믇;gOG?Mk/ .˻=w+Ov^nK/Meݽ}S.i̍Ow ?#׶/}{_^}K.K.K.K.K.K.,|Lx p"`"NߨLyY x$K< tTՙB J<"_iGVS$Vw$BFL`8Wl)+(XtŒF5J\u͜f[ufb!Ϟ{dHv<ˢϺkk>+]5SuSlW4C9j2^cI"RaǤgTӬI󔡽{q/HUh4,̾-\Z/>X 4\W5˺eЧ4beJ6^]rZh]XgۦVVg,mjTƬq;T2&팗qt1zg gX8,bKG/m]@qXD5 %΂&V gꆉc0clA\07SuW5d`c\.&غajS0 &cX68:zd8MtL>t]bs]\,Lx|, 9\a- h[>83,L0, S#CM e^P.8c(]LfQCfIs αu`,i;!9\LT%@MVXQQ[&JCsY@rqܷ,eǘ{pq/h(MUU7l0aW x8ɠJ" Eap `.&qCdž_&  73 &"24p{FovdP5 0F1\zM:~X5:6:(1-6qT564qJa`9+DTpϡ'14@ڮŰЈzcp5*.$*d#wO؀q6$†tױm`%-, @eaM섬Eq9!.G Sb?Į8I5?w}E8#+ʩG8ΦQ&f GBAs?b6'4 ]Xu߀T(arhvQutp Bqᄅ x8 -&YƆ5~]sYCc ( Έ^?'GiWTp\9<36tsAvКWaج xhpF"`lTcHɱmL4%pϭN(B …GuN$Y`c[C E}H6+$5b& 7gQ%pߋUuA fW}M|:$&N..EXvLbcX]*JX,SbПuSrZ@ʱ?Z0N .IăUWwZţ j؋zIoJ=`-B*Ё`SwE(zP/y"u /̜Hz"GaX+H,,KÃI,O15狱E+Og`ʩ:xe+W@"yu4,ĩR(CI'l\*U`5RA(8.Jڠ 8Y&v6سP?Y;' Hknl‰SX8X “(`mh 䒚&WP]^,-TC/95 ,8)AtS,:/ kѴԞG6LMy5NAfձ&kCI:S$%Բ,smӱtwt3ƱBb: Z8icõ8<"öi; Ŕ5R] w(l$ĕp)U~C"nEisC G!`"NqnyLCPz±^h F꒪ZaZKoLT)."g%>$Ux<fh|bLݪ_;N|JdH8[܇53n-ta6fa9n6rXpذ)Taaǵ7 (w w+j# ơDBaK!Qzzd O|&ӆ.NCfERpd,|f ;Zd3TCf[, Zs< ;ણ7ߋ'"::ÚUGMqZ"2qii D0>=bM:p/Ө#mzt7d*쨆 /oWSBWj60!D7}pqEONb'A.ĩJR]D,I.BG'zA#XI2(&݃rTH` 2|ypD<'w独ސ5\m9qFl]9sWY-Ķzc̕81V1CTҕJ7oɓ|cG6KּQtμt q4a #4!T 'μkȫ;7v9'8Un !m{#ӟ*q@4{/.AN'}njtKSSeҏQԬ p<;.q'.O7#EM24kV,MK`c/MwDjsd<֮9 w?7}z 6]+ ɈQK>>O&JpL&LL>YSICtMo[/"Am?M7IC7OH s{ I@2)fY<)9BdBăl,} fU2>T%CROVؕ2jqH;rdJ*':sUr>!vAZ*+C~vwA>YfuD~L*8˻ Y`o~t6y!_~@b4p4ٽ!ThS8".:aѡ_N[dc{-G:GtL$5y+]u"u8FM^0`UzY d'W>$REePn*'&p]L}5H j%LR %=/.$jokiNEzEmlg.iy(YDvj#EV!K_{>TľD#E\B?/=B I=liSF_^h.x,vٺ2p3ҳD>Ev<|y?#鷝MdiVV\GyiE9y2X95S-{b)#_ix3OƊZYV& )#F4<'l45j!Go]:]zD["Xv ڗ78ye_9fmG$[ۗd{_|$'HYײ~a6y{|Ҽ|6}Z;gdʁ[Zk$?>y{gt|mB֖;M?qo XL'MwtJT (TQx2vEFZՎ&ïm'$?#()mH L- E:O܃ wNrF"O]CmюjgW.N+I-ǚ= 3>;CU#NO{GqwF^ i 7j%yllj}gdb=JocWV1й7H4N4phBRVz͍d=dI N俦gVC\r Rא#5k`N\zPsOϥud$L:·ԝORϬ&CH{.B6_5#wkѠnf:rΊ߃ב?E.8/سZP$T!SJ]X;UJ"Xjk;\ힷ{!|C_!!PE#TcբZc]v xo}ס|> V8ʯ[Wzߝ(HnK+,:ޮ`UwׇC6|| QہP Zc3+~Łطl]"EClq}zG+CՑmCז9bXz8G<WV"`5<M`{B%^v@4Ќ], CaVB쪆OTuJ;P`Uyuv@ÝtCSlhNwv5ygbhݪ Vǰ m9z;Wo VÕH6,k`p NwaQN?W7l}2oJK"'<(Ÿן[5:/-kٱѦTlU'~z!Α|fgBKa2'k`9ɼ\mG?UUmUp޾]S?7C=n׺m.d_wmaa'jPuH͆O!kM*7G}wM`JtU_4yh<֡uH׼duF6O.]/oWR!PV}ǁX@E<$YFC -q [{ԇ-/O=@CpX6CaocuV3TG[4BʉVx{^"'gJX nC-L<.] o<}g`5^͟N'`{=,_p:tY.asNuXdT4;7Yh[ςE83Am>ur'p'Yom4;h;a㳨Vw}2k&16&BC`*>u?oO>u+r_->aQRBiPښ!:G(p#*"2TD c" ȵYyBTd<"=EɋJ fH$ J1~_[:ER0Nޝ.qQe:WC{32W*(i!-DBK^F)Wy46&%e^sXH X.)UhY$!0AU!R%M4I ;e7cln#BxxّIѠ>Erq͏F?]rI׸\: ֛@QTJ*Q@C6 97>XQF}sa-ZL;G>s]CP5#U#vZCjrq #D(8$:1 6$H/Q&c^zb:L [ [ [ SS |&0gC>05(`jPԠACcƖ@*bb9aP,$0v6%zcfFWU9i$v폪Q.*I~-*K:v4 dN&Z1R,Rɚ)M#.JL4RҾN#V`Gt(b)p4T Mwғ~ȇCGFԼ R+Kl\Q WFCu쾎G$ YC6'Ȗa/%g+{fK'[iMʢD]ɦ؋!jx"N'ZRI6\d!I$\G 4"JiƋ*VgVx;&TL-%eb&"C\V[D 'vIX B&ɘJ,)1.$n2j)FT],KEKZŽ&w<%|Lg(_HTD,\1[€Bb l}\Dql6˲*Ca;i).IdI:IRz j-2,se`߷,0uE{Yb&(UUHlAlcfN693f {cJ)xlm=ƄXebUT;/jd"lR B)&Ces6Rh>-\r4 JI 6wJP/dx LH&H 0f4hX*JQ&5Rhrb8&y%ȃ Z>u.jc)Vc"^!ǤpTT&暏}cҸRCꋎ S |L5dz;~;&beY(2?O6ob(F^Vស2 ce"ͷ-)߂Ķ,HXM0!>э|c|i^%Sؾ (-B64\.D(Ƌ?j6G6J`emDfR`TW/ W)rl؀뱡Z*?ϻ3!=TC6iM?<4s[y\0'oA< vB@qQ1vZg= gF/9' >;놬A~aK9CϾs݋_*7gypZЯPQqai_U>' s'+GZоk^rSܮ~/{y)G`TJե5\}a=cj1gƱy-h}EJ5?w~f?,vxg-5Eh~9cj}͖by#l*nϯ|03X噐 g<E'Cx ӠP<` ԭm4ٯg}o x& K\tT՝ ! 1F\2y{&vm;39Y"@GWnuZ[Z+?.P٪ )~M0y&>ly|4ҹǕ枲 l98w<ᶔ{y+n?\2[+#<7Of}}_۶QfϤ3d.LZL3-ͅRf?Dq:\V\ 6l*He,_MrTqЪm\nێ*a W\j⪥+.mXjl*7dak=aG;ђeCuٜkw"$ C暒ĪcX A8M&XM@{5[/qPlu{KS|EK 9<]2e&[sRx#G"bai Y$ejvUd1@y%ߘ\Wn6i#H6]ab[Z%sstݲL=@nb Dp5&˿ӑʚ CwFNXE3XE!`ɐ@lnQ)5y.WB 0aQ+G d@ z O:7 .0/D4A\l2b B!S2d"+Cdci}"gr !Vf:=zg4?Q џZhJ \ :E@P%'4T@jB`JwW|%B;xvɜ9XuB4p˂ -%[OsG#T"R{CƸwvax 7#+ BI$x ЕzO .cJMj} 1E”s꧸ @$VcF "N{=ʥ NB]AnPS6fa T/yT"bUYUiKSS~ѪzTH.^bΉǯ5;i.v\/ p ZP4&S\L؉(] •u#LZ33\8U 󓀸\c,+Dw͊6e+Zss\.ItGcSAM  Ok388٣'K1p,HD^SlϘaaogF ~*W7KO"j G}+;ʕ-mT&U[ڲL3LS~k/"*57S_Z*sf|5+/)s%b50]8L5MN&V7vdo]?kU @c0R7[m?ZO1q~il`L1w55.3͕مFq.fI. ]T1ϟ Ǐx `24719kmf[ښc\kVbPXS#vCKsg&Uxv<2ufnoxܙfc8*sDcqU*60dbt{c2he˫b.lI7%nnMdfctbiP;ϝ1Y*֜koRtBOTKU.iiK^l7SqNrOG(gM |iՊE5˖_6QLA,6  >vlYX7E +\4Co_e&K26fE!ެ${7$StE/i8Mَdcڪ5W^_oX^T<ް4zyu|U56,zْ+j+g9&=}:[?}Y]FhZ'?dDr'= Ub95Nqٲ,ض[cp_ucc&\vaoy+nn헿y#ce,[|\Ke*},rf,nM`[ : Y̚bYcߪ/00 )]tfl[7/[ּQQ%>Cyhh"#."n]| #cKQVXc*1DQZ*b=MfOo,~e" lʩ7(N(Zpuo/^?C݇vϳ~W9lg tǽ=ݯи{|6]s~Q_Eyv[<{1~NUvOEbJixə3Y)/L\44˾W'!`~|`ڹL'J{ ;Qu~ Xoޞz7̘N~,ք)ͮ'CI}/'ưLG_@{xg1۹'>v!]3֏~՘|k9Ìlm"xp,{uc0r`k91ijW/d[~ZD<R2 9%}}<ǏA'ً,_[I̽$13Ϥ0T3w pt3*&:Y3T~x61eNj`{ߟ&9OMMdߟxvߏ.wFw.wz?8u}0l fG.~W]sюl}|l3p?gwnLSvFG Z lȚ}?%/W0Цw*㬧; ]|7WH=zm[p_#cٮ]gFn es#IDl$TKɧQ <\$rkۈ =X8b: bA,z? q4ַKu*t@Qi;u0R{ۥ@^OB8J+^Q^z(izt+z+>ˆQh%(t%WI.yy +h7&nmoNle?ü׿ ã؝;/=D@votXS֜mYX 8:_ -iG*9fջ6W+U/s٣G~EOûО[K|܃ $\eAyYDvG shlR iEIv[.pWSX:P!"~jW#Jj$Eek8*aGt(LJƲ?8{Gu1g2rUk{n<" g=[k'-Ʈ9 T1U6ʦ~Y{.%[Oj"x̵>O] yR!O^m ۮn]Bۯ{ ~ߴd?i- Po~=_=}z%u#Wy;NU/VdOXs*-B,M_{Eu iUTjGP3tϝ!@" Jl^e.P[hĒB*F$fb)V:J,25ElcɌ2]w{qo };6a+uE^?Rj ]mYdkgd0_?0cx*Lmx3oB jIJμkS-!."mGeC5-ƀPD3Fh|Ěkkփͩg@hPP~QY,nh? @d_>wqr-ᇜߵX'$A2FhPnʲĜ~fPvxCݷV7?ˀ%P vz/ ߂Mra\{/6tpNۉH, l` BP#;A[Zw1{'9{Rdϩqǟ|tw-[·o2ɉ"ӴV IJogۺJgЇ췗^ͯQt7^Kj%A&S%8Ծ&5iפsx_s K:i'O6&ly,$ύCVݽ`UO$ HG^҉^?$; ghd/E8kmm#3W[Ďu=i`'\c"~́69Qi3[5ƾ-Ykab1dOC,T#πב"NfXu>2zp$K^]G};юgwϓv [><|;(l}LrVwC)nmR[-`ːg%}cmׁO"k'CO \MΤe?9/jT~2V}^Ka?&|L!ug9ȸF&,l̔ۤR/#{^CQ p}i5kawaTװ *k<L9׹\2]H>@߻>8Ё @KfgXIK c١!%Ezb֑SscN7ooq񥑋O_]fy{8ujrYh @&_~%OQ -`o.F h#ZmK^QR|-3ž i~$ jY\x%eޒE a2,5kXtZLu~pjw8̟]L0"" >XM|q̂ I1o ⣺g g5YuUuyFa 1 vkO_9(Uɡ Шi{#7#a9 e`ϻM{CV*jTIի;ݹy{cYD*o<{!Dz*iRX),>~U1F)b+FZ*6z28TGL ڃf[R dT i*"0 0?WPuhai 3#,[B#ݔמqR^@deE֥}ElPL]e*ef"(!A5قP.DK%*d\REA,=T G٠`VX?51lD"JmR!>h'qHD(/5ؗEzPi ]A+< N)A`d{Teq˃Sl)2/7a"L.>uB9C njLj/QH9#UK~rl4q!VRdsW_l8}?k3?TIJZ>(:7]wF;Gޟsz7eϝxQwe]Meqϸa57mg޶޻+R}nҪ>~` jٶW[USx<@ؚ9g7vUnu'{}o6x'?:}lMӧ]>k#oˮg˞8>}ϼw?cw_~dksXSֽmv_%{wOOtӯC9C9C9C9C9C9C9C}_;.x ȱ oD)N+f eIh u:=b< vx $VL]kUv2xXX61MFEn6į!1P}z. p/pB7,djˋ(,cUtENռzXN([q4㪷:cWP?T/ziщN+>C^ܵqWA8y=^ݻkA%V=,WpTd6O +OJoQtvF6 Q]ԣnzzqYWxH Q)y._l R1f%LS-w^ݮG\P3n de^cx4 ,v ̋񤨝N3mlUrF`VQ0O$cpW2BMfA]Y,@q2_)3iT۠ ` ,IcwaI (YԦ8Q:UQy' w-d"٤hQ[/ZؽF{y$.֛)`\՘,Ě/u85ԜE:>,q&$$@2 kH֧`hK`ZC^k1*zsLu]qxVϵ.Gzg X<EP8bXGiBuQ$Vnd.B#dCA(Q^Jp2j.jK rJxP&ZD$vFhi/ Q^K6rv%2K5p5m(JZheZ! f /b6qQMW rv#Z QMX5h3eq4st-Zt\ăv1kQ0A#83=+.! DZjXp0 Q Ez' [*4oɱl5rK]Mw $G;z7xzI@Tx%R>&EN>"Ε~V=ءo=7mVƭ3ޠ4$)QH  ihL lY!u]&^%J |գC <ղU0v%#I&vFBt`5:"jK[=dy+%vٍJ&10I eD =QhV o z]ykϩzmJX r&V}a2bc6(leh6 THjd r3_ac' r>xYʸ#r. JjkI@s LVQ"vX\2[R!bq.2R1K=< r.ȜId~8Ҡ^R\7HF%# ,#{+#BrE162ƓC,)nk+Es$fȁ9FMH+M.i>OR <ϓ YQhE•4C%//{aII0b|=G(qRL'*p0)wW/Cզ\$D9gew TBى;"BľHjE2F3D\]q3WQO-@)!!TdJe1*%$*cfT E*.E!\՗ 1Hr'H>S *aYB Y2/R0kBWwS*HrHTP)ʗh2&P{fipK[$P!!FfVBvԷ57 ce #W9Pe6٘ҷA DM~MIzjx:VvA !A(A:)ks<0Xd͙rrM*D!h P4@]Ud 5VYDtǾbˆ\ʶ9pCą>4)4CS=oe E}J#z{,P{9~tǎ[XVw rrNÂzr~e8 ɑmyD̓0cז|4v1uKzR(Bٕ]z "d󡪷:FC ^S4M =(IiP/גC(;HC_QI!P=Л'(ISsddLd ޒO:^ɑr?stW>V+oepLS(TV1bZWh9b_u\&W@\Q ? o%8X'L ޺eb-\ r葧LEaPјy*^†j>[o]rG߁8'X ;4+N8?EX'c%}d5NU^Dɒ?q\+#Bf!zEFPQ‡QWlss(;nC8MNfE|8OrxuDqAorΉ qRpmX4DPL,b 'CpHDKQ%Ρ'Z|&*CcȎ'xC![FaYmgH'B<u.෉hm<*9BjI'˫vhR؊G{eB.gVnY99cGdMrY&`-eVy_ G [N{ߑAVt qg H(jhrusnMEvt+4[8m[i4\F J@]9x­B=*nZ+A3g D)X@MrWPn J-ތ (R%EXE*| 2Șв(rh*SX#c) ddә 5\+HBΝb z}W%9+Fߢ$@C[QZWyxk)m伱UNuŽ*":Q2`(q@QOAQ\9l&% Pm4B Vl( ":Hew(M7j!'eX_glUu(G6߳W:+v ;i0Rx^uy"rz@괴/=;+׆ h;kmCU91cW4 66ĶX( ,@ˋDoUr>iдlubhN$$27f鞟-oO{g74P,1弄kxoz4;nO;W A0>5i11Mݴ,øʹ3w]̅'giM kWW?ea|ֻ?ټ|g_.!Ԑ֋eøMk_-N|>:w_[kן;kJڛݩ]il4O[9GH7k¹,#Z{kszs;^^0%2omw6i_Z`{0Ooa0n6T_3[.kٍsudOuhnW_. 蟻4ګ5Oo~a|m?^wy5c+8n~<WʿM3/̓ Wa? ShM] ohLm`/?V!D(_a ^ߡ1sG8v/@).~y将p`g "sGo~i Cv0 ' l\xn4_ř>5y?_gq5wawZo*}_727IpIg43#s}F#ʻ`+Mp:/&wqU4ᅣ7opN-@# zG3wEڙ9xTgn+C7X6!:ok=+b7upX@6m7 ѹ8/h8iZ~|W40&̓PiLLddF3ӉvHy.  UDC< %{ς&I}{94Ý|y:o͑ `v⍯5";ʻ4lO,Bu\txA/۝A4`*Il3o:GBn*ܸ|3At6F? Ȼ\RHmDa s)yŴC[p7?9u}'<#|m=lGa68E0_,2՟.`;SD#;DlE#a)j9_rri H$1 Ǒ><)4i M:9|`|[-Q@}d4F{KUw`.Wؙpp=FgK5*S vQqhu$-d/б,C(?}?ac|$%p%Ga>e|QHF/DhF|֦xaB.Rd$!XqQCH$Nb= 5@;&94"Rz :ڛbkvz 3d_x=I37㱘[p=g.qPK<.QTAaO<+G~ ݑT0Y?+[T!Cm:4;PlY*Vr;7L*[V@ռq#/xm%?_u2f ؖj>f[-?=E O&}BBi {sg$AixOYpf6q:8VqΰCMz\ZaMWzr1? uf4cIkhq"lB#ģD#C~n`G4P5(w쭃|hԱٶE񉰓li=fW zH^%X|"JFmhdahMV3o/SO {y C6dsHJKs+6E6R WRN1~.2;OR)(q!mGAf6y(D7eu :$-^rF*ÿcCŢљcqZ\I "$pZMw4|?:nqlag2ɲCmS:*Xctahx (q]BvF&g㉿BۉLHx"S 1YxL>Yŝ0.YD諫TOR|T= SSަY(ЅkoK.ڈ(1js!yN`)s:J@\lZ:]C<0lH3בh]{c~%dO?΍wܞ7C>u f<DnY0" -n$K(Ll^/4fĞhn5xB yȞLy0'0ʭ: m^11y=Xc|Yq;ؒBew\$R 8x`D!9c.ŁuvSV'lQ 8|q!YBy\rDCJ59r?pp$m_JSg )Hz Ef|iVXjRTj,Ha}FZ/jϋEN}.Iu"e3̓vb[2&}cNw]h^ZQyYݥ8^e`b-gn%1b bjyfLg!::Itaqp9a]4RV梟.DdX;`9iv?L 5OZEqc9,_qi (DXZERr%{GelC+uDq20UzziT|Uj'$}5͆hd8GNݜ$F E9C2Lɕ%ҖT>d g:F,szu@(-GrNNBwQy^(kap*_+;ZyixEW=H|lŐδ}!kT,zdm]jH5ևTτKf#Ivѷ(䏹;811nIE5 e_F뱍8ZX:,tiVWXcR$@,ĴYRbg~뻌?Bxkwt92?[Ql ?qkoV[Q oeæM3p+_M"xk^N T5Sy!Z\HrSuw}Cz-pz~ >\ܧl}7mx?}Zk:k6`Rj׼Zȇ>`_x?<`Gc67wjGܝw뜡W_@綔+z_Uw߸ɿ +'>o@v4]ʑ?wys#ptuMn}wkoK_a˾KT燣M9n}/I*=[b( ( ( ( ( ( (#_yx `q#QyZAp\aYn.5 x&IgM]͏$WR^6Hh%3ڪkgY̘z/jeWewLUV9cq_ N@ZJ i%3\^/8 ̨x2xL"?ɪy jī×Q=!Ib aEעedø~iL'A2зߥY6eeq^x:L45r8-NE |Wt$ U~ZLˌI0}lNr$ j6ds}b4vzsQ4`$+I'_gGY:ʮ3N4 egbGNt=ؐq6C^jZgdqmxZ^.-s,{~uPYZ|Zx1]xg`~0g`.q +^{sV+cΝ'rad5 USڬ,<>͊Δdh,Y{%{styλoeÀisV$x+;Y: t7 EtlRK]d _HVhB6oɎt ikt|b^0939XtQYfWi8DEq5)UPrvѻ{fx<<ˆO8VVC@~ab>w?OӅ?̪y 3S^B#ds3dtޯ2Qp6 sPaҁ5]ќeY2ti( i(ٓP>7x5 R1 =Ѽ^\g CePJExO続N ^IWJVYHA/F~2X`)%lA7Yq/xNj 6?$'p*B&aI9;ݳjUϙI/Qv.ƀgr{yNbP2Jt}[zăpA\ ]1GM h͹ 5ήAOa+t؝ )iyA0,5 mVQtuϗOORФ 0|7A|̓=4f6WC0_S.  O%g=vI;-O"EP p:z4s|ٲU? B06!+e0(r5`4]9(08)sR/ "Jee^.t>0Q;a>;xArD0:\eV mO{ &(Ny7WmGpBl#Hkn)ִ C .f@VE{'$lHUs?_CU8`l6@-E3}3mP0_a8(4puu@/uE\+BIӱT:t&0f:DY0;1tܿDpĈ,Tgro̧ 38cu6菳{$geuϺǮ;>9d^>;<ס}~P^TY94 v1tc'd/_쿉_χ$^d!՘.vMZqQf=KloJ+|]+mJGG]g]3"rT1]z]3Uh=;<||1yL`΋Ѫ '056(y1xO6ѶyOH7{k~y ,g c< Y1knt5UB^dV-/':!&M "Ɗ8V X*n~6Yǰ 1=J_:ۅ*s*F1zP&p@ .;#QCi{ b\cj<_ݲ"ބ6DG{{tÝ^qW92/b'\X'LC I ,Msc- ݻi@NhPGiy:8{sr,``-oIRe,DHi3dH%'>J0H Q^L[{Yn!D` Xqp HDp&g-BCK(ʚaÝ)9:۾ ֒Y~p~A:}rp?I7 !6P[2rW5QkpI%NBb0GqlH& !'୒ 4 Zj`η[xGbZـTWʎl 2rJZ.ζS.L \Vƭ^ppeUB{O\IɔFʙpgX} "xBl+HOXpXġqIZ3N|LECҮpar [#6 kMրԤc B@hg3q 2A:7'6 swGѭ[$ъޫۛb%x, ?ʗP$CaMjea9#:1J39|EO[?kIB7TT߇0=0%vN%M!1% W m3Iׇ771$DªD&5+ 00#n Z {+UmE?:nHUu4qk5 Y$jU~5Wh pD \5vG:΁̹u{[Xcx~ ]^| }/rp %D]'!1R}3YA]$)~3fRpԮH׮"nma|B+5lק[i1% 3*+!XK72O% 㻩R TַT(}l| ܻ$ ]n}K]e|L O(p; ~n6d|S*_ v6(2GD.R{*0;#]lkM ظAщq6RCزӯuD9CpuPv닯F-Lz؃O-[n*xqgTYMz40Ko'hm@/) m, "$-6{>r\Cv ̋]%UjvʥYq_[G$o$+~L,ڟV10&s{toHhvK]''4Գ_X$Γr>hƸo)5(ZS乩ۼ׃r#)a7 Ay ֳ 4^tjѸIc|UŀbnbX֪$<gT b.݉A!邪DaHa1!:!Fb_qG==dpfyԈ'}O\j_cX7dR7|Ҧ96 TtYc)5 *nk3}LXDfo'>G4\-$Yɪ-.T""+ qCe}\%튡nLXW0 ,P.rLkMŖJ b2iY= \Jo%%x+Z27\O~?vu9v$}J [`Q=2i{1ZiuCd|ɘ l$uBM|UҐ9;mL$_ mQ+lmIZChW;R&( L`ǝ`aqR1[_F`!U[샘R1槿Je (`7&Hą[908em[zmO0Spfoq1Xs?T6?1 .j9s,3G`¸ cVbgB^s^T_iyvz-GcEd[[$y\t!fԠ>_iH:]s9*f墭fiWX"+͕mM]Bi2/n,6#lר; j\8{ u/Hn)DQ496k+cew<; WHx.4qg|$oEr-mzQ$3`[&x^Ɠ~b;D^2nt. _f5lDKFx:9tiu_%ZDl c~kGl5gCYHmL\,K #?[v$Jԅȇ/1`|?C;c.k&n}5Jogy4훑S4uV54jeX:i笢T(N/٘DЁ^XÆw,"wM!>N?o-Yha(vͮo%HW9A$n]b%6'vN( KQw'AM@@u;on qZe|FT*op${^oI`nN uWݶI?rAc|l{͆l{8-NE y:_T?ߞ.%=txm_/YYn/cK<:8~%ۃp{Aͪo ݆nq }()ǖ]d홚ۡ ЪAx{ jԨ6ז g͟ 7K3HxDMA#^"}ѽo|_n2{PmKYp0hhAopJR[+Ů)jv=xt{G{ѽݽC<8>x{;ww~&d<`JJL ]#0raAuߺ` ʇxYl$\ `qi]`>}ᅴǟ~o櫟[[_z5#fy?+ok|kk+w1G?ó?z'g~^~cw뙭0{eG?^e[Ÿ_J?b{{黽ޠk৯|kaXTZR^ =j2o*'NC! } /:nʞ+)WCQaw6kDbX;l/OJySijXͶ5d.RkaXfޜw^͑1i*usԘ=Bu7)dKh k8Ҫ$^dϊ:|vPG5sv_)Q^NؼL_-݆;pYFKWӖ/+(g~.ql\y9:oȷi{.s`H9ע^n׌Ÿ-2Y25ʲilkʒt)!TjcP4D%}Ad"E`=UHD~b]x bc›]\~d#&mX1rsǽd0J]f]?$JHTxU`cB2go|4Q0jl2 \GrvDh++Sԓpclcus-v^S2wJgkC$4_=HӱQ|`қE)Ӂ8? ,jݽQmgO޶MF ]/p,!~B\UxmSG׃kss*aȏfu!!H&BW,t7*mȸ(Z-Bipk\>YA‡Q):a5M1:2xGA:gv/M˱>M dt,c'!ƂE;k̳Ģ]й`owr_aSWj wx qF{#?s.>#9ojI ]L&wAFCq{int-KKv@,h/f󒼃-b7~(WM_i8z.jHi/Z(-xI4Bj5+"|%XĒXY۽R| m* ^޾T{R K uk!.|-ltk%d~W3DH.1% ׃bj:8kCrt봄v2Q-E,gi)VeZ} 79tRsA-)VGQ\P\P{rAI#>vR{5TS?vşZrOP.tVU4 +I=>DըJ{f&?JYHLF]RiWE-oMe[TvXDz~Ƶ)D=C2ƞ>b$'d)#۽se/`&>dK[j(5 Hb4! Sk@!BE,y|]]C B02#AAMlc|N]]jOtu[)iv23v߸x-YkR(dQ"в.fj#Pp:3Wwޛ:$ر'ʣ0AxbՓ787]6bzv@׽4p 7ΐ|(d$L 1c&:8xS{_ѷ N^@D xPfϵffrC Sõ^<(Q0cTȏ_-whtM Xf6J p}MWԹ@ E!fݱ6A6ȅxѦ  {R BeDixųO-[y?K~D+rGn+Wpڿx/qlc +-_xm??i Nw.$\.6D]\ߪڷم[_҅mYl[">W|DeGMdkևSMv+. (!>1i_ 5qpWg~de&/\ٽ桻A-sM.g-t[_\UZ}UjJ S]؟j׿m _"'f16Y0郆Ɠ׏,UgL~f,r^jY1n qf}"n,ܾk)HyJO5㜈Aw'%ʮq?ZcD'ՄKpX֣)}lblwj]gkÝ/nPӰ Ңd7'.5xGzfBqbnq~NYj*+%k|p_w-}yEv9p|nv(:!69Jf*fԐY ^K[tI1v?u _Ś/'ɆGb^2zRA-ڿ{4`^SIx/_jHm[i_Y8'+X}/8 #Fx/_j#cLImW陼=9+hmh``fbX[RYZ ]⸿gEIkqL/a =Pii5yɱDZgR|RH&7yK>LVfZ'ͪ`?sۄl6A&li2֟ۼ?; ϋV[5옜"*rCl [Ͽt54v,'mk)[_w9@Wȥ?O\ܙ$ng%ggS?pb 5 '3/[73/94 M'fvYY>@VZXTZ .ݎb9ݛg2ٚmQUKVKF H,UpJeJTY&1>/5o7[`MUSdN,d@ſ:}b=y9wUdg튩1oYphU=$?;5/*TNr 6ݲ9G*x/_jHm[i_Y8'+X}/8 !Vx/uOjHפ(' }?EUho,á}n<7!~˪+ :ޝ˨8y>H˖/+9oWn2)sJEZϼ׏y;{_/(de&d%38-rYLV٥EujkkB1e0449]4sכ0;'ޛfΔ\?*Gm͖,nQCLLdIK%<ٶ0?Nfpƌ/n~p]nRkPp499ٺyQu9`# Nן=kl4v ߒ{szsBŵgfDSwx'5Yrȑl3y>ʥdkGisAk:-9W|De3&Mʊ>S/>X2',cglbq` y!_ LL 2uK* R2J}w5= ;s&N2dek~ %M LY '2Z}K-\(l}~یK'jf)A MMKKd_?o*6xƒKgο 5<781=hlv馕6DF>vz⵾7l="勿`t~}I77Oao~ċߖZa˶Y\w9կ.x6Syk=WPZXXgg|  |#{'yW=mevGsi,iZ)dq}uH]HyMuyj˽gt<_kT8]wr薖d\|+,lJXwBx[m>r|x:wl ASI_ֈ+gس65™z)̇ v Ix!f^YAb)=әMuh('[K8]iWDڢZ1 iP5F$ğ]a8/gk#JֆɢH~t1R / 9iOt`j&6k7/ d&r~׎ضogLl* 1e'_7NOyXr,G ԬLTeS̺2˄%0e0W=q 1=^8| [%WQab.'ys9F7|D豲({Y_ن=Qdںg1|W]._e}5"Q -wlf қ90S0Ofus&"inZbVIw&0Jx",4M8"~^9b"߰i"Tlm />e4ξW΍KaA]Zʝv2$_'A]ٳVҖʒqXiAê)KiV7 E t7l\_ { &̊YD:yycx<׭TSҌI%{VɢzHԩu}z^v^~yNjJz*ϲu/kq;{covۑV0|+^/嗵^i# {m'`1zϖ~me|KL' 0IEΓO[3"7DZf?YruOO+`cBy~QJ^E^?+p?b(3fu0nȻos;9ي̄FdIؒ / 趭xC)C/CUZuǴono6`EsOwx(Q|H&fy&*2Z!d3Eb^dXmjy|3ϋyқ/1*0߾NXk߮QQ]ah``fbP_RgpD_7{sy)CN-w,2HObvC1cy9Y|\U(o͡~\b%^}McNvܯulE拗J8ɥ|@qH!0$ZN^Sz;~N|M3߳NRI]K 5~W+.<ë\zb6O}kj`Rh`3y5ꝰrB13\N|m:uLҫIFUl!ϾGuLo84fKyS F)3Ɠ]oE̒_ZbxTM[̈vԊ=Bϟ:C1" ,ƽW>ݫ_#2CfUg5Yz-%b(3eu`b7DdVkwx{^;z1xURQ!SlezxрdO%BJ i]S)q"!{psk9ӵQ#x#Ԋ5SzpN`(֊ KrEfX$l4,i6A=qr ²oϖqn yqҳh눦Wsp"'sҶci_J\ƁP Z& h @ڝR'p =n ř7k=/9EdGFb<Ԡ![CŐ8OS]uҥG <wn0vN^K "~WE[{s)/q~:{Bw%뽄 Qix 8>4}xvuKJJjdW /xoENI촔J( !DIQձC$i@U$mď?'x婨H{,K ˿z(Xd J y?XsK˨_ySVxOYODWy^+y֘]^"[r g0||.;>]˽5L{:W | ~ _߄ߪCMt9 O|q/΋4T S{.IW).~ YD2^nG-IO.p%)Ȟ:nЙc_CU%O)}^0{j􎃑"or)g&KbR[,:l63{b;=> xkk694(+nH5ß7c`%jˮ6}+Jإ =4/r//-]JuUuBפ_ɷ%{ZmZMeCzI̓ѥdrWw|1??&Y,\O C?0]dyfGʘY8yO#"::޵e>5of:EO͑RP脆k==oCǨWϟwj3NM٥p7,V8{^ޡ+'zn d5 Jy'x$HJ\ pTU~7$h@d ']Mia"Q1nl_膦;X205QYYEM`\ĕJR8{w^5]I=|>$xFeSWw)) |(ҷ̗XL(,+8>f9GtތF>aV ex"4.fi4/kV d%Q:s{+to%YIX&!+b0bK͞e誦 C )fK&|&!6i,=X%i/%˺\di$u!Ӫ fڐ%S\f2d`(u@P R)5UV%0%EMyE b5 ]UEHf ABM]R…/TY5$ݕUE_rUEC}GښAucjl`e*^., G6U ꉠ4Y3TVa 0+/6U^y6-/a p_4sMvܐ9ebGLւ t 0mv>TwӣbG9e"ǐX}u#YIR1^Nb(N aXQX .x2x` ]bv5Ijr@ILY}0iEHI6p &ԪT +"'0Pt̎*ꑁ#P7Nd`R̖jI5 d4LHM!i6oBTd@sA(L}H1Y&P0@CYg=7ε( " &!$,J0 WAp%h p?%JQ[`yMM2\HG+^Qs?hrJє[Qs=)"V jl1^XŢo-jL#vW*+i l5T:蹃lPa#i:{aJYlEM-U025墢+Ed¿$[Ub|EbȊZ)bJxɑ"':JFWsN$DL"HWfp9&ł=*mv&-sQNyXdib&j%HyF#-MVpF}{t*)!'1j+w3ٟ3&|"pJ쑽!3|>j wv X%&F`ԑ1П20l)g;!~Lk 1ĒbE$T @L]3` 85>0b4ZSv%e`l,6hcH15qZwH/2{+!:@'9^Q C RneJRf7UAYU-$ 70]`Y솶agL(33Oew]2[GH'bs9Hl (S)F}⑐8aǏ2 $o5o&qeT4 z؃R_FV"qN_1}ZP#cjiH,%kuM捡H i"Sg3iC"v80dC남H$DB ħS/׿,*hN!{?BvO$ܡ,%@qKJ " nccǖPgx ScM_G4W#IdR5]e%@$b*(o8ZeD`Me$H1S74ԬML28?-pN4ā#օǔlTН2'EV"h2@7( "d]¨ԯ{iON%5}xKʢK/az; 4r'V+PwS  5a_QȪ,h-(&k] (ɺCYAP?TQ}HyEx…iS=k?~ׂJsT3 2'B慠GWA2u?Fb*2n`B&@J LQRT +CIyK+۷)cǎ ys҃HҬkT1bΩI?uYlf#FuZ#3917"EbzzUA&[S1J)*aF"fQ$ Yd*,rovdDWdE ^p A]&k@%KEاXSsGuE%}V6dSaUAVTY^EpU8ȼ{"UTF*2=¤9aѦ:A]ec *Ė$XL-`6m,R cXO{ANk@Qux@@vbJ~yD/} ,= w OwlB8B 7("|Mog&v(&^r7PUwA$W e$CMY4ZJgr!$D]O,Oⲅ*}q|qj|NE88\J\<mU\.}EeN^fQ t d5Kiecu W,TuoZBho8:"U*zaY͜٣:7)KO8Qg0\r?|rl(cB%h,3SFʋA߳ >S> 6 GXIX'!HOA8ꝅ  )ko|ϻW+:5@*i5{y ?3VxB UuS' ~}o;6D<"+)( "Bwasm?‚0,& D@?lۑ[.epP4e)nc#c |A6V[z$33~B'uC)A gHF"U#DECSx1n3D_6^ȶG,B/숾|g|^r4io,KIMuЙaecЃ l:o^8*s2lo[ߛ=F0B9ck\/l BnFc"D~֞{-r36;Y ɵf%Cx1 M]c2ߓ{9'l$o6QOG~EoA9+ڛ{P%!]?*$-y;MHK_ߝu^ 0m85o&ͅ RϵW%|Ѓo.Zxޅv /"=sg}-ZEx_e3sUh2e`0FQ[`~W;kL9 =oэ>kBft~Nja߈˴oE>cl!heOYo,{g.z=87#\)l82=660+m#ֆc>Cz:`?CK|y* >jVDLj Lwg|Q)uwXWE9^H^{5^E}Tˁ\Jd[z;_) GstǥzX~dgh \N^ kz[Vgc=lݵY3AuLMuƃA7y5o\džeiۏD]"(H!ٲ}m>y{?R10l߰Cbxo /vgsھsxMRjONYZǧ 8I&/\{*oß=34_~O?&Oe`ӯ\N!!ȵx:QgFѹ-}/ !`38\ ȡ8mWٔu4mܲ{B:{%+?tK$O??H߬K><Kz/˯%o^sͤ_ylߐoDBN:pOReQ& j_ߛ%ɣ΍N/'E뽵%-aG $sEQ'd@>YK&I'#zJu?[fe'Z:ӄ9%]Ȁ:%[u|9$%5qynPv~'$#b"]t?<:[4|4'7{;L#X4~ԝO5+Fwh$3I 55Ͽ90!4Cy5繝xтD4wȆ& vl$w`FO? j1kNzm$=53U/P4J D%m$*p:=yˍ،!LrKDMG?m"莙 "86e,1v@Q&/B&="/ESt]N^HG"k;=7ce+ :˳ȦGmZ(p~+NQCK=!Q@׉f:32U'0@ $D|<Jѳ| fNJvw_L {]s$o\XzIM6ZszkW4mQªd{զOja> Ž̸͕?5vŌ26Y0{ڡ[d8TXY \AMɁ9kZu~I77ؓb6nylQ k.Ml>V_v;0  0UV`t+`7?gKA-_u<7 ~Z,YyҲzxFtr4ҹм6/OմclP>_,k3p}ʲ`7ˡ>]AͿY˨˨bޙL)o]qWVICW+Bm1D:oU5¬K͍'"XZ#s{$43z7^CO=kyp&nhl6~P DK7-9FطYVޘկNrx ~3׭CUуxۃmk5, 3FʣͰu Ó3Cgn;>IY=\>gO4Czuea--f3Άk<;}ÇLsLYl;a_< ;)0왕M<6l4 1_~*zzfpjԋ.}\r: -Ǔ8[[Êyj,V|Fr "W&O?U>=9;s/B4 mTVlhA϶l#ֽ`ŘopfscG3AHg0T,w?}#JOϢ/DE*"q"0ĞCzj'6ߖ喖~" !D' eU٥Rj\YB=kW2$j*umLhWp˝cǏL*/zGI'y\nXby#Oit'ѿ֪L%I2DUGl)wRULd?tKF%JFd-,CEЋcEw%D R=vE#=H Ȇ u?q b`>A]nU)H7_3!&ĦL,iYB IA;Gr0][(1Ek'ق$UC%#@USejla QJ%N Znh5%,UElN3@2vSUcݹtE*E v4(ixR eTJWKDZx}hH2*&(򩚗ئ'i@wَAE2t! <*}CXi eowmkSL"\TÄ2aBط'=LS0؂`lsQʧނטB6M!Xx5;:sGב"`;2uhb` *F p:W ӹUtBfɣu&ҙ|:Uqk<GqT)`6Oy Ssxt9OgJ)`.Osy S\|cqd#!_e/A z)j3A ,!Vc6KdCU8KP2J[\~/eBQ[t,T=ֻK&=0ru{ K2ɒԦF_]Pq]pA#>gߒ,lтïS0ȾqjΡ3CDEM'.vQaهtz0K7hDG2%8,FQe]IP܆۝>J? LucG~]{G8ѽ7L hˊ W,^W"bqw+`H2|9%bj6DK yDDŽM$Z&Ƞߓd%'Mpdَ:N"ܡ o,Q`c("bx"wb RŅgK?̲~'ʲvy (H{u}"u8\rI%"yx NWjxx<<9 OTR0y 9LB.^:4Ljͯұ.dD# h8JL⤲YtQ`dzz#5DIݛAcdKJhR#%cP^FX.C"'C`ds3Fcdj@ %k/Q.(,xC{Pܽd.\t R: ^|QltIA ] ^#ܼjD7C(,%i]!<3|JEM eFȇmy ˛aȲK\E0b'ƕ(^nrFIǾ (t̠Ke:g/k/׬s϶ۉEņ}kv=~`!lF%1/wNG&%Ln|jlF&%L'LfoU&A Hv:Ǡ18cq#FFX-x=PqRw|A#vMVO}ψ  #cP4_0#':>,'i?;LS5' îcN'm}Ӿ讋P|}/iI _3$VM` @ LUp ,}" xu\Y븎܀sٽ-+%Q|ӵ>'rܛ$@n~W{7ey֎ϓr-G0{Y?_v80Os>{0+ExÆiG=&W+l+p.=n#o,Ͳ5>7Lj̔ެ˓gcW<w^G3ozx EûV1a&X\oݜ/ofbçXr7e 2#uͪ#Ά)Oƥ=|4F iU['EvQ8Bn"Acx}tҷj|pK}v 6,DQY~ 4a&nrg(ҟl"61W~n.oaXp;8_;htngK2D*.S1&o*isO|$IN}:}~G'v"3p %Ֆeeu=7 s5"}Hs5,P{ E)PBP2VjOƒDxh/u57v2K6dᓕي7'R2ZD8Bp-p>0rY$ zBB%P0Csmq7`~V'2ew<2#4^WX,Lr隶\JhXi|4e>Odf`Y9I>b@6(&ZD2>\m&ڷ!goo skl^%RZݴʜBۄSWYX2WH+,2) mL5lzXH&3`bqcT,CH#g=հg@eA9~;8GN `^lpA X ŽJ^1#= ۰#[З79f\Timߓi*x lހFv NRPb'Φ="HP^G`{NZσZ3{L&XMBлk#QE3 fAзt3}9X۴ɣ3}T,c֮ >H)u !!Yk:+Nb_pFzDͮb7UHb t:Lf^bbR9Z5o *J6HU#e,z.Qʬ)sY+&\7E$w鹖mw=mRӆ{B\ϟ?!\=|ν`l q۞"ao`rKS; נ$Lam59f Hp]*T\=όT*'fE>'3J*A0K&i`L{Ǣ_}2q9 |O5xIy}p1mY@G~2_K]ۇ2+-xp:ub[X$&;B OV" ~4J3/&8nyA$=GAV[_%WB;G$&y͌cTQ J _/L!F EO2rHRR3=%ff=kr|#B{_#D's#Xoi޿o_7Z5HC@k(|nDtgtozt$ʈ@f()*8ɗ\KmeNLM$V^Q2_}f+}#{7V9kV=豔+ n  E#:ĖtLV= Mĺ;K=aJ og_ζ#T.LP$9{ʀ/yx+&xWM1SǮ=b{f1{Qo`'I]"Hq->@QM|3 VF){d}Sp;r`1)gig|8h!p a'YY 2@_rT&|#&?CL+5vmΨkpGQhZW8{?'(tGKվL3ZHcl}H$u2Iy筚 ԾRKJhoz%Rve X|w™:12c }"ĚpR35t WЯX;ӿ(7K!z&3ZKm:1 rt.]%$4HvS .ݒDp& [OR!<ջFwb5_dd Di6cn7P|B.Գ[u;Ŭ9hE7&흣ϒ$J_1vCY{؅y_z%X9ndzgTzHc$=CO{=kN3`s=[#B;s)U3aZ\ڇj77ߵDj|XU;yԛTLO _*?ŝKA,:Hh;:ţ.y{42(4{C$ڵp7iDem]f>>HEi#ǕyJBlC$JWUQX[T׏,F+Uv#?1ie#5%OK;,w̚ymYgtC*c[*m tTү/jgrh87= a7Cz~Bo4տ϶xy7~3/Ob|Hm-vqmS 3*&6翚c ~m4^]0Xj7q̲ɟ^ x(S >bD[7]LQ{h[~47Lس򙜟tCx@3nVeQd,K{W8|q>P%[.ϝd+{.< IN1s}]YHmX,',hH*K(WS|+]0]iRԄqah&YbA>Ubb˜}TA(+aO7)InaL5Ft10O:Ʈ/' վ\+Dƥ5ˊɚ+(3Abl;>]+T"5b.Niw%Tw㹰b 2QpAd;'3u]sw2etke4Mɯæ9:\[H(2NjS%ṬHD\+aiOCbtYu>󧤻jqh:ӘVAtn]@IEcΊ^OƐ/9C&@PJۈTAMF WWty)͈5 )4'KFp-RsnAw|FB0hD#~&Bz=h<_`)1iЙ.B4C"p4 " YuM 8xA*c֢pcԔ:!n"T ?vqчi dap"0סwJYDN,&# *1iCl^hV:p@"[44/{'L!YUQTwi8:&?sR\ei\Ѡ( 63 ~QUҠfkޠd;Y䣕~=sAey8}x&O1[#oCe|CWR[:ݩa1@:@-{zT?=6# _ma7̏3SH h~/!)4* DOgU=ZadV)ĸqt*d욹 hMD}R犺-F!I/Tc %X!S)Bq`6WC=)W7Yf,U**@[FTrIVn ^ˎ_O!|«|kPR`rHv/f5lU:l"EDN'rusɠ/AjGC3'~J i&/Xux#MwZ\T1x99߈|9uXF\NPml Ӭ,Vn Ogrr AT,n(f(S?v<^P\-+s񴄱/Ѐb:¶0[٬m}~Q8QVy X 1ȫ~zA.VUeI>1XkZ_ԔތQu'*`Ke'D=kf~S"U@&noÙmӺDr'PוTI٥'erQc'hy?6 yMJ}y>gB4Fjr-#ڟ^mMY MpEjpZQ]<&FYu 3tɍ4?t.uRogկ3xf(OchDDYMxMM$޲T'"mrتs.XxZY=Q謡&05Ҝٓ32㋧s܂utg5GdA(h>D.LaesLG7`_gOAc46WV(=s-_:-A(^:.c[L},p#4pSYݏH8)?a/Eg\K!e+"k^ =_<$EI0N3Q ˈkxV(}SRS}xaT }ԑ]\SbB:eF$r]}$V{J`xFN!^:\>طɚb-6}Y XJ~G?S{2N2G^E4nudS[A| 7cB8j?$zwWF sRIh-m%%y#*heT@8pP} Y$fk)ڐ|=_jc%dxUTIr0 *aޠHb E8H4 k_v*intyRϏ W6Fc>uZ6j r;# T9b/ꮐ *y';xM±$|Z.jop*{EG @Z0J{c/38)m A 2њ#SvcDvX"|Ijxd*bywMB3SmfѷWi#z6uTUa*_.{L5X7~aj+w(ā!G [wn+5RG9R!N{bp2)p|'I x@^TLR8#z4֝ң_@7?z},=-7ցeAʥa1H1tVJϸ/mKk:CI_KyOsgRW2?p֕xԴk+tmq>miW%ۯsRz9/ ._R*a5wťs]u}G/bmg5Cm~vvHE)/;V0oG\x4$| p*se^C;[k{.n#® wMpGJ'p*Y wtglD3A]9,:-|mzWD8s^R5{Q[#yB@`LD:il=YqZp|T:>ҩ~{C,|îWK?xDCܵE`h8zę+p:)EiOI{;&aaK{*>hi;Xҭkq/ ն2NV~| dTm;+ms]Ӝw[=ĭ ?S)aZ8B*|h9Y 81 E8e %q >Ezׅ:7_X^?<>_@e86 P'W7#ﯥ[UѢL!M \`< Rƌ: =+Ko-7Ei|V' Kk{95LqeU : [[-,! 5lG0{M].qTKXId>%徭W-~Di)fEtm/##)Idk+BtJ-ݖg[\Լ.QmVwq;@s8 8:׌L(x",v #/pgDU.o51{+jNhNXcyd ML1P/#n`vPV#x\ k:}ۦɓE7$ֱ#Մc;`7\ۇCD6dQ?S,SV|q$ظN h9pܔM;^XDdbox1GT+ΥHpCH"o7/`΂`{^Tk z%UHbƼm}l_ Ǒ({׃MBkj&Gz骕Gv&E]۬w(Z1\#á,7%]c[,p109]zfpO:%L*C.gn }!c!0 E=-؝~s:g|ALҎp>JGVm}P ʘ1縗4o1OJʹgyu߄K,@}Vjua@zP5ĐEw_Cera!).N(ljqWTvAuA= ; \WK\qK/Q/M97Ս\P!lQGu| pX:J8ܝ>Ttè8rEajSv678UK;ӎ l+,bDdJ[Rhd!|ʂ/0(Q>~{IH7\ - ߄m/HqRh0=k,=;Hink8F΀?քk@7?0+KiV"/|aSėh+e] 4գ zH?{TE)qeOEdhnxsWcpl7 &oeS%E *pRuURrot$GP8Ƨt2.)McZ㈵{ZQ !r!0bYcȇB8 QAq4c ?:U80hvsK3:Qs."L^Ot6xq66(~WX2HTlsP5 O)NGBj__9){8uDP-<5xv S"; nAW'gr:rVN (Y ڞ|H$ rR^{J ё]!keywt8N\4cDQ+r‰ʹő+81EvCORfNa+ _w&910ŗri)~<~mּMGCKFGL%AEx> (;aҿ]ob+r.b lF62v``AbFy ҜXA~G>pp*ٯ;vtGڧb kzp0J!~BxO |4s4Q3;n& ,% ^SB(E Z #Y݃2H;E"\Ӫm$n'6|Ao>SHgfgH8˚q!*5f 2Tͫ?MDX@m 3]֝=8@זּgϼ+NyD@9*}.idJ(|S]z& rD= "i'<x-/`2u穼wcDZ\OBO91AOAEinw1ukT/r3Cf9I[\"ӶgΦkᡐp&g󲵓 GZW3DW_61z.R'oUKz( ~k pD$fH *LO@q@0]<^`{k(Pv/qlbN]WTzqZ_TdSF4C5O 8J10ɱvreTA;&kxd1 X;C=S"tW~'Ș)frdȅ~H^Ffcy2P^Tz| !MMW?,s6Q*pXSٕѦ~|2 6Iq5h4="Z@7Lw_8(Yo#vh2d)B-9-V6{Z*0 (!%Prhc-u!|cp5eQ!tgާnoC {$jʀ/`Qw[fmAurL{D7]/A/ @۴f0O*BxHj/]UB8{yOyTrzot<'t=ѢD9Ϯ-Wڝ5[-Blye_ͣSLYJLpp͢#8ų P@ o".XJ6]{adG׮(huީB~\~K{Lw: ~Q c7f>MnsyRd_~fӡbbܩ'Ǽ"G1YCCڊ#FޝDtʪa~8= Y6.>2F[tG/?,Isz&ed@}lI{͡D0y9,>qz&63GhV-z8($E>\DP.L(]PLn`撿8<55ߵ*T#<g`>}w`;E8=L| 3pT8tǏPI S'|J+!X" 'XukRlnwaݐ8T* <g.7z׸(TYw Y81z;WC$9=JϿjA X}*VdZ}U1Qx*K2ɄsDwØ,)94S=8F}A<K$攵Q̐7Ma "{6{lAY@WyUrX%s)':CTxU{<99$,s7)&^#4v Ӯ`\h~]N=zҲںHzY5JqS@ZJU"U?6~(7NsGXq}VXŎ%Lv)`[*%cxlaK6fiVLT8'z5X5z95 6Ǣ7 B#0=yZ̃1G9;:خjU}64g ଦF"j@~hC!_D @Q<^D\jWwp9JK[Jj'nvQHWW,(i0T8RpGhf.F>f&&0V7 SUa }m*O-?e[l&ԅ( & XF:V*0:m]!ZX!|u}r1趶s"d|Wep)pb Web꠯k` b!@὚筌 XEyk8<ϥj! )a`0Fruh."ZZ똊hQ\j2,6OI?Wk#vTN7w$eQc%(;=_KpKTזׅ}Vs_k^KccB|mۋ/tI4Nsg$ȋfw<ޣə$p^  l^]>S `+ ިzV%}s\*֫h%J?k/^fU4Hx)iRn(im ASe/]s`a)jK/\8}1Y:hWuRqvʪ֜yW){Ane]K M-n!d@ҷ'<)Pϓwe6֛8^R^D@GԅbM[ <HVC b!7$ɪ nwGZa}Ajt>i4..gT~{Cja┨4‹u @C }pȳeysS,=q1_?i I J 7 =c\I$J ,ȬM =*NZ&zY2͍@l&{Q?)Fk@Qe3ֆ|jRL[#U=],֭Z+z1|ח4,@"I$Ê[6MzTWOc)/lEF0͠?јWPnz%P^.TUIs /gdxFrgB7+R{ :22AԨC t =}C2Kۀ@/&x }t8J%CI~vQӯLGv^4B*wJ}C&!>Ш^ϱֽ - \!' ?,6F#oqr@k#H :S"Oi(5FJe^:c\n<Xc̝`rf7mFwUIY$gë 8CXۦAgɉ]7^_I0e¥/JerHqeUz!Uwx|3MJOs(f 2;,5\Dx!.c;@wY-4 y}+rWNDe P>BSeQ8Jp<2yZ"Q5H0KvT޳O1S:ll0 ,"w=߃Yx-$-cEج(S$l2H3Jx2Em\P5@jwDԆx$f}}jU!r[d>`9#-mf`'_ô*} YfC LQ[  $NcӟNkpB'P+΁Y%\4CSG[L{hST` nh='rq`&D柬V_u9g9"T0Ycf8} E\} 'o%j&_ߛ+}o!v395n^Yi$~OW!~P_gaC>iv40W!uݳ;̓4aIקLڑKoCo-y;ט%U8D %e @U~ g6􌥧 JjU]-_d? I*҇!e0 X8`HoBѿ[5΄ֵ,VP+6z'Uk0 9O)XɇQ_,{cs\]iDFul=M61+;jDlcRj\ssnV‚O? CFThy@<8PXΠӑ%Q%B)S4|E>ˀ%ZV 1̾IM H!7ogi8t8nW _0hxa&Ƶ .MCzgj̾ӈN=A:r?sT V+-U yI PLjY_ErwZ m<.d(7zH`"GpMfkf>޳$\.m S?8^j% һIP;4O7:6NbZWՙVĆBwe8Ԋ6 nI,g olbfmi_VYJNmx=:ZcZ[5Ln; c團 4nAo EFԻY:Wh#.i~UR ah*,t RaN J ţ~XE,;R!iԷNa2:ָ+T8iጶp|KoᅬDL%alHEZQ꿞(·Hz:KonM}EK}@^Nzk5o5eBrN[ٮVN-Fma > S_)Vkϸ$$$W=+Y}K׆aW#|Ҷ"d¹jE{7Ōap/C!$G7͹hb՜7;S7o\A'O(Z}|l {%gLI!B|׎yr4;Z l= q؀sveЁA<lk {wA6Ca0&SLm`(HW/?])!=%1c̒T'X 2fsO51jpm𽩧I]צ&o_&z`(nG/1X,Exu}˒Hݾz׫h2kZ2fW$=Hɠȯހ3kU7|Á#o?y-e?qr=o~Zo3^)图ӑ'K&YKΝe[^2MέϼwCxH^tBGU|u=^ȃrs[_w{sG -d"^~V~?!v?+WANy{s;J Gg8PHqlat_5x7U_$KeVD:}r]r/SE~y땻RC{m|& zx Fޔ/9 ן⻽664RͶwƗ&Ch?QQ^KGN\Vr7<{s$#yVӐÓ ~ژ.>~ۨ _eiTglL=-9ڻf2:<,.W^l l/7hz*|1 %򈂸i%A_%}8AFV>0]<ڬް7޳i݁ڲY~2dd`ĢwƯAF^evcAaa} #e/G_₦)-,;SB:aϱW1SQȍ`uzy^# knn0}'> ԬV4w>?zugѧ(|}!"`B<\`NWGpn:,t_><;_Ut8u=DžJ|`v*6F^w'U^;@':TT}-A{ӟ$ \^H@4Gz+z:˯26I8bhY@f/+V h F%[gSD0ÛLٽ> Ū?T ` y?,< M%%n2pz1,4VͮC%|Npn. $*͟SƒE?'ԽaG-hm}L@@3LbH r&8`"֍F' [W8D:1n Z*ԛI[:χC@ym93П{cKZ%0bJV</@:zPϊ< ZXo&aZbD=d@%G¡F {*094dI qѝA.| qOЗ'3@>exi7$t>*Hњ.[erq &xTϯA{|[֬7)^ ]q le\ǰHCc@#;ȎG`]W_u_`\%'s<ʸҠԦm3VGa^`.Ut] Gi^-Hwdr{zMG7}͎ lv; ՆTc+K ؊?E [&p,Qբ~UIـe~tgaLnPf`]@1Fjd@n/H=;8L7S]UIL`@m8{l]Pi]?\N57%ׄ.07wFA_OP+ ‡]]CLA裑rW~%}(ɰ 5vt(7G^t,;c|sOA1cacs?>JZ`gA]>*z4D2E }nCdߗEFI~czomP eKxuoK:ҎF :ؤe9#F-8f}Ǹd[s')Wm9{5@i.=~..L 6 ;+Xyl~FM,n09TW )PrI]![e 2kp$L#@F87EIuG“ $hC]V\}6ic 9ك~x% q&+]=8&y ] a=TTh\!v'e% G# qޏm<_`Iqf˜)1M eUX2cT w@0Gqmt"$9߆6<M$qB?]9jr4UEmIX,;p9DOJN B1< (iaߘp,` K >!3xQTssE*v-/6$ g#+FPxKFS fށf]0?0B٨@C$GeZF@4jK4)Ne\G/1OJP Ű!, A ,-, C3!Ec>8S3[7gs\yã m-%iC+ 8!gG]B́+NiZW c0M2=|.]ByX5/ܣwU֨X`s앁c$O$)T1\{vyt6 kj1&y.4(/uieLYtֻϛA.#K`ei'wY;a^AuWw"82{T*O ` q>+S3xT5֎d  ~(C`DXty.uyY4Bq?@uL)9KNDrz[V |ʿϼ`mqE~h`%l.}> I)ޮ>(l 븁ԉlT!ԞD]6m.E/w$71:f㚡uLBڧ1e4nBdRK0NR  @ M"˽ty[o]_-Ar^z=jM`יqVޤG4f,ٙQ!RduD>DHLuSOPPN A/PHv}d̑zcf\kf=m7J -sHg$]r #HCKÖу>-,AJIJEM{kslOxThn'[YEԤlGHb24[ Nj= F1x|͓A(ڜ>phd& 5,{u=f4j"!=]`3X`ȑWS$ó߀p$ax(%!J[笼=ܷ7 h14; 2 (!tSBc9//Jx%em usX51?D})ps'n}*&9>16תKrP<.]3EKUp>U0I#݃dX,l@TDol|<4U2=͐& dshЏ|02((Y{rJ;vqċ^u1\uICV`xx#鉼V mR'3XZ . م(6\8a|m%'Crvۀ'3j"* Y_ۯeM 7:eN1f3S[¼K¡k\s@+Cnˈs CҸb_5a1Hr` j)_e39^K%1'Xǭ;!+3񪨙1g,#h>m%YdTܹX515]+fK~dqѳ3DX>UY<3vk~avukEqƄB%-Og>m^/xTE+ZX/z&jzS!<|R&,(:Ly(VH#8ޱ4*+#ܵI": ƺ˾G4&Öl% < s=sQfL vy1lCSҕlÓT*v]BY`&㪴<@`~&8Co`~* qlmh=sVSU;f+X~ՙ9"ԈbjW|ZbT9愭qR=7zRaCYb,Vu@x+s@oAJ ?Г5}Db4 *h;z:b&~sl)z:\uGih|>'X< Lf+n5IwѴi1?Om j ed[CF6 ,GU<mA}hUfB0Rᰗs$v N.@7L(W/hWbn]6S(X)s fy-Hk8`[t!fzg%:\2Z>z>5D76a "_-E뎈>yaoX'=7֩(Xs$fTq{Z^͑s RCj(yHH=~l-}44u)Es}F{9f1O?\bB6!!# Ow o?2EqYq,V wzN) P86;&؈j}3C9cZSE4 s]1cEV=aД}[:3e"4j? k_/]X<[>npJS=o$=$Q\FXuK$>y!D$f$Q0τS2dXZp_)@ˢ:PВӢk4KCÂި( 0ssmȗ?3Ζis^h6.jg(i!Y&uɝkr[ 0 ^n8ƤP]7BCCݫ芊ː1H ^iJl#?<P[4{!SAӨ?%<'c^%ɼ TsXW=J&3b EDV弣&rxNR$62! )rnm93Ug$֦"A1;875g2~mW۹Ft0DemSf]oP<Ǘ[bm2M~{۩lpBߔ/:2yC`'^\vcݞyG%g#*j>!j?-%9„rcRN^עi0]0bc9q|_XM[ z#IψۅaDOyh*|TK?is`ǂ)6+I 5 6W[TFC)d0G0JH 8Ft{`_M!0>Es{0Ҥ fM]u'gqi[ԕxe1޻1 C(o+8jՒ |W3?KC-dD>͖_0)A CS/}`͞`(W?5§HL쯵ծ^:Aq0Px|V tx?*%Zijbo3CQ[ 2 2[Qm^jT4vb @1h:02AKҜMI WG]P9+db^'x.&zуl&q,]Jݷ^G$y+z u44LщrB +E=[̖Nj}kuX?~G/w@t#XC}QHjX+z L0>kimHuN1m' 4̫b ؐ k>2ZqL;^!Kq+l,BEq ZR۬ef* Vm>n%T{j&F p+R(Gl~"t"~4VҎI}l]0ͲceiWH|݉8Sm9V9It 2EXe^l TL!D͇tB"ËaiH2Id,K`~/l E> [[wVf,ςxz ,_D4;vG=۷bfϔS;k U]lC> ˡHXP- BP"`GLg9&zԣ2$ϲkwlJĤgrb[3?/"Mnsm!ϳF:Q0IFX=I7>@E2VSYq`$>ljs`.c +X2\0f6q/}S|hor}11K[ 7+&% |]6H,hDl?f,t`EsPP={T֓^7jk-*C}'?0vxԋZ7W\.!uNQ¤5Nݢ-۲eѩnVj^Us=yP:ƿՍ~Y+o 6r%9Wٟ0( &kX,QX󫟿b IX٩E0Gw"S} +A-o&{)pnMa//:B~JA WSxDw6An8KCZc hq{YIm"\4h!fe )G&Z9LSBu<1 V_0A99{ϣ iT֕ tFhk¯#օPfv]k\K T~j~T4'vU@G;|m*pwl ǢCPmDAk!`ڊ!Vȿc%?XS{#%!GvR| ҇db'D,v흓BWH4Pzab85F!U Xi`B$9vP/^e@8xʬ[ozaGv-%Akta}gH@:u"B#QP|M gF鱉wY*Ŷw dqؕw/fBX2x38V|\Ia@.܏_%gt/Қn*~г],o&.F"rZ߃>6޳ce X1Lɢ /(4d-G⥭lFHn5EuesQ Z~hNy6%^kF(mz5Bx㭭w8g5c _k YEP- T|94!Mmf75W}q9ŀFj_;fBqZv7ІC9ﶔy(}|xs3v0ܱPG.<ms(yخ]?v);(pIJzmD+xSx.R"/8{=*cuMA7,!(DOaW: Nݜ&:k-P8`㜃m@d9_Ǒpq!Ȃ$-w4&5nNɿI[/ډ 'DHڻ[YDٴ\; {XH u4T \#}9Fh*:`#83(PWhNaxbi{󇌋57ިV])[}MlJ#Dh:ݶe ꛎO4ž*PS+ڇi~v}HͦO7DVUQEP ]drZmt-hÙ$zM^2%Q%B*e;\% I(~B,< SajH7cbTX%Oý , :a&&2ѮF354ٝuޘ*Ki.*>݋ [X)c"F1lKۀx6൪/8"D4imّ5wM]6j]a E8GZnMψ$cWO3g @r o4v>m F-+׽O,QXeORM X i.>c%R/'yAÀBTz7ڲ%;' mQ&oeu KîZl,Mgx|JuVw;jAsA]||4O0pg9lȹ(RY,o,DX /:W {` ÒVuu&(krOߏ!QYl۷Va&;04_"4HkvyԖ!K3yw$hʼnjd ãL,㎛`"P^OiGU Y@ XoN|`ٽUk,g9YӲ\ڭ9uacgAJ'1Àu5C!X'BRٺM[KpamT(>Gb[EtRlF/cj- kOռP0vL6g겤#̟)/)*8nc B+MO'7a4+'#Z9"!XHP&Olxy#Bzc/d|"dm%\62/6% ]0 MG*[]Q;+z~R z~zK1SUIFHU.rE!U#V]Ŝ%Q.˳}aeV25iNM$pV+ >svLp1H"IbT dugHN3b!c9PM?/!{5,,k ,(^ z=MÕ"aHsB]?kh=jϠ>x3;0" A>Fp_ٮ!=Sh01rBU?p:k s0]u8e)TmIdzRc90WGF 79Q9&=O|f q.]Ƚ2+aMF#@nd(1&9e r9f(hRT؋=]-0`ulk*|s+J%C[_6 REE*ʁ!7)Cx|Iz~b%fL#M=iM3}9I}D@cFlWC+`-^4=Q(TnM #n}Y|.szJ+3W9F՛hiկ?ibMf ǡH)V}5 Tn~F??wX ƾf"mRmtix fMˮ.D԰s,yvrdϮƿw O1JGS>~3ᐌL"ě[mcͺgӕ(Vz-DM"C4l,/0.Q)>s+NF'dA8N6X+44GD&{\222ě6lAyimxI&L9-8]tԔ-ؐBAL44G Xw3I|A4ʺJ8(W̲zjE.2 _3CưWs"S ( 'էƀN,{b̫' Ol{چ1j}.潭 pbʒi`({ (χ՟F_:Ev.Qc|0ήgFE6 *_R0u絽d%%h91)v~K׵vݕy:R"ǛmcU!<|#s(vL0`$z>FD/&ѫX;1S[.V<mg ajB?UsҲCeVKd.MIX_=?)kSz#{"j  FOc碻U {XZaYѕewvZw:  b(VsUÏ{2~OGBE?9黤s;<:BFqMxhDLnK42ԡ#=kvEh*'׍!SG"JSXӘ%5}٣{e+Z./}O7q_6܀vͪA $H/q0zhxdTWH|Z16E{Xg"/ç&~9>~t)(;5 uy:l4]fT>w&eo݆Mm(:W/8Ys"]F14G/̊h9 멇l|!S w 4pMĒ~Ad!Lcd-;Zj> \ZϽt=Ygk wB6Q6~ДMA& E&:f\ ǯ _֕1inRC7b*qG"T7,OUj[WeXpˀ+"w']ps~-W)ҎiMZgl_:mc[$ܡlW(.6-B-SzEu35fMPC_k3a.#Rt<=RϺZ:xi"TyvCBEY dž\̈́})MS!QMeM[҇J<2w^ڞϡ6{t_өcGuy-Le!>aqͅ9`a>gL>}*bC[0ʏ7 wHL; GմE51^P_* T;05N,pa=u Z@luК؃rǠf.Yۯl{'a_T75\HL/a.?6WwxFNkKŇ,acޛYoHhI=4 `@-Xt3Z!yK[oiW&bt7l_(J-v\ :Cq28y ni=Xڴ*0c-g[BGdg/7:) ,dDx ne;b956 V[i/m7mtDPHy<^5gۦ63,h1f֌Aڤ-/'6Fv \d@]͵/"e ,N.VAX;9n W.Oݎ^WtӅѺ C#Dz@)_Jnn7ݛj2r&`yUGS7Z32O{J[Zvڶtb^ܞ4'`&o4Bwža5(fܣ^QjnM-zxu}ˎ:޾z*; qaJb*$Pbfe=#qxRNE(y gKq0iKYIiKygC]A3l33q;ҙ?}FޟJ .B\s神iׄYͶ:%׽ĒmR{>?|Ey҈CŸ8pUڎ,Ŷ:t|g,Ǚֺ/azDޞ#`[ӑˠS9m,xxU^M'n˒eFHkKxaXdaRᚰmɯ:/.̋RF!IXD|\7ƶЎi,y/yG{x"<{%<{қ>x(@)S{#5_m*̅/'.=o7(7&v9X5=)mSzG( ʹԳP܈")/Nǘ+, & &u9yKrw π]2~~cϼ(N۱``fpO۽1zywZVe\yQiC~WmwǬwpvN`|]{Q\B@ZX'w 7 :Y-y츰ڗ=ye~Pk:8.ubfϯB~&@{"Ri-~,znLU~7:Kf|_*,c* dq h$8} x>JTSV}xVrvS{f@9P=q6ӽA,]e G)|z!HsIýdnSDy)?'67e-'ˮFR~nݎu.z9=?WƤ7~2Ř1|Qq+.O aeIxכ<_k?o%{ ~nRkiCn9%ݺ#$-Sf3w^yNRy,p{*aK] ?75Ҵ'6waU߁ *wZZ_naJ݀A(Ff. WG[~𷉝>|O'HЧ<M&zms~;eFwZUКq0_CX_(,#@A(+A1tzԬy@-ބٞӄ,cm8},Aς%t#Ygv,B@* 鼎˄!)J&)dnH"q{veO\hm%AiyHB~H:^޲dVD ?jʨS1&T@#z?!Rюd22t]$LebrVuLb=Nbx[70a-_h!HsrOѢw-$NjqCkJ2C(%"nqN`OJt}͡t 8 ⏂Y,@Pl6vmT*jp5,8 Z&Wmyk%m='%j E08_05+ݦhČz(d}ZK,ޒz#e v5Dz}6WlxzPcҿ2QQ Bn ,$yL,dA0N:-`1=N@fA7 Lùy-m>]''cQ`m_SE/(4B;B-1*0HM0{e8H]`涃̩8󕌑gdr ڜA|Uj98ˀAM&t 5âIaS {˧ 2N"7Ÿ;~:"AɉTw+:;3Vxet'[^^/cl{a0ܑZ܀?ә=gܦn@_ݩ-|_ #Y]@k5-l[8/8^\ 1*rQT D+'Ђ4 1zD^^2G eՑ8ba*PUUri~ N< R:h򒛘hV7b3ĩfKO쬼L6yXisb4=wH"udӤ|C1t5h,B+FuϚ 9C74 &OTfmo09vKzqqfΖ _MaxOnQ>(:y֘zaʙν\Pdj?+*Zڹ]2k=6\z?F*%z $CLn18|;3AfgĐ (rw [uuTHX3;xzu8BDMOV-x^ٴ,q 04jH5׸ʯ5:ZJQ"a4LJЍ(|\o!Πy+U|w3θMkMGɨ`I|l7sÐG:u(CxiK<`x:N¡ jtt[y.+{ܺG\ dǁCtØg ]ꦼ/,f1ɡKtdΎ%)^0EMxWc?1S|h^nrZ0{L΃>7 0EPWQ@$}3zֽ! '&!QI^:wT/|;mv"sHbj]8YyQPAkqͅJQe8U}\ J]t5|,seh;r$Bsr18mcat '7P3\:JʚtTYo4EMh5^;`ר.W-;+t%JM!pQ-.twޗ4Kru`@W}e3$;zQ 6Y8 @m2TdS0Od=ʶWAk;чrڭ@mfBsxi9c4(y=Z2ރO( q>]܇Mђc|3,iw}ܙ{a ޏ% \ȻItXl d@B*Le3}栊vsUlc+pc^Tއ4T;2;E"S/'x7ιSVbS w$L/Nk u,!B|,vم]Pv`Dee,d KXqzzK=:+N7 _a;:ST(͏|]Noۂ1כBv 1gh['Ԩ\qY`⇼/2K{Tfy0kl *'Ed; M~ np !vX# w )"ފnXbPx"#I1( vtZK]f"ǔ#40$oN Fl{ >77c&j͞,c0,u# )jZjK(@-z 17 rKMw]CZÔY@쓢IaGb E [;^`\o; K.~!#[BzJt5/#_&lK0V12NYYXGx> .D!v T|Qg9UMx|x[-~/=^QdG:1 /Mqt%ڣPe Tc|*xG| GZUO2Вѣ&0Ⴁ"g K~М V&ѐ;-CL8A=u r,iU bm[ԡP"nA*@2@ğ@Egߡ7.e`ȈSN](yC!ˇQ]W3͒TPә`D*q`Gҏd d+?^jbd}1vG]Gdt)W+3:ނ2KFዦsS.3E$t3&?w%KS$|xΆE _$z/q?[`P=MV ɒŕb)x{Er!/,: @UR]>bq<,$ x 9"S 2G&q}diFg" ҄XV8$%cxtS%]K1U[ I<~ހoyʇ9_ ϭkbr<(ʢ9+OdRuw;m0`8wLeY\Uyk ML/IMUD¦hRyԚS>$k%w:)߄ GVtvu]|fm0=?W & |F5qψ%6w7zV3.C}yq|Nb8q@[ՙ&ӽK ^i:Hu&%,npi lZ7cı@ ԙoT._`!O/>}d$+5Ax%4bbSBQF9gLVEKsJ4@4Ȥ(n\*3JC2t 0}GL. V1+<$. &X< :t;adWJ].M~hl.z#L/3e?k "HU,m{rk֢0 ;gh Z ܃ # )DBE+Z:֐d:P=z^#LxØU.fSL]&+zh ^{ =ui$Xlcl0#]!&G`2DϊG0wBtgJwdbαS]>Xb4OE<ͻuE7 ġCEƌl~ѺoԄcA(|GMpDm}ҭ0`T] -'$ ЁWs/!L*sO2` XԸdjt0{] +k 3oöօ >qC QqvK r[hO}'m"Ye]N묁C%PLcV70IO^Bjᤖߘ6 }_JgϚ\JB?R /R ]8\G:R۰Ar1AvYt`U@W2X/+d期w]u Xji4Pä~02!@`DB'=o` :]%&}\ϲmtN((=)$ sx%\g^T%sV>siWb=>EREMPyN}+ NIJ⾗"NKS@Gkn'y[;Au*f-ǢdwI<"5> °q"ǹHd󅏿Z ɪ5Jjt$L|6WW^b ֪?Y|c L%b,_S=fhJx͘6mQΞV + p&oѢ:L22c(@lW]JI.%HMr ^DKS*qwi7‡u9 w1q`<Rav.h7w9WGN2EtÀ/5hb$50?9chXߚhg'|ug2~mZhDMYΙbBQcfBbR ggM.Kw"䫭F5KbWZѳd&(iQ͒8)iہVa1~TMSz5<c{d<@yp/RcٜLdn&Wfk:X) ݑhJ vA&x6Чbfx8kVAB8Ed}F>cNr*@B]loOKc׸([S<REmeچ? QyRVX6nK<39p=Nir 2hŖDcAC`ְԖx(:!Q {@NEO 0!a;(F+N*]b̶ۡ150Ucgοkq.`wJ_aW (8G}A{@a^b;a9XvkWUbCij9,Rx\ѕiFZo.A@ fen$ ohݴ}19]) Dv0,{(\"IPm>{ O5lkȽVF=ˉSX991"ܔ+m}F胜U4il֪}KK[QYRsk@\\ؕɽ08 Ǒ`WYT nT*gYdfkhi`(!򯽖O6.D_V f\)F{M^k ab*j CXްl X{l|b*V _`ťpJӳ.ZtOL2.?LwM8%]wז %?`p7zBgN'SB{]Mq`LR!Ybű3A-٦hoPF㳽ыkN9cn'TzUx7 -w9*>[~ ūū0g⚜4mƉt!&,,ji+wDUBzT!l99Ju /FexdZ7):m=ڎ׊I0ᮂ*%?^kՂ`>#WKneDT@ /ʁd˷3A6!(ԮU18qXz}'E-)*sLGf8Xb/] ˬA@](Yg"TY(B\zL& &G֊hʴqڪjGg;s VKdwU ^<Yj 3 _Irl9ӳ(j5錃~΁+ 0F1ģ H@vyugXv9;.5yalWѕXs_qL'"1LK/|;*b$v%Ɯ ݫM@ٗ4YrQ1u_]p+1 WrE/GqLsO9x%yl¦W2cZAFbBnA@tbL$0%Lj z.x" 0ёQ7MCY M2F6 iwZ0 E0ZEgF-U=ꀽ%B6;=`їFȝ892Ocn)DR}sdi }eÐP[7t2$g1ӏ1 &x)`8.eU:KuʷW{o!dG< "!@j]9),-]*H Ns`j);og,&*6Yi6l%O]H8(a.?*5]x('C~z$V$bTVR9ݞ;/^f~@5UuXl;׉ Yrȸb{AMe tZo_e&,֮oPǢZ&;{lͮl?rcMEBXQ5gl"sPgOzQZKQJ&\r|Cuc XjfO$rC $XM49O?8t]x r/%t`*pàk_Sjp8ڥg$e:K@]3aʝdIY>&9u/m}=-+LA*=kk -ġhx93Mw+Yҁ&/퓿A;mTpD]j/D!@ hĂML({O""݀&M\zTt ;5VO~%+_dr_Ʈv dcBQiy+^+}au99g&GN@@cDol GcJDjj WcB Uo(+cw7ΜҘ}_e}+F&x|g=d[a%WNGT FMշںV(t' D* `؎U`.uթp%s]vvT֙('_Kđ(*`C\L,j;1ZJ1gu-/Yxyɟ$U1S[ZM/0 1?aEs (aq]@10Z_2)Hv{6p4oWUp!]/~\RTxEJFYjW/[uDot=$Wat!X r|;(:;eyC1j%-j'"ZFvW(7<(̏W+dʳ[Eذ5XIx]Mt7N:pRDu &Ǵ|(-2~sQliKk}txROev$2~K8.X_'EI!uO,v[RhW1`$CXF{pHL,(#̗H-RyF f ` H>:6!zʨלEm;,GTg}4dV&t PJP!wbHI67MD_ҥߵǥW&tC+ơxk9Sz52>uյZriV|[c{jH<1:`Klk7|B:A _NW36QKWPXB^EOA̺iZK+y/ZH#<ԣތ; g@r8o+!}qIue0{{)h|e"uY=nњmSv1{ܺ6اC[t߲RV7.ZoECb׎ V8htk`S(ڻ2ܖel W|C6v_]TU@`uAReIBHP*-KM|cc%:v ؤݬJlV"pD-\C ['.Iv |pehz*qHJ I GZ(GU ,It|\4YQRn<-`hr31ܵ:^A305lr` *hMtt: Rke}XDpp L I0̣0ET نCFZN]߸M8PLd20LjEvͯMDx.`U1yG[|k|Sšf9A+JdeSGQ]鱦ػ7&@/a |@swV@Ȱev;u!egiFȟ;L-2fzh]mW˺3Q}D%K llLm\R V~BfԉF^?DeXPd>2`fsTvuY$hhq./d>} 54u/g,^GVs<|ߊbQO~XSG'aV@SG:"2tf @O_9o՞Z'5DQ8^*Ass eaj>a`qB]t@~ިPgTGf{Ô26鰳<ʻ `J NQLS9|W#@ŲDZ9/cj)]ax$&sU5V0kxo e`][ S|QRE{Y{NjS!tF|XRReZ154^Gk_V {:: dܽA:q@n_1 uuyFP;6r'1Cm!>xbArILJmW^bqQ.zd\9X&;(VܢU1[)0C̙pC jDf4{Q20JC8P_ cU޼ Jw|ݭ|M4sJS' 0gKͮFS^I(ȅT[Jk-N*t_2e;bJ9VܹA$hSMEyZW]囗:ʥ7ck gzEd%ҧL<¾dz`9Ӎewr 1|˄I^^qkZcdP&1qh]}`f?fqIS͓dWJ-Wn.,.}JϭuOڛ)w2oYZ"tt4n%DnZZr/Q}憛zJsŖr-OtP#KG0^R@AxGԂnd['hv-O> ,PsS쭑'w J>Ɉ(MZfȫҦ |Db,mzhBU8@1WRq.vO5o%%[(vWݬ·)r].8ϥYY7&t}ZFdi-+sV}+$&W\)~=2dq.]}'SFa1R~ήΩ0,uLSMg٨_?˧:pM"L*H, -OsBW>iQrmPO2}(H\ڍop!l%TNmq嫊x/1d;{ ɀd CroY ,;ۊ׊GOn軮?ޖ{OBz7^*Ķ'NZ\:u%OS=%jI7zT0!}9%J.3*}"Qp<]sS`1ݸ}*yC\5pJ]|WȣqU+UIe wZwmsTMqMɱ[7cq9sc%%8`|pYAW{L*]SԍY (x`v[:nI=L ҘתzG'suF[ZeˎE"FvZ= oIK]2?nQyFJ>,_vPŲ@ƶoBTWka;8 >Z~ sTnpBO ®AgvlNɰjp#]BJ cWHu,5)BO[+˜;<0Tʗ7^*AwI^et53 ;DivqX PSzр6\q%w<|ie,-=ee{&\XRêY-}bȵz8cQh#8Ak/3䶧ɆI8zn'WTnx$V7@ NX 4{yD1jdHqo}s'A^3З.-bez055ބѤՖ+N`&} !4QbI(AMly[+SӱZ7S~N,X_ݢ$P)%eW+Lؕ\;4auH"X8$]]37^i+5i- O~9)~PsUf Si?]1J~rya5`oժ2b5`>lm$s&ٔg{]\̕`v%RAB*y.:U4?|@*uExmG|D{7aN8t4-1hu,7]n3?AKVBޤzZҩEA}2GF;Y=rL_QA_q&RUk;Rr=.G=fN:'YuMQVw؛W~d=bu6 Sͦk rXQ6ё󶢟ʷK[GEˡ.RBL'hdrfD_k-wd YJ ֩JlS2d!h{~*Cm$Gn|!8i;|cE('GK"Yt rDӷߊA$b'wO6|[[-"=F=3JӍq\:rcB;o/)7·C,.KeN'}ktZ?{4h ղ݂_w2eEbUl zwsNqq>Lƫc{+AJʹ}_} H:5rkYcs;1:3xd? v±j>y3't8V-^k:V^&J.iGA kD-?E{U!B)Xa:RHo}F;Sպ;`qg1]_sqln{}ƀfDu/1[RDURsGcXR> fm*}V@p_Ū-n?uY.[@c-s9w0jjy:?Rͪl#AXezƃYBPK7AY);;Jp^).X4>d8+z>^2,z^&TfеcVHkb-t"*8u(ET99?#= VR3|P/E䅚qۀTZz8:۠&U@j.jȹ{:dF'&DX#TAEcr W"t2-_FӢ*'~7ɐT"CpƣW0ۗ;H~C)?aίe oL?h4c8XkЗQoGwCJ; $oɪf6V#MƸ,CݗRs*g-z]|P#?sAbBW~jM%eLh}{Gn#kOewVlt&ԏ3kƹGSL୽ (YbڤQV;ϴ&ى|<`vk>餶B[!jS.j`bJK_+s.כ&@R3}4*|t~@iAkіRW+W}Tp m.7hÚw񷿷c\1QN]65tq}Hk]+':w۴vkLqЫzc\=m|nxm ކGtФY_! $>5xp鑾N޾mOkh6:y1 jv9t{5lE!G5y|Ҕ=_K}a wѦeI tZjN5`ƨ@׆yjtoY\i nY6tY90gV͝AI\1i옆@[eJqibCvXlK?ŴOw]ea9J+R-UBcc;hWu:&P7>zFu爴q+rO+>'y}$ {dmv^Fy5JRi+=2͇z|m8$]&vXضk.&cc*UŅwF9 }Vב A|ZyDz:i=* WF,%Ι]) u;L3;߶}׼ey9Цii/+Ҫiuvl4v:zw> v}^c=ݶ$kt`Fhץ-C|#zf$2H4_=2ǵF~{|xI-v%Z gv[q54sa $cKȟFw=1|M0 %P hv  ;$k9.6/cxhfR$Wc]E8gV]>M/5 9,!Ov-6gm5חcMM5;Q2Rc!>-l6{kYF( "ČSZMZ8&f'ӗMCK͆q\n>hf13ڦ]LJ?͠$L0-6b  櫱OgB׃a &ߠo}錄sM<΍>u!TĬikݦ9m͵ T?k7yݔX=pA?{]Z.oiNkTZb4JMHiNrJ'xNd%u+ D3PDI#7e eZẂX7gTsafa/TBHS'.P)3KwEp]'L1t" `tvAR2ZncsK(#I>PcU8:jUYo>`<=ihʆ٬o*Ӫ|x͋,zS7yh+ :NJ2JQHVݲ/%}v@eqdF@PN+L`Z6 l C)Z}WێSwUí/is~oFufE:y"FXdݤwj2N* D&4Flλc%?]TyK7Q;?^w,逥m̀ĪJ|m1 +ϢHK]= 'O_@ ;+h%oq,.aM+Z&v-9|$tY;O>=eI:3DJZFB}-mGTf!*ᤋklɓԜX$՝^:h`nGxNdOZ<ʆۄox$vɢg Tc 3lh* QQ6FdyюץNJuCxn)p|d,[<#1[x '&fpg{ydMva'c)a!iL(8 $JQ[3l_i'$+~U*lY_q(:Z7O\?K`ɱ 2 qt#;ǡ0ǭd[ ;ty~} siY[ve2?+ XYKEkUJ; MtFkT1FzL 3}t 3t!vYRꏳ#}kD օ4?-@NC_|6w Yze=a@kt3Y9`MJ# Ba*ǰTɘXmǵac<.-Ri7G,|C5V^6'@=|OB%>V̾f+  9qەuUڊql#j[y+7±UdmjLܼ>d%s":Pl3<ե*Tm=Gܓ}m{Xоc R: E* spXRh NS$L[ :gRK#O} hQv!f,يxTBn+egU87;](Ĭahۊ'YCgvW!jY{_ߠ~&Dd ="y8jܞpߗ :Iu'3KQ&6w;V!k" <>ݯUʹ<;<~\D͏*K|vҥe)XޟS 8^ZH꯵,N<8b!)ַ'V`|!+wsfjv0ĝw %)@yhʜ.xcLcVG/";ؑ鞨n{E)p"CCaa_KTtxUE\fbȱƨxJGSYˎ֦{{iUT@ÙaC2]>ׂEF=~Uѐ ȶ#Hd#F78ӻZ6ki1e{ y)A&xu*Ag2 P ;= :획-]ek42W1[ZنfE5Iuffo&Lʡ47\,IU%_ t" W49$(-vs( 6Oe>fȆPSEa7lGf<.WM¯m7,O]{`#:Αu=re.[wMxQPdTO<'eFrX8~\9Xj؇~WL) rVX=Qz`t:"5!AxYhWfˌ#&exc+߅bmn؟BoTs~n7zi޿!Vd";5=arV~-ټU5m8iUT_% -TI oO7o9=mupnqKxi,(i#[呴 ȕj8; c*>lǎҥ &8G0r*)DM·C jn̜'_qIZoJ9 #^Sz!o ff7Ɛ9])j>=ovni@$:g G&sc\7W{WfA±Jte̎-GeN'm\;if [;~B*e Ϫ-R1Hfzj6krs-&Iw<瓋֐υ*d_:Px0꜐a9lr|SLTC/XS<94u`ʯc_:,-̛d*} ubg1UD" >+Z9ΎmY_Efrߑeք܌ɟ.` vNU_5 el.m-ۇ'a\ 8>ށ-틍:e}[{h-jт]N` ET8AV-''H`=/)<1%yފRbyU548VOOAm_w7D`Oo} 5g0 K@1>|ѱPZ `I"5V7C3d2QK%8JMiL sGVq# ~A2 ְ_3sQw 9÷f'ZohQH3ٔ 7Gb؍E@+MZgd .p@P]KʃH%՟7Qq͐T9ќo7'On%fy0I3Jb>²?jȖk%D.`rJؼ5mX[\F9x-}X7țWB|a_pìn$PsMKLm$jey攫wn /EwHN@+snmJF\&ouD3|Z#MR@e;qWD+9?WϿK^4t قuY͛gDXI`'\^(u k^q)N_]_-Un2GĊ^Cp mcݥ~uj-sŐ.%#-?]ٗE;E#ǦS1m^+I6gvab6͘r2bVք^CN=m, =BUXpՒ֟͑izѾ~`%zw$Y&Ԩ "^|#P+ɸ3Ӊ+}쀊Z9*iguEў7=/b-.b-HNWse6z/*V9ΩE=3 3 o1>3_tc8$M<-5n$?e㰠񖫜)G8w}Jy,i[\4:c͚Œ%ϸIe)8JW!Geʝ?Aug3׭`EQ"7$L˿66kġL!> 5FU9o$ 9pB}7ך ": Q $W/eYw[C2oy>"P|J]u>>t mCݎ{:\@ x3*?,*fgw%SL4S[2Z?#hl$P!r.)DK99I̾=^ GL59C^sMPzj,GٮTUgI>ʖaJZ.B".H)om N/nHPtdo)]$\^]̛4 t9yٚBAhi6w ΛZkz[D'`E,9OY?LuZfp8<NLmQpbH&+ޅI ӠţkAG@%"ttY<Փ0O~X%8uլ N;vr%T<` ,YsGL|P#0GqS@e1H*FN~d`e 2|\eL+ˤg3gb"3e.3_E*k0CC㒴loƱW`#RL'Ki ^iDs?a/5El☞*L9/9ϸ1W̶c"r8G>XeмPyHFXսP$Aأ/xg$8"}ʸO|0 CA--%vR8?.@f@[j&1eCy /YworC:K?#%36u$ֲ{@->ps7.붱 <5Kaw`ʚk,gg\pެ[frh;[NMgZ}ӡi$, J*<`q˒!zH3Z4RXN;3g0'^QXSt"bZ$ Łԧ6Č&TI8fU=h??2Դ'#J_NL۰n+.2'*̠Ζ>nMn;#}׋_ٮCtW-/lG Ki5#ˊ&R6#xulP@oFEë韕@*2X!(.Ɂ+NN >pZ' 3ۯ-Yɷ99Fx>n/@ Zpá!k$ G#(҄:j(~]TZ=W6́i]뮵IrD@L [na,R1UZRf32hq=rEEW_4416.qM\jJv; 4 -Ұ.NI ~θZ|B;g(<2hm dΔ6S]v*bmVPàC5J4^A$t+`f]S {4;ָX贮/ϯW[HAy(QIv5H < lnNmϰCF\$6r\h1e2!CCP{a>[ٞUK1qӭcZcd{RSY%mٶ4qh0曧};s&uJF8P]KEdoP^9q:fH SZUv\rG~&Ee[G, ۜf 槕O)t,hپB5Wr˰GAELDKrr|%>ǵpӢ/3|V[{f=ZP_zܿ~w}^#Ըs+(b`7]𮄧OAfߘj.3nX:;I-Kʟ}JBs|8⯚? AT?5;:F@9YlsH|/nmt9uf@XO^!'@ɡ7bW<,S%pؗ?JCJێm1F;LY0\uJNnTiJsӴ]O;[HtŘ]F:+F)]ŀͶ"^%;RƯq-UBCNx>3)cyglC&|n1GW` 103֥+gp% < ҬL׮%I)y.ǚ X˅-S]tђӎ=Ost7r79)^ TaiG_{2mֲ;ʫcJ3T;#%Q{u/fC|x*>( tnLe`NVzҌ i@s]Bm((r+n'g޳Gܧ☍dQ%`70 .1L=wtU>|k7?fm c}Scr3=>3ei74<oWM+n9b.]v~zyWEaPQ]d t B6՛'Ie| ^Ph%~jl0R)aIْif{L ?ڣ$t#L\CP׬z 213GJoRXږ7'oMzT`l dJV_l ;SB+҃K }qwxv\ lTbz}ˀxPz%U:`ʥ}(AfLRYĉ7?G4gVL .`(qhwݮfj*9-Mڧ_(7<[;nYÊm;Poy-_/*[.}avy j.]i&\o&_Y)B%~#ö߲1iʃ^ctjۆt,닑<} 'K.IW/*׮6!1<if4 4( :rZ8LokQ9WOކeQ*~vog Z#tXL#~=`+4qTD:姊-SlhƽnFE3;=93afڱM6s~qp4+1K3OC^K\̭/\֕({ꕌϽ&+`'|A%\yqʧH,TZWuٵdkץ Dm:pщgNz&G˃jHꏆ"aOVK3 ]wr>IY:~ЅIKL-3xn9u&pONwim#bƀ||/R; 7`75iNsZfB5kO_~2ViߍB|vFgn.^]]ǐ8'{ܬbR3lkq OA/qKS+k[ [.?FɢiB„3w+@G?4:Øw''[/Pz{u6ѮgfKEd'-:8մ;HeLBI(SW r q1綍Q[ >S00-WxN6%0~|N-"C (-3Մ %RүtKBGz}-->nn׀!F6/oIZTYhi$QڬZ \{rnr8\n4;֢7^&hDkڙJq՛ccݙ7{-j"w A^0?Q h ҧE&6\58]ePӾc^:(lX;gi҃F63;ermHd;seՅ'N7lQйU՞Ώq 61 on2[KηSBp=?Nѥ՚ul`,j.^*{;~oP(]- =ǗW[$-;yӛ\g"#l`ȉVkq{<,5w@h"KEy|Iɽsͨe Jwr#ZGV0EKkrVS3ɪ 5̧Ih?/bsn\Ĭ‚(x\V|D~ղ–lKͤ96B|ƨojkr 2}Kg1>'31w48+ ^yn'Wd<\=;pNpIdN!CioX8ZPyd%ͱ$ީvԔkȵ;B DpO ^H0QO;_ϓi|9;jLe 0PO8,럄ٝu-7O6b[y܍*uTz[܏\L(RWAσu8a\d?rq8Ӽش#iauTٿ\jҜ]{)v¨1{ %BW/k\JҤ]wƤbPԥ !pxӌ'тa އX|4݃mܗ{.9kKfLN>w6<ޚ>WI\e^;}2Gq';XMS;m4+;pVr fz@٫R">VMI99N1SҔVx7 zSK. ܕhJo0;!` *lK-)7-K?:Z%Qmd.m\+mI]w\qwJKE;Lx &wS"w)"eA/r1Y(z3rqQ߃KȾKux,`ꆤ.| \7|/KW_V*4.w9HLՌ$)WZ* w~.:gڂ :չr-ysC@/iDzyk{[8\ٟ=rKVe7hisqӠDJB@ fCiP~"V`càծ}#zCP `d(`YRr/$1'-#b^-Q}Y6o,HD@"5|F_8R}suE!d]k\2H>t}h2MwIUU}`?{C]>3'XB787v;9`~s[4:\i,Y7,U8*#ֹ[)w.~*#O 领fv[GFPGbni:,/NwjTt.)%_X+0hlҮ8վf$g$bTCJ˷lOzGFZpg>0.BEIng~C-IpAQm:5UٽTXWI5pK~!pdCɬd0\wnd"6˦k6b+ 3Ǣ/c 닏pueX"j#4͠H%kvr }~69h4@O=7`ehM02=$'Jx(+U?$۲z P45&AX?OhSy2< I5K I5{(ͲEuSsk'=04R^)"齁ǎ,ל3Zԟ@L0jgXѹpk龃mݣ&k(riK`+05iDNUW+Y"[mY[]Vsɻs.>giZ$a3D0HiVȉ{@D–.GH))昩 l 0G_;uPD( f '*;'if,ӺU<|^s43ӣ6D] ˊ2FW^2]9UMQCQI]8-_rç[꥘075sBr_lE9-Ak=EW=4wBpG-K/P`S]Ya*Y|Un` @M kUF! /K =8v[\&nrz NtUr2j)QbR-{%[<'akÜCC7[ɋM$ \U$q|.}b Lo4!DŰ=]h&haX|]zp7%D@WjมQKjiaT5Ai}RB-}\(-N>,Q4`sA:n"|~coD ! gYVGx~Ylzn8 i`slx/܇,R=rUs`s+J%|Ur;݄$U<@E5YşzE.JwFn^L3e+ zoh w`wn5a1!G>,S\{e-l"e mڶ*ڌ(iA/1h[7;[۶.WE{u;wBW]E::9^Vb8uYvQ/#(Ve#wzV 3n 'd ^#X]/mSFu0 rZ:Fӵ"5&SMZq3L̚e7iW;`h[m҃y$螳v% dEuIZM;*CMR۾"NFJj%%0 2|ıodc jx4RF:>䁡UXV!žBHB"z#e 2o'׵.HWтS̃f2Zuz7]&$ܓ% ]~)^W ub&!k|``#*yӔ̄മW1w[fT[ŹdlNm3AsmgMUgU,RhMh^sYv⵸Y5 1QCZa+[7R,< A`Ρ / MP$U;t>gsBvuιD|b/6OdE~PwӞn7-̌CGZR~6df7-n8@WB{*x7=RA0HM'hQכ]y_*3',ܦw^=*Wƙ)\ mHP=|o+|ffli8Y<MɒW ic>s3 rHQSl ӽo[ԾdF:Y!lCJQ5V 9Hk_ctՇSg lŜPF:X{7<{0f@N> n @YqlfqC06səgDjzvo5+Gd`,^.XzD;X4b𔅋>8asMM?IM#CLϺ/a&ݲ|.8>t#0\u1ͪ@Qo4?Jc8ۊ** $%UKVo{q7~땘 #C5Jlgon&x m6/5<վ&xd:%6ϧ lG}Tv_۷ÎJI۹G~ <CכI,Ij)Bu?Vxgߏ?a/v]Ç0ø|/++/c???mOOOOc'c'csjl~56_Yjl~566666666666?3???_____o7c󛱹f|~36ߌol67cWcWcs+?o0N0N0V`#[ vߜ9Ix6[7kk[6/L^Y@kޗ6666k6666k6666k????~Q~e||gfX>vvv>>>;|?|c`````B;{;{_Y ;/ ?WE߿-q@wu#!}Z?|];߿?鑵|2G22+y8)̆a%qC^jZGx:r1:1Vi,NWO_ :9/+8"7*Bm,_oiM9#.;k^|%oR]e_~y ~M[NGi:ExΊSV(Ujp.pFZ\:'#ꑟ<7cOa<߽ԫ?K#-;:GDNG=wf8dMe/sFA^.8L}ABeӾg8IT{/P9^~!p~ݒuaX#W<)qA9#Ԟ)\j^5:rz-[%lO~i٧aaeOvxN`杤VkJ)dmM_lʃRF}$0}*?^(i&m' ̩B̤7R$d{)ݿZ yh{z cUgM{YRG=5󱠘%K/y&W͋7'K:Su8 2<9n7E`v`'2jy}U=I}ԃw=l5p0Zߥ]qE-SKk"P_-/\eZJyx7i`#xv%ۃe)TU<dR%T5|;w+|O2L2]r~9rSH+<;dMQțtrbY\elqx'}Złeȉ0;QJ) ,2Qa43R̍((fg{\eN>ɭlr-wJבEֲ":>ey-Qg13V)Y^eI~ ^8S9dxMw2K3y"Xf,bWEI>]z_UyQ1")e}-kWyF} :stMS~ܒ!^.Y%w*LAc]@[$ASeleEç'm"{R*3W6xg uBؤ|j6,SHksB֗vO)2AIۆFlɿ1\ QD%i1 Ydk7#!GwbZLxL+ !JV+Iu$.C'RH >]6y1$π5!9Nz?UK!ZT]bv(e*סapAThI;{G=n'5;bM$ڪTB쑟rrgc-%XÞ~Z=>=8D{;DEHe7k̎ZP ^v{ 6cQG5t,eɅ՘_?wtC0g8P#r}vڽzƊ's"2 λ {͹  Hcw:rv2]YsJ c?D臰X}9VƸ]B,MKo-nYx)D%19xL-DfYY\xX0\_!LoA?Op}Qݤc # _z3KpX+f~`0/v]hOLg]ep*Zu/28%FR3=0!,Hl1LL^M#޹c-Ĥ >{?aMq3&WF9edIy#.@4pe%h?eՋ! dcꄖ`#I'ZJ'k4MC*'=~* v~#"D~&˙R$2iN5ⶈVDP˹I#ˣߠDbY k]ϓV:åg!Y?^ϲo a<ذD2Z/o2ߊg!GXܽ~Pϵ6JF|y:աpH2V)K:y1vpX.NthBQ( 19i"2e`g}k!6rv.Dk9EaoMIKaj0œ>P2FA9zeW}T嫻$:Z?WfPܻm |@:2;Ku.n,eOThwYB|&]6$03񲓾y 7W""_]/jZ(ypv+PR5~ʘ`h5ƥX*"w /YkjUX8_QaK0a("Y}N\[5&` dؖޙ-i¹ppEF];cu/eP/Y/ xMyCXfOQEՔԜnv5 c+j5!xf0E<2Lv];z Z3/+\dAV׫=5d{W~sdd1\P.T%FXzQp8ۺSh2b}4<{h_bmcFUPGޕFp_z.8"q*%;]$woQBJn˦ulY'$7M1 h-1Gh[^apbH!tn0ƾ[":s%zReyS!fBh+|`%u<7{은_#pDaAl]Du˺G;yz9S=Jq+RE?V?^ۀP>i{#|/HY^8<⣝{3>SuG4'fۧ(XPAS]c#^KO5:ڑK[vHL),y[&Q6*SŎ^RaFxT]=է6a@D;?,\G&wmu +&BT[gZ{. ZEYp>8wH,0Lj VRi0Ujc4H<{=eML1.## SELZ6`LCEa؅4yK)RWɟCNP|9"6dY)c7,oe)._"zvp_Ci(/qw#fFٺL.3lk~'ݿQQ_tUD6"3G! U71)l |6&MT9cV(y"e;_F֧W'BX5ѲȘ3rߘ̂#hxlӜik[UDLJ G_d> bfuX86yfR(x3 DEk3hBm<@4Q)U&/;Jsfv7#>4*5+%Qr%RMSO9(ZuJ΄(9K '˲B% 6 *QȜm6)0)] ;Үhњʍ,Pf17~ %H/ i-M{p-OZJ¹N/{_/ш=j8JvbY[yt{u%8F5b)\m f)ڍfE=go{+ V<ֵIAG$o/,W c Gy:gB 5Vo]K` Ekoʝ'9'Z=ơ kznz}#h;%n*yZ˴v`엾Li⃆پ[tKyqs~ܚ[=ٷtz5Jr>Xյ@ ОX^8g. { |ꫪ?&wשuk9cWF]JkZK')sL21zׂݳj`~rab} ic{gmpIMObPɿ.>͔*okH4F@kJng,ª"}JaÖF%{ԗ\\<*ö/ٸs1*zȾS% tNL:e<'6sZWM(듚}ىЄ'!y?oE|<%(2֠ |n4_Vkv= wf>K~,YKA&3h0P>^5 &xr K*/Ъm8;KSґ uA>xؚ,JPsvWm-Ux]˽5]bOM{d1(ٱXe+&ǖ!Ԝ폔I s4n#X͇ UC7#cZOjO R> g-P is @|`e|9_Tsx'}=@stQXᴙrʓ냅v`ʷCH׎U/37-` VWwO>K-O>N;fz OQ=˅V!(!0GY_ a,9Pl9W8jj ͧމ^G$dy'ܶc*zo DVumպHSw8cU7Kš;4XJB`j@J G<^p@gҼP⎐Bg޼c_OWH=P"uF3A;*5S91)\em7[)>Iոq/U1)xQ# <[cW'GI8coMUbܟ;"+uH6>g<:%R+4}#N3RWt:Nسzol{rPJkaE>?sKcz?u ;\>"G RtS&YdPbP@:ō'a.+T00 T|rKQ,Y L[omNT0m\qBYVe!d׾LC.P8\;`be`OSK~J`ۤު|6жt( 3R5Y NSN;bwROSPۺ44pblRl=m{s7wAG#6a/]L Ie@`R#Q&Efn&;,)`pJeusㄸI] fۮѬLL列P 5PC&6ihP ypa ZBIH q&ch"ŪbSwl"2H'eHϛ: 73&{BgaΕ6=9NH?Ypʸq)wv7C*Ë߽^,5E>Tk) KݾxRNdQcrL'3üdi#@)O?#J7EtfoE`ôu/\g&d'Oƶ})xCd{IC\)Qow*f 8z-׽RfЗ&u.L-t|쪹UƵ8V]PR>Ȁ?H5#VH4΄5bGj.zū[Cý?G Q1|'+A Cf+)G2I^!4C.ˡ=CPg}ǔ)o&܆_71%Ȋ1$)F}0tC02oҶ{g&GLjR}G82۰"x`"FX61?ͽ:Lkŋ 5#mQwJbkm/;w~ 2)|WQgNP]UQ PN`ܒR:oK> 1{oጮ/+ӛء[s'J]Vv]\H5zfG_K9 &΋MdRѰ t)ߔՓNsOLGH91Х ռ*Ah{=mm(5Xj&+d&͞kRl %J/1a~ 6'%~>+"onBf$!(h {YYv8t0B1(x7 SѦ*/Rf֞#2!BB7_Fh9׽4SBpTl"HfJR#jBo| :XR߮) {+E]X?R? =^qI .pgAtb9af:߫MT7W+V#1ɔ57l`ؗ/\4Mx7w9 unZyoX5%xp_jbh[1'!Pm;?C!F}Z:+px$_N>a+v{!Rd'cOitrʞ o\| /3oP6gߵboS[X9\nhspE/{O˭]Ɔݍnv loBfIV3JvфS,DFMOq dk 6$r쿛/oެ"^mJaLKU虬3ɻ|3^*ɎO#R]z8`ˍ_7Unn"y0g- twfp!R04fB%>ݻİY\ c~umQ|e˅U]ES6^6\>?bLXKWdA eVmoA'o:;P!4w*]a!nT\}w9ǔz+e~ բU1sϹCAhh~41ڙ+1 ljd?9j=3۹KL-WLkp/WζAFh!AwFÛuG`G{͇ L+wq[fm)\9LB Z(, ovXx4pa{4 /Cx_F? uڜJx)vz'j3μż~o,V}Sϖ44>dP%}S^eƅXϻI۝9%:p)CrC(wU<6u7F97iۥ0k6!Vt"m9.R0"Cf$2A_hUk,+DSݻP]b +/-tqf~d#=iT/Ar F;Y;䃖Rt 0Y8V5*E-U:/Shܖ^>UX>wm*5a!U7+C2ND>"$"t::I;Êg"=}K@:ݳ;g_;?omj-.K5˝'sR>g+•ᔅ3Y.0箫uvYcטv5Pfq_@2ad6ؓ-=q]mH_ 7:;͍!LfĮ \fQ \Jffvwm*M.ۅ@u񇠛٠Q*,\66 H@bE^m}aX .enLɯ6Q'ՁrKKirUVRi@3gعZ:',UfMPq8f>|Y־*RcIsz>;PObyC~ʀ'Csg Ė >8ܹZZ-}Ix/Wmd:^PFwx ~i(kREӱKaMp1k 0WuA᧗}cсh @(NƤNAx `>Bz&_rxu\SV B<'cpjzA#R@-p1\uހ7Zq[ :N0 E Zņ狒4W:0C_)&g2IàR)=tS퍜@!}$cQ{=@8HlNjeQ[ |Uzf<,@QYm{XQ'k]f&mOo@--e+S*{Srf aad5-{yXs}ժ{̝d}".Mx⎗o™Zѫ^:$ !/fEŅkGp>y1L6D7a/j{lvzWq,@Zkx ȓB=6va;"5%p;6.5FXW)Jrxmu_7m8i}qZwe;NL@=N/$;g Ssv6;DwL(xNUhַ?#Tg|ܝ_#L5 O฻^98W(2fx2^ YIC ~, D#Ė43o6-&#>&!.!&#*"Hy="+˔zfI-@{:vܻP`]φn( տNXFF0EyC(tXjEXo >mLz>A*'V .SXaSNŻiKy(.[H$q*>ДJgyRTkR9%1DiBl4c8͓kD﵋4tO6 'ж~B6K*!NToLd?X+mՌJ9^1*X _,,).VڃzDN!һsάkge6Ef;W1iyֱ<@5nhE dfXYcr֑:UɚM&"?m]I).j 77UԖ;0߄R:%V,fv&E ξnrɿKhh-$v(V^._~fZFݜ~/;}\_-5gvwz:Z"&yu"O:?UV!(ԇ+uzøxldU]Lݺ1 6dpN҃CyoMԨXYzT2b:tH>| T/M\+@2('r[0%PwmNXbF(~Wإ읝QlCp'cvd' ŎY.ܶUtxug mA2=|Ƕd3S;I/ףk,Xnas@ݤfq*Rؼ%gJIɢҠL_L,^C{4/JeIOAkXv#)ɬJw[-4O;̀2+ͫ$R\(m,` n9mGW;ZP۪6ԐϮ% .kyT蟆A34랆hHjZgBۧdx(25N@!@ukNw(U"{d r1^gzKxּX&?qlQ\E.Nas|+t1/]RlM5Y8ҩ,{wwg xm]e19h{knjK4Sg. dG9XMi7}t甊ڔ\4w'֣;C7)7N1 A҈/\݂}.}cA§7e64KVz|- r]aR`1}8BM̓t*Ubz}E#Rd,8rl7vrwxNmHZ4̚fBؤ{bާ[x5 a~ȹaNs|JC~ڝڶ|zMm嫈 [|OEθhٝ*^diَ]?m 62_sBֹ|rIX>Md>6x|-@p0 m_/H0;7#K#T|_"<|&?vQYV[,5P5.P[0Stq|9(8AgPWoU'J?nDlq RXjv4ߦk)t;g^tD7?˺dD5Z,kR*-]%(|>)b.r!%l$Fcy =Gޚ+ɨh,QZnÌk{Tϧu5TD>iV6`C⣨L/g.fK8X"k?3")V. 3'a7(ԆpC_0u;DPn#)io 0< fA;'a 2ǩ u ]fb&_#T7C!Qcdx:N*:v}+2>:sIT: }X֬!v܎3) YY=<.ng qy#xëE^R\WO^Ia3|`]'EQ I]kj"gT<^]J:,]FV.A!|뚩W7q?;}e6.wB*XEX0i MZD3O1"tP$[p02J>^3[gDpz\{"+}}x}0 Vͽpk'XB7D}\i)h0z-|Q~"Dx}F:;s[<4ХPdcErjv~z9fT1+xד@,^p4d/^un|xY*_ZtE@øj= ln? hُGxXeuCAV}dZDKy܎ AjT /:/ m)ˮWҰ͈XI]JL 6W"=yOA ),)F$VJˉf22a$I: `/Cl-TE+x,繨[H0׉nI8>B/}#rR_SP,` ar/EJ/ЈPR'mUO#AiA?A23`佟d(fwYz~Dh >3o-݇D 4PtLؙٕԠKF^L5*t"-0oA"ΌBzY #yĚeA3IՆY=͟!XV4cx#NTaXbR}driG.Jn .*BrqFd)23RZ ìQa,s8I^ #0ykY /,zu@1|f8ySADI[skdf ;s!A%wQ™[7fAGYOm{)p/ FT,kv EX+aJI5u;K pnpuCpf4R"X$x %ǡp0(?ZXznʀ WB]wKg"pZ\4~Л%oQdZHtPR =eQvA& K5|YFuYO}0DZQjK qW8;'å F 'x!6# e7ĕ>Ýgy1egͤLBglDNGpV>va_žeK᠘ϷWV '\6|x d O6L%&o3cS>|.iOS%1Z}y ĖYoRiL{řlRz3ZsP ~pItM$gԭ³F%9R8FP;/%)uMg2~}Vk_¤Vw}QxE`ex.GuUG-X" %|GpzN\qžLd : qWaחX6/ }hU@6^3U)69 mPC\?\P  Qw6 >no#l%bm0܈4!4l`>wvF=fX"6 D)Q&{T/6XMjotT pL)_<(!CMoX& cIȗ?bYPSM#vO/MRoe۟caS87k^!u Q+xh,%~!P-a$5XݰitɎn&KVYv<]?`^ԭpfex Jk[;7ˮWV#{']av{(2o:Ԗ GPnr5֢a ~|D;G*;(1{*kZ\g 4X9 nC]o=4@ߴג– %^ R\C!}yO*Vnt3zFG8u sR턂IKyFS>g3a{,0lK1R ౮6Ckr:MDeFUzX R;V6K#|Sʟ Y}x;wM4L9n/l+pQ }>t4dq=2Mq%۩Jk iGΛ 0p"6έ.\`UpJ?Ou# >E c a|?DLZ\<\+̦4g T8|Lڱp G|ْ2b_Fʾ#5,xu"֣[O(^MJNis{pX0.Z(ˎÞf+:{cjXyOdQ̸-Bfl"cVpͼy568pX8_[0gi}-ᤣoa?@7= mԤKE +y:D#Wdmc'uVb l1ZD$އg5,bPbv9`>4^^I&J#o@ĺ r^v[0~R _3T0iIm8ܖMԅ: ָ.t j8p̈́Z诋(CfVJDqf} r4'*d6LFcBR}j$ E|LK,{xћ򵲴k.ms#ݨ 8i(-Ţ }3n؞[ס cVI̖\]G^"}؅Xl$~\]be_FǑ70Åm%bS :~(P < uö)aXy;-6 b;MrJ1Y$/2bNN˴ [eN'hin0Z æU Wj4gW/Sǹ&vSv4MH3} gTlQsaGŇ1w5Cy@>{) lA.K/T=q "-; #,QF0wPDI|$b:m=gۣa$ DO+("Թ=2_:ߜl#8>R]ܥSKco_+Sӗ c&2°" TSa%⏮g_̱bWo8'v@?ej]B#fu) mFЬw]}(v4ޱ <x&1.`#ÎBîn7/՝\kS "fz@)G7Hhâ<'02^{.fÔ@}^w|;T\80.@e:u?~WMU+l1XWv]Ŷe ]O5 =;|-dIE*ɪƨ{I**^b~+@1!@fG6ht|IOPw*$sȣy_47,S7~cq-H&!6/<͝ƀ$ԣl_c!.NV\(bU;Rj:7tw*xᬓBsͳa &$'B-Fm"Y$CNy5hTWpFOQL ;dN~`v,Z](AL~JsCw4{;{|aQ vBQW߬ KWY̤mG0崜wž2e_;(M#9hB^JjK$`Z2X ʕ]D,ws[ mB#hd52Xg-ќNbce3ܛWeo)Ni u:K;Xl SUKr/qlE?Ud ‰ &]vg":|: C?-1Ȃ.;/,< \,90m w1vuA xX{R/0kpCu'o#ؤu& (([19#pB[ꂩ "'47 @؎PgX#p0\v(bǎӓ?MiMzFD &#0HwD`n>nÜELj^9a992se"v6jMKil5ՇJMQqmhreWңyN˜5ǜK,.B]ɉ8՛ӱO2qiz7o;Rq@J50M /Ѣ^Ssn*Jt( 0\np=VuzCWd -6Om! #[V΅K=xZajA Vrlwtȃ~D>[;xGŦe 9^էüSDl:|~ѻzRۚPŔj\e9fvआ 9ZY*-c6 (Yr_-^3L~ӡ"L?ֲNdH]qKD]5{|5 l|^0|oy!Z_ yvy}6]W??Sw'. sM '1f>-TR:mXtQ@V`Ck~>E)Ys D|;!/&;@mϼlֽ291viD{XȮ fYycp?Lͽ+D8ZX7.>!y{xe)Qmze>G\Hػ\ 1ԹsBO4%(:0˔)Tu`0񼽩[{M,ԖQ.;Ś/״C<%"tpEi<sʶ* %#͑ 8؃ @فb^ )45:*% kUU7F2,zA4~LÍЁ[4*Y0KDV$U^:%yi:k G ULsn wHL<D{O劉fkVݑY2٦D ʊWk 9pNԆăaEE& ^:1|وyp~/0"ӊ&Cc  mHC95lyWJ ~#N$tῡV{66QduFDgEQj~[ 4%>A@;๨zU,&x~N ĂQ(8J3[Eh^?Cal2d~zʊ}][͝xU#\   7eCNZP콿LQSDv{yq.~# g^ +u-\4̕8on-2=yXiEQaNFkt Vq°;9퀑ẘc_F,fL MYE!ƸFҮ+!)-}LCCX QUU{^tGCb>9g"En U`i2Ms+LnǭUrN\1@s6xt %Lq8:@jD]# mA821-O `VͣP 0V_y;Ml~̴zb*LVF o ?;9!Z _]x᳣d}?xDFD0lS6ߜ8M瘜8QCj"WƍFho`ȟ: m3L p|2JSFij1` a#cj>F`,0u 88X<Թ;Kʭ@Of8z3C^p6hrז꿵.],TaR% FkV-_^1f}TFA|gmw=ļOH{OtOyAjW֗A񽭏~gl*AW*wal<1Op'Ѽ@n58aoڠpJL0)[EurW+F`rҠV-aXcsDJ~K f;pYԫi𸽠?Sɞ((Ts:ԍշi6oUZn%|}X@X7>~ߚT݌lvl ,nxƼn:Y~ r?՞'wcdK;I6ZS"׆!>BꨨېCr>DD6w6n_Fg_hR{0nmzN9qͶu/ dJ)FNqÛt*^$517ֆۮTM2]0r k]̡Ҕ'n@wJE5 F?Z3AHԺ^m?T?F(WwOU1*-^^E_i yW;!X5ZtqVqtZ ރS կ,6CIƧQܼ 0{#eÔu))%ϭ'~UlS3nm,-`=:oT (]]v* |{γV ˌ}2\ W@ C5s1~ŐӖq `{CS|wP5=eֿH&)؆#3}%`ݨ -PPm̟kzq~*Y`mp0ya>_]{8sgp Nz㏄Adf{mVJP,Er NiTZɨi!Y,}㥵XkH)̨TCZYG 38G{ $f @a!GԊ5vaبU8P }sͅ-0>V}5w) TvR7:=Nh8y#hX8/kYa`ΏXp+_A>#G`A5&du8h,{[ ѳp1o輜 &ͣO~E pR;sk~4E>jWUӃMMO: VM0TTቬe2(NL~`E 6#!v9qqa{ + jcҫѱŋ}zg5Ř՝[k5c5&wQ˦x*}-* OG5 {\G{?534xQ-ZO 홿-|s2$_ v>|g3yM3{SGdQzQN@\]p`3|67GTqa_4D3X1B܈d)Q[_oq;UiqfS'Or|ǗNeoa3sS+lQ xS Cp2|#.P>ղ | = [+`g ˻uj RIΡGmcr!mpqMw1BŁ.̮BU|fW5& FgkbDg_;Qyܹn:x[e3 o7۾ ;Ux[e3 퉛{to}h xU[( EEOzNAʫx;^7\F@B0}Ģڴ,df/^)X@wU2FUP?n[/# Μ$ sx‘921 i HJ *k) TUgAvM~?:MDmPP0gZzq#„ezލ2nܖXVtr~tpԹ>`+ezPLT[Ҥ0v?#bԦ[k1'sPa3tku>k5. $O.cUBfbxPWxV^{Xe_/V6'>S?A nuU3zcTH WoNfc?>bD"!XFl$]F#:f;IQ0rXfy jB.uvfM+IzEcCQ-*`#ȦMw[&6LG7-BO?I ]MbAuȻ]P'ruxXf)Um@ܰ>_-j\'d_.i= * Su»dЍ)shuv$7o"_%́%ΪbKooW0/mP}-u9[*Z:aDZYr%q>&AKRd̴~JbV Ŀfl~Z!Y SԔFCȗ cgd#k<9ƮϨ!, kic@$huUD/? y| hOaoU2G^'% ,`S;0.zp3n ĂJ+ +^m$nL;(a hrԤE@c_@;*'U%S\6R@;0#KxT U4]-ʦ ߄:dTwJ}~$89i=Rj_"OQR24q mYGNdIVMbJO,K1<9Uu'td 5MVtY͕R`Yx,ibfZdޅ&,0R\#aǖqRxl;rD6h.gjwfɨJ%j΁U@dyo)9Z$h6.`TF(xD`>#o'= +"2Z՛*ӢPPPoER]̪kT}'lXypzWkSYW*yj,Nڽ_avMCHf,I(Ժ&vRɶVgsVwҸBnܔ/ AT$16  Z/#w bG]YEޔkNh^\zk*p|hW]KykrR*`IG%n*^!">YFOR8yiwNS =RD$v',z8NmDiKK\-#hѬ2o@OLQ*Ԃ't`aѓ9ՒkbNܧ fth.[dI`ct\hu}IIP0'8F#S yzMQ H]b0M^Z/5'HK)D`CRbcmO\jo .0˫uxzl&6bͅ^kj9 D]Fq͘LHmg bu"m5]^뱫GFcy]H:Qd:cό$a67jѪ-х./] 2wxv9}2\Z%=^oدCkM o%[xryHA;{^vğ+f/8a"B{+o{L>xUY(Du@@@:ʒ_p ^ѷ{Qá΂izNrq%g5zkz_-$ͰzWt1᧣w!Uƌq^%AHϲ_Yˑ*r@Hoȫ Ia #ۻ~%ۇzBQ{1V_WJ.C0g!&ਓ&1<|o3PJ@]c}8(=9!ϥ-lѝ0YQ<97Xywv}27M2O13s:9c¹rrަcj|S]vbAlDR0bgl?8#Jnz 9nQΐLEGGdr1.P@b\ Pnnclm֟W fH,8=B$'kikG@3C6*|dA^w7q#Ͻ}BmfzDD nYISs*i:)e0ƁSʰ3e0ŒJ7r'"uw  %?߫}^}0rrC>Ɩ-On7jM=n$"ғfd4п="oWʼMzOJ SEe,||grd&aү|A|z`Jpdxcnn9C~<CD&2܇B}Þ|_a~e.-d>'&܄aIƸXlpXtuFDDG`iE.Jc,ESa1h{.,`YbZ`6P])QPsZd:,a^ij/I]ЄP*%<''4]4rӜB &zgs?=3>J gtJ3hWJY-jӢ~L0v^TyvN[\XjMS>f0'ƠM%s֌~D%)sMM.h~ysemUpQF-LgqS}Rd6"wg]+\l LJ[)!,yCR{@=(iR2\AUMs8@py>ywR;Kt$Gl7C\jîAq-YOf]YOϿ#)1_H5燑q:m/2/ /ubt6:A*/}\іZTXT2^uHQV MS@^*sI}Ɇ7Zg++Tjnpw4bŽlxe[i*(**4woG}k*v(~珛_Lr'ÔkxyRXWv`rs+VSòHy qܲ^a[{Kwi Y:KH9)5 m^>i E:mt0ꐢ܂?W Kpx(*N/yzT5σyn5,2k{K(a|.`qlnݙv}?ӝ81Zi~c2@Xg>݂GGϏw^YeWd9;\elfrNs[;<Q[U)L,VgSn._s軦>bcQ^]]DRkmxa<,gn0}qHgմ`[g@^za:WX]=ЧS<5 kRM9dgK=nxZ3.C+M#c M RsAU7s96hπgФr–w)(6ϩ9}B:gǫ6gSao!36)l3hs(q]2-O{K(N6XNFWpt4z :Ѣ3>&#W&0>b^5Q8>񶝝rqوG}@-yPՆZWmHږ+XA{͘RH6X/HSP[&v\( a5W6SBjٻF^eDJ6'ԄO73&#El>Sh{:؞5m"p {~2%-0eâ\aq)<јe(T?1=N5`[; 2찳t^8Rz`,@\:֒f Uq IKۿ%!e &l9<^*B)B0ω)&i9W樮t+Hѓ?V2J/q`Θ\ ij-+(zfb~gX?љ!3Y$e%_3J>4`ĤjR+[C'9Ld^'M-~]vMz#d7ﻃ1Mëqc=cd>¤4FDs(dk, |P u)tց6NlaHg-sla`=ul@?ÜL`E%):δ8Y/Cz3!]d,£ϏIx9L?tSHYCE.2mAJz՗fnUB*W ;UdUz~DM6R2 V7ZwQg F[W[ȗ~ E ̣ҹ;5' ֔?At!1z·ā fvتtA  % =D CxcUvQ(pcYB Tc`k!PRZ1d7+T"@ˬk0b'/~&3;Sbu`|Fw&PAgwЅiu: o"KM=M dh* LP 3تEMf>ܝ* *M&҉3Z/Ё%: .7JiGd}" q,DNl3{`?od|sW0`(  VM+cyT` )Q ;6Г嘘M}Pf-jsXttaDU;=nvIu ۪u |vv9.Py4686[(:>IU ʔ#M3s5#@7&BN <;m&T7=K0/u,6*SJP@45ӔHK`8&ob1uq}tE>Q}倡Č%\cѱ>"(ģ}(M aVǭqFEne,l)A$FdY!pc3"z|7vϘ|D.NӰdBy7хbLa"6ݺ,#( Ɩ&T2Si(} X"N>]vE! %T~~MX` |*5M[OF{4 3(XJQ'x]D12H?h>N&k3ۣՑ0QNr Wg΢dߜ0xXD0x좻 >'HݪP,H v 7#t1\-I!B\W{_)DԿy0ҡ]9_G^ͣM=~CS}A@`Mamf QbBj!A {Q+šAQĸOa]>tVC0U}{ mϏOw ]z'Ra:C,Èܙ, $ MWpL+c6!#tÜճAP#*7Է=tzNcnL|ɕ~6z}.u8'aޝR [} 0:"R6TQ)Ҩ,ptDG_^Y]9ql8n3M$z2Vj#ξCԫo2X%8'ʲVib&3KƏdsPGGwc>Y2}8XP !m8ōud jڳe0~wZMoA.Fޫi P*rȅ'9, $V W.lªX˟.1A㓓1F}v,b bG2e~Gkz"("HY` M Ơ#'3F)YX72#@XΠ_9N8s> DJUzrM M'"zj)rJ$gԞH$Ng/:>l# .cռ@$7ҍf! #q'לSt}GoT (4yj9@Y%g/;F}mQiPn=Q!Dž[qy9g!;7gP V,l(CĻ_t m_ (i1"V .~<ѓEJQǡ%VI=g&r&%xs ncP@:O)Wp;gmEy0s?R*\)Ƕ˪^x=ȅ_On=Eq:֖G(PYzK)WL$zeJ^`&\XBuDp\#K2 L$`: |ݛn%Q%7uγ\)Wб@cjs2Ed"PZTxST@QH-%QMYAN{o{']}d_R= yNڻf^8܎X75A5nuM+"ͿP{# G" *JJu0JSK 9eYe1.G=m߉͡;5isz@Ɏ~q[y˽ey9akd;OG?{Q6C iIcq $_EpPfv&M+_jOt%|ZcD?.5O~XY9BjC'\/ͪeDW\VYIخR^%\B΢u[D ~Hu7WPeS(AQA/kqág $deX{N p#:ϝR-:u"++i&5&D"e <|߿Zk3I7~8LBҜ's92fm/lUkJx%ꃅfI1-o[m_:Hg%~D p7uS)Dw'ȩo˛r[қTcAҿ J=pn OV+Y7w"^nq v^cAK=%$Ƥ<RZ'f+֫+Sݮ_÷|Q>P`_5_!,e'\tr(fbqΝ7>e-M֟}˶@?;, N-XFWʤ2qI@AY&ڀoˇ2[d%۳)]%Rn"x8qag/H;x'U'4.l058:@NS*6x{xq _ͫY&_rs=xUR[r )r5/w3tNkvVɒ880H (}zxSU\N<<)vCS4CE0`(ـIϟqaCa&S;zSsb~9@D6o@3Q h?,]Ap7eUr_O8n,v[ws2¾?4un{pK`4Jrf^189Z[E.`! &cbk|{:XUw elV˹SXNH;e%{y>&9mY/Zl9["]1[l(`.xdm:%F8wI7 }p*[lGv= qŵ(y l.lY'Ero_> 棬0Ly? ʜ{ڵZ\yuk2RiǴv+~Ӛj7Wk3H߻{[=y1ˌ{M{z8 #Go#mvOZ#ݾϿ??#;֭wu֧ݻܓԓ^T}(K:vuA~TQJ<?1z^Ou|ȡFI;Q<^>| imBߧ~'!e /쑵RDԧ2w^x,f6 0uPA>}.?h$|:hۧ^n]ۯÿ.=MSgNV*{wEh߅[q|qQUqv,ucͅ`c9ÐD3+@0DDe1LƗԷ'YץrZصԭjŻ{k%s:>LƘ7'tXG/lأ hQd.>gmW}9ڣ  =FWn]Yx_jjQ x ap91%6ǣ˕ +s\$;^'Q6GgS9NΎ>CɌ*qDZ iTwØqnha >s\s$mjӬsyu$5bU«T 5ϻClںOnƔvg_bfjDC>ɜs4ZR>*aL|p?yH37fEȟ9x:MC-@Gag=ݖ*B)=pޞ&j m"qEUG2!-D3cse [dRm4)ȫI})|4c;lV*l1Q(nQ;EoJR:1T>\94eT,E#ebJkܣWN8mi8$]HHo&}1Q"N[Ϣ1&W#mXqi):MYG֑|;#`YG3g--SnI%j7db֑3&\wx|uېncQf5du}qsdl 8ye(w+I0o91Zn{ַԡWe|7iոD 7MS0Zgޟ`7Roak`DY Μ_=}Ʀ;T,rBQݙ־w_͹Z;k}ݩy2^ <זdf}ɑh!,)A%x,']f_&]:Ѓٷ8CWEo{COI"Ϡگ'f3-UuST#9a iM:Μ3.l-"1^ ϝJ~;OmKN[qTϤ??CY95뇸)d͗ K!%6hG"jV-͍3GG[[my7/C ˛v3@Zw㲹zS/8-w2&E} gYEm9+$ʂe(d)6굖y\@ߧ2`hdV ;*˅5鹊p8S47ڳX̚ .- ;Cx ɀߥ ;Uw EB*hܬ !h`ˆFZ/7*ZZ(WXcJv+Oe?YGz#Z%'ϡd&*%szE3>5H)ѯ Ų݄Y4<@~FضsoE[lt_YOoD,KU efD9>U=.Rz&%}G Ż=՜gjTyEPP~)Fh]^c̵nsaGݖUKEPaZֶY-,Uw@MwW'!2C,jJe?DA . q[c\ۛ8 gN0s5Ūc`P3*@13Cph IP- mԇUpZ &zqЏbEl 鬑 * ĤR Dk(\XBP|3poehuh>7S7uJZޫ:Dy$OιI 0sU܀w]ξ%b)bqQ&x,΁9gCA'&tsq3TjcCrj`w;9GH39IXE<jHX9`Q|$pc]+ Cemߚm[SobP<M1:}=WSc'A Ke Ryrtǎـ\Iڜ Js\rD *^Ji=cC{( eͺfvuJ}\0i)5yD\wbsv,qФqmՊ vncBrj$=?Z$0j2{>md?s٤\>۠Tصegk>Rc[h<-PܺbGdct v%ѹ4R(Dzsdgy^: 9 (;6f }H"G/cdmmf9kҘ\JJ@-FO $";RISqY4x} 0HʄF^WT3lU(k#@LB֒R[3[XUJkt- ʹ%icN{C" =ծkb_@*"SYDQmy4݊g+Jzf?MZ\zůʅF` R;#䬎X=q tQ,#tX>p4:,i\k9j8ۢ+{[y=>m.y UAE"sW߰ Gn ;M`irc_-2!˰o[o@nۆTl/ƭz\_r|)Kأ|VGo"WK͝:hˉ#& Li,0Yv2LA|]5?1X;pyd-hpؙBiv^1]ȹi"@s^3aṋ1J9`Y 9-mTK/q_ ~-hgl9n4)iRӮ)shc*vךT>\yjܮsPh&}!-3VzPd$OGT,B0k{usoQQxy2@0C,VO=}rD}S7g/j\8 %gdəŝSzeV6k$pG&j!SCz#1M"p3@45Ϫ^S$ts>8L*;BК3? "=7Κ,GƉӪ 2XW^⇭[$%#Z^㫑+p<ն^Ԫ&%hh2J,m=l"[ͽuԘ5N@!帳Ec5;>K 4I*֘4S,>{7k(vwZ_J~hYi,Jt{k'hTHeOWTSNCN Yvi*>WNVPLˣyݭ~t_yMs{~T H_v9p}S 8oA,QVnJfk]|}PC? ({`;[>3A&t%Α 5}&P̬o&}67^;/-(q1$,@`9f$[I݉;jc 1@&!ƁjQ/l"QiB:eFgkgVE9-5P$J,fMC4@&XhkcŹ C}o& 5ab>S9x^GPP$etnܖ,G޷=rGsԩEߵ?Ԇv߉eQVכ*&nTQ0V68M DqB{ڸG*z[YO|{z`[- I0EVCKz,M=hreXu1Hl{ ~{} =ftsخ`܍b`OLK&KT`1K.J'( fX s M@DgV6Ǩw[}ΒO8lqϠ-P%(!1ڲP,Բ[8J< ',D%W($]3{0;\ew]H7pqiO5 ndߩIQ_Ea$ [vF6HDm`X{m_X^,{+yYcqvANP"O9܏%pX,RBau}\H*JFsќ )aCYV}a|?!mqA_b'f\VR{ b}p#9_>4_LS 8%3a[Z"}x(gʌP 7x2ţKSS<g7e:"E>B+Mm~b7!|'èH9\$^3κhHQ[}RkcU1*PpD.2t0܃W+myQq%||;SAkn|/7<[ُƴ;Zk7| DD2bZܮ2$~9H`+mJ\VW30 cj?&L?} s>]4mܦ3\O1޾d qJݯ_^\ `" ѽpwW++"/Ujil"{jb;|s~46X&/anLFd#]c4-Lhʸ [13eP6KM%MJ]cQUW-jEUÀM԰'Ho˴)v EZvh wzvnZok؇;W D,yV],u!Z9Y_"^c;\bk⍇< +|F+Oy$.9ړ%9v@?U)}i"!{7QqjGҪqߩ?J,Vn'8i Ġ#Y9:z8IfPs{H²wqp 8ܵRɁƫ_hp PKNFo\[L|%]½ۖЗ{9;6SQl=TyZƩ<o!WbA{D"43@ jU=KjI\dESItQl=~Դ$F@,tPɭ?j~ +jOpkR4K qZ3Bu_¾J B m%f`\j.V%¸ҫJH_!W5y0f Ɠ¢ӻL.PLۧt5|?'u6@6^gARg\{{[)oV}HR DهQsߌ\tsbC5Ԋܵh'6戧YE1Eh +WGG9z+]Ig:GެA}b:{r׸r*y ՝^%=^y -HΦX y_G&7:(uinjh@rΎz 4کgм`ehDLO?8#GѱVSrql6'"`fQ.4J3ظ!}Yd>'?[hh^aE00_C׻>A8 KڡK {<0DEY t6@mWm9yf*҃ԏl[ "if"a@K?1E->D݁*efj5 -Y% 2Pl.!+XmX gܸ UC?Z9R)|Q1W~GvRgn>\NG73/U15C܈mwQgTP`S)ۆlw fF0!n-u˓(Gܵ8#.C$6n?Jx C<ȣ|, -8m^9[ vk8>iP*12#L2:)N,wJqfi1g-֓7\) p W~<RD2 KCJW-أwxM"QkXd #Qj_;dxᯚZ?{}W[R>?bt_);]47s㊧`.lX{S>h\ V#=;z|(| W0kY .  7%dpRd(I;*nqHpHgL%Zb>1)!1šPU26 +nmݨSk<2@6/'z,'{-;mUyp\'G:ڢ /:WCTm΍!r( ~Q+ɻ>`GaH^rE07m\Iß q]%z0 8D]8je!ɫn8|d2Bm)6j5]gPݣ9i_U=80g Oam&'?Wy_r1ekŝ1{f9>RqJUjiB]܀h c0CƞQeP!C9C^յ)Q= ! ,. lIh8dC\O 5ȕ(19X,0w)aZVf2Xܗnv7jAs <-3BJAJu6By2$7]Ev%IG!4% &vvI‚ ƉEcI,h4 81hPŷ4P9,H˴&?;H ˌHwmI7`yƁ{y)~wkх)$Q1-U1=2"BV/ic ;!rz S׿}rpF[T`^Mw?zzij-:|<`׈WfA }_ P|$.*ijG=`b2q_mtS}n;;\C$/~<=F 5Z!Z"XS (?Jj-H魐출8"W{:Tz]uqJgx%ϒh6y!WL#EP}sέҟ_ @<#y/c G"$慠 aH gq*#@֎PI Pض8 ]  y˖u0fIEJc#0-O Il"[r-4L/ރKYp,+ Y_kcUU\9Nl?R?4R݋04Xr6ԋf ZJZHC\#$S)K?4O#n5и+\jyKi> }eƕƆ]pmIVSiqIV:ud6108lծ;`4F9ұDNY`c"&UB )N ;dPI?n6 @0nci_RpLUՠ'uBR2s5al]Nߋ kҎ64 o0RupU:1_ލ~Unbai:tܶNn.T)հ?YH/m.(ncPt9ڼ H̊^So- * @_ W߭6QSFjвɶ8f1Άu8pvB3"ӯk_bHz3E-^Mw㬮odrA4\QwKjQEc)`+1ǯFpFK|"y+%|3Kf,;3v>qpeP5:\$ 8Ӳנ5R}qe Da(ІS #ڛn'<\z|t4FG~tUCǟ·6ov|tOFF̝\N|XZu>0]\g{ ݞ^oYluQZu"G0R>2lv d$sG^B1EʊRHxtgT;UT Q}to^G-<@zHBNQh%Mn&캏?, $[NY&)%B?Qb;eb9|0/;eCp1jNu9:?v|*LS&c2=8>= k =\(χ)=.5] ϰ[Mhrq OmOTίenLG&de' cQ8^CaolmU Gĵ S!}EpL{U}#s>ּE_𖎏wT2vE;EzXNEgj.3;Y2DvԚV?!dU${:!NW<'˴YcQ~"S OPz)2E@ZRtOh :&q 8'ؕY2Cup`%qΈt`f(:O@-.VVwA:Z+*ԕ֒a/_?z3d-%PJ"xd/#oQ1ܽM)Z"r8}2ΪsYYsF?w8bRx@&ѻmňNcT׉m7zhq,R#p>)i>_lKi.iX<gHƼ,\hj|k\Sg6'FNL>ξ5Ɓc8яa9L"^ *fYm% ,"FXGC!|&D`ݵHu8! %q  ȣ⪁&zȵwt3H?Eiިc%X&;usD(2`\ `6I7 ȯV% Gfs5-h"3twl|TO`sVBrm\3*އ({(CB2}QΏTcmEq&Ӏ{ ޢDWndLV+u&d0a F2Cj(G8)8XF$SD|1XVN)y.ݢ 2cؗ򸊢(MZsr 0 '1\) RyGymc;5VBW1j\⿘AՏt6yyg p0F9mmMZkSS'ˡoPr@Q>tҏ%sE \T(2hMC803980pujSh,3^ğchr'NTHt\G'|Ó kXS)UWЪ}KpI|QJ؏. {BNdTDA ho1o_lj)*0{:E{j8tEYN1˒/=bJDH=lKநJmO~.08@[sfPRt9霁ۖE}:+&/XOTnHg5.DR@/\`'Ԭ'7dXuMǢNލ!W o2554v}ؓA=4g 9gH;^_3j."*y(yYߔW`̈́*죂[n$TK`;4ќѻ ~!H/|Oy*pjwvLDfu ^x)J02܌s'S) 蔍ɤ) `m?'5c8Xy "m%4,qG o~4lK hENvvP?"0ΆgVйNvnzo;KiLȟ(,t<t16Ԯ΅)vx6',Z=^}r!4Vhމ+O@?&|5}TMvA5+wSlMؐ}"): m'ݰ^cF.޼fln%_+#bm堷u cF`9Cѥ n* 0csg6 WҬSNs\*r3y̌~V}raop)N1ZsƽmJy G'{CA.nxtKLZ 𖌳] 5 |{6&[TW@^dp@Vj0flְ Cn0|2wnLRڗ\?2N=-_(M~.04#+5Py]a>%jeA^[Y*uK hVڢq.cHb ތ"o&|X=H G}'z|㮆Á4#QEp:h Vj܈'SBa}/Iwm:7n]bt1+E?J1mqgoGW*?bR{nZ;WӸRF]_UY$;_1\gmp{d?bloǛ-88ԊQ~F}U5Կ ? \ iP2}s0#[`r1Qꮕ UW2R6(hA ->!yK}c ^k\zxpmZtrc C ,o^ .Ry%D[??JhqtQ#ÁN$os8B! U?!{$ܧ燦3?t' Q'?3ȏM3\ٹq /oXw??+4 -nRx|sޭh=sl>1dA"p O3璲 Jro''p)\8yّ<yqРKFB'޷lOfk͵#?b$y  3s3?(5YG7)c|Q깊:e8zݚw@f.Y6ټ֤ ,>Ѱ&L爓n4ςMKvFsXkq[PKee(܅78Hs%%h5snv2AH?> \!6mJ´(`8z>te.$qRۚz39!G<_/ׄo(Buue"s8wLΛ>w]pP[mxpN/i~Á̽N{ *kInUŎ_GoNQ"Q#I1] e4k)O+,2']}"rE A]a@# {傑1FNg0fK>osT"ėr!vE]w)jv:+?Q/~Sy_B97AY,FV'k@j; 2 S@f/&EO[2dgjؿϑo(:C'm"LFs@ۆ'9+3 5KOL83 (()ݢnjͣO\gako}*g<>4⤂Y_pN@^O7jx"Ԉg3[ ͱd1ZiV%"*Z#PZ+Tvͤ%j?}Vѭy +jKdV (8®1 =FkQkIwMQt[WDSipE G|B_GmŅ[u;+J'+idqYH'X9H AHѐ}Y0 ~9I\ D GGWcPO@ʠy~-!gx8BjN"n!r!FU/>ڞ)uQ3_,MzcUVTWTQ+rphÊI5*uMj<ҥ?+];e.gS~ q-A@0^d{h?T Z`\CAoqjz,W_!zWժp$/GMW8h'UQ$@bVLC\ĤFw*ER5`pP,GUU,'y۷8 d5ċJ1iνΙ#֤8s]C5Gwܬ*@+=[m E -0^2LS;.E+2DօAzxm0"G Fy-}p*GyTBaҘSIӏ/[P刢GU߀}ssi؛ @1ŪK~3ZW4Y&>mSY@ p4(X`!?tb b.Ve/u2!tN}KV ډ(#iRNN5!TK[bLS[mKO&'Vi^j-ʫkR^h?kHᡀebpÝ`4̸s9Ǹsy2Ta" CmIIX#SKa$#t[;5b/aGm [p9+ʹO`y bu* j0q \y%vkHk&'Ed]N \>TTZݖr9kQv<]x/ y 7`Y@nhpޢbrqv2rj`XWIͦVZ[wvA(JvK0‰Y*e/0!tA(1%V# h!Iźlu'x 55[X0(`9B/&::-Tbol; 6Qm`Iش,9#ְ3,NjtNa)|L%"D<[ zv c'v: 64tp!wjGT{H7;]`R}"#,Bu;nkE+ٽϼ38+ UavF: /kVI I]QdM Vn@ZlЅ^+z&~:q3lEǙi!{^(i:P?7ZD|D%xd=hMc&ܙwXܞ~ X@"jǠ8@'xHbeSyGvOKJq*(#" 4 脺 2iLXo2!όVC# ??/2X́ػXOYf_gX O4(.Rh #{+&+օ}w|:!]NeQ3n^x̟mm=&> aN ,1:@%m5={!:l  _t[leQ`7- U5e' HfPNh'`8zXXcMx4]BuW\g@$N?2i9ࢾZV?2SYJUUc]q&bi';`xe&<#ekGZ/nv2` KFWL0PZvJ--K\uzqr,<h}IT̫A!q`>s@)EhN;dKЈ81 t;oͲXUuf9:bsvd5WD$Ć6~hg,KK [/Fa'oDh{--e !tHCx<+ )!Ep22H6Yt35V $r!-}pxVJ"Jm:8>ĕiЌב7jfF+6\;ͦ )5ʣn/a]~uwx#˦hlG!3}5u~A \楁)N=? Uӭ&G[@ڼ=T1ju溃f)-u̫?NBLG+/h"ֈL#s ư:Zf8aGLAYL+o0SC7/0۱hDe<Qɭ-J TZ뚞;">hw[DLd6ft*Ah{:־͙'9$o]; HSs &<.zGOR" :=qtӖm<ёCttVnCp+ρx~}t H\045e2\CfȹEY4ƻƪ|8tXKR{CB 9UnGZlRלD! yin(̸m.yu#+^>00$V tRQP5.I##m;Q4X~ vM|Ե#kD$9# gVJӥɩDn  .&畒yKa ZMEv<\bԦaʃ0̟fxsN2`>w\d&eH9YNfsFv[iԄqQJ[Ao hy#-dk4 3ep=C %Q8g)d%kկb[N[ Ipq s\}\ ٠{q4ٱ<<2`>ʃޢ9_qjA_MG i¸9$>goq+/6°׬685ubq4^Ub1 8r)eN&$`'f-yzBo~~'W<嵢y0cp*6ipBK ]ƈ \PT'!w0& .TT -aD=+cN8+*!8wX Gl@`]b}}G=M דynlqe4%b8_van9)́$5.:u3@3k-W@<$nq?_L{jhq4][aH){ǿ/!Z-*6CPi@9gˮ'd%DUV7@h{_ad6W< 9udMwgLE,9/ E_Wז K֔8Hed~|K0[`T 4Z3=F!s}1D9%b$>M5coP&;&R2Db6@#ҩOa|4G2zJ~Â;\^_]D/,tO!wɭ(0V{n񧷺3ܕ;cicJTbԅV JHYe/m\z77,L8uR(Px@\䕔! =džy#?mzU:s1@԰{ׅobGGp GuLfG涷?jMEoQ7Ȗ`Φ2c"1 5az3MĚnpپYh$e3_ϲXO}Nli>>UCag%9'R-#b⛃M;MK}Okˬ(|Pggo;ѿdhS+DgQQ%ԩ_m-XIo$`_cFlT|_[ynS5lՉ>2PU mV-u@r`\}@8w:e)K4QCs:cX9Jad 230_{N)#sv5uJOcT}\wV77./7{؛"lv. 0!y<`Hwi I O~@l맲OyR 7)"lgHaKۖi)T` /CUxen5sܐ&ۮ{1+z)N 焴/4 $܁Pm P6Y9ܪ.5XώEzj+`戀9t Thk^8  -M_msN:U<.I9hV:ꅒ./x1xv3ʜja, wEw2f 0(XkՍd~G˖3JftW{/w@-V ava5kU'0pC(t$E\AO^M_bC˩? ySY,= Y[ ޓ|z",~ (&5-Gx4^o^v|)2T=GQl%z1 zbK(gQ d4EJߒ/R'J-/,͈85^. =P跤AJ}* d(A<|Ǵ͝O%fx'OucYD) p%Pǿe`^{YO}D)x/E=)('f@?IzŊ@JG&BԖJ_k cmڐ6ֵk8IcOK5lDZ9LnY6L^S d, < |+J)i{޿__;h~eSo怊E#%Qx; e?\s??Wj gW``"_?V;s$jp9*dɐX- ed v$*P㍿3K=oJ|s*CΝU~`Z2GI9[=a Iqd dCBq __>T$@j|!IjnFi2EG(`vYǮK=Gr|&䬣lFi yR&bZ2'`7|-IxVcz䵍O8h}U @eb6{d7Q:\0n/tޥ|o lК+Y4d`6/BF9?nq~h?Q(;3'7>IGk3F*quRaɝ bz'7AWS(|"ϑf?'6!@*-tb -exŃlaJR柌8J}N"x__P">PCou,Ӌt^lIzP ('_DxR QB =@n%FA@',1-Lz+0Ƚ'2X9:XYwo*Dew`X#Y)Ow]!sS\33G$>8ځZhVq>?$w2HӶT-yR`u9&no@j6(# 6+2nUa{!²*%iXg~j9I+`k1ۂ>zWمBQo5]4L%L r\b%pump0NiU'(+ު%}żUl:OϏ<&4[$ˬ 3OU~F;!U؜N?%o cu|ks*w_-Z|{jB']xAz*`m\EV_OAUE4Ll+Grc /V,]HW0fy2.5ϯ2QD=?=8ȘuVVݪLIuƏuziMzb`%t&ImV`V3!yN ^ᾁ=|eoUj|%˫ݓʁ/ZsK˺ӊh]8뜚AYJ]$({`|U1R .߿2 dӼ>%ݝ/]"LA2Ev=A׻CT\YL:,rHei,^oUF%C^5,Hit.R/rBTcBA80":5DU~I-pTnW._vKH]Zيf ߷%v_]J*zS#QTXܺN#a"?"F1%SDJIgf#Ae􍭙%h뗞x57Or˛=FrR1v_vP{zx2Q]'8i#jyLQ%#V9'թvAHK]NHk_pt]gO3 Tds2Z4;"[/{E&Wf>#'صǑOZ~΢&pUؠo.Luw@VkA:,7A@RFg_9ʋ*'Վ WS F'ax>i-5HE}|u] ӦNdW<}|(6ulMӨ׼x5en-S($xI ޴ޱBR 2Hm'P=L&]"A"s9Юj~K;D>k~3^TtҁXCD$?'^;fZuMlrxMP=|zp_IFi87Mɵ ;eauؾYTW׭o?bS4k6N[ {YW5JU>!dW<` s Slq쭫m2>AưӉVWac%ϵ䏎/!/ND٦qmߨG@.9=փ@| R)`ڙk`#~M**I |nd7FiiyƒAr~^WD[uγg Fe8{w\ʜ k-#+MHYUi0$Hnne8<]0ǬMf_/rh-D Lb,yjl̵$Mp9^~׫K;dbE$Ya<, x^t,o_d[*k$?d=gDWԆɟy+ {U@9>!c!5ZF s4{[&l%~Lڴ>8$ч?1)Xt'>sOW?HZB e©ZҀiw2p,=xjtӯ9;fI˻!@|Ryu63dž֜ 'GI>B=҅fx!+Vڊa8w D_KA;Wnb?<$(>ʗ6%K6ٿ7ٿ7vMMge)⃰o鞒>xEĖ_hӎrxY-ݘ fX/p ~-QD?N0wT~wěǷXtSRfY=NDIS q" R85QPbRR HPN&' Ƒ@6J PUV !G]fg֪'Ar=خÃFcUWO8x"j ]`H1:b;S1bL?⋋^bo㪖/EU7FW@~.56J@mNYc.cCΉuӴ8itDdAH̪ ܓ49( U[6NlG~^z":~S/9y IeX 4!}mjL\sv/ kа_6U`4&3E}edW2ӵ~TXB.cQ28 SsC9[f""o34SflLs\&g2K; `j^ lca3zjޚ;Ц;R lh4UM`Xu1U ()foEJR"6`VGo1ékwtqj܇hzFMSCS8J͗Ik֖~TwoVTg(!NCܱo)cUzA@V'SFC(,q#bpVrr@*G p"[Mԕi߂)lUR~u@EHHH_MKH'_*IxÆ>r$Y"&ɼli28kd- h! 5=dV0޺ 6&r2MH].4Tc1gWW5S}(!fsGcꧼhHsw9XDLc-l*,q3uխL=E}drOtui6ysݍ?7rw=`eJHi,SjcDBizWQN4Gh.9d4B"`w_Wdk.d [SV6=Cޙ=Aևjuuw^V<o]w=8:ۿ5YHK [ΐ#wL◓~AbJQfRƶ]v}OHEJw ֻ2F.]9YРgT\w.Z`&:4r*lo7wǪCw1R5r)rR {ۓH89H_!tOkYD(K}^~ q+VG.ۇ?( VgARTťGǶн.=>l}, !fJmw\Һ;P3;6S|+Y6SRp-u%=7E捽Lɋ!^da_da}y-ZI$<6 NN k7)b %b TS"aN0W^>ۑRMVUMR: K6nc(KL)5H{|[M<W طK=Tni  f^<.W̷_@Mink8&)ôy_X/*L|] UʤcUe'e=>N {|J3j$<>褌elA&`^ޒRrfD.XX5ٔ\Ix%A=xl߹#K!:_M|nU. Iz)_w eˏW9Szc"Qq"*69 +eɨm&Z$PpܸF\$kot]2nZ|c|cS2$WxpqB!{w2zOe2 9DC職T 全JeRԻfa#dԽWTwy! hoޅK7t2T#3ѱƐ.D]>j|a>?.px#B!` Ŏ{6E2K-#kZ>HQSp[yn w{.'R @s_Rp(+#ʚO8hI=Nʃ2YZt.ʹ\ TP ,Q :2z1=P( KϪhOd ھKogJjiZqa46's:áञj@hg \N +~`S %nUh /עɴƒ9㙪$#-˥cId) Ilsdv4ćSw!BG Kn}2qnzZI0}Ft+ ra0)S?6Ǘ#g_܍/[҅~aEUÕ/] dLe!@O7>ސM\wĄvZ x;uS '/*l%^ R)xF pّ dk,ʟ 6I  +X.g1_!6SV Vx m7}=*Q/Oao˫Q'xccͷ1)H)Ç ̾(xMQ E{" FN zP'5~q'HtS F+YV** G)k+%t4x׉t)Ȳ#ŝ6Z`1m@Hq T"i'Aݻ-!}0NlrmHo6}le⿇q섻xek:%ߣ D~/n ? [PmyVDFCR| $ҋ KHK%++YUh0\@p]ha\I3f/G٧d-\d?ZcU8WGj+IߌF~κ:dWոysuejS0>!c}Q*Zl9Iu~_;1b^%XE%s=H;-˞0' xqVr8 GQԞ6)$q%Z9Q!7V:=ZHkCṾp:ֈn\\װD+ޯzҽ-~{B4p7[PvtX6pS[q klcF{OdW.oy,GcCD'<=MD;7zs__y(oZ%ǭ fGץO,xvdYEQ zԛ{ 7+7xW(iMG =kF :ƌZx|ǚtG`⌧B$ҁED'wbǺ4%V_-tۘdȎДEgG>WH^8\ L.]pYv }D3%#r-9dڎm̷BڕB[̾ ј~X58reà7 yqbjA ։׫]q2>T^~ڧΌϫ-(⽡_yin(ĕæozH(ˋM聠t9Է_(׸~|pW q^CT>4jrÒ7uyvǺ#%M1Zѯv[lQѤ6lA|cuU(!U ȕZ|ŗ=`JYߌ@z s^Dۆ=#m|rS+Zv >̫}w/Yn m跃Y Kܱc[B> `y\\L& k:KIDH׬ 7^0!r\"GYEnV24zOԦ$ 0%R>GڢfၔaNI __%%\Ü6E +6qVHWMi7>kzC^ՉlcR }k+"KxFK6K uq=6էpb#x5hXSI3ǥlVê`b$@Qf G)jI&gǣWbχHPE$|=r(b/WPgm| TLo޿CJzPs+yX2urIw{+.KEE6QwƯd_ӨR+>IW^j )S64a|\^]@JXзN4>DmYO@jY ep 2bMXsdOC^e]K ƚ7Q7 aNh"Yεng<-ulLSWRfmo ,-KPM[V- qi7K4٭!MM)+V$ʚD3|Z!ZiK;4^,wH2p*v3 | ЎUsTR_Az([&bwK $ُ>oFsC*b#5e4D ~W~0H?[!mb&skUOF? LR!q#ҵ[_M `*ImPTBmIj0ԔgU@iдH@ ]91Ln}@ {xju[ؚ=!Y}uf.sjvypZS]Qfo-ax(lק)f$n4$(kGvS1i5s:$Uc4b\EdS +@jYvmb+e9Xٺk4Z2]3Q^o_]vUF(©kJ@v@TW3}gb m 2Aў^`˺:nֲ \ۇ Q@hߙѼW5n%;+ S1]qoh>RH::7sx`VZ-ᣊn=*k%jI֦ ,åUgH /ۖ8]]%pJ5]WRKsF^l/ /)Fe;(ɱ <[ca=!m|"H7Cv3 ͼ%[]Sep_uv[+p~җýC}q)imT,;g{$̑ s7ijT^)RP4VS\DixZ,Ixum'00 5 {o$,Laze@YO !Cv)H&։HC&am)ݖDҟ<)Y ׀EAVԚ>/Q=@U^;  kyDj 7u&zd?kbƃwߥ?CYp=۳$c!ˍq[ϕä:Wg?2hFCU+`Zǽn)НCm&%djo`u/E*~sWkMcS@5O(AJ7H S%>z褲|?c'L]ur^1Vg zJ)i#k0 [{Q@Yگ$cs}}YNjfcd~(UmcgrB9>*G-SJgӭ{t:4hc uSj>נ5G8+0,eٞZžװ]nκ j6 h-bJft/ _ h7eըB:?. :(rgh p η%,t˩^XAP`2 w$!4/I÷d#MSjkpO &1>Z~LztrkX6ej+)$ƽs@S0/.`2>['\y4 [:Y̩ cwhGyc[!)OvOyj\p5[?ZwQ^i3aҧ[WD͋xTtzŘ] 63vzو|jQ_2ayZ&$SˁԄ%̛6gwQtV%u"h*6`;j=ZΒ2P- ]A]͡6;'ަ'叻bi)C0.̩ޱ'~VNQ*k@|&_4k8t ynUY <<+^#B֑3խz߼vdȚ)7Z&ic{ H8OrWqٿC9ސZ%2\6~إ)}:F_pjޙfR~#ե* qMt5~-PO=&+?0;R]sףmѽ*y`WNCZQwMɎrv;m;WԹ3L>KfP R8 fIW0}v<7';nT؈ƄRvڪ-xL?ӵ!~Lu Šcae "B#iчŰζ{ SpAu/cWY]=;wLte=^g1/8ՃO 8g ZA%I G׸+ƪ{8߹o 0Wxע- H츸š6]?Jno>FUi QW)oJ=Ac~I/Ϟ.h]o6?(=0]u Vz$sg{p3%\݄ݘ0xܽ{j?;Q'eg青s&')/T.W d r2Gыa亩tw{.X+]b-~ZeZl͇^dQ<(&Я ē&Eܯ^d-Ms#,f2,<(ڶ*9Ȉ]|"m o[Xv]hoHw〪[wT%q(mԓ7@~cXeAY3݂ؼb,0ayhQtR&paڮ@(SWexeS (`j&.3%^R"3X Oǖ.=mp2"i9Kͣ%ZC]Jl%n Vo cZ2Ag{2an^y@%sҘBx6M!BA!Ǩ*r?.[ׅ^˯5FԔTƴ\K#^0J,#O顂ǻRկK\KnZJSX~3C+Va.vnZL>6>NMhCU/ [Hk ?(TbtӇC1KE-2\Y{?΃dsun*ѧΝs:GsyW˃G*˧byN1%*=;>hCmUFi1瑪yw}ȥ-F.R\ ikΛ$>_nX<\\uMY̯ ݀J.ct  CP%M E!-C=N !UxPkgkl o/Yh'|1Q61R!CΊ]c~gbUGE&[|o1-=\/+KT>첻8AxB6YH9t,䒠uc5vĹJGq-@*K$\Z6X=l]:l2R+~nn ]`k;1TS3vd'ݺ>}0 uUT %jʋ7ќ1QW[Q;Bp(DMH771ljEPjۢ+l;B]j3YI]"I={cv ogϚGǒ~$ tX'9yjFΦ@,ipۛ!&d)xPOoߏZnI2F9ہU+ޯm I (C7vMto>+>T2bH8ʺ9q/enϱ>@ݚ!lյ mk ol>*^<8LIzs ߭;'z7fw68A.znDg}#ka" W_쒷n<󨝮K0(WAs`eB^9Vp^Y@j*8qb9KuhouuA8Ro:{vGhd()ֽ3R^‡ 0;2}yJ1ΣI%B RH{OUajdи ^S {+<,{Iwjѓ]̇H#J3wZϊ 39@P_b*?IEJ}fMѹUl]163c?z}`4*`1+'Mk;zj6I"5h&5TsN%Ĺ?Ud ѽV-F}YZ\Hyj$ )KP?~ԕ$NWcC$<{v[Dj-#5]սhgFK*CCퟌU5g:Lhߴ@<>Z[A w\et|a@/9F e eQ~ Ӟe;/ј/:_Zidۦ8\S7+mq){\WZ ZvE& `xCׁY;-J oB*?%CwuRstD1A/|nٷA+@ҾGk?❦/չZDآi}/u,FC}MPz2vBD .]xP We@ ʱ Sf{}Hθ}(`]fJ_Fw"ylTy9\ hP#?%Uǥ/[]6ٽu15>. ʣܲr }GF=klyRyZ B6.VU" [\ sΫƔD $Y Mw97|c@6C6-Ϧr[du&5QFG SUhϺp ѦI6#iA95@&ۓrW!& ӗ <*N@wI2K#o\eQ $%PVqgt \RR%̢D{5ɂ$.I}Pj\H:{.o 6[hӻCSw^n8} t3CI<{n'>˜s*ס o핢4Ea9l,O]oV#8.YX-=I@h| Dk̵O~@*K* Fv)=1G8ֿ֕cU02xVvBt j=AfH /pV ]{ŞT$}YյW-=x==cۍ(nN"yM;kBTt$GS1g G)ҚdvQĦA. i ؤ W=ʭ/ D=y8ót?u=ְ3yڽ&gԺUԓD$ uw΅QZa]U0' DED #'d4HParG\E=w&RM>VxDә'} 4G]™t#=qփ(o5բ!4GhXBbC7g&Ҭnb9_fpў6*HHD{=*q^}~|sm-nV˓Gm=ߔnݒHԻBuK+O^mN@W2J+*m=LnKYbu"y%,1rۭ4*FgS*+>Q,&̞PEc>o;jSx- GFu>WK)hOP5fri/feoյ(uXYGktJ/c>Ԟc;#9+"mev->;8pUQs$ 8-}+S}=#Q$*k|( |`5,|#u#.QJQnz9C%z -GmOn&[ÃSMiq uhuEo˚#ٻwӏr1Ҥ^_L䇉~ԅ$.+[&1M4~+r)Jq{ZmxΊM0:eM&%#ޯZ = ~ j>d}0ޭc $ ia^äy"OInFL--`J\a# '}!{ҀQu3f_*OF9]  qZ[:JM$O@(M:c㨑Azr2)\."r~pr]c}qwc<1_ IJ=Rh.Aߓ=؃aε/r y}f# Kx s~> WY1ĀNJfMGC}Ud XDy<*gwI6Og8TH,'w<^.` u<"5zY/Μk^/jN8%FZf"o ,zѮ Mה=ˁX֎σWGkt3[ڶiҜD[E?|*nLpFx&1-*59S NhѧuǮ=.[Q~AfoVGEf&U^;ܑDW?Ag(t1kvTSOClG! #ئ&v@gW^uyׂ* AD$}kBMYdjc4eYd_k#0lwj>UWv/YBVs_-| a!.wF{ AL֔ (a΀̳<9 4DA n'xs>U{7;hO_nYxGhGe ;{0h8*\}vt/kXId-DUժK1Mz;`[u̢Kb)[q/ |Df.We_Ӷ Sc.]P &4t m>>th~S檁p]zણ(vxɎVmi(HgB X[QO tn6;}eF^g8\2\}'=g\FTvATtuG)Io+{zqWtujt^]` `R]H*@g}W p]#v]t>?""nۆzYl,Dҝ|"[>DVWL|PvZU ew)LP0 c-GRyDz[">k.\kj.q@Y"D&HC)?Xo}x_OxF9U.=Y2Tq64~YQv#٥P:|0hfL}gܽak{V]Qv~ {HT'Y[l%e|J9hԻE{fe&MFŏ!fxgq?}9?NtYۗMyJ8 }i ^bʾhC](/*amb<ktau\'DG98h^W9y՘0[ %&r5¨7q xm|Y캑?W6 ASI* Pf   ^ȸ;uwǐOm8  ~u_ݓ_| ]pkpwWScskc巢07IvW_.f _e|9 _Ϗy¼BULvaNŪ5|v1gu:,akc 훿--Fp)F7QNQ qYnL7)ΗTA`M|K18?jϵ w1m]K5[frCS fr~NZP6gsT'ps1̺*CY?}ϘZOCj;ޚmT^lПh| ٷ%E?Qj.|R쭿̋[`y1"/w/ PIc O_MaO}DbΨj+U<Olk N`L/gv]?|l lצMK {ɵ3͇?$G-?R?a5F}m=|_4aMZ6_i_;܏Q)[a~2Ӡo+Q yۈ#&z,Ԟ9S׍Ո|QfKTVC.i՚[Rղ}k>3 'qA-V.^%*`.+0ƈ@]X[[RG+֧cW 7 [MJQ!iv[x옎:k KA?b.Xw׼vWIC[/]k[Z@w4$mӛ :ϑr[d{3xWqN>- Me r,ɓ ~kc>fs(+B ^loMmPÎ' !ѻ.U*6n[X\k?z.HCkâv?K {!n H,p(XY8bĻ ;Hqr>6|$&RP݃ syahyF,:⇇=ܑB;YqǓj|7T`} a`˕\,Z'`oi ZJճ&Uc ZCDܥ<7WLTLf|1$??p2v` DεI)zaEflS= Vj{JfIi."[liQ(?X@x|QQ.W-NZշFv_273菍MBP^Z_׾fm[#>f|#67ǛpKKP8=ݵ)}F\ކDTM71,1HDGQ,]lzA97ӥi^0lLd.UA>.׏lبíwiV9 r @&F$n^[0bHJM[O͈ ])t&c},ǀ!5ﳎ)^gCR2SK+,jh|We[%(Ag])QiT'у6uQ͚ z쒂*Tkcˈ@9V\M 2B(20;քRV[,Bd:tjQ9߼ JYEGL#vo5V}Q'XU1b/PCpP)_5"$Vq\N-C|e*qrè e2k)(KBݢZ]2HÇ9o ?1^#]TףJK]R̙fWYH (YuK+2s(V[I^ӧK 6-Kh+*` h[!: Ck&@'m JRdJtiKecyd[SPlX?D4K7zAl3>tIA+ \C>J~/:QmXC5{ަ]4ȤSfLb c`F;'|Xs|5*a|gUP,S)e)B_ |cs lUce\ƭ9jN+v$FX՛J+Ŏ5^Zb4 e`~b 0ho=c-6~ UЂ*_aԁIclKC&ɠayƗcLjpJYFXK]Գݧ Ю-UQ2)- gs-Vg[鮏 @RqXt뇓n4ʵL|$Ԁ{OhR®Ku eg‡5WːJbE*ZǀwCXu*^UE#MT6JqHn%mn kG<,vK&U oF*קP:bMR4nTv E)/hJh)`BKD`LE샬݋Y:) -[+'|Di_tNDl&,k g  ޾ 1^P/m,&cPO5;tGC'hb%̖b% ` `AUJ6 V:tF=4{8yuGrG;jl; qEg%qKHxqL{y4h>K~`|עC,!26up:6DtGNC/Kt!0ȣz(e1Dq P|sdBpDLAsȡ+Kgo=AC7PmbU tu&98zI~q2#n̢0fn3@iDSN7-A%Xc:TrBVG@TI!7^V|}.:!ZzpM ejճgFl6:W IKyqCCNU@}J1 ki]6 a`PE bW&݅ 9ixU)dI Liiza/|RY1n,)?fԷX=J0 Oi._ Cʫ i}[F<# j,[H[8%2qIk'$x6$On4?MQ&m u1[. S' P^blrC 0Y[Pی6xA̓va].FYlc( n+cV,^W0?&3Ah"/"t};CԳ*e+WX1=1wE^|Rty}Ђj+1l׹>e_UIvrEɷQV:A4Z}~^nhe3)TEk&! oEayսywhv2ً|Hj8B[5;N2٭Ս~JHfGQCA,4bܝ4e읜SWu;wg}MchwCj@ KZ"0X3q*pP,F&`UhR%{߫pXڙϝjs*"%$1 %&1T7Z5u@ $cG͒n_$t!HHHjnR3fDߍHF59VvK`5@\niWNX< VzZ38Pk`87dVᵡdQY\TnXLd(KdBZW!axh$Iϴ(t?i1[Y"#^0KWģnM&\p<<>CQ>}xCE#TkFƯ3dx[,2/.˚Au 3W~Ž΁5v){T uCTqI=VTbxaP'>wBd}V[wb KuY5J< MVCw`hSJGm#Wk1DzPˢ|MSτ"Fa6xflV7Yk#k;Ejl֞?#8l[+GK|q'j5WTP- ^}1a lHUUUJǨƀLs6l2n>zq>Ay1VC;G|f8YQP&zm9xCU#IGU1D[A$Hmr‹| {z/ x كLFVNj+0 n 06(jFrK۾yca*@>ǎC4ی]~`uj`B# q\W*}XJ"MoN͛o<s)zao_~ Jʮ{_B~=TUfE ;dcWN>+ z7>01u84L81,(2DI)xjHܱui@Xh{>F^D X4g]/>6v3@mRq8̬@Ҧ { yB0Ưͩ=ؔ/uaTd%i/BW0_S:-P>: Jc1>?gv_șElb>tvpaK4'n.w?ϧ9<Vs6d)ӒR?g}W]45F^g0R~yLLxtuG7{0i݊eI1sQDM$V5#XyY۰D.}Y̡ufQAm/]BMz|Z@5ꤞvgxvƉt̋`(UedI`p!Rkg g'@c$gP7T;/|X mGWBe/(`D::}UN96UNgO4pEy:ʜ3̔nkNjPy AO mj?p,8XO dhy WO4pT~VdEضSϐd*aHZbuܚdТx*k׃NJ4H%ӛ淊ӓ@4XTNuH)zU9Qyb\ūx>gҎO2M.ӎQ#=% LUQ⏗TFHKhD^u_ehqq1ĽaOQt]EhMgߎUwPxԈOPa|csG1xHyJs%>¼X>3<'AWfIƓ$VuQ:쭬Q7q àN+$ ?t17߰&l`I;91(h+VC᪗ W϶&WLsrLUSy*U)_ gߒlV6-W'xW8P=9*XWN[v٘ ]TJC1 k[ٱ+9fnU!v 2#@w}b˱kԡ7d@/5d* 3"ёſ$ A8@U4a#uw|o´z9̬5O^KTO}YI WA dzKZO9Y:,zvXd3*6n/,HYu10@nU֢W{y*U7h"dww8*NB/ :PQox92:gV={* /`C2L<( K ua M S,TDuBS`Z)RO[~!4l'&}Zש^*ؕnk @fs IWV|ן2x0ӗ+)}b𓐞#Ve] ͷPR8֗ [+=:,]5XKoSbI]UF~N;HYR6TL h7T jNRz/R#Ңv,Uf#qx%]6{íA);fv_eԚV|SǓ}A(iC~yBےͣzJO+K }'˳ۦ SB'+jTNMH|iݕyZI?pz.>B"5MWetK^-̓$|q#Gld^x)/Tr+ ! 5f K0l?ېCrj7z0 u<ŜYέ]9;S2E@d d2kKݛӻC S=rdhTcʡ&z6nLi0٪"'jt]źVΨ!Xg[86\52S&b4IVP0Xpq'ʒ]苍V~7fmoqS.d^:=\J@\xvJIHN{hLE2O\"|/? $ ZNZߥO/Ϯ3vD[zJ7ϧR4vC /4*QlU&h5.qסQL~**U`;kd11OЮ6bS~zz$ x+Q PoH>0st*tCe(غuM`}Z+Z{8gu]+chǤrfhmB,wC~ LSӺ4%%NMt5I2:mWr hF;k(` w×o(mGd[0J3U䰃vMƗEL|#x&q42XQHe4 qq-u/Tz&Ru+`}fL 3UƐȪ_F5WRr`znJ+!|.t:g$9aBުhg!N9#ׄby΋)n( !౥ }$o91o} thXn<;Z߃ Gf?SI<ţ_}KOעp_}-{>=Ąf&&'ܻn?1K{ە+49=䵡%p4چK5)VIHB[ػ=%/74^u=2#< z a|y;]w, vj O/=|6"|%o=<{-;~L D=xL阗^;x{uA 1›so ]{[x{uA 1›s 6s,} U x=A0'MK,-61^&^f,@E3mu CD#\ZꝁɞNR I8P0TaC/h܌7' ?ҌDŽnZ;axUZm:*f-M06^H侪cF7=>3gl|,6enA@='X;6?=F#ŧpB%tS\75>iOvݞ;gXRxS^%㸧J~?},ij:Ap,9.LhlfDEyf%9 q@Ù@Q!^;ðQ@AU oF(u"*H쩇!<\@nG Ӽ=`}GP鵫ցoƅv'S+fY$IDWE 71s-va`#ɼ[zK;_`uuB\Qza :X, hu[⼪!-^@;d2Q@5I=ebz $/:̞G Dr4$.Z[I[ۖB: օ h׼H3\ߍ5v\v2gx\HVd ;MЙ΍ԮWZ:EU~yi&\}z ځA˦Sj4XgWW\znח[kѽ\ES@#F  NTi \-EJU.(X>=0YSʴf?TN _b* @12,%z{XYʀpg "r9\;k7إ kWs]?Ǽ6 õfCrAa!TLa3;|wr GbǺc| D1noz@Yd'8x uD-ZFU)9 ?*~ܰXdǽ6A^A+_Z8W1>=%hտ"1N#iQHa<\#byUࢊNᓔE"[skomKb {+uHM٦VƩEhG+aӯ K\Y an =>?=Xh}2׿c/HzafdyTƤB [w1wOS#Vۃ[ 6Ob1r8%5ChzON9ij'8N]u2o$/\[#L@{ ɔ꡻KI]cA=ћ߯(i'ClF_=o%C9jFbUJ&b" yF6_.'XmQE ͣxhcQU)5"AB.X20xedk*ozܟ.)Ezf5:yϨGoT%j.GCGӬ>Cx[LRd[7U͸y lkx[8?pUwN)kxUZ[ w̞PQpyhW?f8P"1)6C=fE嵘y :q ʪic:Ij~y7 l'w&tw6f\f&g\;&520\"ᱪ\>o\=5XkZ-Q\*a2NLfƭ#pP7؁+Ӡ@'YE)x5s}̬N7L)Դ=FiL9zCCr4V%1QO&:Oyx8vi'2UiW%six0\?s:SҫLp)-r j^md;\FCa}491n^rܨ+Bz74k,?V+>dgAU‑=s*`=q2HD:bH??H $H5뱒5ourr2$@㙒ćZ_n,OIK{p5u0όm[E ,ډXk=:fx; vFH.ZaHX X@sI\ pٰ@|ȜA$nYh"i\6$vf֖$2}kdBLaT>i(iC=̀0Ä8J pPAᴈ& jeBR-P[?x(" ;ϴrx{Yob&%(>]/:uvCvBH hڈBٔQtӞH}:In!hm~cOC^,YB7k:Eͫ`J %D=e ֑(Yrŋ$a DڂS4^-0.WwFKwc~`2|i"~ۃk s nMT6a.u'zL~A_͟FN&p:V04K+J+]hput`Kqӓ~Xv]VOA_|WtPeV A⮝D[]Wk ~r&32H|L|ؒ-r!?VSiط$SUj5a3zh{66zQڛf [fAkۺ)p(9$9f[pD'@-Ylhl7\VZoUSP7W~LPW]c*G8Ӗ3TXSܙ\{lF|&afd=r}DN넕]oz-,>q:ԏ\F&U?n?~|GЛ#5:DU*bެkUGc7T"-겚wɮwDkr4Nݽr/>5t6-r"|M [Z_xuf7?! N]zMoMF C;Э恪@݁ dhe)n!sZ[i8-bG)PWR  >YAUHiS*8Ï|v4 >ߑbNbKðQe>ásP[ ?z<9p@a=tòv) vjYo(:B7ᩏg}t@Ҋ]I໩'HXlUW%/ouq)+7a"Yp \WG5IO:L5D-n{r{[Mn:$|PmGwJ^^|".RD6FQ=e =K gX%IӴcpCY^=F`tS$dv;8=Gcr Vb/:U}w)b^ yS)-A˔`eIX}VrSEU JdoI#`H}O]BOP9 0B4#DD$jiS}jj{<mbҲ)ݞ^U';m=n@e9xVI'+qt(T4?,эd~Op K ǡ;L -=[NMlѵd_t+{`?u'%iCI@ԉibE 5Mljg Di߂VrrQnxNjYBа{s޿毭sE@b/Rl)K—MRO!:D+3޴< a'l_"&uCw0B 2@}-^_hݨhOhhi!:drF%I~hon0L`* |~<1G=nCw,;\jMۏ(u{lKMFh x*ʘ=Ԏ:hqY_䆆(?vyF떙[h$l@I2F7]#f𜏮MCj4y 4pФル?_$X{=hc0kI3>51T4jE#?15Gn$nEm7iEŬjp26k4*џ@[)|B-LYQ үTٻ0]վǜ\Ѩ-`s/W;/4H_N|!‹C^$m6ܢt4HIl8 ѴO_@4T8\nׁ3s cX fXX6dWjU>ߢ 8娴E&f!e08BeKARH9vѓW .A?}H f ӴBVaP'} N*Z#N]> W~29PV?#)zT/z(:|{&ͭ)u~*xt9.uu0Vvrfz&NC?>FG5˄nde| pxe%f'&i̛;2n6Mclx:uCNiAv"pxUZ[ w=҅]99yˌ1+,LB)\;n< \8M~Ugp_ލ&0n݄R >O8hSܿj7B7ْK p()^p4F~})_4dtzG;c7Fg(GhYq4ǿj q0FL\Bڅkmyf7srЋNt" m;d8M:`Ŏ(.ϭ8N6!g!F_,)β-y 'NWsT>88CW6Ҧ2mn1'm(Ub0[3ou]v!{Лn8<`U|ˢơon~V]9z Hz 3 g_l19y"D͜ Eˏhצڜɱ}ZL#:pc`Mvs}Y8ϧӦߧhiG!>͑cB0y6 jͲaJV\ JNӔ>Ȅ\ _.^S-3 g2l!3cSg\Ga'p)`)O4ϣ2&;9kL8۬ dnB_@ gtYq"*gH".e PDyJmwuFe^|Y|v1afZYeȜ(I+.iQMKv$ H72Z|!+Xdߌwm8Vz*lV[IZob$.fwC ٝSC #ߢ#㳈2D~'GL 7]S; e5{9qb<b28b9oXF5Uxqpxͱ]@ wYH,:+FHD X&=L D-AfAeI1ߍe骉ipVI E,υP6"*v*bT+JX[8lT&xY&o2VsqJcDdg]anRknXݺT/Z2  ,p{XVW\*]WhUΝLcQ||DLrDx N T9N'0qf6߃δ1rD7ͶGw5ȭLZǹnJT񼍵䆭)isX ak&~ve-D/cXY?^-= > p"0 7-χ [_ )68OTiS-w|?(^-B1 ?^~Xt' ~Y  w7u tarT -^]]fpH egaw]fRn^tF*&y _ dHKN U'MWa.P3 # b.8vke@Ȱ:,;"7 ;ywKr; kk=48..:dB}kvERlQ{Xi@C=砽\A4h9ĸhC bReqZk򄂛ك4)Sx#o* v3:02[4FXt֩`Q<ֵ@V%D'==V460n6*vwGtv^T-p8[ݡ JtQ35 W#KUNכì,P_V~SUoN5h#>SUIֱa%(劚~+t&h-[ϼxLA˨U xv}^׍TGV(c:hX̯ Y 9kR(.ev _ hDh,A Ao_#% md(; :ΦEWD.Vv_J LڷL6nN)D// ÉPDľR?vNg4\2'H[K4|1~ {xuv-lW}#'g'VrH퉙 `W+7Vp X\3z˯9-}dd?D~)1-(xk!is4n̛gfܜ$; ]lPxka2&FxUZm,*QLP8 z2; exp;ԡs^Ң epB˩!}e-ˣO-Ew)G8%{bw?d|绘/9.3B cs$Q^~שLj0K@Xx"OiiL.ab9N2^vFAaкsCv|O' ]&|e UK_B;Q_)<`+0g޷pDB;Y*؃R#e9Lu̜ 0: 0 KgcElJ[ k/ݬnYmsuea];}6֞0f3NQ֕"gE%2!A-d'u߱Ƥ@lMֳO[,'3u9T{*(5bjp ]`әL G#VFG\[!bs:Z3}S7$lf)#<7:V1mlںz@q$F Fmm]؆R:.Cܦ8#r޳_5[tijo!)5QJϿԎ=q/JO.M/CֿUOo~vU}-f cY}'A<8{D)@ZqG4h UA#^X m8*lYČh:]Br"Nqfϴ2DowOM,$n=2CLF05w7t߻w#!- T؇`;J$4|yKFh0H0X6F#4\[+=!W N[$@1fF9Zl5RSU%DfĜ]Li rHMF`9.=f8EdUvtP % %$j *nUb*_*#CxSnIODq) ާ}fv+)xm|#ƖO_Ū.v|j4]ҵ_-|\E(59P3]BL~E+rm3߅bܭ2M["axv(!aØ*OH:Ae!S?w}nn:Y4u~ .NpMVgAD \A{ ܯ$Qak*bA.tSMh0EjM@_NUuЇ'-T7j4>j2w M}%d8۲H!0W( %f*acVKǾ<*,zf_$jRL.jΉ"E^VqESyT#ODےtc\nvӈi>*RNh:u`Xɪsvh_}Y/[zQ0|?@a #Wuk d:6'שv]wC IsOm% o/x5f"Pd!E>ٜ)e?KMGn{?+zoZ](ۛ dUL0U}9pWԣmuy;bf5u[;|UGO$CT=ݪ N傧nsx{v'pz`ܱbbC뭨p8=qji\UDq{Qx;Q j !HVVKo Ϩ=jӂ({$h@Keu!Xs˙:׸eL"~:U^ӉrW|g=!sTRPb EKP3̧&gʵ4u' xo@y-u8w5hAٳ֫{`zD5r{eͥA4˜Yĺ.K"Wz >j- NAv qkoƭ `WR ; ېAֹ>ぇ[B w@R,C潓 @;>(vL's>x3꾝Ev7˙gf 돪C_FM"2[xyis %zR7}ø lxipPvYg$!>xM[ E3$JFM_W6*wOp@Bo9+ (1yĚ84 ©~/vf.>Q*%)gWb(vU4 LjYX%džax-Rʼnb:A!QNlH?4yx uZMkzQ=P4lݰcf&pVg$k6yh-F(.鈈]ֵ!Z_ڪ\WCx2= Ũ AfnY4Qe k ÞKmJg:!y(3FdП'ԫ8" lxDn5n}?<ۆl nSMm4G7%C;(T*xJxYZvmm}5~ = xCmԯ겥}6꺌Xjy5w.v=+;cc+/[UJ>ԪͰG^ն5^V1HLb ?9>d,~sׁH{,]CG^qgZ{ em)O5~;ƍyH4m'dik"[y;+~GB7hזuC'?*k0La('Qp7nܨ+Ih*)qA<<ƪߋ"`Aʏ9@LXQ)w"CC/2yǐҁZ O|ICI[XLj&l> A>}LQ~WJoC4<c&]?q2%wD1GِaK8Y,rnghyfp& F觳qqլ3X%Uaٚ+Qx|=2z*׻aVAC3e@dU8ϵ<~j։pyVq%u]m Ѧrd \ZicMA8 v< fqxU i)C zj=AƋJ]p`ͦrnqWU @ @_џڵ#'POAP`mtd94*٧kR˲h 1v)bF8'[@7McҦ> ߴ?i3h֡y>(rH:*<(l})3,"29WABT@&h`l)b)R&7auo=( s[D64ܲ)Ocau`r=,Y$;~8 _!D >tN\]Fw*pqP c-. ED.x?n nE$,vDߏ8[W31HR:~O-]gXJ!"E*pz'C*^@`n8L*&WZ*Naq3-skhr>58G jNuBެɁT:I=v\<{#hI"H[!}j?(*ݶubPp'}{|#66gG>̬ʱ3GGC"elD?Gyc91~Լҍo-e(o4x>4ŏz.>3o |9yў2;Ьs/k>4?r&>:j*pj̶+^T3 *0$ ;,PTB>Cd-@NVc^zIaԥ|V_"%."qs[~N ST2 l;Mrh .BЁ[!3θ}}KZ6#i$֬u5gZʭNR enfO>ŹtG ȃRcԛl)(3}൧ĎT]/Rl?Th4%,kAgA2< ~FpƏǏ˳_g&s?(l~ 8Iw~mlT煟t脲"Ez'|(Ŗ`ߧ>՞6Z|QuJpL F,F x+bk SՎ/Zhn*1Tpr$sgt" 8ikc|`; kӶ<94fg~h? (zy:<h*'Yt:N k [_Q ~p6j86jT,&_$İ۷ydaagm/6vd yi4* sm&4ILvm;e/{mX)v; tі{JIvLJ7_S[- ^]m}ĹC)%p@QN!rɂtؕvGƠ #se܆ġQ<1r"p.F<V+DDHNK`A028>^hȯ^G!;,*] ~5Y1ghෞ KXZa /3/ɿ],9~jZo{ &“o4+iuZTw4.Ĝ"3QVudX$;dk#s!k (61q jMh+`1}%gCwր!skۓP'1!7 HFSB'ceV?BMz#VڄfMлKϊ!za_v l۲Jj=~9背jR;.r b:j>\:=D3/m|!#k?T>%m~)˝aR8 od#0#P;Z>@%gB 4?ŘIm$ҞPr8^Zݧe|qїTsN^ mi؆3f,lI9|wS ɮ`$QNRT_ IBi E57NMJiܢ>jHr~rطeZSW0d/GtwF[b1+( Q"ܕ9j2}H!r"UX,6ꑋъ (S U@HN;~I/LS$vw)ыxo8%pH#Nnu+Hr[^SK EpǡXN@CR,BC0N֫[uqLRqm'4ajߒfV$I( `\ժp ȉZ2sJL|eGEN.= 9LYޗdt!fPr9]Dۊܯk*@Уf/JMC~@;셱6/9*6' ʝ'!3MG(# vLlzG0eUܼ\֋ Y ;Z?PV?͖,5Z_aooB@k=jWl< EuisU;hʈN ;C@Kf@mfQrF?D 6 KAu :Ο]<?^t 1)7ÑL}7l `dgmϦmcgKm@C^7w`#߯@d_ ũ#]R/vJL"9@}*‘M)rA H૫R~:v55-d[>5]kLogXdl#ʴ9|$K"5 <- GuEjI5ɐ-UF^y1E4\SuD` FuxtH%?[ :64 &Γ[!Jmũ\ԝޫX*8eI_cz@?&B1`~q;͇)]A {->)-t4TܟDXz ;*C4&!(ڳd,/Ҍ܁CN\9D1#P. <,8G唗崰6 A_U 3|ڢ1|𬋤ޒȋH>I5qYn6V$|@nE`߯oMйYlu|?P,NUMW4'-=fdy zhGԓ.QiͼE׷2`} WHMKVh AyT,m5tYd ΁< O2s}bf 11^`/+;@,tv//zC*w VGEî;o[Tq&ΪkJ\Vw9f{epO?TxWW%N^K<5wYA9)׋w2yD_Q}`,`zγ $^r, Ժ}:xTk`tXGYFn)+NP*\;SpPPMN)[A)?)-ǟRa@~ yﻧ8D;I3tYOhtbiqKY薢6Uoo2+o|%ͫb- fpa|3'Q gT>ߺeݾIŶHrSH,ȡ)'5P%OsE&hf^թY\ێ"2[ߊ;\ kaG?/ыg [%=AVdmc Kmk:||Lt Bþ`᫣qaa|i ܋/USYIF6+#MGݢO2Md)i'@;ĵnw0>@ڋ+$F5'0Vc$44XC}xvCO e20#2GGN\#U9Tune^5 ;>QQ_CyD'(rY@:}ʡzܢ+IWv&⺾;\<]]aÓ@qw!)~u)- vhiCҦwfI%KPx: 8gn[ҙ9MDdSQZaV5qr4XʰgP#.tQzdM@kVW]μ"Atj5'+ FwT hO795MSeǛ-$k٨Ӎv yk2IEPe rTHDŽJAv'w9SL4 hf7Pvb9Nñ :]o$|ptyit*[{SMG:L< ?385ћV g@i *==4 ;SO&>: K][:v)vCc>!G-b:ӲpGcd4h+i C)ySVS*zNY"`)-oc6iu1CETE%@z&8@a*$AOaO75}UU&-!ChO'ˍC8J1i [p۝IDž"_EKN+{Ļ|28{jY!] \Mc}ANmh}tՏ y*3 /@,SSЉyt{ v|2XWQ *0 O.Xϳܐ؂x$u|.z1wtfN1OM"+D? \H̟g7C,M(yίLVW#?Cu0p s(1=<GFf~T u*eme般y"PڗId,)M*.orrY6JNĜ;e4~dEp[ s & L2冖Y(EON=O"iekm^N""(vqw?.e;z+ctLz|E7hnu|*;wӛ4;(r ѡRKwxW7uBE]N,oӊ1fdGW\{Rb{gb:QX_n%GGN. Hvҙꨚ*[ѓɅᾴQ3rٟnx#Y0XX9t"h76YεibR{:ڎ٫]o!e BJǧ\v.Fw* F0[mW 7h^誏c߅}ij͞dr׾Ъ\o(x=Z $ ++窑|_"jMjӮr7 td5"؛ RG1)7z@?A;FfHWri a2Avy)8dd5``r>XY*OոK.U8\t9: c.LڮQkcM :АH)wie%pirGxg Zct8rxjv/p%9sR+6r'l^&4f, l&xjea]b#xxUY[*w=R(9O Bx$m-٭befw'[(k_=x5IZWl9վfT&,6WWaۜw쿋}vFW>U 2h29#,Gna)YЛ*v#r=?bf'kLYlstz¸aʹ'`U.d[o=|F Ȼqy}NC0wPyl_YŒ6Wxv[4ٛy,:߯ÞV$k={'+~`^߶(K[\m#*bz`ԍX~ͭ^ X#vKTr@u0Fh^Lnn+Ǔr #64-/|KZ=8xy̐œD |L;\;tPP-~D)"kނ~Zb+ďVcqIv+Fk'vG'82 69Y iŝM]p*]hA=-*L&+Mt1ITL9mkmV6Cޭc|i^qel7mUwq0UaKln6Z7A`w"R2  KYrUbq tū1um-TL+j$VLHcsfw4lz6b ޼]8GލF>l;"jk >.2` bRN[Z5 \,PpJ 0Lvq#n,5tMc6?3uAjH (F +UTv[ ,y l_ Hv/Aѐoc pؐJaC Jl&KG2RgK߾~~'iE;ٿD fjIm϶PGxjYH`\֝<3Oq *ȟH6Gm@ $b ѓd{ηl@ pFR5rW:g U69wKݐFN>l\)|mdLvOÇLg՛U -mѰ_d~* M^ZtrN]'0\bdG=+]DGt.hrG&PNN؊CD%ݝl_P^(+9 knZs ^5oGHAMPRB~cntt!·/vPVrKRܗu"7*y3=:5iKcӜ^Nn"/|NzM57Ź?m.,Z~X/Rc/8a^OHy4HwkVceލ}2QgIȿ)7X1z]wޢ B$}d=,vu 匦 8tBp70JtA9 +z'oz;Rcqv<34NI& J$ѩ#%itt:X:9aZ>vфv 歷$HQ]AP.B18'Ź0Gy p|AnqNA&*+҆|O_MŬ[MgU>U1pE[> o$'SebPayЄghV,K_@J7F-prA #^z_y$?H˔4kOQ^}"db:ǯMm4 8 /iOM K7%>$5""<,WiwIUźLz*,pdj NvOf;7w{pI: u7$~>:$1Q!~871#tUZ6elJI=BPj-+Slv#hrNr2D*ɲw8[VIYh[XF^Т2B-()jEFzl[Sq&o^ q((w> 2YpE4s$K^XVZ=xb~L)Q@R01 yeɚt|)܄h]XZ++{UYC< XA#7v\j ~\tJbQHY@N"x)ճrVNrF6uDlJcTTdw]άݗ4Nf E[4BI,cx䆓.y=Q7ԟ^v9৩^UpYqП k/ Sd6n2R{XW(+/o&^:o d@am~ʸ̜ Ri%Vr10[_.,p%(?A zHt?bX~ҀX>`Ys^XāLZqZHa!0QqBr4  Ak9Uhe_*i[ڕ"-$}ry</u>HZY`@,~%L-̈Xzr!tu-|U UCϡaIl]T >U=\Hڵ(<:f4UOh-o3ʀo#\aAY&X<\] 㿶]>rYvY/V밲СN#ﺴ\}Ǎ|>Z d?_xaC*5Uq0Vl~gc8r XF*lx[8&x]ZYb*);a`w)D+%EH%u̼T1[,bFE&hh|}a5Iwl9e@,ħ Ū#^;]ȶeQƿm ۂjh8pafQ,bY&Ri+{0G'hjmdV$b(/Ud^)qZu:,(GҶ#9.m!3[(7n!gS?oVo^;R dlU^-ӀfoYz}Gv{dh~ʲ$sV| 719RS9^֔vl%[r|.Fxml5/; ZvjU/Flq1~s_L81>BK&&E xXn;YpaJ%\)͎/>VAߪQO?{Q {G}?ѧVhWZP; БLVlC1CWO}M:0 mў]8ee]K;f»mä[Ga1²Hn֭ӆgՑ&*nMou=h/OOy˄bw t÷Wʒ#T.x{z|`[^?XUGWs$i &ӷ=Z- lC) &Ib6I|ݶKVBҭLԝ Gq )|s5Yػ[,mu+bQH EZJ|I(۰mY|t3ew#BqI7.Oաami ~'QҊ)xb0J`r^MX A hlI&rEtH\U`%AhI]x2{Soc"XOI{t 0mjl.@_̯txA *F/00CZ%܏|IL_I[@yEA̳"s0YG?W6Km*fry$͊ycØ}]Y_Qϩ1:qL{8t'}`xOr]Pp|?Od29ץ&vNH Gw2` !6v0nVHa;b c]RieAףSٹ,z#Ύxĕ5uHi,>6@A*Z;$?4>eC1fˇa0ZC5(0E;A`  e q\T_%lCl A<b{:!ԝblzlɍa^|q`Z)(}#{Ԏkڬ?eȆ=Y? % tDad/J)K)O4+/fW&_b1 H]PX|(%qej",VI-;uY(,aK1ׯ&)'ʎ[:2e.y20L $ [/bC3*G]9X%((N%(WX# E0'H+LIZCRTdR,+ͥ>oV@LYK =q %!8 kIy}# e[ARnC+ߊtz$R)64 #zyrQBq*t5v!`Җ_ܲ&ͩghIpTieJ/KMS]rBgX+.fRxsr; zQ,{&a쐍0\!1̴V|4bq-$T䉃P=R9\&w|6`snJNOH;#idSk<4ߤ/C| CRF~Ykr2. (k#iԱt\)Ԏ囎wFs24k XK#v)x'HG̳x lex b^$GM-Al_xZj9N Yx]ZYb*);a`w)D+%5!r̼Tn1[,bFE&hh|}a5Iwl9e@,ħ Ū#^;]ȶeQƿm ۂjh8pafQ,bY&Ri+{0G4yv562b`ɲ K)y+%.UQâb5T]>Cf[(7l!ij?oVo^;R d|U~ݽZ̳fх~%ineY]M\cC62( s׃5])[jɖ*Z#}lN]4f[+3۶qE͋-sCZtՋ_\_xp ra19=fe Mg/./^ޜDXh!c(i>.Ae~*Up͏!ݠO1>.8Ʈ.QwCG2Y ]Q*5SҁXThjǑ/+z^Q7m&:hGrn56 8`{x%v4=]ߢy[&_=Ryr\v$C3,{mJGdnCr^5B:b2Zh)=m.BlfAzf}njWo-dKV@.>/h>O5azv(~(k4DsHv޳VMؤ߂=m07= Tl(@B.eVvHlXy+ -(g9QÅwA2 㐓cLy4ٟ](It2`G,ڑZ,W:8Ee<24ORW9q$ T/g**U'Q}iD@(y!X$Bi`|p.#GfML"f;W#%z~z㮔g‹5Hx6dNl/3lV|qeY -;{ cћ:V =dng\G($> fc'QZ2IjDiPF+@N_ٹM4{Cg{,Nfߟw}zT@VpICdͤ:30Mq9RpW pzB i]喑[>(3NXL%cXNܨtꓳۚt=go9ܩO5\H$U+C1ƺ;eQ%^7Ωwخd|LJw4+'?uI9w=!08Ϝ2> I0^ u R(:zMߤ@්½+w 9!@z%e`VV kt=:N4`\gGq#: ~U\ vwHW'uh>C.-&DiL` vo<0OcGPH! @'.Y௤Q80ze*]BY嬅{v/UdavIu?xbKLџ 1ZTYxnLv5Dkɲ %Y U$#In˙p~O cK~fIk,)JI$8ԇ& B4A/}@Lnܤ&f8xْ:5"2!X^,Յ(,esЄEL*)~@|j~ʼqŸussn̻![a]qCIL rs56]P0춳SԼ bmrwYFCIN?lzh@f`*_wcbqUFQ?UU3nyg1%IXWw82؂30]զy.o "Z%ke]{ut]pCqٷ S ߦ5֖mGkmԟDRu{?242>s;}n{Z/س u e~ksѯL'x v8:O@LjMCp?AMe*J֒/jޅ~N\4P҃Xz#R9>;zIC=W,6F[ ^c v/PUnT:o+GW =aoY(}b5o՗ګy|#6sԣ&OȜ?G w+w+:b?? *)*><,TK;.6e]TWULOvpz檟J|L/5eGVOݕρS(m ZYՖ9Jߊ6EtNӰiV8adb}]Μ:C258rӕ'FyeowTNȑԟ|z~3YHuh /NJ`;Ƒ7xߪg4i1<.k>8]>9 ]<3Z >Љ4o/U1^ &L>%%Ǔ9KɻZəC. gVNoY׃fZFZ0/+O4q;v ӄ~cZGy7ฬϕLfw%{zD@)573X>H&4;.K@ik'9 *&qvh~>RZo~.~`;xd_D^4a9 eYr z)p]BW^ѱ=,IbdB]; I޿hzF;I4RI2Yv>dwjWÚy"}<(CZ9,0+ŜEIޟ̾Ⱦi,@B1d0׹L"? pd0*TV5lEh4pJł6ʹ2*MWe9~Zsk[N\-?z5oYAl"&arQم;/jjxYڿ?[;'{ֳQQmWmseܭ QNn fDylHJW{a"A~xn7+/NwPhkT~3&#mKz55[W (rU&e[r*)콳T -kСGI<6`O ¤J'n1Y)]wѲZ)N髇fj~mYI zQ8*)d~HwѿM)$vPT:zs87_ӏMM?L= B들tAeIYB* O 81HcІť TS.ʓ*fF.%6bV, 徱ik&fEtϊ)p8'T?v0hW@* -KH0|]S^5qM204 37Y:qae`x͂dVAlj`:8r'V|CM<)=c~&M1@'DI ,ۀÍ@+5$@<fU&aY*6t ;F@ڴLQI.\lyo#Km6_^%ڰ%urˏ~kTaOs˞?woE4iZ{ h>V!Gmsw0pFΩ‚Z my.t{TD4>G;#cN~PM9p9م1o&y)eQ2s3䃤)W/?B(KBGSgt]w̗i/*ҐG2r *=B)[w_|~=w`#8&z'Sн7cmnzJ8}32EO;g!gB&ASs3n f2g"r-]# KLP[iVʓ}Z-̈xLRQf2o_I< 5$';l7װ˒u3=l?S3,g{*Vv prQO2/ 6>VKhK`'?4LړAnH/HEg\ٍsv;}Ye?\g iVHójUZwȆI@/1¯i,U"Va/]n7\W^-i8¬C _x^;yK^UjX+rx`_"Q  H^Ǭ[uoG2rk2EYzNPz{ej3`#h~W@vl5fņ3yƏj+XUcZ]QniTS@݄EDiuUiQuԺu?0bN[~&ڣ| \`ωVZjqkͧi.:Z%XRY:C:jPa;5 < sӼgLUV E:M,$X3r%M m?,^Qhl1?yp=35ge9 LL[zd̙/=OY5U}UoBXvKf51g**[޽߆r2vy)wz&N)ECxB69D[xZjXߨ{B*Zg3&/̽+ٲfssttaZBfp,. )0sIɇ^Y rl+yE>S\f)B`2>/Z.p4q LK3bP^Ps{Kk"sBի`=cK |Ar}Lr/NQXn {қ_zKJUhcSC [z(LS-P!Z'.ϚB΁jXi0`nI-Wg noq~e@h6`h}-&EG0R,5.S$]$F-4CL`S;C4ZSݾTvK-,dvXFtC sHX,SsN.M6pdK2/ Í}x6Y '*3JQٔViU#S~gimi*nQ˛&uZO5$YTy%7 iO˥OOtrE4N*#3Մ@CW0[SMbbVĹ% OPɩ61d"XEg=c{qrlߤcSIԄ q5FE9WS]@A98|`o]<S+ar 2uc:!.PB e9<)5hS2:<)XGwWV-4J:let~&ű(T:>#q,sfYq?]# q$H#p/tN5,O {!BH|ꌪ[p #DetVO^uD{ Xssx^rz];Of)36Fw(Bߒ1 9 ؆:_ޑdG;^~Ơ,T) OP@etr].k)*xt{ čgum&iQw2#[ơ 墕I;t }uҫg7śVsJyx݃Æf^,TUm:OVSm:E+(曣Ylo:J{"5Bq 8y>hhܣu}5_7OUN0T`6V^2X:$[Zx;o>M7 e0oS#A\[͈d-1WLmP/KLh$ݹD.0[A8F|gv)#B ɘSJx+~]~ }G 61+Uki厠ͼE,pJwr/n Sɤy'lR>fPt/}8?oPUin GܐsQR'Af&m@,2Nk}aȇC52E0)*+8['6Ή<?#pq >(;RQ9=N㚇zId.i Z᳕kzTi+h|FxD5DܗZ\zN7:?X"P]G(^ Uhv#+hcӮva8!S>xЀ[vEb o#ާm#q*}{+k;Ϩ l]u3N #MUL DRsA朤19ToIl ~ )jQy7+]q)QKI5PZU]AtW"*]9s<('i;놆nWxF{wT[WNNAtB*T<`NenRm^VM_,vʁM6v?(Q O9EtbTL՞8 tfBci|.p {p6׮Su_I?!xxٷ(.J=4`c^O۳.L"ujgl!"Cd/RrtdSe=iBB]Rt+"vQ֝q 0ZoT׍GB9-3B~LyQ?f [2HD z+KYv;3Mz#̚Ƥ\_Ï;'3\ *U_ݕpU I#zg){x1PP6:ƫ.S[$7UN ТLhAct,\$8ۓop$CydQx@?0kT_3j2Έp-y @viGFן_X95uy}XNZϬ:s\ 0f}41);]oECKR})Ȏ?I倾A<Ү;7*PgTλ"d/%mX m$ .m0SfCm&3qE n bl ģ/ :,(Y~E!5){L"" ̜[OOs x3E}斋}vL⇾d2)цTȩb LvT:ѾL"s_5wK1V!(P>5PG+&l%`29З!d4$ P^T2UC$:sVư'&rA##ΩBFlmMӐ$tȏ^ 2a_ARI<ߔ^J:ӤN3r^>d]nJ`TxCbV[Hc8ϸ]<>%u6qo}ٝ(>y]~]璾xyOY3 |WҲx.׆SG 73I7 ߌuwHV2v935!Zݞwxo}Z*{/TKC}㛚 Ow-1.-";ay%| %A)淢߅nλ;eM]x +XS+6/S0| |3 x]\k,*f={2.?U{kΩS Gq~_sv{ZR:r1)W >/u'U1JTϒ&j/Yw=Pe}r& ?y7M;=2VO\s'޽qu'f=5뚬ʡXO\\"X/V"ZԶ'e(6m, 'ge{ςwfO/ B\||S@ >ZNwT bfFyп~w ]}ÇQ1ϓ2k耿Ww/]W|=J[55*~E7AEs7">=c^ Ϸ9ȷy(g=~3j3־.Y)E/ wU{d)e ^Q8UVWKu~$l=ݵ%^gF˟~G_8/(%JK9cؑը[ 7@}ʢ乘_nw}T=vy(@5XO] h&_~s rs evBţ\v`(~FIRtПyQ`I;V {[֯ ><^D/ RB~([uN 5(^n>% H/.?քT@H+V`ڷ(x^ B}zE,ڀƟ%ފ0GwvU*0jrV(H3%M Z~M1碑B$0 !:L@R]P l/o{;w ׻(+A`Y {ɳy2 ZR &y.KJN7.?4yTӯN$Gټ_/Y Ƃ 1cVWT3,wA3J_/ N\HA&%U!O>DBvHxMPB& 'Ӭ<`օ]ע)LSdi%;l0-~,s5ɂS]w U/M|Y`PDU޽\ |MPދ<ZJ.@62]?v#׾~ru0IhV1Р7W #g7D@eV`<t: rK?a3*|CJa Q|C/785<4!!dgW2A_lG۱M(8`;MV`uL OBWԷ"uwe{&U&ǧ(ue+0NE@U9"e8hG&:Fe rpRl 'n b_/s)@nTgyv/?V9kSVx3anِv}ǂP þtS\= c.x17䛢le(+v(3CIWoШ1 E@==&1 c6c_=L[ VU< Ž ]T}ϡG+e?q։Mea\lS-|h]ED )z_'!oJcfPbєUVtB>(jQWm4[bɐ &Ѽˆ[Qck8QeE#9]f5vICYBlkN:C6U2^6هP3嬐6_j KNFa&Z,XJl)W(':MÞ9e[I>ihuFGÛ:nr[Zw^EldrTlkz]pp7fړ43mMv1q0DA GA̲nѮ+mkYB/ 1cV(+ڞya)oX[Y2-BX E=!"d4D=6xwMxGh_`J{KHZwX"OBJl7? ")1T2W@6d/4$¸s}rC&X`brd3,--iZ O@:"s5L*W(LX d-FH QwUcJ6>0@5&-3`n/i{U5J?-]Mvk Si~ԉh:v;\Of[nuaJm0t>bPp& Ek!]{uko V?ya&WhRc-HMў! Jb|\ǬVrg;'7ZFh8 z̟~1 Jnsɺ:d[E⑿sQuxi;"r _oC=2(IaVK!W (kCn yA]@F%_P7`tC Jgg}XW4]uѫSh](k!#/+S]vhW*DD oz.c^QIQWpa"[VP`6A#g_~Qv)~! (@Zo ]|o^m E dZ5|Cg@6i>i.ӈpEoVkGc>oe":66h#Q3+_TjU53҄r0[J=Z=/Fl_q5R?XoXl84QH 2Iٳ+ %M` hmn!0 1FCF={_=+Y56fro5J ל fM Q=@Ch-6R0}YF@1IMH*r0DZIҾ{ E|o׽(l.b}oJwN /.dN '@ % % 8K6ټ 1oMb$R_XߴFcvVda UGqpiܘNlNF\FxSx! jA- D4o,sM| wt$ԇ! @)`{bJ˟g@SĀU[=8(h(gzʤ>gt骛ATh݉׻^΄5oٕ'=+̐{rT7:("sxƷ&NYSSA|$jdőIa/"NK<> H?IHr6=kBxL g /tb0~8Nߟ"wj(*7 34,nKNPo|Q-ʉp>BZSmU4J1k4|ѲlIu֏L ?1IMYX8?a qౕ85 XH#+A6S)83C1nhB?늠9Yy~{vu vwꡁ@sljN3ϟla_~nA ̧|&*:Q/_\a|t5JAuq1/E!1D}%z.恇n KƘn|bL|)˸Ȏ7YpE%n4w:7sx'680\12%-t<[<3bZJ5Z. JF6S60 Y1\wM԰znM(L(N4kmfVD]L3h`NRA'laŚch1^Sum(ľ;DžX>U;CVӿQQ6NPl ?sjŎGW q7N[u bQN+mdnS'5?o<faw6 }'UboÖH?yԗ. һ5og޳0w&qoȫrb ̓;n2-H{}!k܀KNrvfv{tJDqpѴYb fBtqkەGsBZ9>%[hގGCOhPV+ X"=9Qdq^pPr=w{:,#RZQx N C&m8.!gi/J#o(`Z*V\0bsԵAGdW7F{+nUl{ n<^ǓEv`J&{?= Z\ť祤4h  pNWMSDHldg3)ztI<~4f9ͬl_:ᭆډ8(<& [0>̕qJɘͦ >a٣Vۺm"c?Dʤ W\y|&r~ŇU;V0C16̸WXn<ѨW.ϱjkxR!?4rr`k-_{ȥz| 1`׸_ݶfyNcRT3NWn %!Qqd>Hbe-]PC<7/א !Lj]㨰|'&`'( bBS[;ʫdr)*+\_,M#:z?>9Weehq}$L#s<$uI0.llj8ZyN{pNi+3NWGdsᖟŞ<;x I1ϯ4Nפhxp#AzGPR~O#J>|@ -)=z+i&9;桐Z;V3ޞy'FI'eoPMv;,!;5ִ(5?)mϳ(wrM6x~*G]R/ur~[w5 |ǿmLr S`Xҏ ^1dOhQ΃k: &4q +Ҏ[+z-[zjzR31Bͦ36h0HjRn_Nd=5b i $QZL`x5xά{+(M4`g%YS C bzsLRŔ !TmKsNVlC e;x'; g$ :'#8VlʚoۄKIc bl|ByV#'YB^tei(_j_8_ O[㘺hQkK832KT d1f *f7ee}y~V@ ([/۷9Kw2Բf!2EDDkj_l2P&grW}HPh10%=XK+{JнeGp=دc IO (2v!X֤DczS+M'sTBZCZ+h`gSW2_hcB/r*3(ٵ@y%bu/ȥ26؀>OA`7Qx_,m+z"_=.1,{23VIJ3VM9`#7ȫX݂W/c oN}Q:bQnCAl-D^(~)x$Bl41ˁHN9>ϘNs\{^8L^pF\9 2""J}: ̎b_*~eOh|ҙ[ Vk'o? dluħ1FpC㗌YhZ##v&ϱ VhS还FS,'JEVT+cVm'7ECHOQUA3C~c~M6)o@;Ը~s~feLR13 _`<=c6~;?u.N0Spvjmd]6'D P2?N˾WU:v/<i  Bmp !2uC+^u{t6 eh U5!MRopi9ێ՛nVzq %~îWVY8l&qYL9{41|7qQ]ɖ&Hn,DV1,{-6[,~b-}\񁃷7%HxqDXPk-CԏϘj3}0o~Iاš @ʌꌇ`}p3Nb- 4f d>flKh,jEǗxR#A~bjǧ~ >v,4K> Uz'3"w^#)Aw1cX < e\'R #P6+a^6J+l4R4-GT)q Ui~G(r~2__ ^x< sDafw2҅L(4N42M\4A|.3Eu\,9/ 1n}Ęc`nwf}!r̆Rgrm m>:8(l!zy¤J\C6x\*ϟyw 6@ y`+gCaݼl݃Y6EH6Pxs6٘ -۲eaMs#˷3p6KC$,%9k>@um![φOqKvr\ձAUc]wr*EGr$d؂Brc2~}h}Jx3VCw_o 쏔1ۘ 뉶ɽ3JeeXf# t]ʋlH۾+AV cycSeiXe]ѻe!}oE U<w֟h#We"7,h_˲LxeE#E8pӛ0/Nr7r]#"{8Jo)!n!.{6E` DY_Z((fըJXg3?g\búaRb+zHE+bϜJW.NXmËBHJ<:0Ώ DNÀ CfP(/4x_2'`,AvN#g4'n@ EF>j+gx7'[MLg4.9V&~ؓ b)aE*G-  u.h +V-X" QiMڃx ~Jm\s(l2~BBć!%/)^,Ğ,pl^XA,B;K{(ށ(=br,L0)O@"qnq + m 3uN7&ׄxXƣb21/ BKHjUM*0@Qf3 c'/Jz`_~VZ2l"! Ї2 @͝{R|u2Ի"ֳWip5a5"_0vۭ]H񦾞,izwzu~ip%cQect ʺn2Ģrc'Za%oS'ϮS˽a}U__ E.aFOPE FV C٫Paߔ7Rw}\aow7sp\Zsq+o\*}2/)ENkV}ՈN<;L'T7]XGvL]MbA>m&d#;gG.FwK\5_vˁr_`2ȸ h|Qv"TH G O4/;)6gյ<ŀt2ՂgdZo։6$jw)hw:Q9㯩t.X }4.A61~>l:&<_3sy#'<*ٯ!r..EaҞ>O1b%A54/c4\NHBŭ wmهG8.+K)HV~Ŋ$pߤy_Fޖif/#t+jwܔ_P{Bm٢OGX#* ji1\?+n u");Ĕ>'BΉ@,[f;f=4 |Gŝ.Ě,b5nV¾0y'9^$ v9zvǩ/Tbޚ+{aq8}/seg<?)Y*|Ĺ}e|DͿ5(u+}:-j ~\ Mk8 !@RuFTۜ5~yd7_]y "GC=H2GeLwl(ϱiBnp6)ޠְH] !Z(>ݠCMc(i̮bqU*0eUzt/oIC1l.Fq э}8N^F<.a"/}eFFJ7b2a,RGpQU"xi(kŻpAC a8٧]LӮ%gX,6mN!;SwP.ΈC͜s.iGx3':2Mw#u.4M Eo']?̘=f5[sc [QE}?$:Vc'TcK|o\md*[/$5d 371.*!LX&JiwѼ} <F3  iu(ۜa.ew]!Х#;B7ϑJ!C.{)b0xvV=F'"r+VdKR֏ S. L mX1U4(kOro9hI`h&/C-Hغ0[l[e|zhxp+itI0:cWBѫx8;fݺ{rPeZC&i:>NK D &qYDQ j*ӊ׊ z*SpZ~egfxgD"3' B,Px ` I}0Axz9̼w!]F 6r,~p5ƴ>Ġ 4OĎɻ;IP!$"rP+%. PrC;W>< 9V4<{O}-/EuhzxZ9:~j&~2$V6%͠Lg,d6J?[&h%X~$6P OP4>= >#Wy,B@j&-7GzPqY "O+Pe)rx)܉=.1:0Rx&O g ?>854l /}sm#pӉVOVJA:0ô{씠~A)Ԕ#;}.A$-9 W9YA5"@@a! sӪnͨA)ɳ>SԬbAJ`ٛo"-nslPd7'Gm? [ݒn o|o`[r/$NGDdQ75UfI[0rf~p jꆐWG0{{=}*&971B YlP_7/̉+h}besۀ4~X٣4Uv~ o%qhZ20SZˆZ Z1BB*,PDQ{ǰBա=qYue|n!d<i6@  w~!k:.V;}J6=f (|zԙ1Ps+WRXX]D/LSZ9V`T يӪA ^4:;c; ];dS7*bAK@Q5);"0#oU_[uFv3ʜOPhܨK]LG`Z_Ԣ|^g NЯouMXA*[0(ALH|x1'mDx%B_5Eў*~NoV9q@ΚGj"/ .IX%5п{G[V7`ROuhz"i_aSN"6qbN G_'ԛw ;&sԠqᦺQ+輁-&=q׈6_H([rT'`Ro_k]12#{ zɮZ jU\8f7q\/R*ϭ`WS_mPt`;Ӧ4[B}#!H#[MPJ|h'_-vtx@&&#Jeb.9=$y6M !u4nocAwt)#mUt.W#eJ-$+zuBLE}n<lm㙪=dYoB|fH8tN`MY ^iݷ(~x3Uy ЏN JO8Ո3e?7Y\Lm=uS> ;a\qQp[Dי r`5ৗo RN)?]wz_M ?.z F,g%׾)uJHUI$Xo9GK),Njo>yZ dY> (?']j$4hM$q,W`_ޢ1'>c=o捿$ĉ#"]8g9O\.bڅJXA ΕUşo%yh}'ޞ (ĦprCԙR^[!Sq5^M=&̊ڴw4J# |SsKD*iKbB(w6{^F!O#X!h:!*m#"',#<"+ylo~mTpy- x;ig^gA1C SK No[& leKf +V+_Zє C o>}n-9AV+SuXRwswKY <Ft|xn6 JY@IeLxyLe')A j.M% ;p]N|uB3/6/lDwCr_>9_>Ftc*.rsᚠATkoo_Mb Јn(]P gzeHNwI< MZȉi\#~ ,3[N Fb :qh804*ts E~>)Aqw2gTb5x'[ًsW=0(,-(^]6Pf"VLEۿ7tmÄ0]#%=F.C"q鑢G ݮ_鲭Ox2qlPa=uq:=p.S>f$8yA,L4J~*R }MZ҆뮳=r9iN@Xi^ˊxG f9 ϮmIx['*~RPΉf;u`XRl9ބѽٳ)XuY/ YƸH:,,E`EYdlW`GFѧ13E_ٴ7Le =G&|Q ~d~d!М|D%⪓F*Nn+>fScσWW#qNLi ga+f] t_mpT\`cD*XARHkzQ%(Os+.Z܊Iˍ,t 6WL3KwQcĪ⎽RRh7RAGDh}d=S:9=Bk t1;u! n8vEC2Z˥dF2 Dw/ q HҚkB-;Z( A% k5׆ ԵFpƣ. ԅ4G}h™EP|=i[JՒ.YoG?q"L)p`2>#Q€~!ઐw)^05V7Ny&w3KF EnL'4**ĐÕ|a~__M\>|l$Ҍn=^0j1/HG Sx3AVE Ki ]wT@#|YB1'N[_R~Mu=a֓i+d2IP!z*Q?VՋ~A~[=6D~S;w;ʏ~鼺3 jQZ^le| *aK1]2ԋmOB'+_gDތh@^~+ML2SKqҗ:iz՚{4gÛ(o ?;qao_FDL{S~o3Ag#Zx~7v;\jz*n#\< Nvt ߐIoe >DJ73" }p:!HMx9 \L5m6X0qhDx]]k*Q 7'&6]H*=+JիKS/o37jԭG/C%R,=Xw%輱 k+3 zOZ,Ǒ׹9| |52ݣ_#_Ңq!,V~[|, 1I)/ )͵')ǭܓ=,Īo[Zvl$b8$0/>ft!)fW#H]~ҬZ>rΡ=4@깇cflMO21'cRjs[Miae뚑֬n-y2GX-Bf:[ %c)z; ^ VUq<`R/ϩ~v9Kk#(aO@yLk[oNbdb-. +2kˎ5 OD,^|4G-?"w@%x+YV zE?ݢȧߴ *F(60Vȷdy8 Eh]PwpR8$-mgxwN -ߘ5)?ւL,~/a [1QɨI! =)ҡ29@@X BK`y>V)xnC@nK6keːBv͇]LQdF!98#BgvuLٽf NAdzY"zI_;ۥ1bSX! HODz,**}(K/N7vpR YD 4[Eƾa!m  be2nZ2HyDd@ 󡚢t'-_q筘F qA$j Ė+д&%)dv4W@QArIQd/ *I<%S -<'聏UIN{q<Z b2ya>+VT2e\Bn9J bΉف" _a/YB>,At|S-hҿD((*bE4|]TEIJiJ6CtrNn&% \ׁ5:G4$M(M}(_{@= 6@?W"o1X]1]*x.aN@ 2XS-wWGƑ y8n{f'_ f/] ZJVG2\`yTM2BZ]3Uy\HWL?W&jpM?Qf7RL#bK|bJNl#HoG-_Tn׋Tq:!_|B ZNQ'/siN dMQH9fۑ\^ס"qIF>e`ЈB1R͈Ձ.m "2gR,OLYh_G FtW<}&ʽ ªšDyb(p-JU#E#kbQfꨐ &Тߵaʣ!2HP/s*Lk 7jeNz,?JvH3E44?{MAFeJB0F px=W$ %W襜O82zE2kقϨ=0bW#$n:fݳL74 ^G"٭|~pmeF9{_kq8" gp:f,~i fp _ܻmomh1c|:Sq>N OL˫3py嫻9qAtk\^ٽ2]O.>0?Ddl(N5T@6 E[@Opj/U^3,񊕏Ul6Qё-pu6Zh;5<]Quz=8hKeb#1~VUNbzF$k-N܏&ʨ{y!}utU(*Y縂"s|{'Pa*$W;EXbb} a5r5]&׼gB#ZĖ +󧠻b^ vϧ5$L5x8SŝǜRŠ@LRF[S/Z'k+[\uхM7/-n[gP}Gʬp|+j]1 AH_zBD-uOWuí _k}-Z gŇɞa̶%4o)| gJC|~* r245^wULPOk8,?n5Rw-Y9^ϹC_7uNdY ͠߾tkM_m0؂nƅz;p^:^ [^AyVԥ%bJ2/<8PP̫0$+DȍG-)^_LE66U@de7TlDXƩX8éCRYV2/JnA.ɞa.BPцStC|kŔ9C8tA#|\YF!l;)];d 8jÙfBw|S͝7)䊐ã1ϚXzl3vt y6l{5F 0ׁQp_JRF bO3"c C0;1&E^Fut$m7JhѶh|P<] `51;&㭎$ȟW)C4Yԑ/Q\]p{$ |!Ky ܎kH'5)!Arf Yyu$QLHX2?x +Bscgl =gPe _nذC1nY33\y ?2˷a'Tq-+ve"w}v ;rQJP$%PuvpQQerozECPEaNpG!Q1/QIHjw 8=(6nBs]Oi9 4"37 PzT9#J2;ZJT[$sS3*Xuy=n+<9VlҼBpП>-0[iԱifKq`3 t@rZja Bd|zV`jNlkSHx*o[2@JûQJ?PHG': eٝ“K<.5Ia[4;c"ÙUN` u8(GpA3W/P }~~=Y~e6wȇ$?1l;C]vlL;Ԟh#"uW.=abuC&61]w${UTsa4D/E EUn< TkwxsbKk AU[ݸ'(jk#чdm}9{L^|@NnEqS.20vF)HR& U$(8+?G JW..?ǍV}I'-Zu~ط!;wp#)Y Cͧa*'&I)ޡ QxBsw׌j?x.D+pAt_5i >%l]qDUEא}! 'Q[rqU6";7e<}1Rar:MYջigDY67m\L#.pz[gIwJo3I3:u4e%`0 G\ p))X@y?n6NP-oHce[8/AHF R?z\OIG_vt FL %x'| -DH(2iv{q MSKYP1 nBuڥ8ٞkUKgMR$JIKM *(5|sYL#$edQ ^MQpckn\StJ?Uf$O"5*MI|ǫU #AKPd&f Q)u`#RC'1fPSХzܧ34!t (gwWpFh̼LSzh *z´L=D >f(#H9ΟHO!>blD 7f!ЃB`Et#㓂5;Wwxf@;k!Jq&ƷOIw|h@Imi1e/_<c~A-eo;~).xI%^GT]3Kal1\`ס1 2P8 x#ߣ <ȵ5n~D"h1) ;G^-p4BqQ; .-kuNm:eŃsx7|.9g24`BȆ՘{⤚w=KRAީ ي<~S؉\WNh0;x10Js+bǵ,Rjcjz@ P7J*= H(dP̀< Xݦ7:]afSjGHiCnx K1D2CIY"N^QZ+;j-xYtW@+6FqpOJi|bC@?c6p+9υ#_ l+bIz,r'Iv$r)adJ/K`p_uF5BV[G ^:.zR: (AͷBZQU%6rߊp ES/}ۂ)Bm0,WdA/5˷rgy<9ZCb) ]$8I\j'Kq\M6Vx@G4]NtM}F|]26-E݌Zgx]-`іc6>p2n~>] m3Mоd֠F t5m:r3~D]ꮶ=Xݪ(_"ym(\ F@TLJQy)Ԥ֬aJ KfxXO*hB^GǞ[;^H~[[5}Nw[xubWyF VO_`0TDbK[P ;3|ޓ/E%^H#󮤅 F tb<@=?{ 4N[2Z7@"F.AA<Pz" `>XD &UOte\mBxX%ST:)!!LIhi$V j5^;"C5s]9jɝ%ތRq.iu2,&;ZU=nxp=ye|u2rndw_c.gܥY5 ; W腍R%O 躅wiBZ"'Vkase[56?PFGQRa tTPҼrXX /t|u!_XaNj4XJ#B^ n.х!On"C79hM`qijQIFaF{ [Í3w^NǮs bgmd Uy /׋#^oksgXQ\U'm,ƋS򩨩f˜[2 ܭWCSX!v!xwRCև.gǦ,tL#biYC"H"bAIPŵ74`ϙ|&n}FzO~/\2 r[JD £(AKCnK(.^FOFE E5TAym\|Mhp!5U#a9(5"85wE 0u02 `j"Pp l mHLLư6;]S۱'"Z.lCw]647jHtV ot% ;lEb=dතоS;_{ FZ=ҀwV| oȊ+z>k)C' MpXôg pQ-MK 56 ˰ut' [?Eb*SS`t MLY5H[)+;}a#dž 7 }#8;;8>A|:C0,5d {cƀ1vFް}x }Ul@8lQ࢟Ӯ02;<)BǓ#Ʈ~ `́I 0 ~:Q=g*!R7{~q_q,!oq12.$x[qS SR+6j;oʟ w ix]]k8(\#_ɉV>&,xXc58 trokj yr*)PR֬QGh/9P*@ڹ}dXlNjĝ 2qsOǠȵhf45u\df~)=3` ^9O[RcsXo2 d-Z^ȀU 2c9q_rFRƈ#@'6^ ۸X%]ֵx12138Y% jVAv c[v &sK{ydA5tTpՏ+9BF=?~M>6ΘƷ?U?Fl1F?T;fO!@ 6fϣ059l||4+ ZE0 y4P}tt䈕s t >",-k5m7Q UF >{+wYoP Ƈ%iEÂ'T&T/"D~li|TO@#+d+Y8Ae?ܢOj QX߆&ƑV(@upgqugbKb~mqYY7@!jCf͖_sFWnb,/|k&t$%qK' +sKhr8-dD$xrRܺ B٬ 7CKeY$9zB#&%Kadjpm#{N1$6-iyƊhY& )&38"2i4^_H@zo2WXjddRy}cV$V(g*250g oL(XhUɸ! ’2[:X܇bҍ}:.,  1!f5)HYKX8XO%lܟQ_5fZ7dɑ$nmxДY^̹7> DׂgLɃ=Q@[2%{] 朸`nI% D7Ȼщ$Ք OTC V/᫬br@-J6zf3@'ͭ6*rP=e]u`].MŐɧqIu{>G/܎=m A;f"1䓢XS <0n@2ؚC=ΎDž#!?)˺8^Զy.$~)h1+]֧,VpAPAb7@8SG >o~97(oLwxSt$#m/TQ6'J},|Dɰf@5 FGLq'΢o6Еq +Ww~:E[/3Ez؊ Z&/ 1QHTGFXlGkMjZaN2Mj(rk@C S!+IkqY [eqߌv eo?/+܃lqYhz% 3*0BӋ3_is>kP_R 2CZ9 -*8 bc:r`30. ;G@jIv L+BZx./d`;M{Hbn:'0Q*bı#=k`/*oI%lDw ÎbD>룍f,Ű qÈ^lm{Q>)w3wM=NtG̦U鏉qC iNN3M]ItXl{F4 :!9O|Q?h~􋸝 "Z5Nn09VʯrB:T50*W:sUb uqkl"Kp?`LQ&-FZA۹iG8Wjbؖ"jp4")$D3a'v0iTD[=1xai&(L{4sLQdӰrj5~WɎn;ȜtNhuP҅AVyEgWRӜ!o+DѦ*RЊ|3.aMz2fŶʰBMɍVړ,2[+z%R)\J k@-麚'Ջnm|_A*.}AR|ʭ(A 6׆X`cRz}+OOݓOsܮK&qNx$/i՛̇N DlFo Qn3jO%yI?l7.?Hi˳Sz#Ie{k3kTLb S%H,p I*CEuuޫ崓if*m:.q]HIvN`t1aQBb}ܑiWērؚ1\Е {Utq/{53Mڷk7Lj䢔e(:SY˳wЙl} GxCF.^ৈ@͂| p]ҼY O'R)?F];'nY_'G4U %%72(>FpՏKrS L/(cTf#k7|#M8wH'ah[Bo!i?q>``)?&B’F'  '<\M] 72ҜdOLJ*6AS} (D5sYL#$ʸJ; WfcUҾ RuZ.-ݬUذ *V١fBIJ{6XJa%c &.DI}|ۣXYBAr8 wK K3ҭLOAݡ&ݙ7m >e3VB> VcBӹI >(?P_Ӧ|TʚTӆ ifj)PhRMwKҠ :pF(8<ہ{P"Sh~dWٹ8Zlr!*@&miB?[Xj >Iߘaѡ;x7ёtLhل\ecp~C +#Rц0gGQqlN킘 !+k2N0g67V)ә7a罄q< !T -|_f*zl)$ 0(&k?6ѲМDN?GGj Tڊѹ"V: ɬ4+iza4Oȅsd<6ttF38OhF0yB1.OhB Kc,4"MB<C } ln8螺f|3s^LQ "JCn mwb бs :㿋*Ljl8^.tΈCgkp\[r1a2xe *Sg8wB e(9~|8?386ӥ&,x>g%-hhI[DQy/!4[LbD8Kg{Ϟ(0N?Vk=E<>%d'XS_̈# z v,tbyQ; \SU B`"ww l_}[v=~=.ȮCP[AfSuC׉=~Ld,rSo"%]7(b&R~J8)xMÕ l.hoq<KhPK 3 . J E&2Diw:̮=}]u״E;jۃJx8S>)vZWQ!+WT<˩Ap&x`1I&gp%OkJr&ɼ'e<'#؃`NW~V{u]<[JXY-6\zIPtx:x͚Cj ~X^QvSڏS ٟUq}ȂuH|D(7v7&1+lw#1azMl°^ޮ0Y ݢ oDm ؆~Bp:v0! !7Æב*ܙ8Np: \'u]E7.|ݡ4w[g hJܺʂDgErBQFḣ%0J9'b'U~2(+606.ӭ D]h(IvBQFgr}v3jIy;f[V%Əq mm^%}KP_/n1)-UGۤ/2ރ.H-6x[Vy,+J8'Oإ4z@AUQ`\yC/I YƅXD o}2Ӻ٫ */#'Ұ#W $"C~m c@Bg Uв+k޷Qz] F&ESuDd63)ܗv镴! <zOuF),hU[rrYxpP5$h|,Rمٔ"):`mPv@BoMJE+\ )MBWA^wbl.Dlixo*ۈ܁ 73jz?Ch~fHdPBU6& Y]E >$q9xkf|Ju2sIn$wn_c.'Y4p G#)'W}T% rw&;\l-[zt9o--o#ht)'HApka h9 qo -\QE Awg) ҊU>n7/!Ff 5)MMuQM.(&Ggg Luz(d@[W4!!d 3Z261u}"AFVt'eEseF}AH*eA'bz_Ț{5;XjVwemtT9{ :I~]ohO p\It)hDL+ n&*0`P3ǰ kOtWS\/f+1ya;|"$ `揀d6 ZB ^]4nV1rZ_C %]4:/`RQt!;jK k~Cޘbo7Wf.)ho`j)' 62vRȬÊvl $) zY 8鸴ň.ASLޑnzp NK3XAvtawq 0n+4V *q`V@8Rv<_0<%G ~ao*CT-|qW8mGY4aQF+.>G  {irG2gY(P 3AOgO >Vr5^9?q?_ 7=טgOݳ @\]/4Q(Bɰғ\t3֕DQw&y3iӌ0ğOZ %$ݐgF?[ܼ7?3xS R+6^9&63 1x=]v ]EW=9$NX鬾rO8re߯;\vJb% ET%6E`n츌#)J7'$IYf1&ĮH>iX7Cb`^ C->لlsqlñHCϳu˂lcZFiZW* =(hLGz]0J.q|kG>^\N8 =BTƖ)W>p3R(Բ,z3(3a@ب8N32-_sgv&>*ՙp8ݫ}?d KWqx~%)(}"d'72yN<9 x>}|31n.gbCFjLxvmBƒLLѰ>xM[r EYEV0{Aiˈ hWya//_W>_/ Кl%aM?7pNaə/exZەp$%a7E6%(:ִ4XG,‚Ygnoů> V@d1j%m75K՞wk'|{Cnn.N0GqF WLώ2iØXAhPuzt%4Rev%O}J_l&UЭzF+A'Cf ixFDK79tKf,;:=EWGѸc*[c0tl~w?;mbX4;P'u?^kۖIvU[MsmFh:s .dvx{%)(}"̍2NbjbN-(|)~-s#2 'x{~}²US J6gdTmjQxξ}B:KfyExM] Y+=R#qgoHn~,.?ad~Z|HvF)Oi@5*ګ 1'x0gW}ZAzQHQQ1+ $)$lF egbX]0s4a՚(F̳QW3vGn=q2o SP]% Te ݢa. 5kT|#I@Zs|JZp4ng0jHd]҉揆t7R}+tѻ tD3uE≷lJw, ;o՟_형2CRѱۣjP˨C{v7%\Ly{==L\cPU +GJg] xı%)(}#_'{QjbnfIL2iOVd RGN)^,,W_ ߵ6[Q Edݮ o V`ej05A>V[sZgG܃Ѩ/: H{NZ'õQgdf+&jvkTN11Jvx %!w/@*qkA3DXֵ0[8{nPBٙMoS7];l(e܆ʻ+ס> nA I;;vlBE |M9 &=&4]1}lKqZ*p$PJ w0*8L 70 CI-&=Zzj+a7]fn1ELR*%3ɳA*gitq07J8f(ƓEtSQ&Δʿr(@DMPS?}!j2kP:+`J4`Y CRc\\FKT0BSrBqOFcp)C«>zY;K9nߨ漓sWuD޹{~AmN1x-ExDØU6c89Cbs tF6 +x-LxDCg+3rmei7uNc>k On^BqIb!8yg5lLx[&hq,/s{<)!{-v؉w Î<Ǖ=uʦTe4'$鐸,PO6epW."h+=LN̝G GMA a"56Vb[ dOϜI#٤),;A⥪SYj3@!JF\TJFT±X&B0V=;UY#ۆXPe^Qqp#}Ez=%a@hdܓSh|ktD'[RI(zzdoŇT 4ʄd O!3yzfVL jC8nP|lgvi9IVzU>nONTVuaU*cekD* {<n"&@1J8Za!;a8G9CL[.?%c5~mK+LT̓ύBH0T)o`t>wFcaK?92~҉ ,L_[̀?] m29&K2XOTtiН|&N;ݡ9 x[+(>t}Ƶ\d-(+S(.IK16_, boltkK emps.v C  ʞlLx.NlfIf9VJxMV[( )s'bc6F@ӯ0UBE%ab}yp `˚`b;=pyPȭ+t [Ȑ`#^DڍR(5Zm@O EuG.s(!A6m1o6r; c㘃76 gBå*''O2K) ɛoIpIZ="14%!k{MX١SPE{.žGz*dD^$FHŃ<lg^։&b!alle[ E8sRiPp{(,R|No݁gS0_+uze P֬ %gFvkʠ-MwJYF9NlW BTqMzޑY$j˿9(vtBǤ 1XR1sO>,v̥%ϣ$"I}V?GuȧeZ3_LA91g@ @6\ksӆxE~0aUhxha\e>K9|Zq ia]Z(TlnBXy>̗cx; 1KbDj7p1ml [3x.1<8{#M 0 Γ SN b $ڴxM[b( EYEV0{"6b 4Gp(隽b|{ iyw]2T8u@l!!d9,w,T)T*$ |(RJw5vV\WF;t1`|RQ puoM[9,bK B4xLA*qQBL6 mBᩢ4VA v<8/9X_ˡ&,LD`3qDuߙ")rS^T%u}אylC=f1HsS&SvU?̦\m=f[СjvT",jJ:Fb[ziEQDUgXO9pzU3όnlhFs6?7` 4[+!l|H?XD:vu2H.ӣ*2ӳ.θr^.S/m+pXĢgVFsVc~ =z,x;"'3qoƫS8&qNuqcn͌$ yuL+]c SY '*$m!-+7tѷ^i{ݴo0j nk#}2ã;|DO4`1"?fxAMՀ^   , a.x'*" "; ֓* M 7l5xk.a#=8$ST:x=[v D{Rj0!&/pya$4z}?tEE4r{TbDUk2eU:.RVɎ8ˁ.#PFK#<S3yzIQD8O= NN*cb{NI{}zNl b;6ϔD&+H&M?]x˕LvGy#/=V;]Τ2:ub !59yvnA=Hdbߙ$0 UHI|Umr?Fjx[}Ǎ?3.3CxMSQl S}gzC*μ*"I@Xrz{Pvу1wPbO%]^hi0v )zO2lv^S,1O %Ja@M2u2eR%[ f#Wűw`GqՅ8%kl/ -#*W9cexy%6"ED^͜30G ѩZ].n.5Kʯ6h;kb$Mn!{:XHP %Ս i :.= V_k2GЖR.Җ&!7[ `hg˷k+ tx|y|h~pг)fEf&& &zzI% +koKyoVhjvN,g}^)}y[$Mjߤ/H{b]O#dhZfEj1)۽mkn-hOgyvgw ל_mcSP\[i^ AR4jY2Uxv)ppVE?m>պ%Umm100644 4.0.fixes.batchucf*AtZэ1N.:dtoua[yQr(5Sx_? ;˚)[݋G100644 4.0.fixes.batchlz؃G(vz#$p4 9i++JF0^nxOl)nx :d  !N͓ x|yQFiJMNޑ(8s- 2x-z[t wq'?W\^h]vUY⭵[Nؓ>kԙ03\jQ/ 5k8OC U܄%eH C)Ïb]2O2RٳCVhL 6~ha/\kb(3bؑo:Œ-LɊVR~[cѣK7,k000y¿廹NF՟&̄ 3 e WtoxB) \[)3:D,5O-_p0UP謜K[ uF El.ieX'2cYoZm].ōKEAQc=GB5Yգ3nU_UQ8q9i~11aWms2WmE~ ed5*M5wl`B(s3a [xz茵lÅa)RJZ~L⾇ XK'5TO :8`x-z[t>FˮVk&bvȳ;e/10)}!QUju 'e5ez1Z]ya_lsZgh``fbP_RgȐgWW搚Ϸބ~T9QyrٶͿvH{dԕNvUYEVn7l\_1M7߅W'`lhۢ;v\4wnu^<==^k;x|`صjs'Dz&ׇx|o%3/9hLPψ'M=Vi#j62crmmQ`42GL\χKr]u`&{ݪ?q&߯m)EUru.Ud 0:ZTOO7M=̘!mO 71|;[&2w]d~Y3׺wc3eX4giz&5^_DM~~w.}އT^kX7Oid7淯n?ytk13/Koޭ=o10`HnN(X&^ ćF&4ufrPmOZ\Y7 ٌ/`(3b09\9ig^ymK e zLY*\.CH:\n.{UZZ61b(3eXyeX䟗4Lk훹r>tPxa;/uٯغƹKߎfr100644 words.n.2.sf F _$VSI崓t, mҒ2i˳]~*J(px-z[tf+PV8m*9E?iݳ)vu\ғUYEvqjō+"W\yɱ3X4YU {%^mTC3b2=C=##@MKÒNcݏ03;RvF]{3W=PfU7;uO;Wqv=xuQfOzWgْ.?%G]Uh&ݳ>'NԎ'*bPf h{SgFB4< C CQ\>o}u M!Vϥ3#=۸~? eF eD*?ҽz_uM &7pZ՗KUu]?[?$ua7ew"m9ДY]sd|߷2NJ8ICCi0/Ǯ sp9#DW.{l'O/0G6[67y2|x$9O5;شR]iZMDDlEx-AtC.!ox%PIn0 |AI\ ASw92a)C%pbf'VLq 􇋅Tޱ(ʹp]P( $7-`U*GXF8r B&(B,FkBBZYlpkXim?# -Be0Ș45Kض>]v3>T]}q$tl">QLQgyX്U+Ғ"x3nJhCgSsZo|EIGʑ0k` u|$7u $ҏkx!RBfrݕ 5~ TxKIML/-/-.L̼l"|=-TuE@y)Z\{f2x3t?!q;TzRVClink-grammar/.git/objects/31/0000755000000000000000000000000012536651541013052 5ustar link-grammar/.git/objects/31/3e410e7a50eed806e9d448f58fe036310b5ed30000444000000000000000000000111612536651541020204 0ustar x+)JMU077b040031Qrutu+/-JNe6Sσ?TWl*LHKOOgMrjط^} S[XP(6ҳsu`WWRmϗ,?&m]D-X2+),L(a0_aN=ۑY`*J,*fx6M9{wk+qIOD|~r1 װCkM_hꘟgY5=*^XdZW\à{X=bQë f,[WK_VbY"\M;3,ty"utaB'c٬"3lt%+ss4oqD^p ϋzML.K,L-M̓i>;ՑyijV%?j[tl# NOTۏE?\>AC]1c=]T}nj^)@׶|Ggs?$$q:PT4'Ѯsݿy~gO&@M9)̦v=6/It3ԆĒ _$9zUu̥=*5nlink-grammar/.git/objects/90/0000755000000000000000000000000012537602472013057 5ustar link-grammar/.git/objects/90/de5c236fd2e643bb7fcb232fb35319efeef18f0000444000000000000000000000137312537602472020601 0ustar x+)JMU40b040031QK,L/JehnJWe5CC<5c2ܣFgnB8Dz30VL 49\ūڇ+g)HKOOgݱ+򙅒*HmU䖙ⓙ^XÞn|HwSkNT_+>}=B يxĿKo| j/Ц̜T\G?rYT=^߳9'TY+÷[+xf!.y6zۭfʜ9 ׏0BbnFjNAjQ1}k~,qW[hBbiI~zj^qÎ7.;{}<,8Ӭ?F$&g'2x4VIow[= s:(43'E"7G/3Avw/ocqU=Zr~^ZfziQ*H]5Ě#.2 C!$$2YyZhY3vqJ&e&1(/omR{K#{rdmk|Ͷ]7Slsjo:6`Yw$<>s scyhh^`tSmI<w-.{q+ba;gOJim[aQ,DY.?"&U3455m?%18h}=B يxĿKo| j/Ц̜T\G?rYT=^߳9'TY+÷[+xf!.y6zۭfʜ9 ׏0BbnFjNAjQ1}k~,qW[hBbiI~zj^qÎ7.;{}<,8Ӭ?F$&g'2x4VIow[= s:(43'E"7G/3Avw/ocqU=Zr~^ZfziQ*H]5Ě#.2 C!$$2YyZhY3vqJ&e&1JobˉCԏoFn:4 A_7vL);ͩ^Tgߑ;ǵ΍ObxEr~J*{MZ'?S޵ĭȊ U?)]YGnEe@0NWl+ִ= *[\lhޢUٽB&ދd{?Eeͷ'xa{blink-grammar/.git/objects/info/0000755000000000000000000000000012536650426013563 5ustar link-grammar/.git/objects/07/0000755000000000000000000000000012536651744013062 5ustar link-grammar/.git/objects/07/d5338d7da20b7d4c39e6eb3f96441ec01e54f00000444000000000000000000000611412536651744020275 0ustar xYksFS嫲 <q+$YJk ,IXxeD(eFUr ,vgzzzȳY(QB'<ޞMNMZ2Y*d %ʵj*m]WRJEB%ˬI*M^i'4 *z)JEr-BdezIɿZs/5TDeuUc( c>ԩh߭ +E_č/ifylzjNՍj\bPHiW2y&C1A@zA8̢8xsh0LǡOUu-WS*g(J-^]1>]?$ӿ<|J`pDm1}.w6˪5}g?};:6y|Ϊ,9sUdyr+diYy^^ߟd&Uc 4'o4 "Njv(Z7J8ɥ$B\KeP5"uML  2[!_̞'8F g-YBnҌrJ]o%I;('xz{E(: gs:i:ɳ 7(|!FQj58,pgj$*LmSqV.jR:r$ & IWtEw!jq .PB؟J LpX4o,INӴ]*'^!zEۑ5IE=x{`8/쨡؍M+ӏϿqqT(2Wq&wh"t5Kr>ǎ#SJfy{lul,ōmO- '8KI'K\Keіaosv݁iLX;MFq}%T-m9[e7rC{;z+T}q-3^b<4NKzɍrs1}XdinAO#nPޘ$&^"w=&?i{ ILp@>w/V3Q vKhEGlVOyEuyms[ԴGn@`.o+h8_T%H>!J{%qw"k8V(/z4O([nUR(y‚ ^Һ_ kQ;xI6@=YdeVFڇ/ԼW4t=53oS!ͰI̫1^llAw/'hw"'%NRr T:yfyJCekFlw-hORc46YamXIm[s+uSDW􇝨dAQ&NpXR ~+#dM HL&5R0&(h\\݊f9SgЬGK$ >(JzM#(yP>gʹ^v&hxn'" ƛ^ .,,A`uaBtG:ak#[όNpv0c)#[LD-z(3p}oCxʱ#ף;:7wH0o'TNޘϻ*j(TL`67+#+3kaF?x w͗o36}H}*~?|֍pNnb\B7xBeӔA7+zgM9)B^ PREbUCgw5X0dwU ;;'5,DCSnE'Y}!,ұwD1A,SQ EU*no 5KS}Fa^츳"a~|.#eW۟I[,q Z:mgb%6M)K:B•O-ʭ3 BLsvzkṵ:V]G w"b]S5|7W0>rQtxDu֩-1;dcoK (K:ikD*^Sɺñ ~lNb *4]7]zJ ,%5J*Mb *mtCO*Z6ک ܅i"^7W(`Jt GQ?yDCn՟PY{Y=pM@>w/sQoׄT%q2 Ch+*m1Dw%}[|(W-0طt|P/$=R8rU,(*H C(ʖtJCgQ# desD`F⬊z#pÏMZ^hkgހ'DC"aiX6gVrFӭéw/ gd"%j'kN5%t*d;cv3Zb%š2?gF&`xt 3D06ΤMؕ/ ؉JFhe0,@1FfE}2=&xTqCz}-֘BT L[@@-** OG#Nʇe3Z.zآgnG$n?W@ &GYQCt넝|3t2\ [L 4kN(n7J=N0dp7 ?:s&y70{y1(z}ޭ^A\R1~ެz̬ŃrPtp+3/_mdSU }P#G4 O; yq9k>q^LSFnV ΔrW~@xLi#JZ̪j^޴`![ PߍV=#z+̇g`hBOQHwMމaˏiצxD?{^OCoe֣tHWn۳h??{M!.psSSBG] '~J9qg+ ޲5r.1,m A:f3<=ݣ{_-81đĠ )AƘ9qk" &3Di5U} F`bcg7Ao,a>}B裵mﺽ݁nG&'jgL:nDPz+d8䲨y٭s!44n GaI!g#4B3|Ϻ~_YS3h:Y/1 GEkΓ1 k!oȣ]1vmz^UpaiW,'xryߢ<Vq _){"h; @Kxk؆"RXyfȪK(6:+xwZR+y(z͡ѦlOlX+xլ3cwb+=[\f&aAOP6KBqWL-$$h;C&П*q6vG<1&-‰[êkz8ܩM*lNqT,AHmqs8ԈwUV kZB[MэW:6_wH4c)5pnSs4﯍YU榅۸qSuiA8[HL C=$[0|a=l7A6ˣ0(!4[%-~1XG^y6t/ac01=?Il{S ulink-grammar/.git/objects/a7/0000755000000000000000000000000012536651505013136 5ustar link-grammar/.git/objects/a7/a429263134e02dd80664b565026951fa3a54800000444000000000000000000000037412536651505017621 0ustar xN0Fwk+*BBB 1_׭i[ҷ' ηOǥawAg( ׆+ ǴVzk}d,4ViHF`ВҢC뽰AK= Y\WJ'?\]*'` &T[ֶU׼ל ѝ@ir%>M4=i+w\ Mo<#ca]hHgdb -<2ˠrvJPi~plink-grammar/.git/objects/0c/0000755000000000000000000000000012537602472013131 5ustar link-grammar/.git/objects/0c/23a7800b50500d82204a7bbdce738586f9e9320000444000000000000000000000111612537602472020034 0ustar x+)JMU077b040031Qrutu+/-JNe6Sσ?TWl*LHKOOg(>)׭:k.iyʷ$03mMp\4?U0<}?KOs[j ) J *23JLWlmd5~Svhֶ9;XR2}4{kݚʣnz<&\5,Z:YoVMτd&de%&覤e$0(z27iXBUҗXx|6]^fa*]-X6㹮ȼ5~j7/?]2ܤb[qq1"tS2K22SuSvN7wyput 3{ )g]:#.cW*{OPWek,UW еm=ߑ/ u\775U(*I-fdܻ}mޭY(@S5zN ]ϡdn`+ <$9aImNg'^Ut]sfOB4ilink-grammar/.git/objects/2f/0000755000000000000000000000000012536651440013134 5ustar link-grammar/.git/objects/2f/248c3c628b0d2165a6028bfa6384de1f3e0eb50000444000000000000000000000220512536651440020251 0ustar xXo6޳kP`)`tKK eI<[)%F}GvH_l ؆ExxdL{/^pa:WS JY>uض 4@Cvq2K06P_r%P%Q_֙N & 㦯7T"?!KZx!e#xY E1T) ƍ`{\R˨R4s΂ROw=U7{;6}'/~8Q,@-_2؉_S1xԑ z(ӎQ0y-9"8Bs~w|WGX6w1 :L4ԱQK:E9c~"I Gy6jg|$$5f!ƂUFk YMkc c,"8,;L(}NyYKLB :N@265NN;9ii8,ui,i(0D9XTD٠cږ 3rz1[.`*͋ Vgwɺ*ݑ.[R x얲*DtKq|,A;?~:ԉrѳ|]AXM 4w-;yPD*}['=8kVso6ٹvO Ή\:yf6qD9VI=x5VZ~x`s$7d fyeMmx3ְNÉd- sDE@kAo7w.ʷ+3xyX^[oy8x1xf淯6K|աW[vζa~yx-' %link-grammar/.git/objects/87/0000755000000000000000000000000012536650643013067 5ustar link-grammar/.git/objects/87/a75e5eedd75c6eaea3cc3052554efa432ad9ef0000444000000000000000000000111612536650643020657 0ustar x+)JMU077b040031Qrutu+/-JNe6Sσ?TWl*LHKOOg2C/ > ]vS[XP(6ҳsu`WWRÐ79\*v[{|\j|J *23JLWlmd5~Svhֶ9;XR2}4{kݚʣnz<&\5,Z:YoVMτd&de%&覤e$0(z27iXBUҗXx|6]^fa*]-X6㹮ȼ5~j7/?]2ܤb[qq1"tS2K22SuSvN7wyput 3{ )g]:#.cW*{OPWek,UW еm=ߑ/ u\775U(*I-fdܻ}mޭY(@S5zN ]ϡdn`+ <$9aImNg'^Ut]sfOǻ2link-grammar/.git/objects/40/0000755000000000000000000000000012536650643013054 5ustar link-grammar/.git/objects/40/0148a1f9a49d5fca82b885e45ac6a9055c7bc80000444000000000000000000000137312536650643020303 0ustar x+)JMU40b040031QK,L/JehnJWe5CC<5c2ܣFgnB8Dz30VL 49\ūڇ+g)HKOOgݱ+򙅒*HmU䖙ⓙ^XÞn|HwSkNT_+>}=B يxĿKo| j/Ц̜T\G?rYT=^߳9'TY+÷[+xf!.y6zۭfʜ9 ׏0BbnFjNAjQ1}k~,qW[hBbiI~zj^qÎ7.;{}<,8Ӭ?F$&g'2x4VIow[= s:(43'E"7G/3Avw/ocqU=Zr~^ZfziQ*H]5Ě#.2 C!$$2YyZhY3vqJ&e&1/{{=&o3A~n'.HٶƇlu36kZpxcS]\ V~G3~1;7?/) M7fjtzϓNy"+f3pVvfBX8!b^5C^ӯ\n[*lqYyVfNtz/Bޒڗ7ߞ۾md~link-grammar/.git/objects/b5/0000755000000000000000000000000012536651646013143 5ustar link-grammar/.git/objects/b5/2723bfba03ae6537d82ba47836a364894df7840000444000000000000000000000040012536651646020141 0ustar xN0DY+P?BBB;ھiLr=X,挎 p!nJ&Rl-GQޱZLqc0T2Ucuhz/l%yԞsp)}.poקLH ֬+w+?NiU/%E$tG<x]8y3Z#Uc!Pȕ% *'WK}g^6sQU%Gٛӫ^-ed^ճgD轖$隦^.okHmۨjy+ Nf]?:8ȬjWVdb)yTW3oTQn*_˥TvESo3MnEh(S}Q>L"v=w˜N=KI{|^\B#+.ɮ~Kd$G+׾tG Q]$xOe v|GEm狦G0F,s߈-XQ>l1LU+ +{ |Ϙ@MV9HaNΪ7g>ؤ5&~|zbJ4$6e<qkU,W!h4:9~0 ?)|v;YSw)` UkfqJ]e>gF`xt ϩ3D06ΤLؕ/rĉJF(M2 WjV{y'3lf<:Ds]IѡeVVQ^ߊ5: Լ99Ь%^9X%)SbzQUխzQCl?oVkh=V׌A9L) p\ 7z!{>d릔<Z6pNj]b?zBftSsE9+b?|Y <PR-DfUGgw-X60dwU Qq: p/Dj"vD"=sy'B ͛[5V#:-$}gtKYbJf=RD~S\Fx'5lOG1YMFʻN J:AN7~E9qe+ ޲5 9hUEɶCPAΟ :azy4{4GNP~ȿǓhĘ͌"85X J0S!c }М5PU*ma}`yd,a>&ڎmﺳ݆nG&LղoQHCcOBD̈́\5~ܻ~7dN¥7ah4t#ctWs1=}d3jmg3:]ѭhqr'f8FjIeO|#.WRQh#nix"͏Vx v3UҦKou!TO90&|ixmM)CAČ<(؁I@Wu^JF7?; NcU/ :`𐨘BD,PcPEgw{q|$I0"} ~; [caOȃeP,vtY8~]FoFgeƐ}a /޷xpbl >.1>B%f9ē2YmHaw2Ý v9놱;B2x[\f&ũqYm̻qO{-$$h;ܘЏ|黗ܗ1&-r[aT|Z&6,v7IpV%r)npFVQtVc08nnyPͳ7ύijM 7lxM&8)2czctǎ6No gLN4LFy.ܴuI$qA䖹@Cp'ǫ}vU CusҙE~y1}Ra֛*vLI8 cJ^ɳQYҡ(9)Sq A(%:tV8":~ ~k=|ޞXmY6EؠE4| ,'+ o3@z"Plink-grammar/.git/objects/6e/0000755000000000000000000000000012536650643013143 5ustar link-grammar/.git/objects/6e/9353771a5db68fbbde0e0a5f26680e6f6745c70000444000000000000000000000217412536650643020317 0ustar xXo6޳kP`)`RdtKK eI<[)%F}Gv4H_l 8ExcL{?\TzO- .!Ч;i è3:NcxLg HqN*%-| <Ր`\{OFPʏ`1炮F,:NRGP&s?#nDnPBoIA ?6^ d@'|O/?LK=, qVҧXi֙Ku}}ҙ-^ʰ6Ja1 ,x-C oΏ?9[ePJD sYv>]tE=82%L#9*?ȗr!I95gnuQ7= O.fxsh M7gBs2r2uӋssLtSR2Ksr=}G,jxuq~ӌepJ,Kk{gE>./v3[İn.Ad},\Wd?}ƛ͗a^qenR~N1v-8 qay\W)%yEźyp;g<:r:xV3^m.{pva鉊u臫w'hu+fu@㲇k]M+eڶv:.^ʛ*3\2u6,yQ)ך[='Ԯe2 7nPX\6Փ_z.t'?7link-grammar/.gitignore0000644000000000000000000000037212536650432012325 0ustar Makefile Makefile.in aclocal.m4 autogen.err autom4te.cache autopackage/default.apspec build.xml config.* configure depcomp install-sh libtool link-grammar.pc link-grammar.spec .deps ltmain.sh m4 missing .cvsignore .*.swp link-grammar/link-features.h link-grammar/depcomp0000755000000000000000000005601612537603121011712 0ustar #! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: link-grammar/link-grammar.spec.in0000644000000000000000000000316712536650433014205 0ustar %define name link-grammar %define version @VERSION@ %define release 1 Summary: A Natural Language Parser based on Link Grammar Theory Name: %{name} Version: %{version} Release: %{release} Group: System Environment/Libraries License: LGPL Source: %{name}-%{version}.tar.gz Buildroot: /var/tmp/%{name}-%{version}-%{release}-root URL: http://www.link.cs.cmu.edu/link/ #Requires: #BuildRequires: %description The Link Grammar Parser is a natural language parser based on link grammar theories of natural language. %package devel Summary: Support files necessary to compile applications with link-grammar. Group: Development/Libraries Requires: link-grammar %description devel Libraries, headers, and support files necessary to compile applications using link-grammar. %prep %setup %build %ifarch alpha MYARCH_FLAGS="--host=alpha-redhat-linux" %endif if [ ! -f configure ]; then CFLAGS="$RPM_OPT_FLAGS" ./autogen.sh --prefix=%{_prefix} fi CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{_prefix} if [ "$SMP" != "" ]; then (%__make "MAKE=%__make -k -j $SMP"; exit 0) %__make else %__make fi %install if [ -d $RPM_BUILD_ROOT ]; then rm -r $RPM_BUILD_ROOT; fi %__make DESTDIR=$RPM_BUILD_ROOT install find $RPM_BUILD_ROOT/%{_libdir} -name \*.la -exec rm -f \{\} \; %files %defattr(644,root,root,755) %doc LICENSE README %attr(755,root,root)%{_bindir}/* %{_libdir}/lib*.so* %{_datadir}/link-grammar/* %files devel %defattr(644,root,root,755) %{_libdir}/*.a %{_libdir}/pkgconfig/link-grammar.pc %{_includedir}/link-grammar/* %clean %__rm -r $RPM_BUILD_ROOT %changelog * Sat Feb 5 2005 Dom Lachowicz - Initial version